Mir ist aufgefallen, dass meine Website mit merkwürdigen Anfragen versucht, phpmyadmin zu finden
/phpmyadmin/
/pma/
usw.
Jetzt habe ich PMA über apt auf Ubuntu installiert und möchte über eine andere Webadresse als/phpmyadmin/darauf zugreifen. Was kann ich tun, um es zu ändern?
Vielen Dank
Update
Für Ubuntu 9.10 und Apache2 befindet sich die entsprechende Einstellung in der Datei /etc/Apache2/conf.d/phpmyadmin.conf
, die eine Verknüpfung zu /etc/phpmyadmin/Apache.conf
ist. Die Datei enthält
Alias /phpmyadmin /usr/share/phpmyadmin
wobei der erste /phpmyadmin
in etwas anderes geändert werden soll, wenn die unnötige Aktivität vermieden werden soll, z.
Alias /secret /usr/share/phpmyadmin
Die größte Bedrohung besteht darin, dass ein Angreifer eine Schwachstelle wie z. Durchsuchen des Verzeichnisses oder Verwenden von SQL Injection zum Aufrufen von load_file()
zum Lesen des Klartext-Benutzernamens/Kennworts in der Konfigurationsdatei und Anmelden mit phpmyadmin oder über TCP-Port 3306. Als Pentester habe ich dieses Angriffsmuster verwendet, um ein System zu gefährden.
Hier können Sie phpmyadmin abschließen:
grant
oder file_priv
enthält. file_priv
-Berechtigungen von jedem Konto. file_priv
ist eine der gefährlichsten Berechtigungen in MySQL, da ein Angreifer Dateien lesen oder ein Backdoor hochladen kann. Order deny,allow Deny from all allow from 199.166.210.1
Sie haben keinen vorhersagbaren Dateispeicherort wie: http://127.0.0.1/phpmyadmin
. Scanner für Sicherheitslücken wie Nessus/Nikto/Acunetix/w3af werden dies prüfen.
Firewall deaktiviert TCP-Port 3306, sodass ein Angreifer nicht darauf zugreifen kann.
Mein Anliegen bei phpMyAdmin war, dass standardmäßig alle MySQL-Benutzer auf die Datenbank zugreifen können. Wenn das Root-Passwort der DB gefährdet ist, kann jemand die Datenbank beschädigen. Ich wollte einen Weg finden, um das zu vermeiden, indem ich einschränke, welcher MySQL-Benutzer sich bei phpMyAdmin anmelden kann.
Die Verwendung der AllowDeny-Konfiguration in PhpMyAdmin hat sich als sehr nützlich herausgestellt. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29
Mit AllowDeny können Sie den Zugriff auf phpMyAdmin auf ähnliche Weise wie Apache konfigurieren. Wenn Sie die 'Reihenfolge' auf explizit setzen, wird nur Benutzern Zugriff gewährt, die im Abschnitt 'Regeln' definiert sind. In dem Abschnitt Regeln beschränken Sie MySql-Benutzer, auf die mit phpMyAdmin zugegriffen werden kann.
$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')
Jetzt haben Sie eingeschränkten Zugriff auf den Benutzer mit dem Namen "pma-user" in MySQL. Sie können diesem Benutzer eingeschränkte Berechtigungen erteilen.
grant select on db_name.some_table to 'pma-user'@'app-server'
In neueren Versionen von phpMyAdmin können Zugriffsberechtigungen für Benutzernamen + IP-Adressen in der Datei config.inc.php von phpMyAdmin eingerichtet werden. Dies ist eine viel bessere und robustere Methode, den Zugriff zu beschränken (über hart codierende URLs und IP-Adressen in die httpd.conf von Apache).
Im Folgenden finden Sie ein vollständiges Beispiel, wie Sie alle Benutzer auf White-List setzen können (niemand außerhalb dieser Liste wird Zugriff erhalten) und auch, wie Sie den Benutzer root auf das lokale System und das Netzwerk beschränken.
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
'deny % from all', // deny everyone by default, then -
'allow % from 127.0.0.1', // allow all local users
'allow % from ::1',
//'allow % from SERVER_ADDRESS', // allow all from server IP
// allow user:root access from these locations (local network)
'allow root from localhost',
'allow root from 127.0.0.1',
'allow root from 10.0.0.0/8',
'allow root from 172.16.0.0/12',
'allow root from 192.168.0.0/16',
'allow root from ::1',
// add more usernames and their IP (or IP ranges) here -
);
Quelle: phpMyAdmin auf localhost für Windows installieren und sichern
Auf diese Weise erhalten Sie weitaus detailliertere Zugriffsbeschränkungen, als Apache-URL-Berechtigungen oder eine .htaccess-Datei auf MySQL-Benutzernamenebene bieten können.
Stellen Sie sicher, dass der Benutzer, bei dem Sie sich anmelden, sein MySQL-Feld Host:
auf 127.0.0.1
oder ::1
gesetzt hat, da sich phpMyAdmin und MySQL auf demselben System befinden.
Eine andere Lösung besteht darin, die Konfigurationsdatei ohne Einstellungen zu verwenden. Beim ersten Mal müssen Sie möglicherweise Ihr mysql-root-Login Kennwort angeben, damit es alle Komponenten installieren und anschließend entfernen kann.
$ cfg ['Servers'] [$ i] ['auth_type'] = 'Cookie';
$ cfg ['Servers'] [$ i] ['Host'] = 'localhost';
$ cfg ['Server'] [$ i] ['connect_type'] = 'tcp';
$ cfg ['Server'] [$ i] ['compress'] = false;
$ cfg ['Servers'] [$ i] ['extension'] = 'mysql';
Wenn Sie es ohne Apache/Lightpd-Aliasnamen belassen, wird Ihnen nur ein Anmeldebildschirm angezeigt.
Sie können sich mit root anmelden, es wird jedoch empfohlen, andere Benutzer anzulegen und root nur für den lokalen Zugriff zuzulassen. Denken Sie auch daran, Zeichenkennwörter zu verwenden, auch wenn sie kurz sind, jedoch mit einem Großbuchstaben und einer Sonderzeichenanzahl. zum Beispiel !34sy2rmbr!
aka "easy 2 remember"
-EDIT: Ein gutes Passwort ist heutzutage eigentlich so etwas wie Wörter, die/- keinen grammatikalischen Sinn machen, aber man kann sich erinnern, weil sie komisch sind . Oder nutzen Sie Keepass, um starke Random zu generieren und einfach darauf zuzugreifen
Wahrscheinlich wird irgendwo auf Ihrem Webserver eine Alias-Direktive wie diese sein.
Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"
In meinem wampserver/localhost-Setup befand es sich in c: /wamp/alias/phpmyadmin.conf.
Ändern Sie einfach die Alias-Direktive, und Sie sollten sich auf den Weg machen.
Wenn Sie einen Linux-Server betreiben:
Dieses System ist für Homeserver recht sicher/praktisch - normalerweise werden alle Ports standardmäßig gesperrt. Sie müssen nur den SSH-Port weiterleiten (verwenden Sie nicht die Nummer 22).
Wenn Sie Microsoft Terminal Server mögen, können Sie sogar ein SSH-Tunneling für Ihren Computer einrichten und eine sichere Verbindung zu Ihrem Webserver herstellen.
Mit ssh-Tunneling können Sie sogar den 3306-Port Ihres Remote-Servers an einen lokalen Port weiterleiten und die Verbindung über lokales phpMyAdmin oder MySQL Workbench herstellen.
Ich verstehe, dass diese Option ein Overkill ist, aber genauso sicher ist wie der Zugriff auf Ihren privaten Schlüssel.
Der beste Weg, um phpMyAdmin zu sichern, ist die Kombination all dieser 4:
1. Change phpMyAdmin URL
2. Restrict access to localhost only.
3. Connect through SSH and tunnel connection to a local port on your computer
4. Setup SSL to already encrypted SSH connection. (x2 security)
Und so machen Sie das alles mit: buntu 16.4 + Apache 2 Windows-Computer einrichten + PuTTY, um die SSH-Verbindung mit einem lokalen Port zu verbinden und zu tunneln:
# Secure Web Serving of phpMyAdmin (change URL of phpMyAdmin):
Sudo nano /etc/Apache2/conf-available/phpmyadmin.conf
/etc/phpmyadmin/Apache.conf
Change: phpmyadmin URL by this line:
Alias /newphpmyadminname /usr/share/phpmyadmin
Add: AllowOverride All
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride Limit
...
Sudo systemctl restart Apache2
Sudo nano /usr/share/phpmyadmin/.htaccess
deny from all
allow from 127.0.0.1
alias phpmyadmin="Sudo nano /usr/share/phpmyadmin/.htaccess"
alias myip="echo ${SSH_CONNECTION%% *}"
# Secure Web Access to phpMyAdmin:
Make sure pma.yourdomain.com is added to Let's Encrypt SSL configuration:
https://www.digitalocean.com/community/tutorials/how-to-secure-Apache-with-let-s-encrypt-on-ubuntu-16-04
PuTTY => Source Port (local): <local_free_port> - Destination: 127.0.0.1:443 (OR localhost:443) - Local, Auto - Add
C:\Windows\System32\drivers\etc
Notepad - Run As Administrator - open: hosts
127.0.0.1 pma.yourdomain.com
https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/ (HTTPS OK, SSL VPN OK)
https://localhost:<local_free_port>/newphpmyadminname/ (HTTPS ERROR, SSL VPN OK)
# Check to make sure you are on SSH Tunnel
1. Windows - CMD:
ping pma.yourdomain.com
ping www.yourdomain.com
# See PuTTY ports:
netstat -ano |find /i "listening"
2. Test live:
https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/
Wenn Sie dies alles erfolgreich machen können,
you now have your own url path for phpmyadmin,
you denied all access to phpmyadmin except localhost,
you connected to your server with SSH,
you tunneled that connection to a port locally,
you connected to phpmyadmin as if you are on your server,
you have additional SSL conenction (HTTPS) to phpmyadmin in case something leaks or breaks.
Am einfachsten ist es, den Webserver zu bearbeiten, höchstwahrscheinlich eine Apache2-Installation und -Konfiguration, und phpmyadmin einen anderen Namen zu geben.
Ein zweiter Ansatz wäre, die IP-Adressen zu begrenzen, von denen aus auf phpmyadmin zugegriffen werden kann (z. B. nur lokales LAN oder lokaler Host).
Sie können den folgenden Befehl verwenden:
$ grep "phpmyadmin" $path_to_access.log | grep -Po "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | sort | uniq | xargs -I% Sudo iptables -A INPUT -s % -j DROP
Erklärung:
Vergewissern Sie sich, dass Ihre IP-Adresse nicht aufgeführt ist, bevor Sie durch iptables fallen.
Dies findet zuerst alle Zeilen in $ path_to_access.log, die phpmyadmin enthalten.
dann grep die IP-Adresse vom Zeilenanfang aus,
dann sortieren und einzigartig sie,
fügen Sie dann eine Regel hinzu, um sie in iptables abzulegen
Bearbeiten Sie einfach am Ende anstelle von iptables den Befehl echo %
, um sicherzustellen, dass sich Ihre IP nicht dort befindet. Verbieten Sie nicht versehentlich den Zugriff auf den Server!
Einschränkungen
Möglicherweise müssen Sie den grep-Teil des Befehls ändern, wenn Sie mit einem Mac oder einem anderen System ohne grep -P arbeiten. Ich bin mir nicht sicher, ob alle Systeme mit xargs beginnen, daher müssen diese möglicherweise ebenfalls installiert werden. Es ist sowieso super nützlich, wenn Sie viel Bash machen.