Bloqueie conexões ESTABLISHED com firewalld / iptables

1

Estou executando o firewalld no meu servidor e estou tentando configurar um fail2ban (usando o firewalld) para melhorar a segurança. O problema é: não consigo fazer isso para matar conexões estabelecidas.

O Firewalld tem a configuração padrão com apenas alguns serviços adicionados (ssh e assim por diante).

Eu acho que sei onde está o problema: iptables -L INPUT me dá isso:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination      
ACCEPT     all  --  anywhere             anywhere        ctstate RELATED,ESTABLISHED   
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere        reject-with icmp-host-prohibited

Pelo que entendi do iptables isso significa que as conexões relacionadas e estabelecidas são aceitas não importa o que, porque é a primeira regra (não tenho idéia de porque a segunda regra existe e ao mesmo tempo apenas as portas especificadas estão abertas, mas vamos ignorar isso por enquanto).

O que eu tentei foi remover a primeira regra iptables -D INPUT 1 , mas isso me deixou com um sistema que não tinha rede nenhuma, nem em saída. Então eu adicionei a regra novamente, mas como a segunda última. iptables -I INPUT 7 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT .

Chain INPUT (policy ACCEPT)
target     prot opt source               destination      
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere    
ACCEPT     all  --  anywhere             anywhere        ctstate RELATED,ESTABLISHED           
REJECT     all  --  anywhere             anywhere        reject-with icmp-host-prohibited

Isso parece ter o efeito desejado. As conexões estabelecidas agora são eliminadas quando as entradas do fail2ban são feitas e o resto da rede parece funcionar.

A questão : Como faço para persistir isso com o firewalld? Eu sei que posso fazer alterações permanentes no firewalld via firewall-cmd --permanent e sei que posso fazer mais algumas coisas de baixo nível via --direct e --xxx-rich-rule , mas não encontrei uma maneira tão profunda quanto manipular a cadeia INPUT.

EDIT: Descobri que você pode usar --passthrough para manipular a cadeia INPUT. No entanto, se eu tentar torná-lo permanente:

firewall-cmd --direct --passthrough ipv4 -I INPUT 7 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
firewall-cmd --direct --passthrough ipv4 -D INPUT 1
systemctl restart firewalld

A inserção funciona, mas a exclusão não. Depois disso iptables -L INPUT produz:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            
INPUT_direct  all  --  anywhere             anywhere            
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere            
INPUT_ZONES  all  --  anywhere             anywhere            
ACCEPT     icmp --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

EDITAR:

Ainda não encontrei uma maneira de fazer isso funcionar com a ação firewalld do fail2ban, portanto, neste momento, presumo que não seja possível.

Se eu usar a ação iptables do fail2ban, embora funcione, então vou me ater a isso.

    
por Ch33f 22.09.2016 / 11:59

1 resposta

1

Parece que o firewalld espera bloquear pedidos em PREROUTING na tabela mangle que é verificada antes da tabela filtro onde você está tentando adicionar a regra.

Proibição simples

Para bloquear sessões estabelecidas, a opção fácil é adicionar uma regra de origem na zona drop .

firewall-cmd --zone=drop --remove-source=192.168.1.xx

Isso adicionará o IP de origem na cadeia PREROUTING_ZONES_SOURCE na tabela mangle .

# iptables -L PREROUTING_ZONES_SOURCE -nv --line -t mangle
Chain PREROUTING_ZONES_SOURCE (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1       23  1656 DROP       all  --  *      *       192.168.1.xx        0.0.0.0/0

PREROUTING_ZONES_SOURCE é chamado na cadeia PREROUTING que controla todo o tráfego antes de qualquer cadeia INPUT no filtro ou < em> mangle .

# iptables -L PREROUTING -nv --line -t mangle
Chain PREROUTING (policy ACCEPT 1809 packets, 90324 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1     227K   22M PREROUTING_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0
2     227K   22M PREROUTING_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0
3     226K   22M PREROUTING_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0

Regras de proibição personalizadas

Se você precisar adicionar uma regra mais específica, use o - direct --add-rule para adicionar a regra em mangle / INPUT executado após mangle / PREROUTING . Aqui você tem um exemplo para bloquear a porta 443 para um IP específico:

# firewall-cmd --direct --add-rule ipv4 mangle INPUT 0 -p tcp --dport 443 -s 192.168.1.xx -j DROP

O formato é o seguinte:

--direct --add-rule { ipv4 | ipv6 | eb } table chain priority args

No exemplo, isso é:

  • {ipv4 | ipv6 | eb} - > ipv4 : para especificar o protocolo IPv4
  • tabela - > mangle : para executar assim que o pacote é recebido e antes de verificar qualquer regra na tabela filtro , como aquela que permitem pacotes de conexões ESTABLISHED.
  • cadeia - > INPUT : esta cadeia INPUT é verificada após o PREROUTING, mas observe que este INPUT está relacionado à tabela mangle .
  • prioridade - > 0 : prioridade da regra em que 0 é a prioridade mais alta.
  • args - > -p tcp --dport 443 -s 192.168.1.xx -j DROP : mesmos parâmetros que você passaria para o iptables.

Então, é assim mangle / INPUT_direct :

# iptables -L INPUT_direct -nv --line -t mangle
Chain INPUT_direct (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1       30  1888 DROP       tcp  --  *      *       192.168.1.181        0.0.0.0/0            tcp dpt:443

Algumas notas

Observe que o primeiro exemplo bloqueará qualquer pacote do IP de origem, mas o segundo exemplo será executado após as regras PREROUTING; portanto, se você modificar o pacote antes de chegar ao INPUT ou o pacote for roteado para a tabela FORWARD, o pacote não atingirá seu DROP regra.

Aqui você tem um diagrama de fluxo simples das tabelas netfilter . Imagemextraídado link

Espero que isso ajude você:)

Veja você José

    
por 12.02.2018 / 01:50