Como eu permito conexões de saída via iptables?

14

Eu tenho dois servidores. O programa no primeiro precisa se comunicar com o segundo na porta 2194.

Eu sei que não está funcionando, porque quando eu faço:

root@server1 [~]# telnet myserver2.com 2194
Trying 123.123.123.98...
telnet: connect to address 123.123.123.98: Connection timed out
telnet: Unable to connect to remote host: Connection timed out
server1# iptables -L -n

Chain INPUT (policy DROP)
...
...

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
...

Chain LOCALINPUT (1 references)
target     prot opt source               destination
...

Chain LOCALOUTPUT (1 references)
target     prot opt source               destination
...

Chain LOGDROPIN (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain LOGDROPOUT (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0
    
por siliconpi 22.09.2010 / 09:02

2 respostas

19

Para permitir conexões de saída do servidor1 para o servidor2 na porta TCP 2194, use isso no servidor1:

iptables -A OUTPUT -p tcp -d <server2ip> --dport 2194 -j ACCEPT

Para permitir conexões de entrada do server1 para o server2 na porta TCP 2194, use isso no server2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
    
por 22.09.2010 / 09:47
4

Apenas alguns ponteiros

O serviço que você está executando escuta apenas no host local? Executar

netstat -ltn

Se você ver uma linha como 0.0.0.0:2194 , então está ok. Se você vir 127.0.0.1:2194 , estará ouvindo apenas as conexões locais (ou :::2194 e ::1:2194 , respectivamente, para endereços IPv6, mostrados como tcp6 lines).

Quais são as regras atuais do iptables?

iptables -L

A política DROP / REJECT (se não é, deve ser, para todas as cadeias)? Existe uma regra específica para a porta que você precisa?

Se for um problema de firewall, modifique a regra incorreta ou adicione uma regra como

iptables -A INPUT -p tcp --dport 2194 -j ACCEPT 

deve fazer o truque (não testado)

=== EDIT ===

Para testar um problema de rede, uma boa ferramenta é tcpdump . Execute-o em ambos os servidores ao tentar se conectar e ver para onde os pacotes estão indo. por exemplo. no servidor 1 executado:

tcpdump -i eth0 -n host server2.com

e no servidor 2, execute:

tcpdump -i eth0 -n host server1.com

Em seguida, tente se conectar. Você deverá ver todos os pacotes TCP descartados na tela, a partir da origem e do destino. Com esta informação, você deve ser capaz de identificar onde está o problema.

    
por 22.09.2010 / 09:33