Мой сайт ежедневно получает тысячи посещений с разных IP-адресов, пытающихся получить доступ:
/php-myadmin/
/myadmin/
/mysql/
... и тысячи других вариантов. Ни одного из этих каталогов не существует, на моем сервере даже нет phpmyadmin.
Я не думаю, что какие-либо из этих попыток были успешными, однако они, должно быть, сказываются на ресурсах сервера и расходуют пропускную способность, поэтому я хотел бы остановить их, если это возможно. Я заблокировал несколько из этих IP-адресов, но они продолжают возвращаться со свежими IP-адресами. Могу ли я как-нибудь предотвратить это навсегда?
Не беспокойся об этом. Обслуживание 404 - это крошечный, крошечный, крошечный объем работы для веб-сервера. Вы могли бы, вероятно, обслуживать десять 404 в секунду, используя 486. Пропускная способность на 404 незначительна; крошечный запрос GET и крошечный ответ 404.
Шутки в сторону; не беспокойтесь об этом. Это просто неотъемлемая часть работы сервера в Интернете.
К несчастью для Вас, именно так работает Интернет. Просто проигнорируйте это. Тысячи ботов / троянов сканируют Интернет. Исходный IP-адрес всегда будет случайным. Лекарства нет.
Единственное 100% решение для устранения этого трафика показано ниже:
Альтернатива:
- перейти по https / http с порта 80/443 на другой. Боты обычно не ищут http-сервер на всех остальных портах 65k.
- используйте VPN для подключения к серверу (я думаю, это невозможно, если вы размещаете общедоступный веб-сайт).
Вы хотите Fail2ban (если это Linux-машина, вы не сказали ...)
Что такое Fail2ban?
Fail2ban проанализирует системные журналы в поисках определенных регулярных выражений, которые нужно заблокировать. Когда он находит совпадение (или несколько совпадений с одного и того же IP-адреса, в зависимости от того, как вы его настраиваете), он блокируется, обычно через IPTables. Обычно это используется для блокировки неудачных попыток аутентификации через SSH или веб-серверы.
Вы настраиваете его так, чтобы банить их на установленный период времени (могут быть минуты, могут быть дни ... в зависимости от того, насколько они постоянны), после чего срок действия запрета истечет, если они не попытаются снова.
Как это помогает блокировать сканирование ботов phpmyadmin?
Его так же легко можно использовать для выявления общих признаков атаки, таких как попытка доступа к несуществующим папкам phpmyadmin. Вам нужно будет найти правильное регулярное выражение, соответствующее таким попыткам, и убедиться, что вы не блокируете законных пользователей.
Конфигурация, представленная в это сообщение в блоге может работать дословно или потребовать некоторой настройки для вашей настройки.
Почему я должен их блокировать? Ошибка 404 не стоит дорого
Их блокировка в iptables ДЕЙСТВИТЕЛЬНО имеет какое-то применение - есть вероятность, что если они проверяют уязвимости phpmyadmin, они могут также попробовать другие службы на предмет уязвимостей, пока не обнаружат что-то, что работает. Их запрет через некоторое время заставит большинство ботов / скриптов сдаться, и они перейдут к лучшим целям.
Даже несмотря на то, что сканирование не требует больших затрат (если на самом деле они не обнаруживают уязвимости), они наводняют ваши журналы, что затрудняет отслеживание успешных атак и проблем с вашим веб-сервером.
Как говорится в комментарии ниже, Fail2ban требует некоторых системных ресурсов. Но не много. По крайней мере, я могу сказать, что у меня никогда не было проблем с производительностью, которые я мог бы приписать Fail2ban. Однако у меня были проблемы с производительностью из-за очень агрессивных сценариев, которые пытались перебрать пароли или бросали тысячи попыток SQL-инъекций и других эксплойтов в секунду на моем сервере. Их блокировка на уровне брандмауэра требует НАМНОГО меньше ресурсов, чем их блокировка на уровне сервера / приложения. Его также можно расширить для запуска пользовательских сценариев для запрета IP-адресов - поэтому вместо запрета их в IPtables вы могли бы запретить их в аппаратном брандмауэре или отправить кому-то электронное письмо, если тот же человек продолжает пытаться атаковать вас, чтобы вы могли пожаловаться к их интернет-провайдеру или пусть ваш центр обработки данных заблокирует их на своих брандмауэрах.
Есть еще советы?
НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ внести в белый список несколько контролируемых вами IP-адресов, чтобы случайно не заблокировать себя.
Я помещаю небольшой скрипт в соответствующий каталог, чтобы он запускался, если кто-то обращается к / phpmyadmin /. Этот сценарий ничего не делает, кроме как вызывает iptables (под Linux), который блокирует IP-адрес, обращающийся к сценарию, на 30 минут (после чего cron-job очищает цепочку iptables, к которой добавляется IP-адрес).
Преимущество перед fail2ban в том, что вы не используете никаких ресурсов для анализа syslog / access-log. Недостатком, конечно же, является то, что вы ничего не проверяете, кроме доступа к этому конкретному адресу.
Зачем я это делаю? Конечно, серверу будет легко обслуживать 404-е, но я не хочу, чтобы они возились, вот и все. Я хочу тратить время их инструмента, ожидая ответа сервера, повторяя попытки, пока он наконец не сдастся. Кроме того, если вы их не заблокируете, они попробуют много различных URL-адресов, прежде чем двигаться дальше - иногда более тысячи. В зависимости от инструмента, он может быть «приятным» и размещать их на несколько часов, или может просто не заботиться и забивать ваш сервер всеми ими в течение нескольких минут.
Почему я не показываю действительную страницу? Их инструмент может перестать сканировать вас и предупредить того, кто его запускает, - который затем должен проверить это вручную. Обратной стороной является то, что они дадут вашему серверу более пристальный взгляд, чем если бы их сканирование не заставило вас появиться в их результатах. Может быть, они еще немного пощупают, может быть, несколько сканирований портов, может, вы их рассердите, и они запустят DoS, чтобы посмотреть, могут ли они что-нибудь сделать. Простая их блокировка - которая, с их точки зрения, приводит к тайм-ауту сервера в момент доступа к скрипту phpmyadmin - эффективно тратит время их инструмента, избегая при этом нежелательного внимания.
Если у вас ДЕЙСТВИТЕЛЬНО есть phpMyAdmin на сервере, эффективным решением может быть размещение его в отдельном каталоге и использование управления паролями вашего веб-сервера (.htpasswd для Apache), чтобы заблокировать доступ, прежде чем что-либо достигнет его.
FWIW мы ограничиваем доступ к / phpmyadmin / только для IP-адресов из белого списка.
Мы также используем mod_evasive (на apache2) для предотвращения DOS / атак с плохим поведением сценариев.
привяжите инструмент администратора mysql к адресу обратной петли вашего компьютера 127.0.0.1
затем используйте ssh с переадресацией портов для доступа к админке.
добавить дополнительный уровень безопасности, который может быть довольно прозрачным.
Лучший способ, который мы нашли, - это защитить паролем папку, в которой находится phpmyadmin. Кроме того, не используйте в качестве имени папки ничего, имеющее отношение к phpmyadmin: pma, phpmy и т. Д.