Wie erlaube ich ausgehende Verbindungen über iptables?

17

Ich habe zwei Server. Das Programm auf dem ersten muss mit dem zweiten auf Port 2194 kommunizieren.

Ich weiß, dass es nicht funktioniert, denn wenn ich es tue:

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
quelle
funktioniert es aber wenn du auf server1 localhost 2194 telnet machst? was ist mit telnet server1spublicip 2194 von server1?
Geraint Jones
Telnet Localhost 2194 auf Server2 funktioniert. telnet server2ipaddress 2194 auf server2 funktioniert auch.
Siliconpi
1
con Sie tun: iptables -L -n auf beiden Servern, und sagen Sie mir, wenn Sie mehr als die folgenden erhalten (ich möchte Ihre Regeln usw. nicht sehen ;-)) Chain INPUT (Politik akzeptieren) Zielprotokoll opt Quelle Ziel Chain FORWARD ( policy ACCEPT) ziel prot opt ​​quelle ziel Chain OUTPUT (policy ACCEPT) ziel prot opt ​​quelle ziel
Geraint Jones
Hallo! Siehe die Bearbeitung bitte ...
siliconpi

Antworten:

21

Verwenden Sie diese Option auf Server1, um ausgehende Verbindungen von Server1 zu Server2 über TCP-Port 2194 zuzulassen:

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

Verwenden Sie diese Option auf Server2, um eingehende Verbindungen von Server1 zu Server2 über TCP-Port 2194 zuzulassen:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
quelle
Mist - ich habe das erste gemacht, habe nicht funktioniert. Ich habe die zweite gemacht, die auch nicht funktioniert hat ... Ich habe möglicherweise sehr restriktive Einstellungen vorgenommen ... siehe die vorherige Bearbeitung
siliconpi
1
Versuchen Sie es mit "-I" anstelle von "-A"; Damit haben die neuen Regeln Vorrang vor allen anderen, die möglicherweise bereits vorhanden sind.
Massimo
Sollte ich etwas anderes tun, wenn die Anwendung tatsächlich den Domain-Namen anstelle der IP-Adresse direkt verwendet?
Siliconpi
Woah ... bin in der Lage, von der Eingabeaufforderung aus zu
telneten,
3
Sein Minus-I wie in "i" für Leute, die das als L lesen könnten
siliconpi
6

Nur ein paar Hinweise

Lauscht der Dienst, den Sie ausführen, nur auf localhost? Lauf

netstat -ltn

Wenn Sie eine Linie wie sehen 0.0.0.0:2194, sind Sie in Ordnung. Wenn Sie sehen , 127.0.0.1:2194dann nur auf lokale Verbindungen , die Sie hören (oder :::2194und ::1:2194jeweils für IPv6 - Adressen, wie gezeigt tcp6Linien).

Was sind die aktuellen Iptables-Regeln?

iptables -L

Handelt es sich bei der Richtlinie um DROP / REJECT (wenn dies nicht der Fall ist, sollte dies für alle Ketten gelten)? Gibt es eine spezielle Regel für den von Ihnen benötigten Port?

Wenn es sich um ein Firewall-Problem handelt, können Sie entweder die betreffende Regel ändern oder eine Regel hinzufügen, z

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

sollte den Trick machen (ungetestet)

=== EDIT ===

Zum Testen von Netzwerkproblemen ist ein gutes Tool tcpdump. Führen Sie es auf beiden Servern aus, während Sie versuchen, eine Verbindung herzustellen und zu sehen, wohin die Pakete gehen. zB auf Server 1 laufen:

tcpdump -i eth0 -n host server2.com

und auf Server 2 laufen:

tcpdump -i eth0 -n host server1.com

Versuchen Sie dann, eine Verbindung herzustellen. Auf dem Bildschirm sollten alle TCP-Pakete angezeigt werden, die von der Quelle und dem Ziel stammen. Mit diesen Informationen sollten Sie in der Lage sein, genau zu bestimmen, wo das Problem liegt.

Dan Andreatta
quelle
Hallo Dan, ich glaube nicht, dass Server2 Probleme beim Akzeptieren der Verbindung hat (ich kann über meinen Heim-PC eine Verbindung herstellen), aber ich denke, dass Server1 die ausgehende Verbindung nicht zulässt ...
siliconpi
iptables - A OUTPUT - P TCP
Geraint Jones
Hallo c10k, das hat nicht funktioniert ... Und versuchen zu telnet hat auch nicht funktioniert
siliconpi
Ein paar andere Ideen hinzugefügt
Dan Andreatta
Hallo hier 2194 ist meine Portnummer oder Ziel-IP-Portnummer?
Tommy