Содержание
Содержание
Введение
Любая служба, видимая в сети, является потенциальной целью для злоумышленников. Будь то сервер доступный по 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 ..."
И поэтому эта попытка будет считаться взломом, и если число попыток превышает указанное количество, то 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/. Приоритет файлов конфигурации будет следующим (в порядке повышения):
Файлы конфигурации могут содержать раздел [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.
Если у вас есть сервер или компьютер, напрямую подключены к интернету, то они подвержены определенному риску. Сейчас любой интернет сервер или VPS является потенциальной мишенью для хакерских атак. Правильно настроенный фаервол может предотвратить многие из атак. Но вам по-прежнему нужно оставить открытыми некоторые службы, чтобы иметь возможность администрировать сервер, например, SSH.
Этот протокол часто является мишенью перебора. Но к счастью есть решение. Инструмент Fail2ban позволяет блокировать доступ с IP адресов при большом количестве неверных логинов. Программа fail2ban может использоваться не только для SSH, она может защитить различные формы веб-аутентификации, FTP, и предотвратить DoS атаки на сервер. В этой статье мы рассмотрим как выполняется установка и настройка Fail2ban CentOS 7 поскольку эта операционная система часто используется для серверов.
Программа fail2ban очень часто используется для защиты серверов, поэтому она есть в официальном репозитории EPEL. Для установки программы сначала добавим репозиторий:
Затем установка fail2ban centos 7:
После установки уже будет загружена базовая конфигурация программы, так что чтобы уже начать защищать ваш сервер, запустите ее с помощью системы управления службами:
Все конфигурационные файлы программы находятся в папке /etc/fail2ban. Вот основные файлы, которые мы будем использовать:
- fail2ban.conf — пример выполнения основных настроек программы;
- jail.conf — пример настройки запрещающих правил;
- jail.d — папка с конфигурационными файлами пользователя, для настройки правил запрета;
- action.d — файлы, в которых описываются действия, выполняемые при блокировке;
- filter.d — в этих файлах описываются способы разбора журналов программ для поиска неудачных попыток входа.
Никакие параметры в существующих файлах менять нельзя, они будут обновлены при обновлении программы, а значит что все ваши изменения будут стерты. Для установки своих настроек необходимо создать файл с таким же именем и расширением .local. Например, создаем файл для настройки jail.conf:
Теперь мы можем изменить здесь любые настройки, которые вам не нравятся в основном файле. Конфигурационный файл разделен на секции в зависимости от назначения опций. В секции [DEFAULT] находятся общие настройки, затем следуют отдельные секции для каждой блокировки отдельно. Опции по умолчанию и так неплохо работают, но в некоторых случаях дополнительная настройка может быть очень полезной.
Блокировку можно настроить, с помощью различных параметров. Вот самые важные из них:
- ignoreip — задает список ip адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения, так что выбирайте их аккуратно. Диапазоны и IP адреса стоит разделить пробелом. Сюда можно добавить локальный ip, а также свой домашний адрес, чтобы у вас не возникло проблем при входе;
- bantime — указывает время, на которое клиенту буде закрыт доступ к серверу, если он не сможет авторизоваться, в секундах;
- maxretry — указывает количество попыток перед тем, как доступ будет заблокирован;
- findtime — время в секундах, на протяжении которого рассчитывается maxretry.
В нашем примере пользователь будет заблокирован на 600 секунд после 5-ти неудачных попыток:
По умолчанию, в CentOS все блокировки отключены, чтобы их включить замените значение строчки enabled на true. Но не рекомендуется так делать, потому что вам придется удалить из конфига все ненужные правила блокировки, иначе они вызовут ошибку запуска. Также можно включить обработку каждого приложения отдельно:
Дальше нам необходимо настроить действия для запрета, а поддерживается их несколько вариантов. Как только нужно выполнить блокировку, программа примет решение на основе следующих параметров:
- banaction — этот параметр определяет файл конфигурации способа блокировки, который нужно использовать. Обычно указывает на файл в папке /etc/fail2ban/action.d/ в котором записаны команды для блокировки. По умолчанию применяется iptables;
- action — с помощью параметров action задаются ярлыки дополнительных действий, которые выполняется после banaction. Сценарию передается имя, порт, протокол, цель и сценарий.
Если вы хотите настроить оповещение о срабатывании блокировки Fail2ban по электронной почте, это тоже настраивается в разделе [DEFAULT]. Только необходимо чтобы на вашей машине был настроен почтовый сервер и он мог отправлять письма на внешний адрес. Иначе все письма будут доставлены к локальной учетной записи Linux.
Для настройки используются два параметра:
- destemail — этот параметр задает адрес электронной почты, на который вы хотите получать сообщения. Значение по умолчанию root@localhost;
- mta — определяет почтовый агент, который будет использоваться для доставки почты. Если у вас настроен Sendmail, оставьте значение по умолчанию. Если же письма нужно доставлять на локальную машину поменяйте значение на mail.
- Также для локальной почты нужно заменить строчку action_mw на action_mwl:
Дальше для проверки почты можно посмотреть файл /var/mail/mail:
Сразу после настроек раздела по умолчанию вы увидите разделы, обозначенные вот так: [имя_приложения]. Рассмотрим основные используемые параметры:
- filter — указывает имя файла в каталоге /etc/fail2ban/filter.d/ Он сообщает программе как анализировать журнал сервиса и находить неудачные попытки входа;
- logpath — путь к лог файлу службы, куда она записывает неудачные попытки входа;
Также здесь можно переопределять любой из параметров по умолчанию, например, maxretry, а с помощью параметра enabled вы можете включить только нужные блокировщики. По умолчанию настроены правила блокировки не только для ssh, но и для многих других сервисов, например, различных способов аутентификации http, ftp, аутентификации в почте и так далее.
Например, для активации блокировки неверных входов SSH, приведите секцию [sshd] к такому виду:
enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s
Обычно, никаких дополнительных настроек для iptables не требуется. Но давайте рассмотрим конфигурационный файл, который отвечает за блокировку, чтобы вы понимали как все работает. Имя этого файла указано в параметре banaction. По умолчанию это iptables-multiport.conf:
Тут мы можем увидеть что приходит после того, как fail2ban решает, что нужно заблокировать доступ для определенного IP адреса. Сначала выполняются такие команды iptables:
actionstart = iptables -N fail2ban- iptables -A fail2ban- -j RETURN # questionable usefulness iptables -I <chain> -p <l> -m multirts <port> -j fail2ban-</port></l></chain>
src=»https://losst.ru/wp-content/uploads/2017/03/Snimok-ekrana-iz-2017-03-10-08-29-31-1024×576.png»/>
Они используются для организации среды передачи трафика в фильтрующей цепочке. Iptables управляет трафиком на основе цепей и каждая из них может иметь правила для всего трафика, которые определяют нужно ли его пропускать или нет. В первой строчке создается новая цепочка с именем fail2ban-имя_службы. Именно в ней будут содержаться все запрещающие правила для этого ip адреса. Вторая строчка возвращает управление цепочке, вызвавшей эту, а третья добавляет правило в основную цепь, которое передает управление на нашу цепочку.
Таким образом, весь входящий трафик с нужного порта обрабатывается нашей цепочкой fail2ban-имя_службы. Сейчас первое правило в ней отправляет трафик обратно в вызывающую цепь, это значит что правление просто передается нам и назад. Но теперь мы можем добавить дополнительные правила.
Для разрушения цепочки используются такие правила:
actionstop = iptables -D <chain> -p <protocmultiport fail2ban-="" iptables="" iptablfail2ban-=""></chain>
Теперь, когда нам нужно забанить пользователя программа выполнит команду:
actionban = iptables -I fail2ban- 1 -s <ip> -j DROP</ip>
Эта команда говорит, что необходимо отбрасывать все пакеты с этого ip адреса и уже не пытаться определить подлинность данных. Когда время блокировки вышло, она снимается такой командой:
actionunban = iptables -D fail2ban- -s <ip> -j DROP</ip>
Если вы хотите понять какие правила на данный момент применяются и каким ip адресам запрещен доступ, выполните в терминале:
sudo iptables -L
Когда вы завершите настройку, сохраните изменения в конфигурационном файле и перезагрузите сервис fail2ban. Сначала проверяем правильность конфигурации:
Если все правильно, перезагружаем сервис:
Для проверки своих правил, вы можете выполнить несколько попыток входа с неправильным логином и паролем, например, для службы ssh, если вы настраивали именно ее, как описано в этой статье. Когда вы достигните лимита запросов, ваш сервер даже не будет запрашивать пароля. Затем вы можете еще раз посмотреть правила:
В самом низу, в нашей цепочке вы можете увидеть список забаненых ip fail2ban. Чтобы разбанить любой ip адрес достаточно удалить для него правило.
В этой статье мы рассмотрели как выполняется настройка fail2ban CentOS 7. Теперь вы можете настроить дополнительный уровень защиты для вашего сервера чтобы обезопасить его от взлома.
Используемые источники:
- https://itproffi.ru/ustanovka-i-nastrojka-fail2ban-zashhita-ssh-servera/
- https://losst.ru/nastrojka-fail2ban-centos-7