Como faço para listar endereços IP bloqueados pelo iptables?

16

Para evitar ataques de força bruta contra o ssh, adicionei algumas regras do iptables (abaixo). A pergunta é: como posso listar os endereços IP bloqueados?

(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
fonte
11
iptables -L INPUT -v -nmostra todos bloqueados ip
dinâmica

Respostas:

16

Uma opção seria registrar qualquer um dos seus pacotes descartados com uma regra 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: "

Insira isso imediatamente antes da DROPregra. Em seguida, você pode grep o arquivo syslog para qualquer coisa com "FW_DROPPED" e a lista de IPs estará lá. As entradas no arquivo de log são mais ou menos assim:

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

Portanto, recortar o que segue "SRC =" mostrará os IPs descartados. Classifique isso, eliminando duplicatas, e você terá sua lista.

Eu achei o Tutorial do Iptables a documentação mais útil para o iptables / netfilter.

yukondude
fonte
Sim, é assim que se faz.
Brent
Isso exigiria que você duplicasse suas regras para não registrar e soltar a mesma regra.
David Pashley
3
Seria ainda melhor se ele criar uma cadeia de usuários onde ele registra e descarta os pacotes incorretos. Ao fazer isso, a duplicação desnecessária é removida. Isso pode ser feito assim: 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 ataca -j LOG - prefixo de log "FW_DROPPED:"; iptables -A ataques -j DROP
Cristian Ciupitu
11
Acordado. Mesas / correntes são o caminho a percorrer; todo o ponto do iptables, na verdade. Crio tabelas separadas para aceites, descargas silenciosas, rejeições audíveis, descartadas, suspeitas de inundações, ilegais, investigações suspeitas, varreduras suspeitas, tipos desconhecidos e tráfego monitorado. Meus FWS são baseados neste roteiro de idade (aviso: a auto-promoção): code.google.com/p/klondike-firewall/source/browse/trunk/...
yukondude
11
O módulo ipt_recent que ipozgaj e David Pashley referenciaram é uma adição bastante bacana, embora não possa fornecer o mesmo motivo refinado de queda de um IP específico (como você pode com diferentes configurações de --log-prefix) ou acompanhar um longa história de ataques com registros de data e hora. Definitivamente, é uma boa idéia usar as duas técnicas em conjunto.
yukondude
5

Você pode encontrar detalhes em / proc / net / ipt_recent / SSH.

Este artigo tem mais informações.

David Pashley
fonte
Este artigo parece não existir mais.
Dan Metheus
4

Olhe para a

/proc/net/ipt_recent/YOURNAME

onde YOURNAME é o nome que você usou com a opção --name em sua regra do iptables.

ipozgaj
fonte
Em algumas distros (por exemplo, Debian), o caminho válido é:/proc/net/xt_recent/[list-name]
itachi 9/17
3

Aqui está um liner simples:

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

O que faço, por exemplo, para falsificação de endereços de entrada, é definir a cadeia SPOOF_REJECT:

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

em seguida, para enviar pacotes a essa cadeia se eles forem 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

Você pode fazer algo assim para cada categoria de pacotes que você soltar ou rejeitar para obter uma linha no syslog, e depois periodicamente grep, cortar, classificar, para obter apenas os endereços IP dessas linhas de log.

O benefício de usar cadeias individuais para cada categoria é que sua configuração fica mais direta e fica mais fácil ler sua iptablesconfiguração. À medida que você adiciona mais e mais regras, ficará feliz por ter usado cadeias individuais para ações diferentes específicas.

Eddie
fonte
Como exatamente, você detecta pacotes falsificados? Na minha experiência, isso é impossível no caso geral.
MarkR
O acima é apenas um exemplo. Aqui, estou procurando por qualquer pacote que chegue à cadeia INPUT proveniente de um dispositivo externo e que afirme vir de um endereço IP interno à minha rede. Nesse caso, posso detectar absolutamente a falsificação de endereço, mas sim, no caso geral, as coisas são diferentes.
Eddie
1

"A questão é: como posso listar os endereços IP bloqueados?"

Crie uma cadeia BANNED:

iptables -N BANNED
iptables -F BANNED

Crie uma cadeia de log:

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

Adicione salto à cadeia proibida na cadeia INPUT antes da maioria das outras regras

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

Agora adicione ipaddresses à cadeia banida:

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...

Você também pode usá-lo como um banco de dados com as opções de comentários, para saber quando e por que etc. o rebanho é importante quando o iptables está sendo atualizado com frequência por muitos processos - parece que o iptables não possui nenhum bloqueio embutido.

Para visualizar os endereços e regras banidos na cadeia banida:

iptables -S BANNED

Para visualizar apenas os endereços IP exclusivos classificados:

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

Eu tenho vários daemons em execução nos meus servidores, verificando os arquivos syslog e weblogs; portanto, se alguma coisa desagradável estiver sendo tentada por alguém, o endereço deles será banido automaticamente por alguns dias, dependendo do tipo, gravidade e número de ataques anteriores. As informações são registradas em um banco de dados mysql e expiram periodicamente. Os endereços também são distribuídos para todas as outras máquinas no cluster através da replicação mysql, para que eles também sejam protegidos e sincronizados. Meu software também consulta o proprietário da rede e envia uma reclamação ao ISP.

Após 10 anos de trabalho, espero disponibilizá-lo para que todos possam usar em breve. Atualmente, tenho cerca de 1,5 milhão de históricos de endereços IP e centenas de milhares de ataques de email e ssh relatados, ajudando a limpar a rede. Se mais o usarem, espero que tenha mais impacto.

Andy Lee Robinson
fonte