Cómo permitir SMTP saliente en iptables Debian Linux

13

Si elijo permitir todo el tráfico en la cadena de SALIDA ( iptables -P OUTPUT ACCEPT), el correo se enviará bien. Tan pronto como cierro mi servidor con estas reglas, el correo saliente deja de funcionar. Sin embargo, todo lo demás funciona, lo cual es extraño.

¿Alguien ve algo aquí que impida el envío de mi correo saliente? Estoy perplejo, he visto estas reglas una y otra vez y he probado muchas versiones diferentes.

 iptables -F
 iptables -P INPUT DROP
 iptables -P FORWARD DROP
 iptables -P OUTPUT DROP


 iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT  -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A INPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

 iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT

 iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
 iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

 iptables -A OUTPUT  -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
 iptables -A INPUT  -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT

 iptables -A OUTPUT -p udp  --dport 53 -j ACCEPT
 iptables -A INPUT -p udp  --sport 53 -j ACCEPT

 iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
 iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT


 iptables -N LOGGING
 iptables -A INPUT -j LOGGING
 iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
 iptables -A LOGGING -j DROP
916 redes
fuente

Respuestas:

18

Tiene una regla para dejar salir el tráfico, pero no tiene una regla para dejar entrar el tráfico de retorno.

Supongo que quisiste decir que estas 2 reglas son -A INPUT:

iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 587 -j ACCEPT

Sin embargo, usar el puerto de origen como un método para permitir el tráfico de retorno es una mala forma de proteger el sistema. Todo lo que alguien tiene que hacer es usar uno de estos puertos de origen y su conjunto de reglas de firewall se vuelve inútil.

Una idea mucho mejor sería eliminar todas las -A INPUT ... --sportreglas y usar solo esta regla en su lugar:

iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

La forma en que funciona esta regla es que cuando su sistema realiza una conexión saliente, el núcleo registra la conexión en una tabla de seguimiento. Luego, cuando los paquetes del sistema remoto regresan, se ve si esos paquetes están asociados con alguna conexión en la tabla de seguimiento.
El ESTABLISHEDbit es el que permite el tráfico directamente relacionado con la sesión. Se trata de paquetes TCP que vuelven a la transmisión.
losRELATEDbit permite el tráfico que está relacionado con la conexión, pero que no forma parte de la conexión en sí. Esto puede ser cosas como paquetes ICMP, como "ICMP no puede fragmentarse". Estos paquetes no son parte del flujo TCP, pero son de vital importancia para mantener el flujo vivo (que también es otra cosa que su conjunto de reglas no cubre, y sin el cual verá problemas de conexión extraños y pérdidas).

Esta regla también funciona para el tráfico UDP, pero como UDP no tiene estado, no es lo mismo. En cambio, el núcleo tiene que hacer un seguimiento de los paquetes UDP que salen, y simplemente asume que cuando los paquetes UDP vuelven a la misma combinación de host / puerto, y es dentro de un corto período de tiempo, que están relacionados.

Patricio
fuente
Gracias por la respuesta. ¿Creo que no quiero permitir que el tráfico vuelva a entrar porque solo estoy haciendo una conexión SMTP saliente? Estaba pensando que si agregaba la regla a la cadena INPUT, entonces permitiría que SMTP volviera. Este es un servidor web que solo necesita conectarse a un host SMTP externo para enviar correo ... ¡gracias!
916 Redes
Si no deja que el tráfico de retorno vuelva a entrar, ¿cómo va a recibir su sistema todos los mensajes de "sí, tengo sus datos" que usan los protocolos TCP y SMTP?
Patrick
Eso tiene sentido. Acabo de agregar su regla y funcionó totalmente. Agradezco la respuesta! Traté de votar pero dice que no tengo suficiente reputación (nuevo en Unix StackExchange)
916 Networks
Agregué una explicación de cómo funciona esa regla.
Patrick