Esta entrada no pretende ser una guía exhaustiva de seguridad, hay diferentes modos de proteger el servidor.
Ubuntu ya incorpora algunos como el Iptables o el logado con claves SSH, cómodo y seguro, vamos a ver algunos detalles.
Instalación claves SSH
La operativa de las claves es la siguiente, generamos un set en local con el siguiente comando:
$ ssh-keygen -t rsa
Después la copiamos al servidor en cuestión con el comando ssh-copy-id, para lo que deberemos estar conectados vía SSH.
$ ssh-copy-id -i keyname [email protected]
Y la registramos en el servidor remoto utilizando:
$ssh-add keyname
Si todo ha ido correcto podremos desconectarnos del servidor remoto, y al intentar conectar de nuevo, no será necesario introducir la contraseña, ya que estaremos utilizando el par de llaves con una seguridad más elevada que la de la contraseña que usábamos.
Instalación UFW firewall
Iptables sirve para controlar los puertos del servidor, siempre he encontrado el uso y mantenimiento del iptables algo complicadillo, resulta más sencillo el uso de Documentación de UFW, compárese estos ejemplos para realizar la misma acción (Ojo antes de habilitar el ufw asegurarse de hacer allow 22 o SSH):
sudo ufw allow 22/tcp
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
En el primero ufw ya maneja la creación de la regla y dónde añadirla. A continuación algunos comandos para usar el UFW(mi opción):
sudo apt-get install ufw sudo ufw default deny incoming #por defecto sudo ufw default deny incoming #por defecto sudo ufw default deny outgoing #lo contrario de lo anterior y siendo más restrictivos podemos luego precisar qué abrir. sudo ufw allow ssh #por supuesto, de otro modo nos quedaríamos sin poder volver a entrar :) sudo ufw allow www sudo ufw allow ftp
Y para borrar reglas:
sudo ufw delete allow ftp
Sólo un pero, si deseamos usarlo con IPV6 deberemos activarlo, para ello, editar el fichero ufw siguiente:
sudo nano /etc/default/ufw IPV6=yes
Una vez ufw configurado, lo usaremos con los siguientes comandos:
sudo ufw enable sudo ufw status #veremos el estado sudo ufw disable #pararlo sudo ufw reset #resetearlo y comenzar la configuración a partir de la de por defecto
Hasta aquí hemos manejado como logarnos y asegurar los puertos de la máquina, pero no estamos ‘limitando’ que uso se hace de estos puertos, es decir, se podría por fuerza bruta intentar entrar, para evitarlo usaremos fail2ban. Por medio de este sencillo aplicativo se pueden controlar los intentos de login en diferentes medios el servidor y a nivel avanzado permite un alto nivel de personalización permitiendo vigilar diferentes logs de sistema operativo.
Instalación Fail2ban
Gracias a Fail2ban me quité de encima algunas IP chinas que no paraban de llenarme los logs :).
apt-get install fail2ban
Su instalación nos crea una serie de ficheros
/etc/fail2ban/fail2ban.conf (basic settings) /etc/fail2ban/jail.conf #configuración de lo que se va a monitorizar, por defecto SSH /etc/fail2ban/action.d/ #IP sospechosas sin bloquear, de momento. /etc/fail2ban/filter.d/ #configuración de filtros para detectar los ataques
Por defecto fail2ban usa /etc/fail2ban/jail.conf , es preferible utilizar jail.local:
nano /etc/fail2ban/jail.local
Fragmento de configuración correspondiente a SSH:
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 2
Cuando el servicio se reinicia se pierden las IP baneadas:
/etc/init.d/fail2ban restart #ó sudo service fail2ban restart
Para desbloquear una IP unicamente usar:
iptables -D fail2ban-local -s 55.222.222.22 -j DROP
Aunque también se puede desbloquear usando el cliente de Fail2Ban en lugar de Iptables, antes de la versión v0.8.8:
fail2ban-client getnombreJail actionunban laIP
Y con la versión 0.8.8 y después:
fail2ban-client set nombreJail unbanip laIP
Si no se sabe el Jailname se pueden ver los que hay en:
fail2ban-client status
Al instalarlo la primera vez me ocurrió lo que menciona la documentación sobre el consumo excesivo de python, para ello, aconseja configurarle
ulimit -s 256
Si estamos ante una nueva instalación del servidor, vale la pena valorar la instalación de tripwire ó aide, estas aplicaciones realizan una ‘observación’ de la configuración inicial, y si esta cambia en un futuro, nos notificaría el cambio.
Antivirus
Si deseamos escanear en busca de virus, rootkits, backdoors y sploits podemos usar rkhunter
rkhunter --check rkhunter --update rkhunter --propupd rkhunter --check rkhunter --checkall
clamAV, el antivirus, personalmente lo uso únicamente para escanear, no me gusta el servicio en marcha por temas de rendimiento.
sudo freshclam #actualizarlo sudo clamscan -r / #escanea toda la máquina mostrando todos los nombres de fichero clamscan -r --bell -i / #escanear todos los ficheros y mostrar solo afectados clamscan -r /home #escanear ficheros de usuarios unicamente clamscan -r --remove /home/USER #Escanea todos los ficheros de usuario y elimina los afectados
No hay que dejar de lado la gestión de los Usuarios y sus permisos sobre los directorios, pero es un tema más complejo ya que va a depender bastante del uso del servidor, si tendrá java, o si en el servidor web vamos alojar Magento o WordPress. Más información sobre la configuración y permisos para ejecutar la web con un usuario con permisos dentro del grupo www-data: http://devdocs.magento.com/guides/v2.1/install-gde/prereq/zip_install.html#mage-owner-about-group
http://devdocs.magento.com/guides/v2.1/install-gde/continue.html
Y los permisos para Magento 2: http://devdocs.magento.com/guides/v2.0/install-gde/prereq/file-sys-perms-over.html
SSL gratuitos
https://letsencrypt.org, ver también notas generales de la instalación en un lamp con letsencrypt.
Lectura extra para ampliar: https://gendersec.tacticaltech.org/wiki/index.php/Linux_security
0 comentarios