1. Установка, остановка и удаление с автозагрузки Fail2ban
1 |
# apt-get install fail2ban |
1 |
# service fail2ban stop |
1 |
# update-rc.d -f fail2ban remove |
2.Настройка запуска fail2ban средствами CSF
1 |
# nano /etc/csf/csfpost.sh |
1 2 |
#!/bin/sh /etc/init.d/fail2ban restart |
3.Отклчючение всех фильтров в Fail2ban
1 |
# sed -i "s|enabled = true|enabled = false|g" /etc/fail2ban/jail.conf |
4. Настройка поддержки CSF в Fail2ban
1 |
# nano /etc/fail2ban/action.d/csf-ip-deny.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[Definition] actionstart = actionstop = actioncheck = actionban = csf -d <ip> Added by Fail2Ban for <name> # curl https://www.cloudflare.com/api_json.html -d 'a=ban' -d 'tkn=<cftoken>' -d 'email=<cfuser>' -d 'key=<ip>' actionunban = csf -dr <ip> # curl https://www.cloudflare.com/api_json.html -d 'a=nul' -d 'tkn=<cftoken>' -d 'email=<cfuser>' -d 'key=<ip>' # [Init] ###### Default Cloudflare API token # cftoken = XXXXXXXXXXXXXXXXXXXXXXXXXX ###### Default Cloudflare username # cfuser = me@example.com |
Если используется Cloudflare, то расскоментируем все строки с одним знаком комментария
5.Замена для всех фильтров Fail2ban действия блокировки на созданный «csf-ip-deny»
1 |
# sed -i -e "s|banaction = |banaction = csf-ip-deny\n#banaction = |" /etc/fail2ban/jail.conf |
6. Настройка Fail2ban фильтров для мониторинга логов
1 |
# nano /etc/fail2ban/filter.d/nginx-wp-login.conf |
1 2 3 |
[Definition] failregex = <HOST> .*POST /wp-login.php ignoreregex = |
1 |
# nano /etc/fail2ban/filter.d/nginx-wp-xmlrpc.conf |
1 2 3 |
[Definition] failregex = <HOST> .*POST /xmlrpc.php ignoreregex = |
1 |
# nano /etc/fail2ban/filter.d/nginx-wp-register.conf |
1 2 3 |
[Definition] failregex = ^<HOST> .* "GET /wp-login.php\?action=register HTTP/.*" .*$ ignoreregex = |
7. Настройка Fail2ban для мониторинга логов
1 |
# nano /etc/fail2ban/jail.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[nginx-wp-login] enabled = true filter = nginx-wp-login action = csf-ip-deny[name=nginx-wp-login] logpath = /var/log/nginx/*access.log maxretry = 5 findtime = 600 bantime = 86400 [nginx-wp-xmlrpc] enabled = true filter = nginx-wp-xmlrpc action = csf-ip-deny[name=nginx-wp-xmlrpc] logpath = /var/log/nginx/*access.log maxretry = 5 findtime = 600 bantime = 86400 [nginx-wp-register] enabled = true filter = nginx-wp-register action = csf-ip-deny[name=nginx-wp-register] logpath = /var/log/nginx/*access.log maxretry = 5 findtime = 600 bantime = 86400 |
Если используется Cloudlare, то добавляем актуальный список IP-адресов/сетей Cloudflare в исключение fail2ban (https://www.cloudflare.com/ips)
1 |
# nano /etc/fail2ban/jail.conf |
1 |
ignoreip = 127.0.0.1/8 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 104.16.0.0/12 108.162.192.0/18 141.101.64.0/18 162.158.0.0/15 172.64.0.0/13 173.245.48.0/20 188.114.96.0/20 190.93.240.0/20 197.234.240.0/22 198.41.128.0/17 199.27.128.0/21 |
8. Перезапуск CSF
1 |
# csf -r |
9. Проверка наличие запущенного fail2ban-процесса
1 |
# ps ax | grep fail2ban | grep -v grep |
1 |
21206 ? Sl 0:04 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid |
10. Проверка наличия адреса в разрешенных/запрещенных
1 |
# iptables -S | grep <IP-adress> |
11. Имитация атаки с другого сервера
1 |
# curl --silent --request POST 'http://<IP-adress>/wp-login.php' |
12. Логи смотрим в /var/log/fail2ban.log
1 |
# tail -f /var/log/fail2ban.log |
Ручная блокировка/разблокировка IP-адреса
1.Просмотр существующих Jail
1 |
# fail2ban-client status |
1 2 3 |
Status |- Number of jail: 3 `- Jail list: nginx-wp-register, nginx-wp-login, nginx-wp-xmlrpc |
2.Детальный просмотр конкретного Jail, например nginx-wp-login
1 |
# fail2ban-client status nginx-wp-login |
3.Разблокировка требуемого IP-адреса в указанном Jail
1 |
# fail2ban-client set nginx-wp-login unbanip <IP-address> |
4. Блокировка требуемого IP-адреса в указанном Jail
1 |
# fail2ban-client set nginx-wp-login banip <IP-address> |
Настройка Apache для получения IP-адреса клиента в логах вместо IP-адреса Cloudflare
Centos
1 |
# yum install httpd-devel libtool git |
1 |
# mkdir cloudflare && cd cloudflare |
1 |
# git clone https://github.com/cloudflare/mod_cloudflare.git && cd mod_cloudflare |
1 |
# apxs -a -i -c mod_cloudflare.c |
1 |
# service httpd restart |
1 |
# httpd -M | grep cloudflare |
Debian/Ubuntu
1 |
# apt-get install apache2-dev libtool git |
1 |
# mkdir cloudflare && cd cloudflare |
1 |
# git clone https://github.com/cloudflare/mod_cloudflare.git && cd mod_cloudflare |
1 |
# apxs -a -i -c mod_cloudflare.c |
1 |
# apachectl restart |
1 |
# apache2ctl -M | grep cloudflare |
Настройка Nginx для получения IP-адреса клиента в логах вместо IP-адреса Cloudflare
1.Проверка поддержки Nginx realip-модуля
1 |
# nginx -V 2>&1 | grep realip |
2.В вирт.хост Nginx добавляем
1 |
include /etc/nginx/include_cf; |
3. Создаем файл /etc/nginx/include_cf
1 |
# nano /etc/nginx/include_cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# CloudFlare # https://www.cloudflare.com/ips-v4 # https://www.cloudflare.com/ips-v6 set_real_ip_from 199.27.128.0/21; set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 108.162.192.0/18; set_real_ip_from 190.93.240.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 162.158.0.0/15; set_real_ip_from 104.16.0.0/12; set_real_ip_from 172.64.0.0/13; real_ip_header CF-Connecting-IP; |
Источник:
http://habrahabr.ru/post/247391/
https://mrphp.com.au/blog/ddos-protection-with-cloudflare-and-fail2ban/
https://support.cloudflare.com/hc/en-us/articles/203656534-How-can-I-set-up-Apache-mod-CloudFlare-
https://support.cloudflare.com/hc/en-us/articles/200170706-How-do-I-restore-original-visitor-IP-with-Nginx