jueves, 2 de marzo de 2017

Scripts en Bash para banear ip desde línea de comandos. Fortinet y Sonicwall

Estimados amigos de Inseguros !!!


En el capítulo de hoy voy a liberar un par de truquitos que uso en mis despliegues para banear una dirección IP.

https://github.com/kinomakino/Ban-ip-Bash-Scripts/tree/master

El escenario es muy sencillo, tienes un Fortinet o un SonicWall, tienes tu regla BLACKLIST creada, tienes tu grupo de direcciones ip, y tienes tus objetos. Hasta la fecha bien.


Si en tus tareas de revisión de sistemas encuentras una ip maliciosa, tienes que loguearte en el firewall, entrar en la sección correspondiente, crear el objeto dirección. Luego meterlo en el grupo... Es lento.

Mejor usar un script que pasándole la dirección IP, haga esta labor. La única gracia de estos scripts es que al contrario que cuando lanzas un comando remoto mediante SSH, puedes enviar todo el "churro" del comando, en estos sistemas (Firewalls físicos) suele haber una linea de comando que espera precisamente eso, un comando.

Mediante Expect -f podemos pasarle un fichero en el que vamos reproduciendo los "prompts" que nos presenta el firewall y le vamos pasando los parámetros. Ejemplo:

#!/usr/bin/expect -f
set IP [lindex $argv 0]
set timeout 60
spawn ssh user@ip
expect "password:"
send "password\r"
expect "fortinet_name"
send "config firewall address\r"
expect "fortinet_name (address)"
send "edit IP\r"
expect ")"
send "set subnet IP/32\r"
expect ")"
send "end\r"
expect "fortinet_name"
send "config firewall addrgrp\r"
expect ")"
send "edit BLACKLIST\r"
expect ")"
send "append member IP\r"
expect ")"
send "end\r"
expect "fortinet_name"
send "exit\r"

Aparte, este script lo puedes usar como acción en Fail2ban para banear a nivel perimetral y no a nivel de hosts.
También lo puedes usar como acción para un evento en OSSIM (Puedes leer más en la segunda parte del post: http://kinomakino.blogspot.com.es/2014/08/ossim-13-conectando-un-sensor-snort.html )

El poder acceder al firewall desde un único punto por línea de comandos es algo que al final vas a tener que usar. Tiene algunas pegas, como la autenticación contra el sistema. Lo suyo es generar una política de claves privadas para confiar entre los dos equipos, pero dependemos del fabricante.

Otro problema que me he encontrado es que por ejemplo, si usas este script en un sistema Debian, y actualizas Openssh por un fallo, el sistema se configura de manera que NO acepta cifrados inseguros. Bien, tu actualizas tu Openssh, pero si el fabricante no cambia el cifrado, no actualizas el firewall, puede ser que de repente el script ya no conecte por no cumplir con los requisitos mínimos...

Todo esto son cosas que irás viendo o no, según tus implementaciones.

La semana que viene publicaré el mismo script para Cisco ASA e intentaré crear un script que solvente el problema de Fortinet de no tener más de 300 direcciones IP por grupo. Tendré que ir balanceando los baneos en varios grupos con algún contador...

Buenos, espero que os sirva de ayuda, gracias por leerme !!!