Если у вас есть сервер или компьютер, напрямую подключены к интернету, то они подвержены определенному риску. Сейчас любой интернет сервер или VPS является потенциальной мишенью для хакерских атак. Правильно настроенный фаервол может предотвратить многие из атак. Но вам по-прежнему нужно оставить открытыми некоторые службы, чтобы иметь возможность администрировать сервер, например, SSH.
Этот протокол часто является мишенью перебора. Но к счастью есть решение. Инструмент Fail2ban позволяет блокировать доступ с IP адресов при большом количестве неверных логинов. Программа fail2ban может использоваться не только для SSH, она может защитить различные формы веб-аутентификации, FTP, и предотвратить DoS атаки на сервер. В этой статье мы рассмотрим как выполняется установка и настройка Fail2ban CentOS 7 поскольку эта операционная система часто используется для серверов.
Установка fail2ban
Программа fail2ban очень часто используется для защиты серверов, поэтому она есть в официальном репозитории EPEL. Для установки программы сначала добавим репозиторий:
yum update && sudo yum install epel-release
Затем установка fail2ban centos 7:
sudo yum install fail2ban
После установки уже будет загружена базовая конфигурация программы, так что чтобы уже начать защищать ваш сервер, запустите ее с помощью системы управления службами:
sudo systemctl start fail2ban
Настройка fail2ban CentOS 7
Все конфигурационные файлы программы находятся в папке /etc/fail2ban. Вот основные файлы, которые мы будем использовать:
- fail2ban.conf – пример выполнения основных настроек программы;
- jail.conf – пример настройки запрещающих правил;
- jail.d – папка с конфигурационными файлами пользователя, для настройки правил запрета;
- action.d – файлы, в которых описываются действия, выполняемые при блокировке;
- filter.d – в этих файлах описываются способы разбора журналов программ для поиска неудачных попыток входа.
Никакие параметры в существующих файлах менять нельзя, они будут обновлены при обновлении программы, а значит что все ваши изменения будут стерты. Для установки своих настроек необходимо создать файл с таким же именем и расширением .local. Например, создаем файл для настройки jail.conf:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Теперь мы можем изменить здесь любые настройки, которые вам не нравятся в основном файле. Конфигурационный файл разделен на секции в зависимости от назначения опций. В секции [DEFAULT] находятся общие настройки, затем следуют отдельные секции для каждой блокировки отдельно. Опции по умолчанию и так неплохо работают, но в некоторых случаях дополнительная настройка может быть очень полезной.
Блокировку можно настроить, с помощью различных параметров. Вот самые важные из них:
- ignoreip – задает список ip адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения, так что выбирайте их аккуратно. Диапазоны и IP адреса стоит разделить пробелом. Сюда можно добавить локальный ip, а также свой домашний адрес, чтобы у вас не возникло проблем при входе;
- bantime – указывает время, на которое клиенту буде закрыт доступ к серверу, если он не сможет авторизоваться, в секундах;
- maxretry – указывает количество попыток перед тем, как доступ будет заблокирован;
- findtime – время в секундах, на протяжении которого рассчитывается maxretry.
В нашем примере пользователь будет заблокирован на 600 секунд после 5-ти неудачных попыток:
По умолчанию, в CentOS все блокировки отключены, чтобы их включить замените значение строчки enabled на true. Но не рекомендуется так делать, потому что вам придется удалить из конфига все ненужные правила блокировки, иначе они вызовут ошибку запуска. Также можно включить обработку каждого приложения отдельно:
Дальше нам необходимо настроить действия для запрета, а поддерживается их несколько вариантов. Как только нужно выполнить блокировку, программа примет решение на основе следующих параметров:
- banaction – этот параметр определяет файл конфигурации способа блокировки, который нужно использовать. Обычно указывает на файл в папке /etc/fail2ban/action.d/ в котором записаны команды для блокировки. По умолчанию применяется iptables;
- action – с помощью параметров action задаются ярлыки дополнительных действий, которые выполняется после banaction. Сценарию передается имя, порт, протокол, цель и сценарий.
Настройка Email оповещений
Если вы хотите настроить оповещение о срабатывании блокировки Fail2ban по электронной почте, это тоже настраивается в разделе [DEFAULT]. Только необходимо чтобы на вашей машине был настроен почтовый сервер и он мог отправлять письма на внешний адрес. Иначе все письма будут доставлены к локальной учетной записи Linux.
Для настройки используются два параметра:
- destemail – этот параметр задает адрес электронной почты, на который вы хотите получать сообщения. Значение по умолчанию root@localhost;
- mta – определяет почтовый агент, который будет использоваться для доставки почты. Если у вас настроен Sendmail, оставьте значение по умолчанию. Если же письма нужно доставлять на локальную машину поменяйте значение на mail.
- Также для локальной почты нужно заменить строчку action_mw на action_mwl:
Дальше для проверки почты можно посмотреть файл /var/mail/mail:
cat /var/mail/mail
Настройка отдельных приложений
Сразу после настроек раздела по умолчанию вы увидите разделы, обозначенные вот так: [имя_приложения]. Рассмотрим основные используемые параметры:
- filter – указывает имя файла в каталоге /etc/fail2ban/filter.d/ Он сообщает программе как анализировать журнал сервиса и находить неудачные попытки входа;
- logpath – путь к лог файлу службы, куда она записывает неудачные попытки входа;
Также здесь можно переопределять любой из параметров по умолчанию, например, maxretry, а с помощью параметра enabled вы можете включить только нужные блокировщики. По умолчанию настроены правила блокировки не только для ssh, но и для многих других сервисов, например, различных способов аутентификации http, ftp, аутентификации в почте и так далее.
Например, для активации блокировки неверных входов SSH, приведите секцию [sshd] к такому виду:
Настройка Iptables
Обычно, никаких дополнительных настроек для iptables не требуется. Но давайте рассмотрим конфигурационный файл, который отвечает за блокировку, чтобы вы понимали как все работает. Имя этого файла указано в параметре banaction. По умолчанию это iptables-multiport.conf:
vi /etc/fail2ban/action.d/iptables-multiport.conf
Тут мы можем увидеть что приходит после того, как fail2ban решает, что нужно заблокировать доступ для определенного IP адреса. Сначала выполняются такие команды iptables:
Они используются для организации среды передачи трафика в фильтрующей цепочке. Iptables управляет трафиком на основе цепей и каждая из них может иметь правила для всего трафика, которые определяют нужно ли его пропускать или нет. В первой строчке создается новая цепочка с именем fail2ban-имя_службы. Именно в ней будут содержаться все запрещающие правила для этого ip адреса. Вторая строчка возвращает управление цепочке, вызвавшей эту, а третья добавляет правило в основную цепь, которое передает управление на нашу цепочку.
Таким образом, весь входящий трафик с нужного порта обрабатывается нашей цепочкой fail2ban-имя_службы. Сейчас первое правило в ней отправляет трафик обратно в вызывающую цепь, это значит что правление просто передается нам и назад. Но теперь мы можем добавить дополнительные правила.
Для разрушения цепочки используются такие правила:
Теперь, когда нам нужно забанить пользователя программа выполнит команду:
Эта команда говорит, что необходимо отбрасывать все пакеты с этого ip адреса и уже не пытаться определить подлинность данных. Когда время блокировки вышло, она снимается такой командой:
Если вы хотите понять какие правила на данный момент применяются и каким ip адресам запрещен доступ, выполните в терминале:
Завершение настройки
Когда вы завершите настройку, сохраните изменения в конфигурационном файле и перезагрузите сервис fail2ban. Сначала проверяем правильность конфигурации:
sudo fail2ban-client -d
Если все правильно, перезагружаем сервис:
sudo systemctl restart fail2ban
Для проверки своих правил, вы можете выполнить несколько попыток входа с неправильным логином и паролем, например, для службы ssh, если вы настраивали именно ее, как описано в этой статье. Когда вы достигните лимита запросов, ваш сервер даже не будет запрашивать пароля. Затем вы можете еще раз посмотреть правила:
sudo iptables -L
В самом низу, в нашей цепочке вы можете увидеть список забаненых ip fail2ban. Чтобы разбанить любой ip адрес достаточно удалить для него правило.
Теперь вы можете настроить дополнительный уровень защиты для вашего сервера, чтобы обезопасить его от взлома.