PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql hinter firewall



engel
14.10.04, 14:30
Guten Tag zusammen,

ich möchte von einer website (extern) auf einen mysql-server (intern) zugreifen.

iptables -A INPUT -j ACCEPT -p tcp --dport 3306
iptables -A FORWARD -j ACCEPT -p tcp --dport 3306
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to <mysql-server>:3306

sollte doch eigentlich reichen, oder ???

tut es aber nicht.
die site lädt ca. eine minute und meldet dann, es konnte nicht zur db verbunden werden :-(

Vorschläge ????

marce
14.10.04, 14:35
... die MySQL nimmt externe Verbindungen an? (ohne, dass ich die iptables jetzt mal angeschaut habe...)

Svenny
14.10.04, 14:37
wie schauts mit skip_networking aus?

engel
14.10.04, 14:43
skip_networking aus?

????? :confused:

Tomek
14.10.04, 14:47
Ist in der /etc/my.cnf MySQL-Konfigurationsdatei die Zeile mit skip-networking aktiv oder als Kommentar eingegeben?

engel
14.10.04, 14:58
Ist in der /etc/my.cnf MySQL-Konfigurationsdatei die Zeile mit skip-networking aktiv oder als Kommentar eingegeben?
ist aus :-)

Tomek
14.10.04, 15:21
Ist IP-Forwarding aktiviert?

cat /proc/sys/net/ipv4/ip_forward

Was ist die default-Policy vom OUTPUT bei iptables? Vielleicht kannst du mal die Ausgabe vom folgenden Befehl hier pasten:

iptables -L

Tomek
14.10.04, 15:23
Achja: Hat der MySQL-User, der sich zur Datenbank verbinden will, die entsprechenden Permissions in der MySQL-Datenbank von extern zuzugreifen?

engel
14.10.04, 15:26
das forwarding funzt ja auch für fernwartung !!!!

regelt den mysql alles über 3306 ab ????

von internen rechnern kann ich auch mit dem gleichen script auf die db.
user/passwd ist also OK :-)

Tomek
14.10.04, 15:48
regelt den mysql alles über 3306 ab ????
Ja, wobei die Client Ports hinzukommen (1024 und höher).


von internen rechnern kann ich auch mit dem gleichen script auf die db.
user/passwd ist also OK :-)
Das ist bedingt richtig. Denn: MySQL überprüft nicht nur User und Passwort, sondern auch die IP-Adresse bzw. den Hostnamen vom Client.

Deshalb wiederhole ich nochmal die Frage: Hat der User in der MySQL-Datenbank die Privilegien von außen (also nicht nur localhost) auf die Datenbank zuzugreifen?

engel
15.10.04, 11:05
klar, ich kann auf allen möglichen internen rechnern phpmyadmin aufspielen und auf die "entfernte" db zugreifen.

Benutzer Host Kennwort Globale Rechte Grant
root % Ja ALL PRIVILEGES Ja

sollte ja reichen ;-)

ich vermute ja, dass es an den filterregeln liegt:

iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -t nat -F OUTPUT
iptables -F


iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

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

iptables -A INPUT -j ACCEPT -p tcp --dport 3306
iptables -A FORWARD -j ACCEPT -p tcp --dport 3306
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to <mysql-server-ip>:3306

Tomek
15.10.04, 11:11
Füge mal folgende iptables-Regel hinzu:

iptables -A FORWARD -p tcp --sport 3306 -j ACCEPT

engel
15.10.04, 11:32
isses leider auch nicht :-(

engel
15.10.04, 12:11
jetzt wird lustich :-)

ich habe mal das forwarding zu einem anderen mysql-server versucht und es geht.

der steht allerdings hinter eine gw in einem anderen internen netz.

da frag ich mich doch, warum kann ich von <netz>.1 nicht zu <netz>.2 aber von <netz>.1 zu <anderesnetz>.123 ???

masq ??? nat ???

also ich hab keine ahnung !!!

engel
15.10.04, 13:41
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 3306 -j SNAT --to-source <eigene-ip>

is die lösung !!!!

Tomek
15.10.04, 13:57
:rolleyes:

Hätte ich auch drauf kommen können. Nuja, jetzt hast du es ja. :)