IPTables: autoriser les connexions MySQL sortantes mais pas les connexions entrantes

10

J'ai un serveur qui n'autorise pas les connexions à mysql à partir de sources externes - toutes mes bases de données et connexions ont lieu sur localhost. La politique par défaut d'iptables est de supprimer les connexions pour tous les ports que je ne spécifie pas (actuellement, je n'ai pas le port 3306 spécifié dans mes règles iptable, donc toutes les connexions à ce port sont abandonnées).

C'est bien, mais maintenant je voudrais me connecter à une base de données mysql située en externe sur Amazon RDS.

Le port 3306 peut être ouvert au monde extérieur comme suit:

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

Cela me permet de me connecter à la base de données sur Amazon RDS, mais cela permet également des connexions à distance aux bases de données sur mon serveur.

Que dois-je faire pour permettre à mon serveur de se connecter à la base de données sur Amazon, mais restreindre les connexions externes aux bases de données sur mon serveur?

Gardez également à l'esprit que l'adresse IP de mon instance Amazon RDS peut changer périodiquement, je crois.

MrCarrot
la source
2
Obtenir une adresse IP statique d'Amazon, puis configurer une liste blanche autorisant uniquement cette adresse IP pour les connexions entrantes / de sortie?
Peter

Réponses:

17

Profitez du moteur d'état:

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

ou dans des versions ultérieures d'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

C'est exactement ce que le moteur d'état existe: autoriser le trafic qui répond à divers critères (par exemple, protocole, port source) mais fait également partie d'une connexion existante (car il définit la connexion ). Le résultat est que le TCP SYNpaquet sortant vers une adresse IP externe particulière sur le port de destination 3306, à partir d'un port éphémère local, créera une entrée de table d'état pour cette combinaison particulière d'adresses IP et de numéros de port, et ne renverra du trafic qu'avec la même combinaison de les adresses et les ports seront autorisés via et uniquement pour la durée de cette connexion.

Chapelier Fou
la source