Заметил, что в error.log web сервера массово сыпятся сообщения с ошибками. Смысл сообщений был в том, что кто-то очень настойчиво ломится по адресу http://site.ru/al_profileEdit.php?__query=edit&al=-1&al_id=vk. Этого файла на сайте нет, поэтому сообщение попадает в лог ошибок. До кучи все эти запросы присутствуют в access.log. Все это создает лишнюю нагрузку на сервер, поэтому решил разобраться, как заблокировать этот спам.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Первым делом решил, что сайт взломали и понаоткрывали дырок. Но более внимательное изучение вопроса не показало никаких признаков взлома. Все запросы идут снаружи и обращаются к файлу, которого на сервере нет. Мониторинг не показывал никакой подозрительной активности. В логах ничего подозрительного тоже не обнаружил.
Бегло посмотрел в поиске. Нашел пару упоминаний о такой же проблеме, но простого и надежного решения не увидел. Предлагают сделать редирект куда-нибудь по этому адресу, либо закрыть файл через .htaccees. Но все это полумеры, которые не блокируют полностью запросы, а просто на них каким-то образом реагируют с наименьшими потерями.
На ум пришел простой и надежный fail2ban. Ранее я уже рассказывал о настройке fail2ban для защиты админки wordpress. В статье подробно все рассказано, как установить и настроить фильтры. Не буду подробно на этом останавливаться сейчас. Я просто добавлю новый фильтр, который будет навечно блокировать тех, кто будет обращаться к файлу al_profileEdit.php на веб сервере. Я сначала оставил дефолтные настройки блокировки на 10 минут вроде бы. Но долбили так часто, что с момента выхода из бана и до новой блокировки боты все равно успевали прилично наспамить в логи. Решил их блокировать навечно.
Создаем новый фильтр fail2ban:
# mcedit /etc/fail2ban/filter.d/wp-al-profileEdit.conf
[Definition] failregex = ^<HOST> .* "GET /al_profileEdit.php
Этот фильтр вычленяет ip адреса всех, кто будет обращаться к файлу al_profileEdit.php на веб сервере. Данные будет брать из лог файла access.log.
Добавляем новый jail в /etc/fail2ban/jail.conf
[wp-al-profileEdit] enabled = true port = http,https action = iptables[name=WP, port=http, protocol=tcp] filter = wp-al-profileEdit logpath = /web/sites/site.ru/log/access.log maxretry = 1 bantime = -1
Перезапускаем fail2ban:
# systemctl restart fail2ban
и проверяем в логе как отработал. Он должен сразу забанить тех, кто успел отметиться в лог файле. Посмотреть список этих ip можно в правилах iptables:
# iptables -L -v -n
В логе самой программы тоже можно увидеть эту информацию. Теперь тот, кто обратиться к указанному файлу, тут же получит вечный бан в iptables и не будет нагружать web сервер бесполезными запросами.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
А что если будет перемещен файл? Или удалена картинка? Ну разные могут быть причины ссылания на несуществующий объект, польщователь получит вечный бан. Как то это не хорошо, не кажется ли Вам?
Я баню за запрос к конкретному файлу, которого не существует и никогда не было на моем сайте. Пострадают только те, кто к этому файлу обращаются.
Теперь понял, сперва подумал что в блок лист будут добавляться все IP которые обращаются на несуществующие файлы. Мои извинения за невнимательность
Кстати да! Меня не было на сайте несколько месяцев. За это время забыл пароль. Пытался восстановить его и при отправке запроса с сайта, последний просто переставал отвечать. Типа вис. Возможно из-за этого.