IPTables: Erlaubt ausgehende MySQL-Verbindungen, aber keine eingehenden Verbindungen

10

Ich habe einen Server, der keine Verbindungen zu MySQL von externen Quellen zulässt - alle meine Datenbanken und Verbindungen finden auf localhost statt. Die Standardrichtlinie von iptables besteht darin, Verbindungen für alle Ports zu trennen, die ich nicht angegeben habe (derzeit ist in meinen iptable-Regeln kein Port 3306 angegeben, sodass alle Verbindungen zu diesem Port getrennt werden).

Das ist in Ordnung, aber jetzt möchte ich eine Verbindung zu einer MySQL-Datenbank herstellen, die sich extern auf Amazon RDS befindet.

Port 3306 kann wie folgt nach außen geöffnet werden:

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

Auf diese Weise kann ich über Amazon RDS eine Verbindung zur Datenbank herstellen, es können jedoch auch Remoteverbindungen zu Datenbanken auf meinem Server hergestellt werden.

Was muss ich tun, damit mein Server eine Verbindung zur Datenbank bei Amazon herstellen kann, aber externe Verbindungen zu den Datenbanken auf meinem Server einschränken kann?

Denken Sie auch daran, dass sich die IP-Adresse meiner Amazon RDS-Instanz meines Erachtens regelmäßig ändern kann.

MrCarrot
quelle
2
Erhalten Sie eine statische IP von Amazon und richten Sie dann eine Whitelist ein, die nur diese IP für eingehende / Ausgabe-Verbindungen zulässt?
Peter

Antworten:

17

Nutzen Sie die State Engine:

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

oder in späteren Versionen von 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

Dies ist genau das, wofür die Status-Engine vorhanden ist: Datenverkehr zulassen, der verschiedene Kriterien erfüllt (z. B. Protokoll, Quellport), aber auch Teil einer vorhandenen Verbindung ist (wie sie die Verbindung definiert ). Das Ergebnis ist, dass das ausgehende TCP SYNPaket von einem lokalen Ephmeral-Port an eine bestimmte externe IP-Adresse am Zielport 3306 einen Statustabelleneintrag für diese bestimmte Kombination von IP-Adressen und Portnummern erstellt und nur Datenverkehr mit derselben Kombination von zurückgibt Adressen und Ports werden nur für die Dauer dieser Verbindung zugelassen.

MadHatter
quelle