Только что была атака снова и была нагрузка load average: 86 и fail2ban не справился с атакой!
Пришлось запускать мой скрипт и за 5 минут всех забанил и нагрузка упала до load average: 0.77
А я то думал что fail2ban крутая программа! А оказалось нет!
Ну так это парсеры с проксями же, примерно так и работают они. Я сколько ловил DDOS'ов, там редко IP повторяются
Так я за 4 часа наловил их аж 7000. И потом всё закончилось.
Хорошо, а то из одного перешел в другое!
DDOS'ом забивают канал, он все же ограничен, и никакие защиты на уровне сервера уже не спасут, а у вас больше похоже на парсеры какие то чем на ддос
Ну они как то обошли дос защиту хостера. Было 100-200 одновременно ходящих по сайту IP очень быстро открывающих страницы. И так ходили пока место не закончилось на VDS и база данных не сломалась.
От меня досеры сбежали!
Этой командой можно смотреть список забаненных IP
sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "SELECT ip FROM bans;"
loglevel = NOTICE
/var/log/fail2ban.log
Ничего себе! Внезапно!
Но со статикой влоге Nginx ничего бы не получилось 💪
Вот ещё команда для разблокировки ip, пригодится если вас заблокирует.
fail2ban-client set nginx-limit unbanip 127.0.0.1
Вот пример команды, которая выполняет проверку и выполнение команды, если размер файла /var/log/nginx/access.log больше 1 GB:
file_size=$(du -b /var/log/nginx/access.log | awk '{print $1}')if [ "$file_size" -gt 1073741824 ]; then # Здесь вставьте команду, которую нужно выполнить, если размер файла больше 1 GB truncate -s 0 /var/log/nginx/access.log echo "Файл слишком большой!"fi
location ~* \.(ico|jpg|png|jpeg|gif|swf|ico|svg)$ { add_header Cache-Control public; access_log off; expires 6d; } location ~* \.(css|js|woff|eot)$ { add_header Cache-Control private; add_header Cache-Control must-revalidate; access_log off; expires 1d; }
Nginx убираем статику из логов.
В логах Nginx ip должен быть первым log_format main '$remote_addr
/etc/fail2ban/filter.d/nginx-limit.conf
[Definition]failregex = ^<HOST>ignoreregex =
/etc/fail2ban/jail.d/nginx.conf
[nginx-limit]enabled = trueport = http,httpsfilter = nginx-limitlogpath = /var/log/nginx/access.logfindtime = 60bantime = 14400maxretry = 70
findtime = 60 - время 1 минута
bantime = 14400 - на сколько баним - время в секундах
maxretry = 70 - сколько максимум запросов разрешено - если сильная ДОС атака тогда можно поставить 10-30 чтоб быстрее всех банило.
/etc/fail2ban/jail.conf
[DEFAULT]ip_version = ipv4 + ipv6loglevel = 1ignoreip = 127.0.0.1/8 ::1
Вот команда которая вертикальный столбик ip ставит в одну строку через пробел для ignoreip чтоб долго с ним не играться.
tr '\n' ' ' < input.txt > output.tx
Вот и все настройки от флуда на сайтах. Работает в Ubuntu.