Как я могу заблокировать попытки взлома с таргетингом на phpMyAdmin?

35

Мой сайт ежедневно получает тысячи посещений с разных IP-адресов, пытающихся получить доступ:

/php-myadmin/
/myadmin/
/mysql/

... и тысячи других вариантов. Ни один из этих каталогов не существует, у меня даже нет phpmyadmin на моем сервере.

Я не думаю, что какие-либо из этих попыток были успешными, однако они должны сказываться на ресурсах сервера и тратить трафик, поэтому я хотел бы остановить их, если это возможно. Я заблокировал несколько этих IP-адресов, но они продолжают возвращаться с новыми IP-адресами. Можно ли как-нибудь предотвратить это навсегда?

amba88
источник
8
Тысячи хитов в день это ничто. Вы на самом деле испытываете трудности с производительностью или вы просто предполагаете? Несколько тысяч 404 в день - это действительно ничто .
MDMarra
Нет, я не испытываю проблем с производительностью. Но это раздражает меня, и я подумал, могу ли я что-нибудь сделать.
amba88
6
Будьте осторожны с блокировкой на основе IP - многие IP-адреса в конечном итоге зацикливаются на законных пользователях. Кроме того, некоторые законные пользователи могут быть заражены как часть ботнета. Если вы делаете какую-либо блокировку на основе IP, убедитесь, что у нее достаточно короткий срок действия.
Боб
Нет упоминания mod_securityв этой теме, так что проверьте это . Обратите внимание на комментарий ниже, отмечающий, что это на самом деле заставит сервер выполнять больше работы. Так что, возможно, mod_evasiveбыло бы также хорошо для реализации . fail2ban, но это указано ниже.
mbrownnyc

Ответы:

42

Не беспокойся об этом. Обслуживание 404 - это крошечный, крошечный, крошечный объем работы для веб-сервера. Вероятно, вы могли бы обслуживать десять 404-х в секунду, используя 486. Пропускная способность на 404 пренебрежимо мала; крошечный запрос GET и крошечный ответ 404.

Шутки в сторону; не беспокойся об этом Это просто неотъемлемая часть работы сервера в интернете.

Марк Хендерсон
источник
14
Запрещение ада: Служите нормальной странице (200 OK) с бессмысленным выводом. Инструменты, которые используют дети, сообщат о найденной странице, и они должны будут исследовать вручную (поддельная страница входа, безусловно, будет дьявольским устройством) :)
arul
4
@arul - Некоторые злоумышленники могут принять это за вызов и уделить дополнительное внимание вашему серверу. Будет ли здесь полезной порция меньшего или другого 404? Например, если хост обычно обслуживает 404 со ссылкой поддержки, должен ли он / вместо этого обслуживать обычный 404 без контента для этих целевых URL?
Freiheit
1
Цель состоит в том, чтобы противник потратил дополнительные ресурсы (время) на анализ результатов. Если вы получаете 404, вы знаете, что атака не сработает. Результат ОК переменной длины [без дальнейшего исследования] неотличим от ожидаемых результатов. Они проводят эти сканы, потому что терпение не является их добродетелью, поэтому демотивируйте их, и они остановятся :)
arul
1
Для получения бонусных баллов верните статическую страницу, которая выглядит точно так же, как настоящая страница phpmyadmin, но полностью не работает.
Captncraig
1
Для получения дополнительных бонусных баллов установите задержку в 0,5 - 1 секунду. Это не значительно увеличит время загрузки законными пользователями, но замедлит сканирование, которое делают плохие парни. (Вам просто нужно убедиться, что ваш сервер способен держать соединения открытыми дольше, чем необходимо, и при этом обрабатывать законные запросы.)
Моше Кац
38

К сожалению для вас, так работает Интернет. Просто игнорируй это. Тысячи ботов / троянов сканируют Интернет. Исходный IP будет всегда случайным. Там нет никакого лечения.

Единственное 100% решение для устранения этого трафика показано ниже: введите описание изображения здесь

Альтернатива:
- перейти с https / http с порта 80/443 на что-то другое. Боты обычно не ищут http-сервер на всех других портах 65k.
- использовать VPN для подключения к серверу (я думаю, это невозможно, если вы размещаете общедоступный веб-сайт).

Бартломей Заржецкий
источник
LOL +1 для диаграммы :-) У меня есть эта раздражающая проблема (как и у всех нас) на статическом сайте, и это самый полезный ответ.
Дейв Эверитт
30

То, что вы хотите, это Fail2ban (предполагая, что это машина Linux, вы не сказали ...)

Что такое Fail2ban?

Fail2ban будет анализировать системные журналы в поисках определенных регулярных выражений для блокировки. Когда он находит совпадение (или несколько совпадений с одного и того же IP-адреса, в зависимости от того, как вы его настроили), он блокируется, как правило, с помощью таблиц IPTable. Обычно это используется для блокировки неудачных попыток аутентификации на SSH или веб-серверах.

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

Как это помогает блокировать сканирование phpmyadmin ботами?

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

Конфигурация, приведенная в этом сообщении в блоге, может работать дословно или потребовать некоторых настроек для вашей настройки.

Почему я должен их блокировать? 404 ошибки не стоят дорого

Блокировка их в iptables НЕОБХОДИМО использовать: если они проверяют уязвимости phpmyadmin, они могут также использовать другие сервисы для поиска уязвимостей, пока не столкнутся с чем-то, что работает. Запрет на них заставит большинство ботов / скриптов сдаться через некоторое время, и они перейдут к лучшим целям.

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

Как говорится в комментарии ниже, Fail2ban требует некоторых системных ресурсов. Но не много. По крайней мере, я могу сказать, что у меня никогда не было проблем с производительностью, которые я мог бы отнести к Fail2ban. Однако у меня были проблемы с производительностью из-за очень агрессивных сценариев, пытающихся перебором паролей или бросающих тысячи попыток внедрения SQL-кода и других эксплойтов в секунду на моем сервере. Блокировка их на уровне брандмауэра занимает на FAR меньше ресурсов, чем их блокировка на уровне сервера / приложения. Он также может быть расширен для запуска пользовательских сценариев для запрета IP-адресов - поэтому вместо того, чтобы запрещать их в IPtables, вы можете запретить их в аппаратном брандмауэре или по электронной почте, если тот же человек продолжает пытаться атаковать вас, чтобы вы могли жаловаться своему провайдеру или попросите ваш центр обработки данных заблокировать их на своих брандмауэрах.

Любые другие советы?

НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ вносить в белый список несколько IP-адресов, которые вы контролируете, чтобы случайно не заблокировать себя.

Грант
источник
6
это будет пустая трата ресурсов :) Я думаю, что вы будете использовать больше циклов ЦП на Fail2ban, чем на простом обслуживании иногда 404 :)
Bartłomiej Zarzecki
4
@ BartłomiejZarzecki Для лучшей безопасности всегда требуется больше ресурсов
user11153
3
@ heinrich5991 заблокируется после первых попыток. Не имеет значения для некоторых сканирований, но огромная разница для сканирований, которые пытаются выполнить несколько попыток на сервере.
Грант
2
Надеемся, что Fail2ban (или аналогичный) будет больше, чем просто / phpmyadmin. Предполагая, что у него есть какой-либо вид удаленного доступа, блокировка типа F2B (3 пароля и вы ... ушли!) Длится более 404 секунд.
WernerCD
3
Если вы сделаете что-то подобное, убедитесь, что срок действия запрета истекает относительно быстро (максимум несколько часов), или вы рискуете заблокировать законных пользователей, если атака происходит с динамически назначенного IP-адреса.
Йенс Нойбауэр
7

Я помещаю небольшой скрипт в соответствующий каталог, чтобы он запускался, если кто-то заходит в / phpmyadmin /. Этот скрипт ничего не делает, кроме как вызывает iptables (под Linux), который блокирует IP-адрес, обращающийся к скрипту, на 30 минут (после чего cron-job сбрасывает цепочку iptables, к которой добавляется IP-адрес).

Преимущество по сравнению с fail2ban заключается в том, что вы не используете какие-либо ресурсы для разбора syslog / access-log. Недостатком, конечно, является то, что вы не проверяете больше ничего, кроме доступа к этому очень конкретному адресу.

Почему я это делаю? Конечно, обслуживать сервер 404 было бы легко для сервера, но я не хочу, чтобы они возились, просто так. Я хочу потратить впустую время своего инструмента, ожидая ответа сервера, повторяя попытки, пока он, наконец, не сдастся. Кроме того, если вы не заблокируете их, они попробуют множество различных URL-адресов, прежде чем перейти к следующему этапу - иногда более тысячи. В зависимости от инструмента, он может быть «хорошим» и размещать их в течение нескольких часов, или он может просто не заботиться о том, чтобы забить ваш сервер всем этим в течение нескольких минут.

Почему я не обслуживаю действующую страницу? Их инструмент может перестать сканировать вас и оповестить заносителя, который его запускает, - который затем должен проверить вручную. Обратной стороной этого является то, что они придадут вашему серверу гораздо более пристальный взгляд, чем они могли бы, если бы их сканирование не заставило вас найти их результаты. Может быть, они будут немного больше копаться, может быть, несколько сканирований портов, возможно, вы разозлите их, и они запустят DoS, чтобы посмотреть, смогут ли они что-нибудь сделать. Простая их блокировка, которая, с их точки зрения, сокращает время ожидания сервера в момент доступа к скрипту phpmyadmin, эффективно тратит время их инструмента и избегает нежелательного внимания.

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

Ааа
источник
Звучит как хороший альтернативный вариант ... но не требует ли веб-сервер возможности запуска скрипта с правами root?
Грант
1
Настройте псевдоним для таких инструментов, как phpMyAdmin. Простое изменение в файле конфигурации, чтобы изменить его на adminMyPhp или chrisPhpAdmin ... или что-то, что не будет обманутым сценарием.
WernerCD
Извините за поздний ответ - это не так (обязательно). Вы можете использовать sudo (с файлом sudoers), чтобы разрешить веб-серверу выполнять один известный скрипт (и только этот скрипт) с правами root. Этот сценарий принимает (в качестве параметра) IP-адрес, и вы проверяете его по регулярному выражению ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ), чтобы убедиться, что это не вводит ничего странного.
Aaa
1

Мы ограничиваем доступ только к / phpmyadmin / только IP-адресам из белого списка.

Мы также используем mod_evasive (на apache2) для предотвращения DOS / скриптовых атак с плохим поведением.

user204880
источник
1

привязать инструмент администрирования mysql к адресу обратной связи вашей машины 127.0.0.1

затем используйте ssh с переадресацией портов для доступа к админ-панели.

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

Уникс Дворник
источник
-4

Лучший способ, который мы нашли, это защитить паролем папку, в которой находится phpmyadmin. Кроме того, не используйте в качестве имени папки ничего, что относится к phpmyadmin: pma, phpmy и т. Д.

WeWatchYourWebsite
источник
2
Из вопроса: None of these directories exist, I don't even have phpmyadmin on my server.- Он не спрашивает, как укрепить свои существующие установки ... он спрашивает, что делать с вещами, которые не существуют. Вы не можете переименовать PMAили что у вас есть, если его не существует.
WernerCD