Desbanear IPs en fail2ban de forma correcta
Este post es más un recordatorio para mí pero sigue siendo un buen material de consulta para sysadmins.
Fail2ban es una herramienta bastante popular entre administradores de sistemas ya que nos permite añadir una capa de seguridad extra a nuestro servidor, viene con algunas reglas de seguridad pre configuradas para proteger servicios como ssh y apache, sin embargo es lo suficientemente flexible y fácil de utilizar para que nosotros creemos y agreguemos todas las que necesitemos, pero bueno este tutorial no es acerca de cómo crear esas reglas sino de cómo desbanear ciertas IPs que hayamos baneado por equivocación.
En el mejor de los casos
fail2ban utiliza la utilidad iptables, lo primero que haremos será encontrar que tipo de restricción se le aplico a la ip baneada
# iptables -L -n | less
Como podemos ver, la ip afectada es 187.240.213.48 y está dentro del JAIL fail2ban-ssh o simplemente ssh (quiten le la parte de fail2ban-*), fail2ban utiliza un sistema de JAILS (jaulas / prisiones / cárceles) bastante interesante con el cual podemos agrupar ips en grupos y aplicar ciertas reglas a todas ellas al mismo tiempo, les dejo más documentación al respecto: control de jails en fail2ban
Si queremos saber el nombre de todas las JAILS que está corriendo fail2ban actualmente lo haremos con el comando
# fail2ban-client status
Este comando nos sirve para corroborar el nombre de la JAIL que vamos a manipular, podemos observar que tenemos muchas más ademas de ssh, por ejemplo apache, apache-myadmin, apache-overflows, etc … continuamos.
Ahora que conocemos en detalle la IP y la JAIL vamos a remover la restricción utilizando:
# fail2ban-client get ssh actionunban 187.240.213.48
Para versiones más nuevas de fail2ban, digamos 0.9.x seria:
# fail2ban-client set ssh unbanip 187.240.213.48
Y listo, con esto nos aseguramos de remover las restricciones solo a una dirección IP en específico 🙂
Podemos revisar si efectivamente la IP fue removida con el comando:
# iptables -L -n | grep '187.240.213.48'
Si el comando no nos regresa nada significa que no pude encontrar una coincidencia de ‘187.240.213.48’ en el output del iptables y por lo tanto la IP ya no está baneada.
En el peor de los casos
Sin embargo, si la consola les muestra algo como esto:
Y tienen la mala suerte de estar trabajando con un fail2ban version 0.8.6 como yo, significa que la IP no pudo ser desbaneada, haciendo un poco de investigación se trata de un bug muy nefasto popular en esta versión, intentamos remover la restricción de nuevo, esta vez utilizando el debug
# fail2ban-client -vvv get ssh actionunban 187.240.213.48
Ahí observamos que la falla está en los comandos que se aplican, podemos solucionar esto de dos formas, la primera es actualizando el servicio y la segunda es removiendo la dirección IP de forma manual que fue lo que yo hice, no es tan complicado 🙂
# IP=187.240.213.48
# cat /var/log/fail2ban.log | grep -v $IP > /tmp/fail2ban.tmp
# cp /tmp/fail2ban.tmp /var/log/fail2ban.log
# iptables -D fail2ban-ssh -s $IP -j DROP
Revisamos de nuevo si efectivamente la IP fue removida
# iptables -L -n | grep '187.240.213.48'
Y esta vez no debería de mostrarnos nada.
salu2