Le recomiendo encarecidamente que automatice el proceso de prohibición fail2ban
, que funciona perfectamente bien en una configuración predeterminada y se puede personalizar aún más si desea que supervise más servicios.
Cuando se combina con iptables-persistent
, conservará las reglas en los reinicios, lo que es útil.
Aquí hay una descripción básica de lo que hago con cualquier servidor Ubuntu:
Instalar y configurar fail2ban
sudo aptitude install fail2ban && sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && sudo nano /etc/fail2ban/jail.local
Esto lo instala y copia el archivo de configuración en un nuevo archivo para sus personalizaciones. Esta es una práctica recomendada porque evita que se sobrescriban sus ediciones si se actualiza el paquete.
Mi preferencia personal es extender el tiempo de prohibición y encontrar el tiempo de los valores predeterminados. El tiempo de prohibición es durante cuánto tiempo está prohibido un atacante, y encontrar el tiempo es la ventana de tiempo en que se cuentan sus intentos, en caso de que califiquen los ataques con límite. Buscar y editar bantime = 21600
(aumentado a seis horas, el valor del tiempo es en segundos) y también findtime = 3600
(máximo 3 intentos de ataque por hora).
Limpie las reglas existentes de Iptables y establezca nuevos valores predeterminados
Este es un trazador de líneas que debe usarse en un servidor web típico con puertos entrantes que escuchan en el puerto 22 (SSH), el puerto 80 (HTTP) y el puerto 443 (HTTPS) solamente. Este tutorial de DigitalOcean es una buena referencia sobre cómo construir el suyo propio o personalizar el mío. ¡Tenga cuidado con Iptables y establezca las reglas DROP, si recibe el pedido incorrectamente, se bloqueará permanentemente! Dicho esto, este one-liner es lo que uso y es seguro, probado y funciona perfectamente:
sudo iptables -P INPUT ACCEPT && sudo iptables -F && sudo iptables -A INPUT -i lo -j ACCEPT && sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT && sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT && sudo iptables -A INPUT -j LOG && sudo iptables -A FORWARD -j LOG && sudo ip6tables -A INPUT -j LOG && sudo ip6tables -A FORWARD -j LOG && sudo iptables -A INPUT -j DROP
Hacer cambios persistentes entre reinicios
El último paso es instalar y configurar el iptables-persistent
paquete, que automatizará el guardado y la restauración de las reglas en todos los reinicios.
sudo aptitude install iptables-persistent && sudo service iptables-persistent start
Le pedirá que confirme las reglas IPV4 e IPV6, y debe usar la tecla de tabulación para seleccionar 'sí' para cada una y guardar. Se iniciará automáticamente al reiniciar para que no tenga que preocuparse por configurarlo más.
Una cosa a tener en cuenta sobre la persistencia de las reglas es que debe informar manualmente al proceso sobre cualquier regla nueva que agregue o edite (por ejemplo, si agregó o eliminó HTTPS en el puerto 443). Para hacer esto, ejecute el sudo service iptables-persistent save
cual actualizará el conjunto actual de reglas en su lugar. Creo que el comando se cambió a "netfilter-persistent" en versiones posteriores a la 14.04, así que úselo sudo service netfilter-persistent save
si el primero no funciona.
Resumen
Ahora fail2ban monitoreará los ataques en SSH y agregará y restará direcciones IP automáticamente de acuerdo con los parámetros que establezca. Iptables ignorará todo el tráfico entrante de los puertos que no haya abierto y estas reglas persistirán durante los reinicios, por lo que no hay mucho más que deba hacer. ¡Disfruta del tiempo libre extra, supongo!
Revertir todos los pasos anteriores si desea deshacer todos los cambios
Si por alguna razón no desea continuar usando este método, puede deshacer todo rápidamente. Esto no se recomienda, pero es su máquina, así que así es como:
- Vacíe todas las reglas de Iptables y acepte todo el tráfico en todos los puertos
sudo iptables -P INPUT ACCEPT && sudo iptables -F
(debe hacer esto para eliminar la regla DROP al final o quedará bloqueado)
- Elimine los paquetes instalados previamente y sus configuraciones
sudo aptitude purge fail2ban iptables-persistent
(o tal vez netfilter-persistent
, dependiendo de su versión del servidor Ubuntu). Después de un reinicio, debería volver a la forma en que estaba antes, menos cualquier configuración personalizada de Iptables que deberá volver a agregar manualmente como lo está haciendo actualmente.
:f2b...
entradas pero tengo curiosidad acerca de su configuración. En mi instalación predeterminada, las entradas leídasfail2ban-ssh...
. ¿Has hecho muchas personalizaciones desde la configuración predeterminada? Está perfectamente bien hacer esto, por supuesto, pero dificulta el diagnóstico a medida que te alejas de los valores predeterminados del sistema. También debe considerar usar ipset para prohibir permanentemente muchas direcciones, ya que será más eficiente (aunque esa es una pregunta mucho más complicada y diferente).