Поиск по сайту:

Как безопасно установить phpMyAdmin


phpMyAdmin — отличный инструмент для управления базой данных MySQL, но предоставление доступа к вашей базе данных через веб-интерфейс — серьезная проблема безопасности. Вот несколько способов снизить риски, связанные с запуском phpMyAdmin.

Почему phpMyAdmin представляет собой проблему безопасности?

Обычно у вас есть база данных, которая работает на вашем сервере и принимает соединения только с localhost или, возможно, с другого доверенного сервера. Если бы у вас было приложение, также работающее на этом сервере, оно могло бы взаимодействовать напрямую. Злоумышленник не может получить доступ, кроме взлома всего сервера.

phpMyAdmin обходит это, чтобы предоставить вам веб-интерфейс для управления вашей базой данных. Это очень полезный инструмент, но это катастрофа для безопасности. phpMyAdmin имеет полный неограниченный доступ к вашей базе данных, поскольку он предназначен для замены прямого доступа из командной строки. Если злоумышленник получит доступ к веб-панели, у него будет доступ ко всему. А phpMyAdmin обычно защищен простым паролем.

Установите phpMyAdmin и защитите MySQL

phpMyAdmin работает в стеке LAMP (Linux, Apache, MySQL, PHP). Прежде чем вы начнете устанавливать phpMyAdmin, ваш экземпляр MySQL должен быть защищен. MySQL предоставляет удобную утилиту для выполнения некоторых основных задач безопасности:

sudo mysql_secure_installation

Это поможет вам изменить пароль root, отключить удаленный вход в систему и удалить тестовую базу данных.

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

В идеале, однако, ни у одного злоумышленника не должно быть даже шанса угадать ваш пароль, поэтому вам нужно поместить phpMyAdmin за чем-то еще, чтобы вы могли дополнительно защитить его.

Вариант 1: заблокируйте Apache и используйте переадресацию портов SSH

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

Переадресация портов SSH — это метод переадресации локальных портов в удаленную систему. Например, на вашем сервере должен быть запущен Apache, прослушивающий порт 80. Если вы туннелируете этот порт, вы можете получить к нему доступ, перейдя по ссылке:

https://localhost:80/

…в любом веб-браузере. В некотором смысле это похоже на то, как если бы Apache работал в вашей системе. Но порт 80 не обязательно должен быть открыт на вашем сервере; весь трафик направляется через стандартный порт 22, используемый для SSH. Вам нужно убедиться, что SSH защищен ключами SSH и, в идеале, не работает на стандартном порту, поскольку этот метод настолько безопасен, насколько безопасно ваше SSH-соединение.

Для этого вам нужно привязать Apache к локальному хосту и убедиться, что он не открыт для Интернета. Откройте /etc/apache2/ports.conf и измените три оператора listen, чтобы они прослушивались только на локальном хосте (он же 127.0.0.1):

Listen 127.0.0.1:80

<IfModule ssl_module>
  Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls>
 Listen 127.0.0.1:443
</IfModule>

Перезапустите Apache с помощью:

sudo service apache2 restart

И phpMyAdmin должен быть недоступен. Это ожидаемо. После настройки Apache вы можете туннелировать порт 80, используя следующую команду:

ssh -L 80:localhost:80 user@server

Затем вы можете получить доступ к phpMyAdmin с localhost:80 в любом веб-браузере. Между тем, ваш сервер может быть настроен со строгим брандмауэром, чтобы запретить все, кроме SSH.

Если ssh не может привязаться к порту 80, попробуйте изменить первый порт на другой номер и получить к нему доступ оттуда на локальном хосте. Он по-прежнему будет туннелировать к порту 80 на удаленной машине. Это соединение поддерживается до тех пор, пока вы не выйдете из ssh. Если вы хотите запустить его в фоновом режиме, используйте флаг -f .

Если вы хотите, чтобы phpMyAdmin прослушивал только локальный хост, вы можете вместо этого отредактировать /etc/apache2/conf-enabled/phpmyadmin.conf и добавить следующие строки в блок Directory :

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1

Это запретит всем, кроме localhost, доступ к установке phpMyAdmin, хотя вам все равно потребуется открыть порт 80 в вашем брандмауэре, чтобы разрешить обычный трафик.

Вариант 2: заблокируйте Apache и используйте VPN

Если вам нужно разрешить доступ нескольким людям, не предоставляя доступ по SSH, вы можете настроить Apache для прослушивания частного IP-адреса вашей машины и принимать подключения только из того же облака. Это особенно хорошо работает с такими сервисами, как AWS VPC, где каждый запускаемый вами сервер создается в виртуальной сети.

Чтобы найти свой частный IP-адрес, вы можете запустить ifconfig и найти адрес inet на вашем основном сетевом адаптере:

Этот адрес также виден из консоли AWS EC2. Скопировав адрес, откройте /etc/apache2/ports.conf и отредактируйте три директивы Listen, чтобы прослушивать частный IP-адрес:

Listen 172.31.87.118:8

<IfModule ssl_module>
  Listen 172.31.87.118:443
</IfModule>

<IfModule mod_gnutls>
  Listen 172.31.87.118:443
</IfModule>

В качестве альтернативы, если вы просто хотите защитить phpMyAdmin, вы можете отредактировать /etc/apache2/conf-enabled/phpmyadmin.conf и разрешить только с частного IP-адреса:

Order deny,allow
Deny from all
Allow from 172.31.87.118

И перезапустите Апач.

Теперь, чтобы получить доступ к phpMyAdmin, вам нужно настроить VPN-сервер, например OpenVPN. Это позволит вам подключить ваш клиентский компьютер к виртуальному частному облаку, в котором работают ваши веб-серверы, и получить доступ к серверу, на котором работает phpMyAdmin, по частному IP-адресу, как если бы вы были другим сервером. Конечно, вам нужно настроить параметры брандмауэра, чтобы разрешить доступ с сервера OpenVPN к экземпляру phpMyAdmin.

Вариант 3. Защитите Apache с помощью HTTPS и базовой аутентификации

Если вам действительно нужно использовать публичный DNS и иметь доступ к вашему серверу, вы можете использовать обычную аутентификацию с Apache. Это просто еще один пароль перед phpMyAdmin, который не позволяет посторонним делать какие-либо запросы к приложению phpMyAdmin. Вы можете использовать это вместе с другими опциями в этом списке, так как это просто дополнительный уровень защиты.

Создайте новый файл паролей с помощью htpasswd, который уже должен быть установлен вместе с Apache (если нет, он находится в apache2-utils):

sudo htpasswd /etc/apache2/.htpasswd phpadmin

Это позволяет установить новый пароль для пользователя phpadmin и сохранить его в /etc/apache2/.htpasswd.

Откройте /etc/apache2/conf-enabled/phpmyadmin.conf и настройте его для использования базовой аутентификации с вновь созданным файлом паролей:

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Перезапустите Apache с помощью:

sudo service apache2 restart

И когда вы попытаетесь получить доступ к phpMyAdmin в своем браузере, вам будет предложено ввести имя пользователя и пароль. Введите phpadmin и пароль, который вы создали, и вам должен быть разрешен доступ. В противном случае вы увидите ответ 401 Unauthorized.