Настройка связки Apache + Fail2ban в Debian
Nov 10, 2016 09:59 · 586 words · 3 minute read
Fail2ban — сервис, отслеживающий log–файлы запущенных программ, и на основании указанных условий блокирующий нарушителей по IP-адресу. Давайте разберемся с защитой от атак на популярный web-сервер Apache!
Считаем, что в вашей системе уже установлен и нормально функционирует Apache. Установка fail2ban
не должна вызывать трудностей:
apt-get update && apt-get install fail2ban
Настройки защиты конкретных сервисов по умолчанию находятся в конфигурационном файле /etc/fail2ban/jail.conf
. Чтобы не потерять внесенные изменения при обновлениях, копируем эти настройки в новый файл, с которым и будем работать:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Далее необходимо отредактировать параметры по умолчанию (общие для всех цепочек), которые находятся в секции [DEFAULT]
:
[DEFAULT]
destemail = admin@example.com #email, на который присылать уведомления
ignoreip = 127.0.0.0/8 192.168.0.0/16 92.29.98.235 #IP–адреса, которые не должны быть заблокированы
mta = sendmail
action = %(action_mwl)s #выполнить действие banaction и отправить email-уведомление, включающее "whois"-информацию и строки из log-файла, которые привели к бану
banaction = iptables-multiport #заблокировать IP-адрес в iptables при помощи модуля multiports
findtime = 60 #интервал в секундах, за которое событие должно повториться определённое количество раз
bantime = 3600 #время бана в секундах
maxretry = 60 #количество подозрительных совпадений, после которых применяется правило
После изменения параметров по умолчанию, можно приступать непосредственно к настройке jail
’ов — секций, которые мы намерены защищать. В данном примере это будут [apache]
, [apache-noscript]
, [apache-overflows]
и [apache-badbots]
, которые выглядят так:
[apache]
# блокировка ошибки basic authentication
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log #следует изменить, если log-файл находится в другом месте
maxretry = 3 #переопределяем значение, определенное в секции [DEFAULT]
findtime = 600 #переопределяем значение, определенное в секции [DEFAULT]
[apache-noscript]
# следует использовать, если у вас статический сайт
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log #следует изменить, если log-файл находится в другом месте
maxretry = 3 #переопределяем значение, определенное в секции [DEFAULT]
[apache-overflows]
# блокировка на основании слишком длинных URL
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log #следует изменить, если log-файл находится в другом месте
maxretry = 2 #переопределяем значение, определенное в секции [DEFAULT]
[apache-badbots]
# блокировка "плохих" ботов
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/apache*/*error.log
maxretry = 2
Для применения внесенных изменений следует перезапустить fail2ban
:
/etc/init.d/fail2ban restart
Просмотреть какие jail
’ы запущены в данный момент можно с помощью следующей команды:
fail2ban-client status
Status
|- Number of jail: 5
`- Jail list: apache-overflows, apache-noscript, ssh, apache-badbots, apache
Также можно проверить состояние правил в файрволле командой iptables --list-rules
или iptables -S
:
iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-apache
-N fail2ban-apache-badbots
-N fail2ban-apache-noscript
-N fail2ban-apache-overflows
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-noscript
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-apache -j RETURN
-A fail2ban-apache-badbots -j RETURN
-A fail2ban-apache-noscript -j RETURN
-A fail2ban-apache-overflows -j RETURN
-A fail2ban-ssh -s 116.31.116.10/32 -j DROP
-A fail2ban-ssh -j RETURN
Больше информации о работе конкретного jail
’а можно передав в качестве параметра его имя, например так:
fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 0
| `- Total failed: 12086
`- action
|- Currently banned: 1
| `- IP list: 116.31.116.10
`- Total banned: 1002
IP-адрес нарушителя разблокируется автоматически по истечению времени указанного в bantime
, но можно разблокировать его вручную используя следующую команду:
fail2ban-client set ssh unbanip 116.31.116.10
На этом все, в следующей статье рассмотрим настройку связки Nginx + Fail2ban.