¿Cómo enumero las direcciones IP bloqueadas por iptables?

16

Para evitar ataques de fuerza bruta contra ssh, he agregado algunas reglas de iptables (a continuación). La pregunta es: ¿cómo puedo enumerar las direcciones IP bloqueadas?

(1)
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
Eddie
fuente
1
iptables -L INPUT -v -nmuestra toda la IP bloqueada
dinámica

Respuestas:

16

Una opción sería registrar cualquiera de sus paquetes descartados con una regla como:

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl -j LOG --log-prefix "FW_DROPPED: "

Inserte eso inmediatamente antes de la DROPregla. Luego, puede seleccionar el archivo syslog para cualquier cosa que contenga "FW_DROPPED" y la lista de IP estará allí. Las entradas en el archivo de registro se ven así:

Jun  3 08:05:57 some-machine kernel: [15852451.420557] FW_DROPPED: IN=eth0 OUT= MAC=00:50:ba:4a:d9:e3:00:12:17:3a:e3:64:08:00 SRC=228.23.45.189 DST=192.168.1.1 LEN=48 TOS=0x00 PREC=0x00 TTL=106 ID=10941 PROTO=TCP SPT=58212 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

Por lo tanto, recortar lo que sigue "SRC =" le mostrará las direcciones IP caídas. Ordene eso, eliminando duplicados, y tendrá su lista.

He encontrado que el Tutorial de Iptables es la documentación más útil para iptables / netfilter.

yukondude
fuente
Sí, esta es la forma de hacerlo.
Brent
Esto requeriría que duplique sus reglas ya que no inicia sesión y coloca la misma regla.
David Pashley
3
Sería aún mejor si crea una cadena de usuarios donde registra y descarta los paquetes ofensivos. Al hacer esto, se elimina innecesariamente la duplicación. Se puede hacer así: iptables -N ataques; iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m Recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j ataques; iptables -A ataques -j LOG --log-prefix "FW_DROPPED:"; iptables -A ataques -j DROP
Cristian Ciupitu
1
Convenido. Las tablas / cadenas son el camino a seguir; todo el punto de iptables, de verdad. Creo tablas separadas para aceptadas, descartadas en silencio, rechazadas de forma audible, descartadas, sospecha de inundaciones, ilegales, sondeos sospechosos, escaneos sospechosos, tipos desconocidos y tráfico vigilado. Mis FW se basan en este antiguo script (advertencia: autopromoción): code.google.com/p/klondike-firewall/source/browse/trunk/…
yukondude
1
El módulo ipt_recent al que hicieron referencia ipozgaj y David Pashley es una adición bastante ingeniosa, aunque no puede proporcionar la misma razón detallada que se eliminó una IP en particular (como puede hacerlo con diferentes configuraciones de --log-prefix) o realizar un seguimiento de un larga historia de ataques con marcas de tiempo. Sin embargo, definitivamente es una buena idea usar ambas técnicas en concierto.
yukondude
5

Puede encontrar detalles en / proc / net / ipt_recent / SSH.

Este artículo tiene más información.

David Pashley
fuente
Este artículo ya no parece existir.
Dan Metheus
4

Mirar

/proc/net/ipt_recent/YOURNAME

donde YOURNAME es el nombre que usó con la opción --name en su regla de iptables.

ipozgaj
fuente
En algunas distribuciones (por ejemplo, Debian), la ruta válida es:/proc/net/xt_recent/[list-name]
itachi
3

Aquí hay un simple revestimiento:

$ iptables -L -n --line
giorgio79
fuente
1

Lo que hago, por ejemplo, para la suplantación de direcciones de entrada, es definir la cadena SPOOF_REJECT:

iptables -N SPOOF_REJECT
iptables -A SPOOF_REJECT -j LOG --log-prefix "Input spoof detected: "
iptables -A SPOOF_REJECT -j REJECT

luego enviar paquetes a esta cadena si son falsificados:

iptables -A INPUT -i $EXT_DEV1 -s $INT_NET -j SPOOF_REJECT
iptables -A INPUT -i $EXT_DEV2 -s $INT_NET -j SPOOF_REJECT

Puede hacer algo como esto para cada categoría de paquetes que descarta o rechaza para obtener una línea en el registro del sistema para buscar, luego grep, cortar, ordenar periódicamente, para obtener solo las direcciones IP de estas líneas de registro.

El beneficio de usar cadenas individuales para cada categoría es que su configuración se vuelve más sencilla y es más fácil leer su iptablesconfiguración. A medida que agregue más y más reglas, se alegrará de haber utilizado cadenas individuales para diferentes acciones específicas.

Eddie
fuente
¿Cómo exactamente detectan paquetes falsificados? En mi experiencia, esto es imposible en el caso general.
MarkR
Lo anterior es solo un ejemplo. Aquí, estoy buscando cualquier paquete que llegue a la cadena INPUT que provenga de un dispositivo externo pero que afirme que proviene de una dirección IP interna de mi red. En este caso, puedo detectar absolutamente la suplantación de direcciones, pero sí, en el caso general las cosas son diferentes.
Eddie
1

"La pregunta es: ¿cómo puedo enumerar las direcciones IP bloqueadas?"

Crea una cadena PROHIBIDA:

iptables -N BANNED
iptables -F BANNED

Crear una cadena de registro:

iptables -N BANNEDLOG
iptables -F BANNEDLOG
iptables -A BANNEDLOG -j LOG --log-prefix "BANNED:" --log-level 6
iptables -A BANNEDLOG -j DROP

Agregue salto a la cadena prohibida en la cadena INPUT antes de la mayoría de las otras reglas

...
iptables -A INPUT -j BANNED
...

Ahora agregue ipaddresses a la cadena prohibida:

flock -w 5 /var/lock/iptables -c 'iptables -A BANNED -s 140.130.20.202/32 -i eth0 -m comment --comment "2012-03-19 23:49:33 accesslog" -j BANNEDLOG'
etc...

También puede usarlo como una base de datos con las opciones de comentarios, para que pueda saber cuándo y por qué, etc., el lote es importante cuando iptables se actualiza con frecuencia por muchos procesos; parece que iptables no tiene ningún bloqueo incorporado.

Para ver las direcciones y reglas prohibidas en la cadena prohibida:

iptables -S BANNED

Para ver direcciones IP únicas y ordenadas:

iptables -S BANNED | egrep -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -u

Tengo una serie de demonios ejecutándose en mis servidores que comprueban los archivos de syslog y los weblogs, por lo que si alguien intenta algo desagradable, su dirección se bloqueará automáticamente durante unos días, según el tipo, la gravedad y el número de ataques anteriores. La información se registra en una base de datos mysql y caduca periódicamente. Las direcciones también se distribuyen a todas las demás máquinas del clúster a través de la replicación mysql, por lo que también están protegidas y se mantienen sincronizadas. Mi software también busca al propietario de la red y envía una queja al ISP.

Después de 10 años de trabajo, espero que esté disponible para que todos lo usen pronto. Actualmente tengo alrededor de 1.5 millones de historiales de direcciones IP y cientos de miles de ataques de correo y ssh reportados, lo que ayuda a limpiar la red. Si más lo usaría, espero que tenga más impacto.

Andy Lee Robinson
fuente