Come posso consentire le connessioni in uscita tramite iptables?


17

Ho due server. Il programma sul primo deve comunicare con il secondo sulla porta 2194.

So che non funziona, perché quando lo faccio:

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

ma funziona quando si esegue telnet localhost 2194 su server1? che dire di telnet server1spublicip 2194 da server1?
Geraint Jones,

telnet localhost 2194 su server2 funziona. telnet server2ipaddress 2194 su server2 funziona anche.
siliconpi,

1
con you do: iptables -L -n su entrambi i server, e dimmi se ottieni più di quanto segue (non voglio vedere le tue regole ecc ;-)) Chain INPUT (policy ACCEPT) target prot opt ​​opt ​​source destination Chain FORWARD ( policy ACCETTA) destinazione di destinazione prot opt ​​opt ​​catena OUTPUT (politica ACCETTA) destinazione di destinazione opt opt ​​prot
Geraint Jones

Ciao! Vedi la modifica per favore ...
siliconpi

Risposte:


21

Per consentire connessioni in uscita da server1 a server2 sulla porta TCP 2194, utilizzare questo su server1:

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

Per consentire connessioni in entrata da server1 a server2 sulla porta TCP 2194, utilizzare questo su server2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT

Merda - ho fatto il primo, non ha funzionato. Ho fatto il secondo, che non ha funzionato neanche ... Potrei avere impostazioni molto restrittive sul posto ... vedi la modifica precedente
siliconpi

1
Prova a usare "-I" invece di "-A"; questo pone le nuove regole sopra tutte le altre che potrebbero essere già in atto.
Massimo,

Dovrei fare qualcosa di diverso se l'applicazione utilizza effettivamente il nome di dominio, anziché l'indirizzo IP direttamente?
siliconpi,

Woah ... sono in grado di telnet dal prompt semplicemente facendo la prima dichiarazione ...
siliconpi,

3
Il suo meno-I come in "i" per le persone che potrebbero leggerlo come L
siliconpi,

6

Solo alcuni suggerimenti

Il servizio in esecuzione è in ascolto solo su localhost? Correre

netstat -ltn

Se vedi una linea come 0.0.0.0:2194allora stai bene. Se vedi, 127.0.0.1:2194stai ascoltando solo sulle connessioni locali (o :::2194e ::1:2194rispettivamente per gli indirizzi IPv6, mostrati come tcp6linee).

Quali sono le regole correnti di iptables?

iptables -L

La politica è DROP / REJECT (se non lo è, dovrebbe essere per tutte le catene)? Esiste una regola specifica per la porta di cui hai bisogno?

Se si tratta di un problema con il firewall, modificare la regola offensiva o aggiungere una regola come

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

dovrebbe fare il trucco (non testato)

=== MODIFICA ===

Per testare il problema di rete è un buon strumento tcpdump. Eseguilo su entrambi i server mentre provi a connetterti e vedi dove stanno andando i pacchetti. ad es. su server 1 in esecuzione:

tcpdump -i eth0 -n host server2.com

e sul server 2 eseguire:

tcpdump -i eth0 -n host server1.com

Quindi prova a connetterti. Dovresti vedere tutti i pacchetti TCP scaricati sullo schermo, dalla fonte e dalla destinazione. Con queste informazioni dovresti essere in grado di individuare dove si trova il problema.


Ciao Dan - Non credo che server2 abbia problemi ad accettare la connessione (sono in grado di connettermi usando il mio pc di casa), ma penso che server1 non consenta la connessione in uscita ...
siliconpi

iptables -A OUTPUT -p tcp --dport 2194 -j ACCEPT
Geraint Jones

Ciao c10k, che non ha funzionato ... E neanche provare a telnet
siliconpi,

Aggiunte alcune altre idee
Dan Andreatta,

Ciao qui 2194 è il mio numero di porta o numero di porta IP di destinazione?
Tommy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.