Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Сервер 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.

16076581722_4d51bf2ce8_o

Если вы хотите переписать значения по умолчанию в fail2ban или задать любые пользовательские джэйлы, вы можете сделать это в файле /etc/fail2ban/jail.local file. В этом уроке я собираюсь использовать /etc/fail2ban/jail.local.

Включение предопределённых джэйлов для Apache

Установка по умолчанию fail2ban предлагает несколько предопределённых джэйлов и фильтров для сервера Apache HTTP. Я собираюсь задействовать эти встроеные джэйлы Апача. Из-за незначительных различий в конфигурации Debian и Red Hat, позвольте мне рассмотреть конфигурацию джэйлов fail2ban для них раздельно.


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


Включение Apache Jails на Debian или Ubuntu

Для включения предопределённых джэйлов Apache на основанных на Debian системах, создайте /etc/fail2ban/jail.local как показано ниже.

$ sudo vi /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-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.

banaction = iptables-multiport

В нашем случае, действие по умолчанию — это iptables-multiport (предопределено в /etc/fail2ban/action.d/iptables-multiport.conf). Это действие банит IP адреса используя iptables с модулем мультипорт (multiport module).

После включения джэйлов, вы должны перезапустить fail2ban для загрузки джэйлов.

$ sudo service fail2ban restart

Включение Apache Jails на CentOS/RHEL или Fedora

Для включения предопределнных джэйлов Апача в системах основанных на Red Hat, создайте /etc/fail2ban/jail.local как показано ниже.

$ sudo vi /etc/fail2ban/jail.local
# выявляем неудачные попытки ввода пароля
[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:

$ sudo systemctl restart fail2ban

На CentOS/RHEL 6:

$ sudo service fail2ban restart

Проверка и управления статусами и банами Fail2ban

После того, как джэйлы активированы, вы можете мониторить текущее состояние банов в утилите командной строки fail2ban-client.

Чтобы посмотреть список активных джэйлов:

$ sudo fail2ban-client status

Чтобы посмотреть статус определённого джэйла (в том числе список забанненых IP):

$ sudo fail2ban-client status [name-of-jail]

15891521967_4005b1540f_o

Вы также можете вручную забанить или разбанить IP адреса.

Для бана IP адреса в определённом джэйле:

$ sudo fail2ban-client set [name-of-jail] banip [ip-address]

Для разблокировки IP адреса в определённом джэйле:

$ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]

Заключение

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

Вы используете в каких-либо своих продуктах fail2ban? Поделитесь своим опытом.


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices