Servidor web verdaderamente seguro: OpenBSD 5.2, Apache, Php 5.3, MySQL 5.1.6
< offtopic> Retomando este abandonado Weblog, regreso con un artículo de algo poco documentado, para la élite :D, espero no haber perdido el tono a veces ácido y sarcástico de antiguos tutoriales, claro que es con el fin que no sean aburridos ñ_ñ
Tal vez deje de documentar Linux, pues ya es muy usado en la industria, y Ubuntu facilitó las cosas para el escritorio (cosas que me hacen sentir muy bien), pero… quiero ser siempre el chico raro, el de la minoría ;), y linux ya no lo es!. No solo eso, algunos clientes nos piden soluciones sobre este sistema (OpenBSD), dada su seguridad de facto cuando se maneja información sensible (Ej. grandes ISP, la industria del petróleo, etc.).</offtopic>
OpenBSD
OpenBSD es una leyenda en cuanto a seguridad informática nativa en el sistema operativo, y que mejor descripción como lo dice el primer parrafo en su página (http://www.openbsd.org/):
«El proyecto OpenBSD produce un sistema operativo LIBRE de tipo Unix, multiplataforma y basado en 4.4BSD. Nuestros esfuerzos se concentran en la portabilidad, estandarización, corrección, seguridad proactiva y criptografía integrada«.
Estas dos últimas palabras «criptografía integrada«, no consiste solo en encriptar fuertemente contraseñas y otras yerbas!… consiste en toda una serie de sistemas y subsistemas (OpenSSH, PRNG, hash functions, Componentes criptográficos por hardware, etc) que funcionan orquestadamente.
En la documentación aparece la pregunta, ¿Por qué incluimos criptografía?, con su merecida y modesta respuesta «because we can.».
Estados Unidos y otros paises (China, Rusia, Irán, Irak, Myanmar, etc.) tienen políticas «raras» en cuanto a la exportación/importación de software que maneje algún tipo de criptografía, Incluso en Estados Unidos se específica un límite en la cantidad de bits para RSA!, pero mejor este tema interesante y político podría ser asunto de otro artículo.
Afortudamente el proyecto Open BSD es Canadiense, y esas políticas raras no aplican.
http://www.efc.ca/pages/doc/crypto-export.html
Para finalizar la introducción no sobra decir que el equipo de OpenBSD, también es el autor de SSH, con su legendario proyecto OpenSSH, que esta en todas la versiones de Linux, *nix.
http://www.openssh.com/
Gracias señores, SSH es mi pan de cada día, no concibo el trabajo sin él.
¿ Por que servidor web verdaderamente seguro ?
Así como en la industria al combo Linux, Apache, MySQL y PHP se le conoce como LAMP, podemos llamar a este combo OAMP.
- OpenBSD: Sistema operativo descrito anteriormente como seguro. Configuraciones por defecto seguras (Ej. ssh no permte root remoto). entre otros.
- Apache: Instalado en modo chroot jail (más detalles abajo), entre otros.
- MySQL: Configurado en modo secure
- PHP: El mismo de siempre ¬¬
Así pues tenemos un gran márgen de seguridad al inicio. Sin embargo a veces no es suficiente, todo depende de una buena admnistración.
Instalando OpenBSD
Esto es de las cosas que me gustan de OpenBSD y FreeBSD, es la documentación de calidad y que esta unificada en el sitio oficial. Nada de rebotar en miles de páginas como pasa en Linux, algunas veces contradiciendose entre ellas por apoyar su distro de turno O.o!
La documentación sobre instalación esta en (No profundizaré mucho en el tema de instalación):
http://www.openbsd.org/faq/faq4.html.
Para este tutorial usé la imágen de CDROM de :
http://mirror.esc7.net/pub/OpenBSD/5.2/i386/install52.iso
Pueden descargarla y quemarla en un CDROM como acostumbren hacerlo para estos menesteres ;).
Una vez con el CDROM en el servidor a instalar, solo es arrancar la máquina y tenemos un bonito y espartano arranque Unix!
Si señores, solo hay que leer y seguir los pasos, en mi caso, detectó todo como debía ser, tarjeta de red, dhcp, disco duro, etc. casi que el 95% de las opciones por default funcionaron!
Una vez instalado, hay que reiniciar el sistema con el clásico comando:
# reboot
Y listo, una vez reiniciado tenemos un bonito BSD, con el clásico XDM… a que mola!
En realidad no necesitamos el entorno gráfico para el servidor web verdaderamente seguro, solo lo instalé por impresionar a las chicas.
Paquetes
Los paquetes son los binarios pre-compilados por terceros de algunos de los programas más utilizados (http://www.openbsd.org/faq/faq15.html).
Cada paquete es un archivo con extensión .tgz que incluye información de dependencias y scripts para instalar y desinstalar, para manejarlos se emplean los programas pkg_add, pkg_delete, pkg_info y pkg_create.
El programa pkg_add instala un paquete y todos los que este requiera. Los descargarga de lo(s) repositorio(s) especificada(s) en la variable de entorno PKG_PATH, y en las rutas especificadas en el archivo /etc/pkg.conf
Instalando los paquetes para el servidor Web
En este caso usarmos los repositorios oficiales de BSD.
Para esto ejecutamos como root en el servidor:
# echo installpath=ftp://ftp5.usa.openbsd.org/pub/OpenBSD/$(uname -r)/packages/$(uname -m) | sudo tee /etc/pkg.conf
Una vez agregdo el repositorio, ya podemos empezar a instalar paquetes
1. Apache
Ejecutamos:
# pkg_add apache-httpd
2. PHP-MySql
Ejecutamos:
# pkg_add php-mysql
El cual nos pregunta:
# pkg_add php-mysql
Ambiguous: choose package for php-mysql
a 0:
1: php-mysql-5.2.17p6
2: php-mysql-5.3.14p0
Your choice: 2
Seleccionamos la opción 2.
Cuando termine de descargar e instalar, ejecutamos los siguientes comandos
# cp /var/www/conf/modules.sample/php-5.3.conf /var/www/conf/modules/php.conf
# cp /etc/php-5.3.sample/mysql.ini /etc/php-5.3/mysql.ini
3. MySql Server
Ejecutamos:
# pkg_add mysql-server
Cuando termine de descargar e instalar, ejecutamos los siguientes comandos
# /usr/local/bin/mysql_install_db
# /usr/local/share/mysql/mysql.server start
# /usr/local/bin/mysqladmin -u root password ‘your-password’
Obviamente se debe cambiar your-password por algo más seguro!
4. Aseguramos MySql
Ejecutamos:
# /usr/local/bin/mysql_secure_installation
El anterior script, hace los cambios pertinentes que todo servidor de producción debe tener respondiendo a las siguientes preguntas:
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]
Recomendaría SI (Y) a todo.
5. PhpMyAdmin
Ejecutamos:
#pkg_add phpMyAdmin
Cuando termine de descargar e instalar, ejecutamos los siguientes comandos
# cp /etc/php-5.3.sample/gd.ini /etc/php-5.3/gd.ini
# cp /etc/php-5.3.sample/mcrypt.ini /etc/php-5.3/mcrypt.ini
# cd /var/www/htdocs
# ln -s ../phpMyAdmin /var/www/htdocs/phpMyAdmin
Comunicando Apache con MySQL
Apache esta enjaulado por defecto (chroot jail), que bonito!, otra muestra más de la seguridad, esto quiere decir que Apache NO puede ver directorios fuera de su entorno de usuario, y mucho menos comunicarse con MySQL (Que obviamente también esta enjaulada), es imposible que los dos se comuniquen.
Entonces es necesario mover el archivo de la comunicación de MySQL /var/run/mysql/mysql.sock :
Para esto, creamos los directorios:
# mkdir /var/www/var/
# mkdir /var/www/var/run/
# mkdir /var/www/var/run/mysql/
Y editamos el archivo /etc/rc.local
# vi /etc/rc.local
Agregando las siguientes líneas
if [ -x /usr/local/bin/mysqld_safe ]; then
echo -n » mysqld»
/usr/local/bin/mysqld_safe –user=_mysql –log=/var/log/mysqld
sleep 4
rm -f /var/www/var/run/mysql/mysql.sock
ln /var/run/mysql/mysql.sock /var/www/var/run/mysql/mysql.sock
fi
Iniciando el servidor OAMP automáticamente
Editamos el archivo /etc/rc.conf.local:
# vi /etc/rc.conf.local
Agregando las siguientes líneas
mysqld_flags=»»
httpd_flags=»»
pkg_scripts=»mysqld»
Sería prudente, un reinicio:
# reboot
Probando el servidor
La ruta por defecto para el contenido del servidor web es /var/www/htdocs/
Podemos crear un script de prueba, con el comando.
# echo «< ?php phpinfo(); ?>» | sudo tee /var/www/htdocs/phpinfo.php
El cual debe responder desde un navegdor a la dirección http://sudirecionip/phpinfo.php
En mi caso la dirección de mi intranet http://10.0.0.228/
Lo mismo para PhpMyAdmin, a la dirección http://sudirecionip/phpMyAdmin/index.php
En mi caso http://10.0.0.228/phpMyAdmin/index.php
——
Dudas, comentarios, sugerencias?
PD.
El servidor web verdaderamente seguro, es para cosas verdaderamente serias. Ej. no pretendas instalar Joomla y catapum! Joomla se volvio seguro XD! Una cosa es la seguridad del servidor, otra cosa una aplicación web vulnerable, y que mejor ejemplo que Joomla para aplicación web vulnerable!. Lo mismo sucede con las contraseñas, puedes tener el mejor BSD, con los últimos guariches, pero si tu contraseña es 123456… mejor ni hablemos….
Sigueme en twitter @josecely
——
Links
http://www.openbsd.org/
http://www.asep.us/2013/01/27/openbsd-5-2-web-server-apache-mysql-php/
http://www.serverschool.com/dedicated-servers/what-is-a-chroot-jail/
10 Responses so far
Osmar Barrera
abril 19th, 2013
10:08 am
En cientos de ocasiones me he visto googleando en busca de este tipo de artículos con diferentes fines infructuosamente y es reconfortante que aún haya personas que se toman este tipo de molestias y comparten sus conocimientos a sabiendas que el reconocimiento por esto no pasará al campo monetario ni de verdadera importancia para el autor.
Yo si agradezco su esfuerzo y lo invito a continuar con este tipo de tareas que a la final se convierten en misiones altruistas pero que verdaderamente tienen significancia en el trabajo de muchas personas.
Jose Antonio Cely Saidiza
abril 19th, 2013
11:06 am
Don Osmar Barrera, AKA Senior,
De todas maneras, algunos artículos han servido de referencia para alguna miniría u_u, y a veces, esta minoría necesita una solución, la cual nos termina contratando para desarrollarla, entonces a veces (muy rara vez!) si pasa al campo monetario
Ánimo pues a documentar también ;).
Saludos
Angel Eduardo Porras
abril 24th, 2013
2:03 pm
Supongo que borró la pagina de phpinfo porque si seguimos su retórica… exploit de php 5.3.14 sobre openbsd y cata…plum? (gracias por ahorrarme el trabajo de conocer tu versión diría un script kiddie)
PD.
1 .Le faltó instalar la extensión mysqli
2. Aún no recibo el dinero por escribir los comentarios en sus articulos como habiamos convenido.
Gracias y un cordial saludo
Jose Antonio Cely Saidiza
abril 24th, 2013
2:43 pm
Así es … phpinfo .. da mucha info!!! XD… favor borrar después de probar u_u.
Y bueno, os daré un 20% de mis ingresos por Adsense, a donde le envió los 2US anuales? O.o (como habiamos convenido… jajajajaja)
nox
mayo 7th, 2013
5:38 pm
Buenas noches, agradecerte este manual.
Estoy probandolo y lo unico que no funciona phpmyadmin
Lo he revisado todo aunque no hay mucho q revisar.
Lo has probado con la 5.2 y yo con la 5.3 los repositorios los he escogido de catalunya españa.
mmmmm cosa rara alguna idea ?
Jose Antonio Cely Saidiza
mayo 7th, 2013
6:40 pm
@nox pero puntualmente cual es el error?
Si es phpmyadmin y el paquete se instalo sin problemas, PERO es otro repositorio, tal vez el link simbólico ( ln -s ../phpMyAdmin /var/www/htdocs/phpMyAdmin ) hay que acomodarlo por que son carpetas diferentes.
nox
mayo 8th, 2013
3:04 am
Pues simplemente Not Found
The requested URL /phpMyAdmin/index.php was not found on this server.
Todo esta correcto, el link también esta ok, me parece evidente que no encuentra el phpMyAdmin.
He intentado volve hacia atras con la instalación y ahora al intentar instalarlo Ambiguous: choose dependency for phpMyAdmin-3.5.5:
a 0: php-5.3.21
1: php-5.3.21-ap2
Your choice: 1
Can’t install phpMyAdmin-3.5.5: can’t resolve php-mysqli-5.3.21,php-gd-5.3.21,php-mysql-5.3.21,php-mcrypt-5.3.21,php-5.3.21-ap2
— php-5.3.21-ap2 ——————-
php-5.3.21-ap2 is not for the right architecture
— php-gd-5.3.21 ——————-
php-gd-5.3.21 is not for the right architecture
— php-mcrypt-5.3.21 ——————-
php-mcrypt-5.3.21 is not for the right architecture
— php-mysql-5.3.21 ——————-
php-mysql-5.3.21 is not for the right architecture
— php-mysqli-5.3.21 ——————-
php-mysqli-5.3.21 is not for the right architecture
nox
mayo 8th, 2013
3:09 am
Me contesto a mi mismo.
Estos mismo repositorios los utilice ayer sin ningún tipo de problema. Esto último lo he intentado esta mañana 24 horas después, y la arquitectura esta bien.
Estoy por bajar directamente phpMyAdmin y descomprimirlo en /var/www/htdocs/
Me parece que voy a bajarme la versión 5.2 y punto.
Alguna idea?
Gracias
nox
mayo 9th, 2013
5:33 am
Gracias por todo Jose Antonio, un problema de repositorios en el server ya solucionado, el link de la carpeta phpMyAdmin esta en htdocs. Ahora funciona correctamente.Todo chroot.
joan
mayo 22nd, 2013
8:51 am
Muy buén artículo, genial la difusión que consigues :-)
Yo también soy un fan de OpenBSD.
¡saludos!
Leave a comment