• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Как настроить fail2ban для защиты сервера Apache HTTP

Сервер Apache HTTP в производственной среде может оказаться под различного рода атаками. Атакующие могут пытаться получить несанкционированный доступ к ограниченным директориям, используя атаку перебором (брут-форсинг) или выполняя зловредные скрипты. Некоторые вредоносные боты могут сканировать ваши веб-сайты на разного рода уязвимости или собирать e-mail адреса или веб-формы для рассылки спама.

Сервер 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 определяется несколькими параметрами:
  • [ssh]: имя джэйла в квадратных скобках.
  • enabled: активирован ли джэйл.
  • port: номер порта для защиты (может быть номер или хорошо известное имя).
  • filter: правило парсинга лога для выявления атаки.
  • logpath: файл лога для изучения.
  • maxretry: максимальное число ошибок перед баном.
  • banaction: действие по бану.
Любой заданный параметр в конфигурации джэйла перепишет соответствующий параметр по умолчанию, определённый файлами настроек fail2ban. И наоборот, любой отсутствующий параметр будет взять из дефеолтной величины, определённый в секции [DEFAULT].
Предопределённые фильтры логов лежат в /etc/fail2ban/filter.d а доступные действия в /etc/fail2ban/action.d
1575883674191.png

Если вы хотите переписать значения по умолчанию в 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
Поскольку ни один из джэйлов выше не определяет действие, все эти джэйлы будут выполнять действие по умолчанию, когда сработает триггер. Чтобы узнать действие по умолчанию, загляните в параметр “banaction” в секции [DEFAULT] в /etc/fail2ban/jail.conf
Apache-конфиг:
banaction = iptables-multiport
В нашем случае, действие по умолчанию — это 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
Обратите внимание, что действие по умолчанию для всех этих джэйлов — это iptables-multiport (предопределено в “banaction” в секции секции [DEFAULT] в /etc/fail2ban/jail.conf). Это действие банит IP адреса используя iptables с модулем мультипорт (multiport module).
После включения джэйлов вам нужно перезапустить fail2ban для загрузки новых джэйлов в fail2ban.
На Fedora или CentOS/RHEL 7:
Bash:
$ sudo systemctl restart fail2ban
На CentOS/RHEL 6:
Bash:
$ sudo service fail2ban restart

Проверка и управления статусами и банами Fail2ban
После того, как джэйлы активированы, вы можете мониторить текущее состояние банов в утилите командной строки fail2ban-client.
Чтобы посмотреть список активных джэйлов:
Bash:
$ sudo fail2ban-client status
Чтобы посмотреть статус определённого джэйла (в том числе список забанненых IP):
Bash:
$ sudo fail2ban-client status [name-of-jail]
1575883701175.png

Вы также можете вручную забанить или разбанить IP адреса.
Для бана IP адреса в определённом джэйле:
Bash:
$ sudo fail2ban-client set [name-of-jail] banip [ip-address]
Для разблокировки IP адреса в определённом джэйле:
Bash:
$ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]

Заключение
Этот урок объясняет, как работают джэйлы fail2ban и как защитить сервер Apache HTTP используя встроенные джэйлы для Апача. В зависимости от окружения, типа ваших веб-сервисов и ваших нужд в защите, вам может понадобиться адаптировать существующие джэйлы или написать собственные джэйлы и фильтры логов. Зайдите на официальную страницу Github проекта outfail2ban для более актуальных примеров джэйлов и фильтров.

Вы используете в каких-либо своих продуктах fail2ban? Поделитесь своим опытом.
 
  • Нравится
Реакции: Aqueous и Kowalski
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!