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

17

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
siliconpi
fonte
mas funciona quando você faz telnet localhost 2194 no server1? e quanto ao telnet server1spublicip 2194 do server1?
Geraint Jones
O telnet localhost 2194 no server2 funciona. O telnet server2ipaddress 2194 no server2 também funciona.
siliconpi 22/09/10
1
con você faz: iptables -L -n nos dois servidores e me diga se você obtém mais do que o seguinte (não quero ver suas regras, etc ;-)) Chain INPUT (policy ACCEPT) target prot opt ​​source destination destino Chain FORWARD ( política ACCEPT) origem destino alvo prot opt chain OUTPUT (política ACCEPT) destino alvo prot fonte opt
Geraint Jones
Olá! Veja a edição, por favor ...
siliconpi

Respostas:

21

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

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

Para permitir conexões de entrada do servidor1 para o servidor2 na porta TCP 2194, use-o no servidor2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
fonte
Merda - eu fiz o primeiro, não funcionou. Eu fiz a segunda, que não funcionava ou ... eu posso ter configurações muito restritivas no lugar ... veja a edição anterior
siliconpi
1
Tente usar "-I" em vez de "-A"; isso coloca as novas regras acima de todas as outras que já podem estar em vigor.
Massimo
Devo estar fazendo algo diferente se o aplicativo realmente usar o nome de domínio, em vez do endereço IP diretamente?
Siliconpi 22/09/10
Woah ... sou capaz de telnet a partir do prompt apenas por fazer a primeira declaração ...
siliconpi
3
Sua minus-I como em "i" para pessoas que pode ler isso como uma L
siliconpi
6

Apenas algumas dicas

O serviço que você está executando está ouvindo apenas no host local? Corre

netstat -ltn

Se você vir uma linha como esta 0.0.0.0:2194, está bem. Se você ver 127.0.0.1:2194, em seguida, você está ouvindo apenas em ligações locais (ou :::2194e ::1:2194, respectivamente, para os endereços IPv6, mostrados como tcp6linhas).

Quais são as regras atuais do iptables?

iptables -L

A política é DROP / REJECT (se não for, 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 o problema de rede, é uma boa ferramenta tcpdump. Execute-o nos dois servidores enquanto tenta se conectar e veja para onde os pacotes estão indo. por exemplo, no servidor 1, execute:

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ê deve ver todos os pacotes TCP despejados na tela, da origem e do destino. Com essas informações, você poderá identificar onde está o problema.

Dan Andreatta
fonte
Oi Dan - Eu não acho que server2 tem qualquer problema em aceitar a conexão (eu sou capaz de se conectar a ele usando minha casa pc), mas acho que server1 não permite que a conexão de saída ...
siliconpi
iptables -A OUTPUT -p tcp --dport 2194 -j ACCEPT
Geraint Jones
Oi c10k, que não funcionava ... E tryign para telnet didnt trabalho
siliconpi
Adicionadas algumas outras idéias
Dan Andreatta
Olá, aqui 2194 é o número da minha porta ou o número da porta IP de destino?
Tommy