Comment autoriser les connexions sortantes via iptables?

17

J'ai deux serveurs. Le programme du premier doit communiquer avec le second sur le port 2194.

Je sais que ça ne fonctionne pas, car quand je le fais:

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
la source
mais cela fonctionne quand vous faites telnet localhost 2194 sur server1? Qu'en est-il de telnet server1spublicip 2194 de server1?
Geraint Jones
telnet localhost 2194 sur server2 fonctionne. telnet server2ipaddress 2194 sur server2 fonctionne également.
siliconpi
1
vous le faites: iptables -L -n sur les deux serveurs, et dites-moi si vous obtenez plus que les éléments suivants (je ne veux pas voir vos règles, etc. ;-)) Chain INPUT (policy ACCEPT) target prot opt ​​source destination chain FORWARD ( politique ACCEPTER) destination cible de la source opt. protégée Chaîne SORTIE (politique ACCEPTER) destination cible de la source opt
protégée
salut! Voir l'édition s'il vous plaît ...
siliconpi

Réponses:

21

Pour autoriser les connexions sortantes de server1 à server2 sur le port TCP 2194, utilisez ceci sur server1:

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

Pour autoriser les connexions entrantes de server1 à server2 sur le port TCP 2194, utilisez ceci sur server2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
la source
Merde - j'ai fait le premier, n'a pas fonctionné. J'ai fait le second, cela n'a pas fonctionné non plus ... J'ai peut-être des paramètres très restrictifs en place ... voir le montage plus tôt
siliconpi
1
Essayez d'utiliser "-I" au lieu de "-A"; cela place les nouvelles règles au-dessus de toutes les autres qui sont peut-être déjà en place.
Massimo
Dois-je faire quelque chose de différent si l'application utilise réellement le nom de domaine plutôt que l'adresse IP directement?
siliconpi
Woah ... suis capable de telnet à partir de l'invite juste en faisant la première déclaration ...
siliconpi
3
Son moins-I comme dans "i" pour les gens qui pourraient lire cela comme un L
siliconpi
6

Quelques conseils

Le service que vous exécutez écoute-t-il uniquement sur localhost? Courir

netstat -ltn

Si vous voyez une ligne comme celle- 0.0.0.0:2194là, ça va. Si vous voyez 127.0.0.1:2194alors vous écoutez uniquement sur les connexions locales (ou :::2194et ::1:2194respectivement pour les adresses IPv6, affichées sous forme de tcp6lignes).

Quelles sont les règles actuelles d'iptables?

iptables -L

La politique est-elle DROP / REJECT (si ce n'est pas le cas, pour toutes les chaînes)? Existe-t-il une règle spécifique pour le port dont vous avez besoin?

S'il s'agit d'un problème de pare-feu, vous pouvez soit modifier la règle incriminée, soit ajouter une règle comme

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

devrait faire l'affaire (non testé)

=== EDIT ===

Pour tester le problème de réseau, un bon outil est tcpdump. Exécutez-le sur les deux serveurs tout en essayant de vous connecter et voyez où vont les paquets. par exemple, sur le serveur 1, exécutez:

tcpdump -i eth0 -n host server2.com

et sur le serveur 2 exécutez:

tcpdump -i eth0 -n host server1.com

Essayez ensuite de vous connecter. Vous devriez voir tous les paquets TCP vidés à l'écran, depuis la source et la destination. Avec ces informations, vous devriez être en mesure de localiser le problème.

Dan Andreatta
la source
Salut Dan - Je ne pense pas que server2 ait du mal à accepter la connexion (je peux me connecter avec mon PC personnel), mais je pense que server1 n'autorise pas la connexion sortante ...
siliconpi
iptables -A OUTPUT -p tcp --dport 2194 -j ACCEPT
Geraint Jones
Salut c10k, cela n'a pas fonctionné ... Et tryign pour telnet n'a pas fonctionné non plus
siliconpi
Ajouté quelques autres idées
Dan Andreatta
Salut ici 2194 est mon numéro de port ou numéro de port IP cible?
Tommy