Как защитить phpMyAdmin


Я заметил, что на мой сайт поступают странные запросы, пытающиеся найти phpmyadmin, например

/phpmyadmin/
/pma/

И т.д.

Теперь я установил PMA на Ubuntu через apt и хотел бы получить к нему доступ через веб-адрес, отличный от /phpmyadmin/. Что я могу сделать, чтобы изменить это?

Спасибо


Обновление

Для Ubuntu 9.10 и Apache2 соответствующая настройка находится в файле /etc/apache2/conf.d/phpmyadmin.conf, который является ссылкой на /etc/phpmyadmin/apache.conf. Файл содержит

Alias /phpmyadmin /usr/share/phpmyadmin

Где первый /phpmyadmin следует изменить на что-то другое, если кто-то хочет избежать ненужной деятельности, например:

Alias /secret /usr/share/phpmyadmin
Author: rook, 2010-04-13

9 answers

Самая большая угроза заключается в том, что злоумышленник может использовать такую уязвимость, как обход каталога или использование SQL-инъекции для вызова load_file(), чтобы прочитать имя пользователя/пароль в обычном тексте в файле конфигурации, а затем войти в систему с помощью phpmyadmin или через tcp-порт 3306. Как пентестер, я использовал этот шаблон атаки, чтобы скомпрометировать систему.

Вот отличный способ заблокировать phpmyadmin:

  • НЕ РАЗРЕШАЙТЕ УДАЛЕННЫЕ КОРНЕВЫЕ УЧЕТНЫЕ ЗАПИСИ! Вместо phpmyadmin может быть настроен на использование "Аутентификация файлов cookie" для ограничения доступа пользователей к системе. Если вам нужны некоторые привилегии суперпользователя, создайте пользовательскую учетную запись, которая может добавлять/удалять/создавать, но не имеет grant или file_priv.
  • Удалите file_priv разрешения для каждой учетной записи. file_priv является одной из самых опасных привилегий в MySQL, поскольку она позволяет злоумышленнику читать файлы или загружать бэкдор.
  • IP-адрес из белого списка, имеющий доступ к интерфейсу phpmyadmin. Вот пример.htaccess повторный набор:
Order deny,allow
Deny from all
allow from 199.166.210.1
  • У вас нет предсказуемого расположения файла, такого как: http://127.0.0.1/phpmyadmin. Сканеры уязвимостей, такие как Nessus/Nikto/Acunetix/w3af, будут сканировать это.

  • Брандмауэр отключает tcp-порт 3306, чтобы злоумышленник не мог получить к нему доступ.

  • Используйте HTTPS, в противном случае данные и пароли могут быть переданы злоумышленнику. Если вы не хотите раскошеливаться на 30 долларов за сертификат, используйте самозаверяющий сертификат. Вы примете это один раз, и даже если это был изменен из-за MITM, о котором вы будете уведомлены.
 80
Author: rook, 2014-10-31 06:07:42

Одна из моих проблем с phpMyAdmin заключалась в том, что по умолчанию все пользователи MySQL могут получить доступ к бд. Если пароль root базы данных будет скомпрометирован, кто-то может нанести ущерб базе данных. Я хотел найти способ избежать этого, ограничив, какой пользователь MySQL может войти в phpMyAdmin.

Я обнаружил, что использование конфигурации allowdeny в phpMyAdmin очень полезно. http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules .29

Allowdeny позволяет настроить доступ к phpMyAdmin в похожий способ на Apache. Если вы установите для параметра "порядок" значение явный, он предоставит доступ только пользователям, определенным в разделе "правила". В разделе "Правила" вы ограничиваете пользователей MySQL, которые могут получить доступ, используя phpMyAdmin.

$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')

Теперь у вас есть ограниченный доступ к пользователю с именем pma-пользователь в MySQL, вы можете предоставить ограниченные привилегии этому пользователю.

grant select on db_name.some_table to 'pma-user'@'app-server'
 12
Author: Jae Cho, 2012-06-21 15:06:56

В более новых версиях phpMyAdmin разрешения на доступ для имен пользователей + ip-адреса могут быть настроены внутри phpMyAdmin. config.inc.php файл. Это гораздо лучший и более надежный метод ограничения доступа (по жестко запрограммированным URL-адресам и IP-адресам в httpd.conf Apache).

Вот полный пример того, как переключиться на белый список всех пользователей (никому, кроме этого списка, не будет разрешен доступ), а также как ограничить доступ пользователя root к локальной системе и сети только.

$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 -    
    );

Источник: Как установить и защитить phpMyAdmin на локальном хосте для Windows

Это дает вам гораздо более подробные ограничения доступа, чем могут предоставить разрешения URL-адреса Apache или файл .htaccess на уровне имени пользователя MySQL.

Убедитесь, что пользователь, с которым вы входите в систему, имеет поле MySQL Host:, равное 127.0.0.1 или ::1, так как phpMyAdmin и MySQL находятся в одной системе.

 5
Author: rightstuff, 2014-06-06 20:02:18

Скорее всего, где-то на вашем веб-сервере будет такая директива псевдонима;

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"

В моей настройке wampserver/localhost это было в c:/wamp/alias/phpmyadmin.conf .

Просто измените директиву псевдонима, и вы должны быть готовы к работе.

 4
Author: Mathew, 2010-04-13 16:39:41

Другое решение - использовать конфигурационный файл без каких-либо настроек. В первый раз вам, возможно, придется указать свой корневой логин/пароль mysql, чтобы он мог установить все свои вещи, но затем удалить их.

$cfg['Серверы'][$i]['auth_type']= 'файл cookie';

$cfg['Серверы'][$i]['хост'] = 'локальный хост';

$cfg['Серверы'][$i]['connect_type']= 'tcp';

$cfg['Серверы'][$i]['сжатие'] =ложь;

$cfg['Серверы'][$i]['расширение']= "mysql";

Оставив все как есть без каких-либо псевдонимов apache/lighhtpd, вы просто увидите экран входа в систему. enter image description here

Вы можете войти в систему с правами root, но рекомендуется создавать других пользователей и разрешать только root для локального доступа. Также не забывайте использовать строковые пароли, даже если они короткие, но с заглавной буквы и количеством специальных символов. например !34sy2rmbr! он же "легко запомнить 2"

-РЕДАКТИРОВАТЬ: Хороший пароль в настоящее время - это на самом деле что-то вроде слов, которые не делают грамматический смысл, но вы можете запомнить, потому что они смешные. Или используйте keepass для создания сильных случайных чисел и легкого доступа к ним

 4
Author: ppumkin, 2014-02-22 22:19:14

Если вы используете сервер Linux:

  • Используя SSH, вы можете запретить вход пользователя/пароля в систему и принимать только открытый ключ в файле authorized_keys
  • Используйте putty для подключения к вашему серверу и открытия удаленного терминала
  • Перенаправляет X11 и переносит локальный браузер firefox/iceweasel на ваш рабочий стол (в Windows необходимо установить программное обеспечение Xming)
  • Теперь вы защитили свой phpMyAdmin через ssh

Эта система достаточно безопасна/удобна для домашних серверов - обычно со всеми портами, заблокированными по умолчанию-. Вам нужно только перенаправить SSH-порт (не используйте номер 22).

Если вам нравится сервер терминалов Microsoft, вы даже можете установить SSH-туннелирование на свой компьютер и безопасно подключиться через него к своему веб-серверу.

С помощью ssh-туннелирования вы даже можете перенаправить порт 3306 вашего удаленного сервера на локальный порт и подключиться с помощью локального phpMyAdmin или MySQL Workbench.

Я понимаю, что этот вариант является излишним, но он так же безопасен, как доступ к вашему закрытому ключу.

 2
Author: JJFS, 2016-01-05 12:06:36

Самым простым подходом было бы отредактировать веб-сервер, скорее всего, установку Apache2, конфигурацию и присвоить phpmyadmin другое имя.

Второй подход заключается в ограничении IP-адресов, с которых можно получить доступ к phpmyadmin (например, только по локальной сети или локальному хосту).

 1
Author: lexu, 2010-04-13 16:30:26

Лучший способ защитить phpMyAdmin - это сочетание всех этих 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)

Вот как все это сделать с помощью: Настройка Ubuntu 16.4 + Apache 2 Компьютер с Windows + шпатлевка для подключения и туннелирования SSH-соединения к локальному порту:

# 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/

Если вы сможете сделать все это успешно,

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.
 1
Author: Tarik, 2017-07-30 19:47:52

Вы можете использовать следующую команду:

$ 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 

Объяснение:

Убедитесь, что ваш IP-адрес не указан в списке, прежде чем передавать данные через iptables drop!!

Сначала все строки будут найдены в $path_to_access.журнал, в котором есть phpmyadmin,

Затем введите IP-адрес с начала строки,

Затем отсортируйте и сделайте их уникальными,

Затем добавьте правило, чтобы удалить их в iptables

Опять же, просто отредактируйте echo % в конце вместо iptables команда, чтобы убедиться, что вашего IP-адреса там нет. Не запрещайте случайно свой доступ к серверу!

Ограничения

Возможно, вам потребуется изменить часть команды grep, если вы используете mac или любую систему, в которой нет grep-P. Я не уверен, что все системы начинаются с xargs, так что, возможно, их тоже придется установить. В любом случае, это очень полезно, если вы много играете.

 0
Author: Technical Blood, 2017-10-03 12:04:15