Содержание статьи:
Продолжаем рассматривать способы защиты веб-сервера, от потенциальных угроз. На этот раз рассмотрим такой инструмент как Fail2ban.
Принцип работы Fail2ban, заключается в анализе лог-файлов и реагировании на определенные события которые определены в настройках Fail2ban.
Рассмотрим как установить Fail2ban и настроить на защиту веб-сервера (Apache), развернутом на Debian 9 Stretch.
Установка
Установка Fail2ban абсолютно тривиальная, выполняем команду:
apt-get install fail2ban -y
Конфигурационный файл настройки правил (/etc/fail2ban/jail.conf), разработчики не рекомендуют изменять, поэтому создадим его локальную копию, из которого будут в приоритете считываться правила:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Настройка правил (jails)
Fail2ban поставляется с набором предопределённых правил (jails), для популярных приложений, таких как Apache, Nginx, Lighttpd, SSH…. Само собой разумеется можно создать и собственные правила для произвольных приложений.
Каждое правило для определения атак, полагается на фильтры описанные в /etc/fail2ban/fileter.d, а доступные действия на обнаруженные атаки описаны в /etc/fail2ban/action.d.
Задействуем встроенные правила для Apache. Открываем ранее созданный файл конфигурации /etc/fail2ban/jail.local и добавляем в него правила:
# Определение неудачных попыток ввода пароля [apache] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache*/*error.log maxretry = 6 # Определение потенциального сканирования для применения эксплойтов и php уязвимостей [apache-noscript] enabled = true port = http,https filter = apache-noscript logpath = /var/log/apache*/*error.log maxretry = 6 # Определение попыток переполнения Apache [apache-overflows] enabled = true port = http,https filter = apache-overflows logpath = /var/log/apache*/*error.log maxretry = 2 # Определение неудачных попыток в поиске домашней директории на сервере [apache-nohome] enabled = true port = http,https filter = apache-nohome logpath = /var/log/apache*/*error.log maxretry = 2
В указанных правилах, не определяется действие, при срабатывании триггера, поэтому они будут выполнять действие по-умолчанию. Действие по-умолчанию, можно посмотреть в загляните в /etc/fail2ban/jail.conf в секции [DEFAULT], параметр banaction.
В моем случае, действие по-умолчанию — это iptables-multiport (предопределено в /etc/fail2ban/action.d/iptables-multiport.conf). Это действие блокирует IP адреса используя iptables с модулем мультипорт (multiport module).
После включения правил, необходимо перезапустить fail2ban для загрузки правил:
service fail2ban restart
Проверка и управления статусами и банами Fail2ban
После активации правил (jails), можно просматривать текущее состояние их, а так же управлять банами в них, при помощи fail2ban-client.
Чтобы посмотреть список активных правил (jails):
fail2ban-client status (прим. вывода) Status |- Number of jail: 6 `- Jail list: apache, apache-noscript, apache-modsecurity, apache-overflows, apache-nohome, apache-multiport
Чтобы посмотреть статус определённого правила (jail):
fail2ban-client status [name-of-jail] (прим. вывода) Status for the jail: apache |- filter | |- File list: /var/www/html/log/error.log | |- Currently failed: 0 | `- Total failed: 6 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 1
Для ручного блокировки IP-адреса, в определенном правиле (jail), выполним команду:
fail2ban-client set [name-of-jail] banip [ip-address]
Для разблокировки IP-адреса, в определенном правиле (jail):
fail2ban-client set [name-of-jail] unbanip [ip-address]
Заключение
Мы рассмотрели как защитить веб-сервер Apache, использую предустановленные правила (jail). Но хочу заметить, что сервис fail2ban очень гибок настройке и поэтому в зависимости от типа ваших веб-сервисов и нужд в защите, можно адаптировать существующие правила (jail) или написать собственные правила (jail) и фильтры логов.