Сервер Apache HTTP в производственной среде может оказаться под различного рода атаками. Атакующие могут пытаться получить несанкционированный доступ к ограниченным директориям, используя атаку перебором (брут-форсинг) или выполняя зловредные скрипты. Некоторые вредоносные боты могут сканировать ваши веб-сайты на разного рода уязвимости или собирать e-mail адреса или веб-формы для рассылки спама.
Сервер Apache HTTP поставляется с полной совместимой системой логирования для захвата различных ненормальных событий, служащих индикатором таких атак. Тем не менее, это не тривиальная задача систематически парсить детальные логи Апача и быстро реагировать на потенциальные атаки (например забанить/разбанить подозрительные IP адреса), т. к. они совершенно непредсказуемы. И тогда, чтобы облегчить им жизнь, на помощь системный администраторам приходит fail2ban.
Fail2ban — это инструмент с открытым кодом, он предназначен для предотвращения различных атак, он основывается на системных логах и автоматически инициализирует превентивные меры, например, банит IP адрес с помощью iptables, блокирует соединения через запрет доступа в
В этом уроке я собираюсь продемонстрировать как настроить fail2ban для защиты сервера Apache HTTP. Я предполагаю, что у вас уже установлены сервер Apache HTTP и fail2ban. Возможно вас также заинтересует инструкция “Как защитить SSH сервер от атаки методом перебора (грубой силой – брут-форсинга) используя fail2ban“.
Что такое джейл Fail2ban
Давайте немного остановимся на деталях по джэйлам fail2ban. Джэйл определяет специфичные для приложения политики при которых срабатывают триггеры fail2ban на действие, предназначенное для защиты приложения. fail2ban поставляется с несколькими предопределёнными джэйлами в
Конфигурация джэйла SSH определяется несколькими параметрами:
Предопределённые фильтры логов лежат в
Если вы хотите переписать значения по умолчанию в fail2ban или задать любые пользовательские джэйлы, вы можете сделать это в файле
Включение предопределённых джэйлов для Apache
Установка по умолчанию fail2ban предлагает несколько предопределённых джэйлов и фильтров для сервера Apache HTTP. Я собираюсь задействовать эти встроеные джэйлы Апача. Из-за незначительных различий в конфигурации Debian и Red Hat, позвольте мне рассмотреть конфигурацию джэйлов fail2ban для них раздельно.
Включение Apache Jails на Debian или Ubuntu
Для включения предопределённых джэйлов Apache на основанных на Debian системах, создайте
Поскольку ни один из джэйлов выше не определяет действие, все эти джэйлы будут выполнять действие по умолчанию, когда сработает триггер. Чтобы узнать действие по умолчанию, загляните в параметр “banaction” в секции [DEFAULT] в
В нашем случае, действие по умолчанию — это iptables-multiport (предопределено в
После включения джэйлов, вы должны перезапустить fail2ban для загрузки джэйлов.
Включение Apache Jails на CentOS/RHEL или Fedora
Для включения предопределнных джэйлов Апача в системах основанных на Red Hat, создайте
Обратите внимание, что действие по умолчанию для всех этих джэйлов — это iptables-multiport (предопределено в “banaction” в секции секции [DEFAULT] в
После включения джэйлов вам нужно перезапустить fail2ban для загрузки новых джэйлов в fail2ban.
На Fedora или CentOS/RHEL 7:
На CentOS/RHEL 6:
Проверка и управления статусами и банами Fail2ban
После того, как джэйлы активированы, вы можете мониторить текущее состояние банов в утилите командной строки fail2ban-client.
Чтобы посмотреть список активных джэйлов:
Чтобы посмотреть статус определённого джэйла (в том числе список забанненых IP):
Вы также можете вручную забанить или разбанить IP адреса.
Для бана IP адреса в определённом джэйле:
Для разблокировки IP адреса в определённом джэйле:
Заключение
Этот урок объясняет, как работают джэйлы fail2ban и как защитить сервер Apache HTTP используя встроенные джэйлы для Апача. В зависимости от окружения, типа ваших веб-сервисов и ваших нужд в защите, вам может понадобиться адаптировать существующие джэйлы или написать собственные джэйлы и фильтры логов. Зайдите на официальную страницу Github проекта outfail2ban для более актуальных примеров джэйлов и фильтров.
Вы используете в каких-либо своих продуктах fail2ban? Поделитесь своим опытом.
Сервер Apache HTTP поставляется с полной совместимой системой логирования для захвата различных ненормальных событий, служащих индикатором таких атак. Тем не менее, это не тривиальная задача систематически парсить детальные логи Апача и быстро реагировать на потенциальные атаки (например забанить/разбанить подозрительные IP адреса), т. к. они совершенно непредсказуемы. И тогда, чтобы облегчить им жизнь, на помощь системный администраторам приходит fail2ban.
Fail2ban — это инструмент с открытым кодом, он предназначен для предотвращения различных атак, он основывается на системных логах и автоматически инициализирует превентивные меры, например, банит IP адрес с помощью iptables, блокирует соединения через запрет доступа в
/etc/hosts
или предупреждает о событиях по почте. fail2ban поставляется с набором предопределённых джэйлов (“jails”), которые используют определённые приложением фильтры логов для выявления общих атак. Вы также можете написать собственные джэйлы для сдерживания любых специфичных атак на произвольные приложения.В этом уроке я собираюсь продемонстрировать как настроить fail2ban для защиты сервера Apache HTTP. Я предполагаю, что у вас уже установлены сервер Apache HTTP и fail2ban. Возможно вас также заинтересует инструкция “Как защитить SSH сервер от атаки методом перебора (грубой силой – брут-форсинга) используя fail2ban“.
Что такое джейл Fail2ban
Давайте немного остановимся на деталях по джэйлам fail2ban. Джэйл определяет специфичные для приложения политики при которых срабатывают триггеры fail2ban на действие, предназначенное для защиты приложения. fail2ban поставляется с несколькими предопределёнными джэйлами в
/etc/fail2ban/jail.conf
, для популярных приложений, таких как Apache, Dovecot, Lighttpd, MySQL, Postfix, SSH и так далее. Каджый джэйл полагается на фильтры, которые различные для каждого приложения (они лежат в /etc/fail2ban/fileter.d
) для определения общих атак. Давайте изучим один из примеров джэйла: SSH jail.
Код:
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
banaction = iptables-multiport
- [ssh]: имя джэйла в квадратных скобках.
- enabled: активирован ли джэйл.
- port: номер порта для защиты (может быть номер или хорошо известное имя).
- filter: правило парсинга лога для выявления атаки.
- logpath: файл лога для изучения.
- maxretry: максимальное число ошибок перед баном.
- banaction: действие по бану.
Предопределённые фильтры логов лежат в
/etc/fail2ban/filter.d
а доступные действия в /etc/fail2ban/action.d
Если вы хотите переписать значения по умолчанию в fail2ban или задать любые пользовательские джэйлы, вы можете сделать это в файле
/etc/fail2ban/jail.local
file. В этом уроке я собираюсь использовать /etc/fail2ban/jail.local
Включение предопределённых джэйлов для Apache
Установка по умолчанию fail2ban предлагает несколько предопределённых джэйлов и фильтров для сервера Apache HTTP. Я собираюсь задействовать эти встроеные джэйлы Апача. Из-за незначительных различий в конфигурации Debian и Red Hat, позвольте мне рассмотреть конфигурацию джэйлов fail2ban для них раздельно.
Включение Apache Jails на Debian или Ubuntu
Для включения предопределённых джэйлов Apache на основанных на Debian системах, создайте
/etc/fail2ban/jail.local
как показано ниже.
Bash:
$ sudo vi /etc/fail2ban/jail.local
Apache-конфиг:
# выявляем неудачные попытки ввода пароля
[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-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
Apache-конфиг:
banaction = iptables-multiport
/etc/fail2ban/action.d/iptables-multiport.conf
). Это действие банит IP адреса используя iptables с модулем мультипорт (multiport module).После включения джэйлов, вы должны перезапустить fail2ban для загрузки джэйлов.
Bash:
$ sudo service fail2ban restart
Включение Apache Jails на CentOS/RHEL или Fedora
Для включения предопределнных джэйлов Апача в системах основанных на Red Hat, создайте
/etc/fail2ban/jail.local
как показано ниже.
Bash:
$ sudo vi /etc/fail2ban/jail.local
Apache-конфиг:
# выявляем неудачные попытки ввода пароля
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/httpd/*error_log
maxretry = 6
# выявляем спамерких ботов, ищущих имейлы
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
logpath = /var/log/httpd/*access_log
bantime = 172800
maxretry = 1
# выявление, потенциальный поиск эксплойтов и php
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/httpd/*error_log
maxretry = 6
# выявляем попытки переполнения Апача
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/httpd/*error_log
maxretry = 2
# выявляем неудачные попытки в поиске домашней директории на сервере
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/httpd/*error_log
maxretry = 2
# выявляем неудачные попытки выполнить не существующие скрипты
# которые ассоциированы с некоторым популярными веб-сервисами
# например, webmail, phpMyAdmin, WordPress
port = http,https
filter = apache-botsearch
logpath = /var/log/httpd/*error_log
maxretry = 2
/etc/fail2ban/jail.conf
). Это действие банит IP адреса используя iptables с модулем мультипорт (multiport module).После включения джэйлов вам нужно перезапустить fail2ban для загрузки новых джэйлов в fail2ban.
На Fedora или CentOS/RHEL 7:
Bash:
$ sudo systemctl restart fail2ban
Bash:
$ sudo service fail2ban restart
Проверка и управления статусами и банами Fail2ban
После того, как джэйлы активированы, вы можете мониторить текущее состояние банов в утилите командной строки fail2ban-client.
Чтобы посмотреть список активных джэйлов:
Bash:
$ sudo fail2ban-client status
Bash:
$ sudo fail2ban-client status [name-of-jail]
Вы также можете вручную забанить или разбанить IP адреса.
Для бана IP адреса в определённом джэйле:
Bash:
$ sudo fail2ban-client set [name-of-jail] banip [ip-address]
Bash:
$ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]
Заключение
Этот урок объясняет, как работают джэйлы fail2ban и как защитить сервер Apache HTTP используя встроенные джэйлы для Апача. В зависимости от окружения, типа ваших веб-сервисов и ваших нужд в защите, вам может понадобиться адаптировать существующие джэйлы или написать собственные джэйлы и фильтры логов. Зайдите на официальную страницу Github проекта outfail2ban для более актуальных примеров джэйлов и фильтров.
Вы используете в каких-либо своих продуктах fail2ban? Поделитесь своим опытом.