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

Вступление

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

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

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

Предпосылки

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

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

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

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

sudo apt-get update
sudo apt-get install apache2

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

Установить Fail2Ban

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

sudo apt-get update
sudo apt-get install fail2ban

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

Настройка общих настроек в Fail2Ban

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

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

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

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

sudo nano /etc/fail2ban/jail.local

Изменение настроек по умолчанию

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

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

/etc/fail2ban/jail.local

[DEFAULT]

. . .
ignoreip = 127.0.0.1/8 your_home_IP

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

/etc/fail2ban/jail.local

[DEFAULT]

. . .
bantime = 3600

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

/etc/fail2ban/jail.local

[DEFAULT]

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

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

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

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

/etc/fail2ban/jail.local

[DEFAULT]

. . .
mta = mail

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

/etc/fail2ban/jail.local

[DEFAULT]

. . .
destemail = [email protected]
sendername = Fail2BanAlerts

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

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

/etc/fail2ban/jail.local

[DEFAULT]

. . .
action = %(action_mwl)s

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

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

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

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

/etc/fail2ban/jail.local

[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 для этой тюрьмы, если вы хотите установить другие ограничения для этой конкретной тюрьмы:

/etc/fail2ban/jail.local

[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 или любой другой язык в сочетании с вашим веб-сервером, вы можете включить эту тюрьму, чтобы запретить тем, кто запрашивает следующие типы ресурсов:

/etc/fail2ban/jail.local

[apache-noscript]

enabled  = true
. . .

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

/etc/fail2ban/jail.local

[apache-overflows]

enabled  = true
. . .

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

/etc/fail2ban/jail.local

[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:

/etc/fail2ban/jail.local

[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). Вы можете использовать шаблон, похожий на тот, который соответствует журналу ошибок в других тюрьмах:

/etc/fail2ban/jail.local

[php-url-fopen]

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

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

Реализация ваших Apache Jails

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

sudo service fail2ban restart

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

Получение информации о включенных тюрьмах

Вы можете увидеть все свои включенные тюрьмы, используя командуfail2ban-client:

sudo fail2ban-client status

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

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

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

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:

sudo fail2ban-client status apache
OutputStatus 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
OutputStatus 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 для защиты вашего сервера Apache в простейшем случае довольно просто. Однакоfail2ban обеспечивает большую гибкость для создания политик, которые будут соответствовать вашим конкретным потребностям безопасности. Взглянув на переменные и шаблоны в файле/etc/fail2ban/jail.local, а также на файлы, от которых он зависит, в каталогах/etc/fail2ban/filter.d и/etc/fail2ban/action.d, вы можете найти множество элементов, которые можно настроить и изменить по мере необходимости. необходимо развиваться. Изучение основ защиты сервера с помощьюfail2ban может обеспечить большую безопасность с минимальными усилиями.

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

Related