Недавно мои серверы начали подвергаться бомбардировке анонимными сканерами / брутфорсом.
Вот так выглядел мой журнал доступа к nginx после атак:
xxx.xxx.xxx.xxx - - [07/Sep/2019:23:30:16 +0200] "GET /phpMyAdmin/index.php HTTP/1.1" 404 548 "-" "Mozilla/5.0..
xxx.xxx.xxx.xxx - - [07/Sep/2019:23:30:18 +0200] "GET /admin/index.php HTTP/1.1" 404 548 "-" "Mozilla/5.0..
Наряду с множеством других URL-адресов / страниц администратора / случайных имен, к которым они пытались получить доступ. Я провел небольшое исследование, и появился fail2ban. Итак, я его установил.
Я оставил его на некоторое время, но атаки повторялись снова. Я понял дефолт [nginx-botsearch]
не отлавливает все атаки, не говоря уже о неверной настройке пути к журналу.
Я немного погуглил и остановился на этом настраиваемом фильтре:
# /etc/fail2ban/jail.local
[nginx-404-errors]
enabled = true
port = http,https
logpath = /var/log/nginx/*.log
maxretry = 2
# /etc/fail2ban/filter.d/nginx-404-errors.conf
[Definition]
failregex = ^<HOST>.*"(GET|POST|HEAD).*" (404|444|403|400) .*$
ignoreregex =
Это сработало очень хорошо, но злоумышленник решил запустить http. Но дело в том, что у меня есть правило перенаправления http на https на nginx.
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
Итак, теперь я получаю тонны журнала переадресации 301 в access.log
. Я подумал, может мне стоит просто добавить 301
к регулярному выражению, которое я использовал выше. Итак, теперь это:
failregex = ^<HOST>.*"(GET|POST|HEAD).*" (404|444|403|400|301) .*$
Атаки пока прекратились. Но я беспокоюсь, что обычные посетители могут столкнуться с проблемами при попытке зайти на сайт по http, и fail2ban может их зацепить.
Должен ли я таким образом смягчить подобные атаки методом перебора? Или я должен пойти другим путем?
Я хотел бы принять во внимание, как ваши страницы связаны в HTML. Если ваш посетитель получает только https: // - Ссылки, как только он обновит соединение до https, вы можете оставить 301-Bans активными. Если каждый клик на вашем сайте приводит к 301-перенаправлению на его https-эквивалент, это явно неразумно. Кроме того, я рекомендую увеличить допустимое количество 301 до 10 или 15.
Гораздо более проблематичным является бан после двух переходов на страницу 404. Это сделает использование системы управления контентом на вашем веб-сайте очень трудным, поскольку каждая попытка ссылки на несуществующее изображение или URL-адрес приведет к БАН. Увеличьте значащий предел до двузначного числа. Десять запросов 404 не сломают ваш сервер. Они происходят регулярно даже при законном использовании, особенно на многоязычных сайтах, при отсутствии favicon.ico, развертывании новых страниц, отложенной загрузке изображений и т. Д.
Лучшее, что можно сделать сейчас, - это перенаправить http на https, поскольку http устаревает. Google также оценивает https-страницы выше, чем не http-страницы. Лучше всего настроить постоянное перенаправление с http на https, чтобы люди не могли получить доступ к http-версии сайта. Заглянув в конфигурацию ur, я не чувствую, что у вас возникнут какие-либо проблемы. Если вы столкнетесь с какой-либо проблемой (регулярно проверяйте свой журнал), опубликуйте журналы здесь, и я буду рад вам помочь.