Por que minha configuração do iptables não está aceitando conexões do IP de origem especificado?

3

Da máquina 192.168.1.2, eu tenho esta configuração iptables:

$ hostname -I
192.168.1.2
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  eth0   *       192.168.1.3          0.0.0.0/0            tcp dpt:6379
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
  943  118K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
   20   988 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
Chain FORWARD (policy DROP 5 packets, 300 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 160 packets, 18263 bytes)
 pkts bytes target     prot opt in     out     source               destination

Quando tento conectar-me à máquina acima de 192.168.1.3 pela porta 6379, ele simplesmente trava até que eu o mate:

$ hostname -I
192.168.1.3
$ nc -z 192.168.1.2 6379
^C

O que estou fazendo de errado, que não está me permitindo conectar de 192.168.1.3 a 192.168.1.2 pela porta 6379?

    
por Abe Voelker 29.08.2014 / 04:42

2 respostas

1

É possível que você tenha adicionado a regra ACCEPT logo após uma tentativa de conexão ter sido interrompida pela política. Se esse foi o caso, uma entrada de rastreamento de conexão pode ter sido criada para o fluxo, que incluiu a decisão de filtragem. A tabela de rastreamento de conexão age como uma espécie de cache para o netfilter; não avalia todas as regras para todos os pacotes. Se houver uma entrada de rastreamento de conexão correspondente, ela consultará isso.

Sempre remova as entradas de tráfego do tráfego que você está tentando combinar com as novas regras, por exemplo, usando a ferramenta conntrack (8). No seu caso, você poderia ter feito algo como

conntrack -D -s 192.168.1.3
    
por 29.08.2014 / 10:53
1

Eu zertei o iptables, então mudei a linha no meu script que define esta regra específica do iptables:

iptables -A INPUT -s 192.168.1.3 -i eth0 -p tcp -m tcp --dport 6379 -j ACCEPT

para isso:

iptables -A INPUT -i eth0 -p tcp --dport 6379 -s 192.168.1.3 -j ACCEPT

e agora está funcionando magicamente, mesmo que iptables -L -n -v pareça idêntico ao que estava lá antes:

$ iptables -L -n -v
Chain INPUT (policy DROP 6 packets, 360 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    1    60 ACCEPT     tcp  --  eth0   *       192.168.1.3          0.0.0.0/0            tcp dpt:6379
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
  311  544K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    1    60 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

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

Chain OUTPUT (policy ACCEPT 255 packets, 28839 bytes)
 pkts bytes target     prot opt in     out     source               destination

Não posso dizer que não seja um comportamento que eu não tenha visto com o iptables antes.

edit: para qualquer um que seja curioso, estou usando iptables-persistent , e este é o arquivo completo que estou usando:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i eth0 -p tcp --dport 6379 -s 192.168.1.3 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i docker0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
    
por 29.08.2014 / 05:34

Tags