Alterar a ordem de leitura de um IPTABLE CHAIN ​​​​(usando Fail2Ban)

Alterar a ordem de leitura de um IPTABLE CHAIN ​​​​(usando Fail2Ban)

Tenho alguma experiência com iptables e fail2ban. Ambos estão funcionando como deveriam, mas eu gostaria de otimizar a maneira como os pacotes são "DROPed" quando ocorre a sondagem de IP e porta.

Fail2Ban está fazendo um bom trabalho bloqueando IPs que estão tentando acessar várias portas (ou seja, SSH, MySQL, etc).

No entanto, uma vez que um IP é bloqueado em uma porta específica (ou seja, porta 22 para SSH), o HOST ainda pode ser acessado via ICMP, mesmo que o Fail2Ban tenha adicionado uma condição "DROP - all" ao iptables.

Posso estar errado, mas acho que tem a ver com a ordem em que o iptables está lendo o Fail2Ban CHAIN.

Isto é o que iptables -Lrevela (IPs e DNSs foram substituídos):

user@ SERVER > iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
fail2ban-SSH  tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     all  --  10.10.10.1/25  anywhere
fail2ban-SSH  all  --  anywhere             anywhere
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
fail2ban-SSH  all  --  anywhere             anywhere
RH-Firewall-1-INPUT  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain RH-Firewall-1-INPUT (2 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     icmp --  anywhere             anywhere            icmp any
ACCEPT     esp  --  anywhere             anywhere
ACCEPT     ah   --  anywhere             anywhere
ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain fail2ban-SSH (3 references)
target     prot opt source               destination
DROP       all  --  badip.baddomain.org  anywhere
DROP       all  --  299.299.299.11         anywhere
DROP       all  --  prober.hackers.com  anywhere
RETURN     all  --  anywhere             anywhere

Além disso, aqui está meu iptablesarquivo como ponto de referência:

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:fail2ban-SSH - [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
#
#
#
-A INPUT -j fail2ban-SSH
-A FORWARD -j fail2ban-SSH
-A INPUT -j RH-Firewall-1-INPUT 
-A FORWARD -j RH-Firewall-1-INPUT 
-A RH-Firewall-1-INPUT -i lo -j ACCEPT 
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT 
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT 
-A RH-Firewall-1-INPUT -p esp -j ACCEPT 
-A RH-Firewall-1-INPUT -p ah -j ACCEPT 
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT 
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT 
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 
COMMIT

Como você pode ver, existe uma linha que PERMITE ICMP:

ACCEPT     icmp --  anywhere             anywhere            icmp any

Isso é feito propositalmente, pois preciso que usuários legítimos possam fazer ping em determinados servidores.

Você pode ver no meu arquivo iptables que adicionei o CHAIN ​​​​"fail2ban-SSH" antes dos outros na esperança de que ele fosse lido antes de todas as outras regras, mas isso não funcionou.

Meu objetivo seria DEIXAR QUALQUER solicitação de um IP que o Fail2Ban tenha bloqueado por qualquer motivo, incluindo solicitações ICMP.

Existe uma maneira de configurar o iptables para ler as regras Fail2Ban, antes de todas as outras CHAINS e regras, para que eu possa realmente bloquear e IP em todas as portas e protocolos?

Responder1

Se entendi sua pergunta corretamente, os IPs em sua prisão SSH devem estar bloqueados em todas as portas do sistema e não devem ser capazes de executar ping em você. Todos os outros IPs devem poder executar ping.

Para banir um IP de todas as portas, você precisará configurar sua prisão SSH para usar a configuração de ação iptables-allports. Você pode configurar se deseja usar DROP, REJECT, etc. em /etc/fail2ban/action.d/iptables-blocktype.conf

[sshd]
enabled  = true
action   = iptables-allports[name=sshd]
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 5
findtime = 300
bantime  = 7200

Se você também quiser evitar que esse IP específico faça ping em você enquanto permite que qualquer outra pessoa que não esteja na prisão SSH faça ping, você precisará adicionar outra ação à sua prisão SSH.

  • Faça cópias de iptables-allports.conf e iptables-blocktype.conf.
  • Dê novos nomes aos arquivos, como: iptables-blockping.conf e iptables-blocktype-ping.conf.
  • Abra iptables-blockping.conf e atualize a seção [INCLUDES] para apontar para iptables-blocktype-ping.conf.
  • Abra iptables-blocktype-ping.conf e altere o tipo de bloco para REJECT --reject-with icmp-host-prohibited.

As prisões podem ter múltiplas ações, então diretamente abaixo de iptables-allports[name=sshd], liste o nome do seu novo arquivo de configuração de ação, iptables-blockping.conf.

Isso deve funcionar para seus propósitos - os IPs na sua prisão SSH terão entradas específicas no iptables para rejeitar solicitações de ping. Estas regras serão lidas após a sua regra para permitir pings.

informação relacionada