Установка и настройка Fail2ban. Защита ssh сервера

Введение

Любая служба, видимая в сети, является потенциальной целью для злоумышленников. Будь то сервер доступный по ssh или сервер телефонии asterisk, или любое другое приложение имеющее выход в публичный интернет. Если вы внимательно читаете журналы приложений этих служб, вы можете увидеть повторяющиеся систематические попытки входа в систему, которые представляют собой попытки bruteforce-атак пользователей или ботов.

Служба Fail2ban может помочь в решении этой проблемы, создавая правила, автоматически изменяющие конфигурацию брандмауэра iptables. Это позволит серверу реагировать на попытки несанкционированного доступа без вашего вмешательства. В терминах Fail2ban такая комбинация фильтрации и действий называется “тюрьмой” (jail). Названо так, потому, что ip адрес блокируется на определенное время, как бы сажается в тюрьму.

В данном руководстве мы рассмотрим установку и использование Fail2ban на примере сервера с CentOS 7. В примере настроим блокировку попыток взлома сервера по ssh

Как работает Fail2ban

Работает утилита следующим образом, при настройке вы указываете путь к файлу логов. Fail2ban отслеживает изменения в лог-файлах служб и при обнаружении в логах определенного количества неудачных попыток входа в систему блокирует ip адрес злоумышленника. Например при неправильном вводе пароля для ssh на сервере Centos 7, в фале логов /var/log/secure регистрируется попытка неудачного входа и появляется строка

Jan 31 22:38:18 localhost sshd[5649]: Failed password for root from 34.56.21.11 port 49302 ssh2

Утилита сравнивает эту строку с регулярным выражением в своих фильтрах. Например эта строка попадает под регулярное выражение в файле /etc/fail2ban/filter.d/sshd.conf

"Failed \S+ for .*? from <HOST>..."

И поэтому эта попытка будет считаться взломом, и если число попыток превышает указанное количество, то ip адрес блокируется через iptables.

Установка Fail2ban в CentOS

Пакета Fail2ban нет в официальном репозитории CentOS, но он есть в репозитории проекта EPEL, что означает Extra Packages for Enterprise Linux (дополнительные пакеты для корпоративных систем Linux). Этот репозиторий можно установить при помощи специального пакета релиза, доступного в CentOS:

yum install epel-release

Теперь у нас должно получиться установить пакет Fail2ban:

yum install fail2ban

После завершения установки включите службу Fail2ban командой systemctl:

systemctl enable fail2ban

Конфигурация локальных параметров

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

Если в jail.local и jail.conf определены одни и те же параметры, будут использоваться значения из файла .local

Параметры конфигурации также могут быть прописаны в файлах, расположенных в директории /etc/fail2ban/jail.d/. Приоритет файлов конфигурации будет следующим (в порядке повышения):

1./etc/fail2ban/jail.conf
2./etc/fail2ban/jail.d/*.conf, в алфавитном порядке
3./etc/fail2ban/jail.local
4./etc/fail2ban/jail.d/*.local, в алфавитном порядке

Файлы конфигурации могут содержать раздел [DEFAULT] с общими настройками и отдельные разделы для “тюрем”. Значения параметров, установленные в отдельных разделах, имеют приоритет. Для начала можно создать простейшую версию jail.local. Откройте новый файл любым текстовым редактором:

vi /etc/fail2ban/jail.local

Вставьте следующий текст:

[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.0.0/24

[ssh-iptables]
enabled  = true
port = ssh 
filter = sshd 
action = iptables[name=sshd, port=ssh, protocol=tcp]
logpath = /var/log/secure

ignoreip — указывает адреса источников, которые Fail2ban будет игнорировать (так называемый белый список). В данном примере она настроена не запрещать трафик с локальной машины и из сети 192.168.0.0/24. Можно указать дополнительные адреса через пробел.

enabled — принимает значение true/false включение отключение тюрьмы

port — В данном случае ssh — предустановленное значение стандартного порта SSH (22). Если у вас ssh работает не на 22-м порту, то в этом параметре пропишите номер своего порта.

filter — фактически представляет собой ссылку на файл в директории /etc/fail2ban/filter.d без указания расширения .conf. Он содержит регулярные выражения, определяющие условия выявления неудачной аутентификации по строке лога. То есть, в данном примере неудачные попытки входа в систему будут определяться по логу sshd с использованием условий, прописанных в /etc/fail2ban/filter.d/sshd.conf. Обычно достаточно значений, заданных по умолчанию. При необходимости вы можете посмотреть файлы в этой директории и открыть при помощи текстового редактора те, которые связаны с используемыми вами службами. В большинстве таких файлов достаточно развернутые комментарии, и вы легко разберетесь, какие условия скрипт считает признаком неправомерного доступа.

logpath — путь к лог файлу, предполагает использование лога sshd

action — выполняемое действие из каталога /etc/fail2ban/action.d.В нашем примере это настроить iptables заблокировав порт ssh по протоколу tcp. Если нужно заблокировать все порты от адреса взломщика, то можно использовать действие iptables-allports.

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

В созданной нами версии файла jail.local мы определили основные параметры для конкретной тюрьмы. Давайте теперь настроем общие параметры для всех. Откроем jail.conf и рассмотрим некоторые из них.  Если вам потребуется изменить какие-либо значения, для определенной «тюрмы» их нужно скопировать в соответствующий раздел jail.local.

bantime = 600

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

findtime = 600
maxretry = 3

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

Переменная maxretry устанавливает разрешенное клиенту количество попыток аутентификации во временном окне findtime, прежде чем ему будет отказано в доступе. По умолчанию это выполняется для клиента, который сделал 3 неудачных попытки входа в систему за 10 минут.

destemail = admin@example.com
sendername = Fail2Ban
mta = sendmail

Настройки уведомлений по электронной почте. Параметр destemail указывает адрес электронной почты, на который будут отправляться сообщения об отказе в доступе. Опция sendername указывает, что будет написано в поле отправителя. Параметр mta определяет действие(action), которое нужно выполнить, sendmail-отправить письмо. Все доступные скрипты действий находятся в каталоге /etc/fail2ban/action.d. Если этих действий недостаточно, вы можете написать свои.

action = $(action_)s

В данном параметре настраивается действие Fail2ban при осуществлении отказа в доступе. Значение action_ определяется в файле перед этим параметром. По умолчанию это настройка брандмауэра для отклонения трафика от узла нарушителя до истечения времени отказа в доступе.

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

После завершения редактирования файла конфигурации его нужно сохранить и перезапустить Fail2ban:

systemctl restart fail2ban

Для проверки работы службы можно воспользоваться программой fail2ban-client:

fail2ban-client status

Вы также можете получить более подробную информацию о конкретной “тюрьме”. Например информация о нашем примере будет следующий.

fail2ban-client status ssh-iptables

Просмотр логов Fail2ban и конфигурации брандмауэра

Для таких служб, как Fail2ban, особенно важно обеспечить правильную работу. Сначала воспользуйтесь systemctl для проверки состояния службы:

systemctl status fail2ban

Если что-то кажется ненормальным, можно попробовать устранить неполадки и проверить логи Fail2ban с момента последней загрузки:

journalctl -b -u fail2ban

Затем воспользуйтесь fail2ban-client для запроса общего состояния fail2ban-server или состояния отдельных “тюрем”.

fail2ban-client status
fail2ban-client status имя_тюрьмы

Просмотр записей о недавних действиях в логе Fail2ban (для выхода нажмите Ctrl-C):

tail -F /var/log/fail2ban.log

Вывод правил, настроенных в iptables:

iptables -L

Показать правила iptables в формате, отражающем необходимые для задействования каждого правила команды:

iptables -S

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

ИТ Проффи

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: