Jak zezwolić na połączenia wychodzące za pośrednictwem iptables?

17

Mam dwa serwery. Program na pierwszym musi komunikować się z drugim na porcie 2194.

Wiem, że to nie działa, ponieważ kiedy to robię:

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
źródło
ale działa, gdy wykonujesz telnet localhost 2194 na serwerze server1? co z telnet server1spublicip 2194 z server1?
Geraint Jones
telnet localhost 2194 na serwerze server2 działa. telnet server2ipaddress 2194 na serwerze server2 również działa.
siliconpi
1
con you do: iptables -L -n na obu serwerach, i powiedz mi, czy dostaniesz więcej niż następujące (nie chcę widzieć twoich reguł itp .;-)) Chain INPUT (AKCEPTACJA zasad) target prot opt ​​źródło docelowe łańcuch FORWARD ( strategia ACCEPT) docelowy obiekt docelowy opt prot Łańcuch WYJŚCIE (polityka AKCEPTUJ) docelowy obiekt docelowy opt prot
Geraint Jones
Cześć! Zobacz edycję, proszę ...
siliconpi

Odpowiedzi:

21

Aby zezwolić na połączenia wychodzące z serwera 1 do serwera 2 na porcie TCP 2194, użyj tego na serwerze 1:

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

Aby zezwolić na połączenia przychodzące z serwera serwer1 do serwer2 na porcie TCP 2194, użyj tego na serwerze serwer2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
źródło
Cholera - zrobiłem pierwszy, nie zadziałał. Zrobiłem drugi, który też nie działał ... Mogę mieć bardzo restrykcyjne ustawienia ... zobacz edycję wcześniej
siliconpi
1
Spróbuj użyć „-I” zamiast „-A”; stawia to nowe zasady nad wszystkimi innymi, które mogą już obowiązywać.
Massimo,
Czy powinienem robić coś innego, jeśli aplikacja faktycznie używa nazwy domeny, a nie adresu IP bezpośrednio?
siliconpi,
Woah ... jestem w stanie telnet z wiersza po prostu wykonując pierwsze zdanie ...
siliconpi
3
Jego minus-I jak w „i” dla osób, które mogą to odczytać jako L
krzemu
6

Tylko kilka wskazówek

Czy usługa, z której korzystasz, nasłuchuje tylko na hoście lokalnym? Biegać

netstat -ltn

Jeśli widzisz taką linię, 0.0.0.0:2194wszystko jest w porządku. Jeśli widzisz 127.0.0.1:2194wtedy słuchasz tylko połączeń lokalnych (albo :::2194i ::1:2194odpowiednio dla adresów IPv6, przedstawionych jako tcp6linie).

Jakie są obecne zasady iptables?

iptables -L

Czy polityka DROP / REJECT (jeśli tak nie jest, powinna dotyczyć wszystkich łańcuchów)? Czy istnieje konkretna reguła dla potrzebnego portu?

Jeśli jest to problem z zaporą, to albo modyfikuje regułę naruszającą, albo dodaje regułę podobną

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

powinien zrobić lewę (niesprawdzone)

=== EDYCJA ===

Dobrym narzędziem do testowania sieci jest tcpdump. Uruchom go na obu serwerach podczas próby połączenia i zobacz, dokąd idą pakiety. np. na serwerze 1 uruchom:

tcpdump -i eth0 -n host server2.com

i na serwerze 2 uruchom:

tcpdump -i eth0 -n host server1.com

Następnie spróbuj się połączyć. Powinieneś zobaczyć wszystkie pakiety TCP zrzucone na ekranie, od źródła i miejsca docelowego. Dzięki tym informacjom powinieneś być w stanie wskazać, gdzie jest problem.

Dan Andreatta
źródło
Cześć Dan - Nie sądzę, że server2 ma problem z zaakceptowaniem połączenia (jestem w stanie połączyć się z nim za pomocą mojego domowego komputera), ale myślę, że server1 nie zezwala na połączenie wychodzące ...
siliconpi,
iptables -A WYJŚCIE -p tcp - port 2194 -j AKCEPTUJĘ
Geraint Jones
Cześć, c10k, to nie działało ... I próba telnet też nie działała
siliconpi,
Dodano kilka innych pomysłów
Dan Andreatta
Witaj tutaj 2194 jest mój numer portu lub docelowy numer portu IP?
Tommy