
Estou tentando bloquear pings icmp de um servidor se a contagem de pacotes for maior que 2 por segundo (contagem de pacotes reduzida para teste). Tentei essas 2 regras separadamente, mas elas não parecem ajudar:
iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 1 --hitcount 2 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 2/s --limit-burst 2
o que há de errado com essas regras?
Estou executando ping em outro servidor usando o comando abaixo, mas o ping continua recebendo respostas -
ping -n -i 0.2 192.168.2.86
também quando verifico a saída iptables -nvL - a contagem de pacotes da regra não está aumentando ...
Máquina usada é centos 6.8
Algum progresso: adicionei uma regra de eliminação padrão no final da tabela:
iptables -A INPUT -p icmp -m icmp -j DROP
e, em seguida, adicionar esta regra eliminou pings que excederam o limite
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 2/second -j ACCEPT -m comment --comment "icmprule1"
ainda não consegui bloquear o servidor completamente.
Responder1
Aqui vai, adicionando uma cadeia ICMPSCAN secundária (e colocando a regra de salto na primeira posição da cadeia INPUT):
iptables -N ICMPSCAN
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j DROP
Nota: ambas as regras de configuração/atualização podem ser definidas em INPUT sem o secundário, mas prefiro colocar essas regras em cadeias distintas.
Nota2: uma regra adicional após --set pode ser adicionada para registrar o evento...
lista negra dinâmica:
Agora, para adicionar uma lista negra dinâmica permanente com base no acionador de contagem de acessos recente, podemos aproveitar as vantagens do recurso ipset. ipset está disponível para centos 6.x e iptables reconhece ipset, mas pode ser necessário instalá-lo primeiro.
Aqui estão as regras do iptables/ipset para atender à sua necessidade:
iptables -F ICMPSCAN
iptables -N ICMPSCAN
ipset -N banned_hosts iphash
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j SET --add-set banned_hosts src
iptables -A ICMPSCAN -m set --set banned_hosts src -j DROP
Você pode listar o conteúdo atual da lista de banidos usando a lista ipset, por exemplo:
# ipset list banned_hosts
Name: banned_hosts
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8284
References: 2
Members:
192.168.122.1
e gerenciar o set list, por exemplo, para remover um endereço IP como:
# ipset del banned_hosts 192.168.122.1
Veja também esta página:http://www.linuxjournal.com/content/advanced-firewall-configurations-ipset