Защита Apache с помощью fail2ban в Ubuntu 14.04

При работе с веб-сервером важно своевременно обеспечить защиту сайта и пользователей. Защита веб-сайтов и приложений с помощью брандмауэра и ограничение доступа к отдельным компонентам при помощи паролей смогут обеспечить достаточный уровень безопасности системы. Однако любая общедоступная форма ввода пароля, вероятно, привлечет внимание злоумышленников и автоматизированных ботов brute force атак.

Утилита fail2ban может значительно снизить вероятность подобных атак. Если пользователь не может пройти аутентификацию за определенное количество попыток, fail2ban временно заблокирует его IP-адрес, динамически изменяя действующую политику брандмауэра. Утилита хранит настройки в jail; эти конфигурационные файлы проверяют логи сервисов на наличие сообщений о неудачных попытках аутентификации. Настроить fail2ban для поддержки Apache довольно просто, так как утилита предлагает встроенные фильтры.

Данное руководство научит вас устанавливать fail2ban и настраивать утилиту для мониторинга Apache в Ubuntu 14.04.

Требования

Установка Apache и настройка парольной аутентификации

Примечание: Если веб-сервер Apache уже установлен и защищен паролем, пропустите этот раздел.

Веб-сервер Apache можно установить с помощью пакетного менеджера apt, предварительно обновив индекс пакетов:

sudo apt-get update
sudo apt-get install apache2

Сервис fail2ban помогает защитить точки входа в систему. Настройте парольную аутентификацию хотя бы на нескольких страницах сайта. В этом вам поможет руководство Настройка авторизации на основе пароля на Apache в Ubuntu 14.04.

Установка fail2ban

Установив Apache и настроив аутентификацию, можно приступать к установке утилиты fail2ban.

sudo apt-get update
sudo apt-get install fail2ban

По умолчанию утилита fail2ban блокирует только неудачные попытки входа в SSH. Теперь нужно настроить fail2ban для мониторинга в логах Apache сообщений, указывающих на вредоносную активность.

Настройка общих параметров fail2ban

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

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

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Откройте jail.local, чтобы добавить настройки для мониторинга Nginx.

sudo nano /etc/fail2ban/jail.local

Отладка стандартных параметров

Для начала нужно рассмотреть раздел [DEFAULT]. Параметры этого раздела будут применяться ко всем сервисам, которые поддерживает fail2ban (если только эти значения не переопределяются в конфигурационных файлах этих сервисов).

Сначала следует определить здесь список клиентов, на которые политика fail2ban не должна распространяться. Директива ignoreip настраивает исходные адреса, которые fail2ban будет игнорировать. В работе с веб-серверами она не так важна, поскольку вы всегда можете вручную отменить блокировку. По умолчанию она пропускает любой трафик, поступающий с локальной машины.  Вы можете добавить другие адреса, которые нужно игнорировать, поместив их в конец директивы ignoreip через пробел.

[DEFAULT]
. . .
ignoreip = 127.0.0.1/8 your_home_IP

Параметр bantime устанавливает время, в течение которого клиент будет заблокирован, если он не смог пройти аутентификацию. В идеале значение этой директивы должно быть достаточно большим, чтобы заблокировать вредоносных пользователей, и в то же время позволять обычным пользователям исправлять свои ошибки. Значение bantime измеряется в секундах. По умолчанию установлено значение 600 секунд (10 минут).

[DEFAULT]
. . .
bantime = 3600

Следующие два параметра – findtime и maxretry – определяют условия, при которых будут блокироваться вредоносные пользователи.

Директива maxretry задает количество попыток входа, а findtime – интервал времени, в течение которого пользователь должен пройти аутентификацию. Если клиент превысил любой из этих показателей, он будет заблокирован.

[DEFAULT]
. . .
findtime = 3600
maxretry = 6

Настройка электронных уведомлений (опционально)

Вы можете включить отправку уведомлений по электронной почте. Для этого необходимо сначала настроить на своем сервере MTA, чтобы он мог отправлять электронную почту. Чтобы узнать, как использовать для этого Postfix, следуйте этому руководству.

Установив MTA-сервер, найдите раздел [DEFAULT] в файле /etc/fail2ban/jail.local. Если вы установили Postfix, укажите в директиве mta значение mail.

[DEFAULT]
. . .
mta = mail

Параметр destemail определяет адрес электронной почты, который должен получать сообщения о заблокированных пользователях. Параметр sendername задает отправителя сообщения. Добавьте эти параметры в jail.local в раздел [DEFAULT] и установите соответствующие значения.

[DEFAULT]
. . .
destemail = youraccount@email.com
sendername = Fail2BanAlerts

Параметр action настраивает действие fail2ban в случае блокировки. Действие по умолчанию заблокирует трафик, исходящий от IP-адреса злоумышленника, до истечения времени бана путем перенастройки брандмауэра.

Если вы хотите настроить оповещения по электронной почте, добавьте или раскомментируйте элемент action в файл jail.local и измените его значение с action_ на action_mw. Если вы хотите, чтобы письмо включало соответствующие строки из логов, вы можете указать значение action_mwl. Если вы решили использовать электронные оповещения, убедитесь, что настройки почты их поддерживают.

[DEFAULT]
. . .
action = %(action_mwl)s

Настройка fail2ban для мониторинга логов Apache

Определив общие параметры fail2ban, можно приступать к настройке поддержки логов Apache.

Для определения индивидуальных параметров сервисов утилита fail2ban использует jail – это раздел специальных директив в конфигурационном файле утилиты. Каждый такой раздел отмечается заголовком в квадратных скобках; исключение – раздел [DEFAULT], который хранит общие настройки утилиты. По умолчанию поддерживается только jail для [ssh].

Чтобы включить поддержку мониторинга логов Apache, нужно включить раздел [apache]. Для этого найдите в этом разделе директиву enabled и измените ее значение на true.

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6
. . .

Если логи Apache находятся по стандартному пути (/var/log/apache/error.log), этот раздел уже готов к работе. Если вы переместили логи в другое место, укажите правильный путь в директиве logpath. Также можно исправить значение в директиве maxretry или добавить findtime в этот раздел.

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache/custom_log_location.log
maxretry = 3
findtime = 600
. . .

Этот раздел будет блокировать базовые ошибки аутентификации. Также утилита предлагает несколько предварительно сконфигурированных разделов, которые стоит включить (раздел [apache-multiport] включает пожизненную блокировку и редко используется).

Раздел [apache-noscript] будет банить клиентов, которые ищут на веб-сайте уязвимые сценарии. Если вы не используете PHP или какой-либо другой язык программирования вместе с веб-сервером, вы можете добавить этот раздел, чтобы забанить тех, кто запрашивает эти типы ресурсов. Добавьте в jail.local:

[apache-noscript]
enabled  = true
. . .

Раздел [apache-overflows] блокирует клиентов, которые запрашивают необычно длинные и подозрительные URL-адреса. Такое поведение часто указывает на попытку вызвать переполнение буфера и таким образом использовать уязвимость Apache. Вы можете включить этот раздел, если хотите предотвратить эти типы атак:

[apache-overflows]
enabled  = true
. . .

Раздел [apache-badbots] может распознавать известные шаблоны запросов вредоносных ботов и блокировать их. Чтобы создать такой раздел, скопируйте и вставьте в файл раздел [apache-overflows], а затем слегка откорректируйте его.

[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*error.log
maxretry = 2

Если в вашей настройке Apache не предоставляет доступа к веб-контенту в домашних каталогах пользователей, вы можете заблокировать пользователей, которые запрашивают эти ресурсы, добавив раздел [apache-nohome]:

[apache-overflows]
enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2
[apache-badbots]
enabled  = true
port     = http,https
filter   = apache-badbots
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

Если вы используете Apache с PHP, вам может понадобиться раздел [php-url-fopen], который блокирует попытки злоумышленников использовать определенное поведение PHP. В директиве logpath нужно указать правильное местоположение лога доступа (в Ubuntu по умолчанию это /var/log/apache2/access.log). Вы можете использовать этот раздел как шаблон для написания раздела для лога ошибок.

[php-url-fopen]
enabled = true
port    = http,https
filter  = php-url-fopen
logpath = /var/log/apache*/*access.log

Сохраните и закройте файл.

Перезапуск fail2ban

Чтобы обновить настройки утилиты, перезапустите fail2ban:

sudo service fail2ban restart

Сервис перезапустится и применит новые политики блокировки, которые вы настроили.

Получение информации о включенных разделах jail

Вы можете просмотреть все активированные разделы с помощью этой команды:

sudo fail2ban-client status
Status
|- Number of jail:      7
`- Jail list:           php-url-fopen, apache-overflows, apache-noscript, ssh, apache-badbots, apache-nohome, apache

Вы можете запросить текущие правила iptables, чтобы увидеть, как утилита fail2ban изменила правила брандмауэра, чтобы создать структуру для блокировки клиентов. Теперь fail2ban сможет выборочно блокировать клиентов, добавляя их в специальные цепочки брандмауэра:

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-apache
-N fail2ban-apache-badbots
-N fail2ban-apache-nohome
-N fail2ban-apache-noscript
-N fail2ban-apache-overflows
-N fail2ban-php-url-fopen
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-nohome
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-php-url-fopen
-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-nohome -j RETURN
-A fail2ban-apache-noscript -j RETURN
-A fail2ban-apache-overflows -j RETURN
-A fail2ban-php-url-fopen -j RETURN
-A fail2ban-ssh -j RETURN

Чтобы просмотреть подробности блокировки клиентов одним из разделов jail, можно ввести:

sudo fail2ban-client status apache
Status for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
|- Currently banned: 0
|  `- IP list:
`- Total banned:     0

Тестирование политик fail2ban

Важно проверить работу политик fail2ban, чтобы утилита блокировала трафик должным образом. Для этого попробуйте несколько раз ввести неверные учетные данные в форму входа Apache. После того, как вы превысите предел, вы должны быть заблокированы и не сможете получить доступ к сайту. Если вы настроили уведомления по электронной почте, вы должны получить сообщение о блокировке.

Проверьте состояние с помощью fail2ban-client. Вы должны увидеть свой IP в списке заблокированных.

sudo fail2ban-client status apache
Status for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log
|  |- Currently failed: 0
|  `- Total failed:     12
`- action
|- Currently banned: 1
|  `- IP list:       111.111.111.111
`- Total banned:     1

Убедившись, что утилита работает правильно, разблокируйте свой IP вручную с помощью fail2ban-client.

sudo fail2ban-client set apache unbanip 111.111.111.111

Теперь можно снова попробовать пройти аутентификацию.

Заключение

fail2ban – очень гибкий инструмент. Он позволяет разрабатывать политики, которые будут соответствовать конкретным требованиям безопасности. Вы можете самостоятельно ознакомиться с остальными переменными и шаблонами в файле /etc/fail2ban/jail.local и в каталогах /etc/fail2ban/filter.d и /etc/fail2ban/action.d, Знание основ защиты сервера с помощью fail2ban может обеспечить вашей машине более высокий уровень безопасности.

Читайте также:

Tags: , ,