Mejorar la seguridad en un servidor Ubuntu 14.04 con LAMP
En este artículo, veremos la manera de mejorar la seguridad de un servidor Ubuntu en el que tenemos LAMP funcionando. Para ello, asumiremos que tienes LAMP instalado en tu servidor y que el mismo utiliza Ubuntu 14.04.
Si no es así, en este articulo te explicamos como hacerlo.
Linux
Firewalls:
La mayoria de actuaciones sobre la seguridad de un servidor, se debe centrar en los puertos, que son los encargados de conectar nuestro servidor con el mundo exterior. Entonces por que hacer que todos ellos sean accesibles si no es necesario? Para configurar que puertos son accesibles y cuáles no, nosotros utilizamos una aplicación llamada UFW, la cual nos permite configurar fácilmente IPTABLES.
Instalar UFW:
sudo apt-get update && apt-get install ufw
Aun que instalemos esta aplicación, por defecto estará desactivada con lo que deberemos activarla para utilizarla:
sudo ufw enable
Lo primero que tendremos que hacer, es habilitar nuestro puerto SSH o nuestro servidor nos bloqueará el acceso:
sudo ufw allow 22
sudo ufw allow 80
Con esto haremos nuestro puerto accesible públicamente. Podemos ver el listado de puertos con la siguiente línea de comandos:
sudo ufw status numbered
Para eliminar o bloquear un puerto, usaremos el argumento remove con el número de puerto que queremos bloquear:
sudo ufw remove 1
Y para desactivar completamente UFW:
sudo ufw disable
Deshabilitar la creación de usuarios:
Como administrador, deshabilita la creación de usuarios no autorizados. Como administrador de sistemas, esto te ayudará a saber los usuarios existentes en tu sistema, deshabilita la creación de grupos y usuarios usando:
sudo chattr +i /etc/passwd && sudo chattr +i /etc/group
Cuando tengamos que reactivarlo tendremos que usar:
sudo chattr -i /etc/passwd && sudo chattr -i /etc/group
SSH:
Una de las maneras en las que somos vulnerable es cuando somos predecibles, cambia el puerto SSH al que decidas diferente del 22 edita /etc/ssh/sshd_config y modifícalo (créalo si no lo encuentras).
Port 22
Cambia el 22 con el número de puerto que elijas, guarda y reinicia SSH con:
sudo service ssh restart
Súper Usuario:
Ya tenemos un usuario por defecto que tiene privilegios de administrador, pero por qué no crear otro usuario para hacer de administrador y dejar el que se crea por defecto para elementos de seguridad. Crear un usuario:
sudo groupadd users
sudo mkdir /home/newuser && useradd –home /home/newuser –group users –shell /bin/sh newuser
sudo passwd newuser
El código de arriba crea un nuevo grupo llamado users, crea un directorio en /home/ llamado newuser, crea un nuevo usuario llamado newuser y genera un inicio para el mismo en el nuevo directorio creado. Además lo asigna al grupo de usuarios que hemos creado y le crea una contraseña.
Ahora lo tendremos que añadir al grupo de administradores para que tenga derechos de administración, para ello edita /etc/sudoers y añádelo:
newuser ALL=(ALL:ALL) ALL
Una vez realizado esto, guarda todo. Y recuerda entrar siempre con la nueva cuenta creada.
Apache
Para hacer las cosas mas fáciles vamos a utilizar configuradoress, tan solo debes crear una rchivo de configuración en /etc/apache2/conf-available como por ejemplo myconf.conf.
Seguridad básica:
Pega lo siguiente en myconf.conf:
ServerSignature Off
ServerTokens Prod
Options all -Indexes
Activa el uso del modulo headers con:
sudo a2enmod headers
De nuevo en myconf.conf añade:
Headers always unset X-Powered-By
El código superior desactiva la firma del servidor en los directorios y páginas de error, así como solo muestra el sistema operativo instalado en las cabeceras, eliminando el termino X-Powered-By en las mismas.
PHPMyAdmin:
Aquí, después de instalar PHPMyAdmin en tu servidor, la dirección URL por defecto es tudominio.com/phpmyadmin lo cual es predecible, porque no cambiar esto?
Edita /etc/phpmyadmin/apache.conf y encuentra:
Alias /phpmyadmin /usr/share/phpmyadmin
Entonces reemplázalo por:
Alias /newURL /usr/share/phpmyadmin
Y guarda.
Mod Security:
Esto es una Web Application Firewall (WAF) que protege tu servidor Apache.
Instálalo:
sudo apt-get install libapache2-modsecurity
Habilita la configuración de Apache para poder analizarlo.
sudo cp /etc/modsecurity/modsecurity{-recommended,}
Activa SecRuleEngine de DetectionOnly poniéndolo en On, esto hará que ModSecurity trabaje no solo en el momento de acceder.
SecRuleEngine On
Busca SecRequestBodyAccess y ponlo en Off, dejándolo en On generará archivos de logs muy grandes, simplemente no entres en Body.
SecRequestBodyAccess Off
El resto de configuraciones estan bien y funcionan correctamente, al menos en nuestro servidor, con lo que no es necesario tocarlas a menos que querais utilizar configuraciones mas avanzadas. Este conjunto de reglas trabaja en nuestro servidor sin problemas y nos está protegiendo como queremos, activando todas las opciones te dará problemas ya que las URL simples podrían verse como código malicioso por ModSec , por lo que recomendamos que active estas.
Las reglas las encontraras en /usr/share/modsecurity-crs/base_rules.
modsecurity_crs_23_request_limits.conf
modsecurity_crs_35_bad_robots.conf
modsecurity_crs_42_tight_security.conf
modsecurity_crs_45_trojans.conf
Las modificaciones de arriba te darán el nivel de seguridad que necesitas, como activamos una regla? Solo debes crear una relación simbólica a /usr/share/modsecurity-crs/activated_rules usando:
cd /usr/share/modsecurity-crs/
sudo ln -s /usr/share/modsecurity-crs/base_rules/modsecurity_crs_35_bad_robots.conf ./
Una vez que haya terminado la activación de las reglas, hemos de añadirlos a la configuración de Apache, volveremos a myconf.conf y añadiremos esta línea:
<IfModule security2_module>
Include /usr/share/modsecurity-crs/*.conf
Include /usr/share/modsecurity-crs/activated_rules/*.conf
Guarda y reinicia Apache, puedes ver los logs en /var/log/apache2/modsec_audit.log.
DDOS:
Los Ataques de Denegación de Servicio (Denial of Service Attack) funcionan muy bien con Apache, ModSecurity no posee reglas para protejerlo, pero existe una modificación que permite manejarlos. Mod_evasive es una modificación antigua, pero sigue funcionando correctamente, para instalarlo sigue los siguientes pasos:
sudo apt-get install libapache2-mod-evasive
sudo mkdir /var/log/apache2/mod_evasive && chmod 777 /var/log/apache2/mod_evasive
Una vez instalado editaremos la configuración, edita /etc/apache2/mods-available/evasive.conf y cambia esto:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 20
DOSSiteCount 100
DOSPageInterval 3
DOSSiteInterval 5
DOSBlockingPeriod 300
DOSEmailNotify "Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo."
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/log/apache2/mod_evasive"
</IfModule>
Guarda y reinicia Apache.
Server Token:
Apache Server Token no puede modificarse o ser eliminado, pero con la ayuda de ModSecurity, podemos adaptarlo a nuestras necesidades. En el archivo myconf.conf añadiremos esta línea:
SecServerSignature “My Server Signature”
Guardamos y reiniciamos.
MySQL
Puerto: No hay mucho de que hablar sobre seguridad en MySQL, tan solo deberemos cambiar nuestro Puerto por algo impredecible. Busca el Puerto = 3306 y sustitúyelo por el que quieras, pero si tienes UFW trabajando el puerto ya no será accesible públicamente.
PHP
PHP por si mismo ya es seguro, ya que toda la seguridad depende del servidor Apache que hemos estado configurando. De todas formas aun podemos mejorarla un poco, todo lo que tendremos que hacer es localizar el archivo php.ini que se encuentra en /etc/php5/apache2/php.ini.
Exponer PHP: Si comprobamos en la configuración de Apache que hemos realizado, vereis que ya hemos eliminado X-Powered-By de las cabeceras que PHP u otro lenguaje cualquiera pero tambien podemos configurarlo directamente en PHP, busca esta línea y ponla en Off.
expose_php = Off
Errores: Desactiva la visualización de errores, para que nadie pueda conocer tus estructuras de códigos o directorios:
display_errors = Off
Mail X-PHP-Originating-Script Header: Esta cabecera se incluye en los correos enviados con PHP, diciéndole al cliente la localización exacta del script que ha realizado el envío de correo. Esta información no es útil para el cliente, pero si para los posibles atacantes con lo que la desconectaremos:
mail.add_x_header = Off
Nombres de sesión: Cambia los nombres de sesión, lo que conocemos como PHPSESSID, se inpredecible…eso es todo.
session.name = MYSESSID
En definitiva, estas son algunas medida de seguridad que podemos aplicar a nuestro servidor Ubuntu con LAMP.
Si no estais seguros de poder realizar esta u otras configuraciones, recordad que en e-TIC pc estaremos encantados de ayudaros.