¿Cómo permito conexiones salientes a través de iptables?

17

Tengo dos servidores El programa en el primero necesita comunicarse con el segundo en el puerto 2194.

Sé que no funciona, porque cuando lo hago:

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
fuente
pero funciona cuando haces telnet localhost 2194 en server1? ¿Qué pasa con telnet server1spublicip 2194 del servidor1?
Geraint Jones
telnet localhost 2194 en server2 funciona. telnet server2ipaddress 2194 en server2 también funciona.
siliconpi
1
con lo que hace: iptables -L -n en ambos servidores, y dígame si obtiene más de lo siguiente (no quiero ver sus reglas, etc ;-)) Chain INPUT (política ACEPTAR) objetivo prot opt ​​origen destino Chain FORWARD ( política ACEPTAR) destino objetivo fuente opt destino Destino de la cadena SALIDA (política ACEPTAR) destino prot fuente origen destino
Geraint Jones
¡Hola! Vea la edición por favor ...
siliconpi

Respuestas:

21

Para permitir conexiones salientes del servidor1 al servidor2 en el puerto TCP 2194, use esto en el servidor1:

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

Para permitir conexiones entrantes del servidor1 al servidor2 en el puerto TCP 2194, use esto en el servidor2:

iptables -A INPUT -p tcp -s <server1ip> --dport 2194 -j ACCEPT
Massimo
fuente
Mierda - hice el primero, no funcionó. Hice el segundo, que tampoco funcionó ... Puede que tenga configuraciones muy restrictivas en su lugar ... vea la edición anterior
siliconpi
1
Intente usar "-I" en lugar de "-A"; Esto pone las nuevas reglas por encima de todas las demás que ya pueden estar en su lugar.
Massimo
¿Debería hacer algo diferente si la aplicación realmente usa el nombre de dominio, en lugar de la dirección IP directamente?
siliconpi
Woah ... al telnet desde el símbolo sólo por hacer la primera declaración ...
siliconpi
3
Su menos-I como en la "i" para la gente que pudiera leer eso como una L
siliconpi
6

Solo algunos consejos

¿El servicio que está ejecutando escucha solo en localhost? correr

netstat -ltn

Si ves una línea como 0.0.0.0:2194entonces estás bien. Si ves 127.0.0.1:2194a continuación, que está escuchando sólo en conexiones locales (o :::2194y ::1:2194, respectivamente, para las direcciones IPv6, que se muestran como tcp6líneas).

¿Cuáles son las reglas actuales de iptables?

iptables -L

¿La política es DROP / RECHAZO (si no es así, debería ser para todas las cadenas)? ¿Existe una regla específica para el puerto que necesita?

Si se trata de un problema de firewall, entonces se modifica la regla infractora o se agrega una regla como

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

debería hacer el truco (no probado)

=== EDITAR ===

Para probar el problema de red, una buena herramienta es tcpdump. Ejecútelo en ambos servidores mientras intenta conectarse y vea a dónde van los paquetes. Por ejemplo, en el servidor 1, ejecute:

tcpdump -i eth0 -n host server2.com

y en el servidor 2 ejecute:

tcpdump -i eth0 -n host server1.com

Luego intenta conectarte. Debería ver todos los paquetes TCP volcados en la pantalla, desde el origen y el destino. Con esta información, debería poder determinar dónde está el problema.

Dan Andreatta
fuente
Hola Dan - No creo servidor2 tiene ningún problema en aceptar la conexión (soy capaz de conectarse a él usando mi PC en casa), pero creo que duerma server1 permite la conexión de salida ...
siliconpi
iptables -A OUTPUT -p tcp --dport 2194 -j ACCEPT
Geraint Jones
Hola c10k, eso no funcionó ... Y el intento de telnet tampoco
funcionó
Se agregaron algunas otras ideas
Dan Andreatta el
Hola, 2194 es mi número de puerto o número de puerto IP de destino?
Tommy