iptables no bloqueio do debian git pull, solicitações de http api etc.

0

Estou usando o IPTables em um servidor de API para bloquear todo o tráfego de entrada, exceto para SSH, HTTP e HTTPS. Eu preciso ter acesso total na interface de loopback para executar beanstalkd entre outras coisas, e precisar de acesso HTTP, https e SSH de saída para chamadas de API para outros serviços, bem como extrair do github.

Eu criei as regras da seguinte forma:

iptables -F

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport http -j ACCEPT
iptables -A INPUT -p tcp --dport https -j ACCEPT
iptables -A INPUT -j DROP

iptables -L de saídas:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Apesar disso, git pull não consegue encontrar o servidor, o ping no google não funciona e a mailgun não é enviada. A execução de iptables -F corrige esses problemas e não posso me dar ao luxo de ter um firewall que impeça meu aplicativo de funcionar completamente ...

Como posso alcançar o que estou tentando acima?

    
por GTF 18.10.2014 / 16:27

1 resposta

2

Isso é bastante óbvio quando você pensa sobre isso:

  • O ping do Google não funciona porque você não tem uma regra que permita respostas ICMP de entrada.

  • As coisas não podem "encontrar o servidor" porque você não tem uma regra que permita respostas DNS.

  • Mailgun não pode falar SMTP porque você não tem uma regra que permita pacotes SMTP - o TCP SYN sai, mas o SYN / ACK correspondente é descartado.

A solução geral aqui é usar o rastreamento de conexões do netfilter, também conhecido como "conntrack", para criar uma regra que permita todos os pacotes que correspondem às conexões ativas:

-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

(documentação mais antiga pode ter -m state ; isso está obsoleto.)

E, claro,

-A INPUT -4 -p icmp -j ACCEPT
-A INPUT -6 -p icmp6 -j ACCEPT

porque por que você bloquearia isso

    
por 18.10.2014 / 16:48