iptables: tráfego estabelecido sendo descartado

4

Eu tenho o iptables configurado assim:

# iptables -L -nv
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
13925 8291K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 8153 2431K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22,25,53,80,443
  482 98621 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 5057 3382K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Mas não posso fazer solicitações a partir desta máquina. DNS, HTTP, qualquer coisa que eu inicie nesta máquina falhará. O tráfego de entrada ainda está bom, o SSH e o Web Server ainda são acessíveis de fora. Se eu alterar minha política de entrada para ACCEPT (e remover essa última regra DROP, que está lá apenas para teste), tudo funciona. Parece que nenhum tráfego entrado ESTABLISHED / RELATED está chegando, observe os zeros no início dessa linha. O que eu fiz de errado?

    
por Jay K 22.07.2013 / 22:33

1 resposta

1

O rastreamento de conexão não está funcionando para você, por algum motivo (como evidenciado pelo fato de que nem um único pacote foi descartado por sua regra baseada em conntrack na entrada). Isso ocorre porque você definiu o NOTRACK em algum lugar (o único local em que isso é permitido é a tabela bruta, o mesmo acontece com iptables -t raw -nvL ) ou porque você não tem o módulo conntrack carregado em seu kernel ou o desativou de outra maneira . Você pode validar isso definindo uma regra como esta:

iptables -t filter -I INPUT 1 -m conntrack --ctstate UNTRACKED -j LOG

Isto lhe dará contadores de pacotes para todos os pacotes que não estão sendo rastreados pelo conntrack (sem afetar qualquer outra coisa). Não deixe isso ligado por muito tempo, pois ele envia dados para o syslog (mas é a melhor opção para uma regra não-dispositiva nesse caso).

Eu não acredito que o iptables permita que você especifique regras baseadas no conntrack sem que o conntrack seja carregado, mas você pode validar isso de qualquer maneira fazendo um lsmod | grep conntrack e procurando por estes módulos:

nf_conntrack_ipv4
nf_conntrack

Caso contrário, você pode ter um bug do kernel ou algo assim.

Também vale a pena mencionar que normalmente as consultas DNS são feitas pelo udp / 53, não pelo tcp / 53. No entanto, sua regra para aceitar related,established pacotes na entrada deve cuidar de suas necessidades de consulta de DNS.

    
por 15.08.2013 / 09:16