MySQL, transparente Proxies und iptables
Ich habe tatsaechlich eine Stunde gebraucht um rauszufinden, wieso ich keinen transparenten Proxy einrichten kann, der mir den MySQL Server nach aussen hin freigibt. Also… Ich bastel gerade etwas, das ich gerne via SFTP auf einen Server packen moechte. Das klappt soweit. Nun wollte ich aber auch von extern aus auf die MySQL Datenbanken zugreifen. Leider ist die hierarchisch uebergeordnete Firewall dagegen. Da ich darauf keinen Zugriff habe, muss ich in die Trickkiste greifen, denn ich moechte den Port nicht verlegen. Der MySQL Server kann leider nicht auf mehreren Ports gleichzeitig horchen, also habe ich mich dazu entschlossen via iptables alles, was auf Port 27 eingeht, auf Port 3306 (MySQL) zu leiten. Aber aus einem mir bis dahin unerklaerlichen Grund, wollte das nicht funktionieren. Ich habe jeden Port um 3306 ausprobiert (via netcat -l -p <PORT>) und mit meiner iptables-Regel kam ich jedesmal drauf. MySQL weigerte sich aber, wenn ich iptables die Pakete auf 3306 leiten liess. Ich ging also die my.cnf durch und fand zunaechst nichts, das darauf hinwies, dass externe Clients sich nicht verbinden duerfen. Erst nach ewigem Herumprobieren stiess ich auf folgende Zeile in der my.cnf:
bind-address = 127.0.0.1
Da 127.0.0.1 dem Loopback Device gehoert, war mir klar, dass das nicht gehen kann, denn der Internetverkehr geht ueber ein Ethernet Device. Also habe ich die IP-Adresse ersetzt und siehe da – folgende Regel bewirkt Wunder:
iptables -t nat -A PREROUTING -p tcp --dport 27 -j REDIRECT --to-ports 3306
Nun kann ich endlich von aussen auf meinen MySQL Server zugreifen. Was fuer eine schwere Geburt.






