IPTables: permite conexiones salientes de MySQL pero no conexiones entrantes

10

Tengo un servidor que no permite conexiones a mysql desde fuentes externas: todas mis bases de datos y conexiones tienen lugar en localhost. La política predeterminada de iptables es eliminar conexiones para cualquier puerto que no especifique (actualmente no tengo el puerto 3306 especificado en mis reglas de iptable, por lo que todas las conexiones a este puerto se descartan).

Eso está bien, pero ahora me gustaría conectarme a una base de datos mysql ubicada externamente en Amazon RDS.

El puerto 3306 se puede abrir al mundo exterior de la siguiente manera:

iptables -t filter -A INPUT -p tcp --sport 3306 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT

Esto me permite conectarme a la base de datos en Amazon RDS, sin embargo, también permite conexiones remotas a bases de datos en mi servidor.

¿Qué debo hacer para permitir que mi servidor se conecte a la base de datos en Amazon, pero restringir las conexiones externas a las bases de datos en mi servidor?

También tenga en cuenta que la dirección IP de mi instancia de Amazon RDS puede cambiar periódicamente, creo.

MrCarrot
fuente
2
¿Obtener una IP estática de Amazon y luego configurar una lista blanca que permita solo esa IP para conexiones de entrada / salida?
Peter

Respuestas:

17

Aproveche el motor de estado:

iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

o en versiones posteriores de iptables

iptables -t filter -A OUTPUT -p tcp --dport 3306 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Esto es exactamente lo que el motor de estado debe hacer: permitir el tráfico que cumple varios criterios (p. Ej., Protocolo, puerto de origen) pero que también forma parte de una conexión existente (ya que define la conexión ). El resultado es que el TCP SYNpaquete saliente a una dirección IP externa particular en el puerto de destino 3306, desde un puerto efímero local, creará una entrada en la tabla de estado para esa combinación particular de direcciones IP y números de puerto, y solo devolverá el tráfico con la misma combinación de se permitirán direcciones y puertos a través de, y solo durante la duración de esa conexión.

MadHatter
fuente