Понадобилось блокировать особо любопытных, написал пару правил.
Защита от брутфорса для сайтов на базе CMS WordPress:
Создадим файл с регексом для фильтрации попытки логина в админку:
# cat /etc/fail2ban/filter.d/bruteforce_wp.conf
[Definition]
failregex = ^<HOST> - - .* "POST /wp-login.php
ignoreregex =
Проверим сразу попадают ли запросы под наше правило:
# fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/bruteforce_wp.conf
Running tests
=============
Use failregex file : /etc/fail2ban/filter.d/bruteforce_wp.conf
Use log file : /var/log/nginx/access.log
Results
=======
Failregex: 122795 total
|- #) [# of hits] regular expression
| 1) [122795] ^<HOST> - - .* "POST /wp-login.php
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [790258] Day/MONTH/Year:Hour:Minute:Second
`-
Lines: 790258 lines, 0 ignored, 122795 matched, 667463 missed
Missed line(s): too many to print. Use --print-all-missed to print all 667463 lines
Как видим, 123 тысячи запросов попадают под данное правило, а значит и будем блокировать таким способом.
И добавим секцию для нашего фильтра в jail.local:
# vim /etc/fail2ban/jail.local
[bruteforce_wp]
enabled = true
bantime = 3600
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
filter = bruteforce_wp
logpath = /var/log/nginx/access.log
maxretry = 5
Т.е. при 5 неправильных логинах залочим IP-адрес на час. Это должно успокоить особо активных.
Защита от брутфорса для сайтов на базе CMS Joomla:
Создадим фильтр:
# cat /etc/fail2ban/filter.d/bruteforce_joomla.conf
[Definition]
failregex = ^<HOST> - - .*/administrator/index.php
ignoreregex =
Проверим:
# fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/bruteforce_joomla.conf
Running tests
=============
Use failregex file : /etc/fail2ban/filter.d/bruteforce_joomla.conf
Use log file : /var/log/nginx/access.log
Results
=======
Failregex: 36528 total
|- #) [# of hits] regular expression
| 1) [36528] ^<HOST> - - .*/administrator/index.php
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [792266] Day/MONTH/Year:Hour:Minute:Second
`-
Lines: 792266 lines, 0 ignored, 36528 matched, 755738 missed
Missed line(s): too many to print. Use --print-all-missed to print all 755738 lines
Теперь попадет 36 тысяч запросов.
И добавим секцию в jail.local:
# vim /etc/fail2ban/jail.local
[bruteforce_joomla]
enabled = false
bantime = 3600
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
filter = bruteforce_joomla
logpath = /var/log/nginx/access.log
maxretry = 5
После всех этих изменений перезапустим наш сервер fail2ban:
# /etc/init.d/fail2ban restart
Проверим подгрузились ли наши фильтры:
# /etc/init.d/fail2ban status
fail2ban-server (pid 688487) выполняется...
Status
|- Number of jail: 3
`- Jail list: bruteforce_joomla, bruteforce_wp, ssh-iptables
То, что надо 3 фильтра: ssh (по умолчанию), брутфорс WP и Joomla.
Минут через 10 проверим эффективность для наших новых фильтров:
# fail2ban-client status bruteforce_wp
Status for the jail: bruteforce_wp
|- filter
| |- File list: /var/log/nginx/access.log
| |- Currently failed: 8
| `- Total failed: 22
`- action
|- Currently banned: 2
| `- IP list: 109.86.15.97 94.138.171.124
`- Total banned: 2
# fail2ban-client status bruteforce_joomla
Status for the jail: bruteforce_joomla
|- filter
| |- File list: /var/log/nginx/access.log
| |- Currently failed: 5
| `- Total failed: 1658
`- action
|- Currently banned: 4
| `- IP list: 134.249.50.47 79.148.245.79 94.153.8.248 109.86.15.95
`- Total banned: 4
Как видим, фильтры работают и за 10 минут успели заблокировать примерно 1700 запросов к админкам сайтов.
Защита от брутфорса для сайтов на базе CMS WordPress:
Создадим файл с регексом для фильтрации попытки логина в админку:
# cat /etc/fail2ban/filter.d/bruteforce_wp.conf
[Definition]
failregex = ^<HOST> - - .* "POST /wp-login.php
ignoreregex =
# fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/bruteforce_wp.conf
Running tests
=============
Use failregex file : /etc/fail2ban/filter.d/bruteforce_wp.conf
Use log file : /var/log/nginx/access.log
Results
=======
Failregex: 122795 total
|- #) [# of hits] regular expression
| 1) [122795] ^<HOST> - - .* "POST /wp-login.php
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [790258] Day/MONTH/Year:Hour:Minute:Second
`-
Lines: 790258 lines, 0 ignored, 122795 matched, 667463 missed
Missed line(s): too many to print. Use --print-all-missed to print all 667463 lines
Как видим, 123 тысячи запросов попадают под данное правило, а значит и будем блокировать таким способом.
И добавим секцию для нашего фильтра в jail.local:
# vim /etc/fail2ban/jail.local
[bruteforce_wp]
enabled = true
bantime = 3600
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
filter = bruteforce_wp
logpath = /var/log/nginx/access.log
maxretry = 5
Т.е. при 5 неправильных логинах залочим IP-адрес на час. Это должно успокоить особо активных.
Защита от брутфорса для сайтов на базе CMS Joomla:
Создадим фильтр:
# cat /etc/fail2ban/filter.d/bruteforce_joomla.conf
[Definition]
failregex = ^<HOST> - - .*/administrator/index.php
ignoreregex =
Проверим:
# fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/bruteforce_joomla.conf
Running tests
=============
Use failregex file : /etc/fail2ban/filter.d/bruteforce_joomla.conf
Use log file : /var/log/nginx/access.log
Results
=======
Failregex: 36528 total
|- #) [# of hits] regular expression
| 1) [36528] ^<HOST> - - .*/administrator/index.php
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [792266] Day/MONTH/Year:Hour:Minute:Second
`-
Lines: 792266 lines, 0 ignored, 36528 matched, 755738 missed
Missed line(s): too many to print. Use --print-all-missed to print all 755738 lines
Теперь попадет 36 тысяч запросов.
И добавим секцию в jail.local:
# vim /etc/fail2ban/jail.local
[bruteforce_joomla]
enabled = false
bantime = 3600
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
filter = bruteforce_joomla
logpath = /var/log/nginx/access.log
maxretry = 5
После всех этих изменений перезапустим наш сервер fail2ban:
# /etc/init.d/fail2ban restart
Проверим подгрузились ли наши фильтры:
# /etc/init.d/fail2ban status
fail2ban-server (pid 688487) выполняется...
Status
|- Number of jail: 3
`- Jail list: bruteforce_joomla, bruteforce_wp, ssh-iptables
То, что надо 3 фильтра: ssh (по умолчанию), брутфорс WP и Joomla.
Минут через 10 проверим эффективность для наших новых фильтров:
# fail2ban-client status bruteforce_wp
Status for the jail: bruteforce_wp
|- filter
| |- File list: /var/log/nginx/access.log
| |- Currently failed: 8
| `- Total failed: 22
`- action
|- Currently banned: 2
| `- IP list: 109.86.15.97 94.138.171.124
`- Total banned: 2
# fail2ban-client status bruteforce_joomla
Status for the jail: bruteforce_joomla
|- filter
| |- File list: /var/log/nginx/access.log
| |- Currently failed: 5
| `- Total failed: 1658
`- action
|- Currently banned: 4
| `- IP list: 134.249.50.47 79.148.245.79 94.153.8.248 109.86.15.95
`- Total banned: 4
Как видим, фильтры работают и за 10 минут успели заблокировать примерно 1700 запросов к админкам сайтов.
Спасибо автору, за инструкцию, у меня, правда, не было атак на сайт, но думаю когда-нибудь пригодится. Всегда нужно знать как защититься от посягательства. Будет ли конфликтовать данный код с шаблонами joomla https://www.templatemonster.com/ru/joomla-templates-type/, или нужно смотреть конкретно в каждом случае ?
ОтветитьУдалитьДанный код работает с firewall и лог-файлами web-сервера nginx, а не с Joomla! Конфликта не будет.
УдалитьВ примере для Joomla! в jail.local ошибочно указано enabled = false. Должнобыть enabled = true.
ОтветитьУдалить