Por que o iptables bloqueia esse curl mesmo que a porta seja ACCEPTED?

0

Aqui está um script simples para redefinir meus iptables

iptables -F

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -I INPUT  -p tcp --dport 8000 -j ACCEPT
iptables -I OUTPUT -p tcp --dport 8000 -j ACCEPT

Depois disso, se eu

curl another-machine:8000/filename

a conexão trava, parece que DROP e não ACCEPT estão acontecendo. Se eu

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

, o comando curl acima funciona.

Mas a porta 8000 está claramente definida como ACCEPT , mesmo quando DROP é a política.

Então, por que a conexão não está passando?

    
por spraff 16.09.2016 / 22:28

1 resposta

2

A porta remota e destino não são a mesma coisa. Se um pacote de saída tiver 8000 como porta de destino, uma resposta de entrada o terá como a porta source (ou seja, espelhada):

                local                   remote

 src 192.168.1.71:36932  --OUTPUT-->  151.101.1.69:8000 dest  TCP [SYN]

dest 192.168.1.71:36932  <--INPUT---  151.101.1.69:8000 src   TCP [SYN, ack]

Em outras palavras, apenas -A INPUT -p tcp --sport 8000 corresponderá a ele.

A maneira mais comum de lidar com isso é com um firewall stateful :

-A INPUT -m state --state ESTABLISHED -j ACCEPT
    
por 16.09.2016 / 22:35