Поиск по сайту:

Как защитить сервер Apache с помощью Fail2Ban в Ubuntu 14.04


Введение

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

Настройка fail2ban может решить эту проблему. Когда пользователям неоднократно не удается пройти аутентификацию в службе (или они участвуют в других подозрительных действиях), fail2ban может временно заблокировать нарушающий IP-адрес, динамически изменяя текущую политику брандмауэра. Каждая «тюрьма» fail2ban работает путем проверки журналов, записанных службой, на наличие шаблонов, указывающих на неудачные попытки. Настроить fail2ban для мониторинга журналов Apache легко с помощью прилагаемых фильтров конфигурации. .

В этом руководстве мы покажем, как установить fail2ban и настроить его для отслеживания попыток вторжения в ваши журналы Apache. Мы будем использовать сервер Ubuntu 14.04.

Предпосылки

Прежде чем начать, у вас должен быть настроен сервер Ubuntu 14.04 с учетной записью без полномочий root. Эта учетная запись должна быть настроена с привилегиями sudo для выполнения административных команд. Чтобы узнать, как настроить пользователя с привилегиями sudo, следуйте нашему руководству по первоначальной настройке сервера для Ubuntu 14.04.

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

Если вы заинтересованы в защите своего сервера Apache с помощью fail2ban, возможно, у вас уже настроен и работает сервер. Если нет, вы можете установить Apache из стандартных репозиториев Ubuntu, используя apt.

Обновите локальный индекс пакетов и установите, набрав:

  1. sudo apt-get update
  2. sudo apt-get install apache2

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

Установить Fail2Ban

Как только ваш сервер Apache заработает и будет включена аутентификация по паролю, вы можете приступить к установке fail2ban (здесь мы включаем повторную выборку другого репозитория на случай, если вы уже настроили Apache на предыдущих шагах):

  1. sudo apt-get update
  2. sudo apt-get install fail2ban

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

Изменение общих настроек в Fail2Ban

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

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

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

Откройте только что скопированный файл, чтобы мы могли настроить мониторинг журнала Apache:

  1. sudo nano /etc/fail2ban/jail.local

Изменение значений по умолчанию

Мы должны начать с оценки значений по умолчанию, установленных в файле, чтобы увидеть, соответствуют ли они нашим потребностям. Их можно найти в разделе [DEFAULT] файла. Эти элементы устанавливают общую политику, и каждый из них может быть переопределен в определенных тюрьмах.

Одним из первых элементов, на который следует обратить внимание, является список клиентов, на которых не распространяются политики fail2ban. Это задается директивой ignoreip. Иногда рекомендуется добавить свой собственный IP-адрес или сеть в список исключений, чтобы не заблокировать себя. Это менее проблематично при входе в систему веб-сервера, если вы можете поддерживать доступ к оболочке, поскольку вы всегда можете вручную отменить запрет. Вы можете добавить дополнительные IP-адреса или сети, разделенные пробелом, в существующий список:

[DEFAULT]

. . .
ignoreip = 127.0.0.1/8 your_home_IP

Еще один элемент, который вы можете настроить, — это bantime, который определяет, на сколько секунд нарушитель будет забанен. Идеально установить это время на достаточно долгое, чтобы нарушить усилия злоумышленника, и в то же время достаточно короткое, чтобы законные пользователи могли исправить ошибки. По умолчанию установлено значение 600 секунд (10 минут). Увеличьте или уменьшите это значение по своему усмотрению:

[DEFAULT]

. . .
bantime = 3600

Следующие два элемента определяют объем строк журнала, используемых для определения клиента-нарушителя. Директива findtime указывает количество времени в секундах, а директива maxretry указывает допустимое количество попыток в течение этого времени. Если клиент сделает больше попыток, чем maxretry в течение времени, установленного findtime, он будет забанен:

[DEFAULT]

. . .
findtime = 3600   # These lines combine to ban clients that fail
maxretry = 6      # to authenticate 6 times within a half hour.

Настройка почтовых уведомлений (необязательно)

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

После того, как вы настроили свой MTA, вам нужно будет настроить некоторые дополнительные параметры в разделе [DEFAULT] файла /etc/fail2ban/jail.local. Начните с установки директивы mta. Если вы настроили Postfix, как показано в приведенном выше руководстве, измените это значение на «mail»:

[DEFAULT]

. . .
mta = mail

Вам необходимо выбрать адрес электронной почты, на который будут приходить уведомления. Измените директиву destemail, указав это значение. Директиву sendername можно использовать для изменения поля \Отправитель в электронных письмах с уведомлением:

[DEFAULT]

. . .
destemail = youraccount@email.com
sendername = Fail2BanAlerts

На языке fail2ban «действие» — это процедура, выполняемая, когда клиент слишком много раз не проходит аутентификацию. Действие по умолчанию (называемое action_) — просто заблокировать IP-адрес. с рассматриваемого порта.Однако есть два других готовых действия, которые можно использовать, если у вас настроена почта.

Вы можете использовать действие action_mw, чтобы заблокировать клиент и отправить уведомление по электронной почте на настроенную учетную запись с отчетом \whois по адресу, нарушающему правила. Вы также можете использовать action_mwl действие, которое делает то же самое, но также включает строки журнала, вызывающие запрет:

[DEFAULT]

. . .
action = %(action_mwl)s

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

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

Каждый джейл в файле конфигурации отмечен заголовком, содержащим имя джейла в квадратных скобках (каждый раздел, кроме раздела [DEFAULT], указывает конкретную конфигурацию джейла). По умолчанию включена только тюрьма [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 или любой другой язык в сочетании с вашим веб-сервером, вы можете включить этот джейл, чтобы запретить тем, кто запрашивает эти типы ресурсов:

[apache-noscript]

enabled  = true
. . .

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

[apache-overflows]

enabled  = true
. . .

Некоторые дополнительные проверки можно выполнить, скопировав и вставив запись [apache-overflows] и немного изменив ее. Например, вы можете скопировать и вставить этот раздел, изменить имя тюрьмы и отфильтровать его до apache-badbots, чтобы остановить некоторые известные шаблоны запросов вредоносных ботов:

[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

Когда вы закончите вносить необходимые изменения, сохраните и закройте файл.

Внедрение ваших Apache Jails

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

  1. sudo service fail2ban restart

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

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

Вы можете просмотреть все включенные джейлы с помощью команды fail2ban-client:

  1. sudo fail2ban-client status

Вы должны увидеть список всех джейлов, которые вы включили:

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

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

  1. sudo iptables -S
Output
-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

Если вы хотите увидеть подробную информацию о банах, применяемых какой-либо одной тюрьмой, вероятно, будет проще снова использовать fail2ban-client:

  1. sudo fail2ban-client status apache
Output
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-адрес забанен на сайте:

  1. sudo fail2ban-client status apache
Output
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, набрав:

  1. sudo fail2ban-client set apache unbanip 111.111.111.111

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

Заключение

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

Чтобы узнать больше о fail2ban, взгляните на некоторые из этих ссылок:

  • Как работает Fail2Ban для защиты служб на сервере Linux
  • Как защитить SSH с помощью Fail2Ban в Ubuntu 14.04
  • Как защитить сервер Nginx с помощью Fail2Ban в Ubuntu 14.04