Der Zugriff von anderen IP Adressen als der Localhost (127.0.0.1) ist in der Standardkonfiguration von MySQL untersagt. So wir der externe MySQL Datenbank Zugriff erlaubt:
Externen MySQL Zugriff in der my.cnf aktivieren:
Der MySQL Server lauscht standardmäßig nur auf der localhost IP Adresse (127.0.0.1). Folgender Eintrag in der my.cnf ist dafür verantwortlich (/etc/my.cnf oder /etc/mysql/my.cnf):
[bash]bind-address = 127.0.0.1[/bash]Um nun auch von anderen Rechnern auf den MySQL Server zugreifen zu können, wird der „bind-address“ Eintrag geändert. 0.0.0.0 weist an, dass der MySQL Server auf alle, für ihn verfügbaren, IP Adressen lauscht:
[bash]bind-address = 0.0.0.0[/bash]
Mit „bind-address = 192.168.200.1“ kann der Server zB. auch konfiguriert werden, dass er nur über eine bestimmte IP Adresse verfügbar ist.
MySQL Server neu starten, damit die Konfiguration übernommen wird:
[bash]/etc/init.d/mysql restart[/bash]Verbindung überprüfen (mit einem telnet auf die IP Adresse/Hostname des Server und den MySQL Port 3306 kann überprüft werden ob der MySQL Server korrekt antwortet):
[bash]telnet 192.168.200.1 3306[/bash]User für den externen Zugriff auf die MySQL Datenbank erlauben
Der MySQL Server lässt nun grundsätzlich Verbindungen von anderen (externen) IP Adressen zu, aber die Datenbank User müssen noch die entsprechende Berechtigung erhalten.
Auf die MySQL Konsole verbinden:
[bash]mysql -u root -p[/bash]folgende Befehle geben dem User (dein_user) die Berechtigung von jedem Host aus (%) auf die Datenbank zuzugreifen:
[bash]use mysql;update user set host=’%‘ where user=’dein_user‘;
update db set host=’%‘ where user=’dein_user‘;[/bash]
Neuen MySQL Benutzer anlegen, damit externer Zugriff besteht (hier wird ebenfalls das „%“ statt „localhost“ verwendet:
[bash]create user ‚dein_user’@’%‘;[/bash] [sam id=“2″ codes=“true“]MySQL Zugriff für bestimmte IP Adressen erlauben (MySQL IP Restriction) via iptables
Den MySQL Zugriff kann man auch für bestimmte IP Adressen erlauben oder sperren. Hierzu behelfen wir uns anhand der Linux Firewall iptables. Unter Debian und den meisten Linux Distributionen ist iptables bereits vorinstalliert.
In folgender Regel wird definiert, dass auch der localhost weiterhin auf den MySQL Dienst zugreifen darf:
[bash]iptables -A INPUT -i lo -p tcp –dport 3306 -j ACCEPT[/bash]Mit folgenden Regeln wird der Zugriff (Port 3306) für die IP Adressen 10.27.0.80 und 192.168.0.90 erlaubt und für alle anderen gesperrt:
[bash]iptables -A INPUT -p tcp –dport 3306 -s 10.27.0.80 -j ACCEPTiptables -A INPUT -p tcp –dport 3306 -s 192.168.0.90 -j ACCEPT
iptables -A INPUT -p tcp –dport 3306 -j REJECT –reject-with icmp-port-unreachable[/bash]
Wer sich nun fragt warum beim Sperrbefehl der Einsatz von REJECT angewandt wird und nicht von DROP: Das hat den Grund, dass mit dem REJECT die Verbindung schneller abgelehnt wird. Bei DROP wird die Verbindung abgelehnt und der Client muss auf einen Timeout warten.
Die iptables Regeln müssen nun noch dauerhaft gespeichert werden, das sie sonst nach einem Reboot wieder vom System entfernt werden. Anleitung zu: Iptables dauerhaft speichern
Am einfachsten funktioniert das über das Programm „iptables-persistent“
[bash]apt-get install iptables-persistent[/bash]Bei der Installation wird gefragt ob die Regel gleich in die Konfigurationsdateien übernommen werden sollen. Das kann gleich gemacht werden. Ansonsten befinden sich die Configfiles unter /etc/iptables.
Vieleicht sollte man noch erwähnen, dass die Öffnung natürlich auch ein weiteres Angriffsziel bietet. Starke Passwörter sind Pflicht.
Besser ist natürlich ein SSH Tunnel mit Keys abgesichert. 😉
Hallo Erik,
da muss ich dir völlig recht geben! Werde den Hinweis noch einblenden.
Danke
Gruß
Patrick
müsste es nicht
Mit „bind-address = 192.168.200.1“ kann der Server zB. auch konfiguriert werden, dass er nur (über)-> (für) eine bestimmte IP Adresse verfügbar ist.
heissen.
Gruss aus Baden
danke für dein tipp. hat einwandfrei funktioniert. 5/5 sterne.
Hallo,
was mu hier eingetragen werden:
bind-address = ::ffff:127.0.0.1
0.0.0.0 ist mir schon klar.. aber ::/00.0.0.0 nimmt er mir nicht.
Damit auch der ipv6 das eintragen kann.
Lg