Di adiós a las direcciones IP "malignas"

Con un poco de Perl, curl, awk, grep y una buena lista de direcciones IP registradas como peligros potenciales, podemos hacer que nuestro iptables sepa ya con quién no debe tratar. Método muy rápido y eficaz, creado por los chicos de Security By Default.

El Internet Storm Center del portal SANS.org guarda una relación de direcciones IP a modo de TOP que clasifica aquellas que están suponiendo una amenaza para nuestras máquinas. En dicha tabla, que se puede encontrar en esta dirección, se incluye el número de ataques reportados, así como las fechas de cuando se reportó por primera y última vez.

En este portal de seguridad también podemos encontrar otros tops y clasificaciones actualizadas diariamente en base a diversos factores (puertos con mayor actividad, países orígen con más ataques reportados...). Vienen bien, sobretodo para saber si "algo se avecina"...

Volviendo a la primera lista comentada, veo en commandlinefu.com, la página de tips para línea de comandos por excelencia y que debería estar en vuestros favoritos, un comando que gracias a unas cucharadas de curl, un poco de grep, una dósis de awk y otra de perl, es capaz de obtener esas direcciones IP que están suponiendo una amenaza para muchos sistemas:

curl -s http://isc.sans.org/ipsascii.html|grep -v '#'|awk '{print $1}'|perl -pi -e 's/(?:^0{1,})|(?:(?<=\.)0{1,}(?!\.))//g'|egrep -v '^192\.|^10\.|^172\.|^224\.'

Ya con esta lista, lo más normal sería por ejemplo aprovecharse de esta valiosa información y meterla en nuestra output chain del iptables. El comando completo sería el siguiente:

curl -s http://isc.sans.org/ipsascii.html|grep -v '#'|awk '{print $1}'|perl -pi -e 's/(?:^0{1,})|(?:(?<=\.)0{1,}(?!\.))//g'|egrep -v '^192\.|^10\.|^172\.|^224\.'|xargs -n1 sudo iptables -A OUTPUT -j DROP -d > 2&>1

La versión inicial tomaba como fuente la primera lista en html, pero en los comentarios se habla de la versión ASCII más fácilmente parseable que se encuentra en ipascii.html. Este script directamente elimina los ceros incluídos en las direcciones IP para el padding y demás, por lo que no hay que tener más consideraciones en cuenta.

Comentarios

jado92mx:

wow, gran info, creo qe pronto la aplicare en mi linux. algien sabe como agregar qe haga esto con cron para qe lo haga auto??

Linux-lover anónimo:

Buenas, De todas formas, entiendo que dicho listado ira variando con el tiempo. Si lo ejecutamos en un momento dado añadira dichas ips a iptables. Si dentro de un mes ejecuto otra vez el comando, que ocurriria con las ips que ya estuvieran en la lista? Un saludo y felicidades por el articulo.

Warning: INSERT command denied to user 'linuxhis_drupal'@'localhost' for table 'watchdog' query: INSERT INTO watchdog (uid, type, message, variables, severity, link, location, referer, hostname, timestamp) VALUES (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\"%error\";s:12:\"user warning\";s:8:\"%message\";s:300:\"UPDATE command denied to user &#039;linuxhis_drupal&#039;@&#039;localhost&#039; for table &#039;sessions&#039;\nquery: UPDATE sessions SET uid = 0, cache = 0, hostname = &#039;38.107.179.236&#039;, session = &#039;&#039;, timestamp = 1328325076 WHERE sid = &#039;5321377204b5696c002b6aa1f9df69a1&#039;\";s:5:\"%file\";s:54:\"/home/linuxhis/public_html/portal/includes/session.inc\";s:5:\"%line\";i:68;}', 3, '', 'http://www.linuxhispano.net/portal/noticia/di-adi%C3%B3s-las-direcciones-ip-malignas� in /home/linuxhis/public_html/portal/includes/database.mysql.inc on line 128