Разное

Fail2Ban: Настройка Fail2ban для защиты SSH

21.04.2021

Содержание

Настройка Fail2ban для защиты SSH

Fail2ban — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.

Программа умеет бороться с различными атаками на все популярные *NIX–сервисы, такие как Apache, Nginx, ProFTPD, vsftpd, Exim, Postfix, named, и т.д.

Но в первую очередь Fail2ban известен благодаря готовности «из коробки» к защите SSH–сервера от атак типа «bruteforce», то есть к защите SSH от перебора паролей.

Установка Fail2ban

Готовые пакеты Fail2ban можно найти в официальных репозиториях всех популярных Linux дистрибутивов.

Установка Fail2ban на Debian/Ubuntu:

apt-get install fail2ban

Установка Fail2ban на CentOS/Fedora/RHEL:

yum install fail2ban

Конфигурация Fail2ban

На данном этапе Fail2ban уже готов к работе, базовая защита SSH сервера от перебора паролей будет включена по умолчанию. Но лучше всё-же внести некоторые изменения следуя рекомендациям ниже.

У программы два основных файла конфигурации:

  1. /etc/fail2ban/fail2ban.conf — отвечает за настройки запуска процесса Fail2ban.
  2. /etc/fail2ban/jail.conf — содержит настройки защиты конкретных сервисов, в том числе sshd.

Файл jail.conf поделён на секции, так называемые «изоляторы» (jails), каждая секция отвечает за определённый сервис и тип атаки:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3
banaction = iptables-multiport

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Параметры из секции [DEFAULT]

применяются ко всем остальным секциям, если не будут переопределены.

Секция [ssh] отвечает за защиту SSH от повторяющихся неудачных попыток авторизации на SSH–сервере, проще говоря, «brute–force».

Подробнее по каждому из основных параметров файла jail.conf:

ignoreip — IP–адреса, которые не должны быть заблокированы. Можно задать список IP-адресов разделённых пробелами, маску подсети, или имя DNS–сервера.

bantime — время бана в секундах, по истечении которого IP–адрес удаляется из списка заблокированных.

maxretry — количество подозрительных совпадений, после которых применяется правило. В контексте [ssh] — это число неудавшихся попыток логина, после которых происходит блокировка.

enabled — значение true указывает что данный jail активен, false выключает действие изолятора.

port — указывает на каком порту или портах запущен целевой сервис. Стандартный порт SSH–сервера — 22, или его буквенное наименование — ssh.

filter — имя фильтра с регулярными выражениями, по которым идёт поиск «подозрительных совпадений» в журналах сервиса. Фильтру

sshd соответствует файл /etc/fail2ban/filter.d/sshd.conf.

logpath — путь к файлу журнала, который программа Fail2ban будет обрабатывать с помощью заданного ранее фильтра. Вся история удачных и неудачных входов в систему, в том числе и по SSH, по умолчанию записывается в log–файл /var/log/auth.log.

Рекомендации по настройке Fail2ban

Не рекомендуется оставлять параметр ignoreip со значением по умолчанию 127.0.0.1/8, это создаёт очевидную угрозу в многопользовательских системах — если злоумышленник получил доступ хотя–бы к одному shell–аккаунту, то он имеет возможность беспрепятственно запустить bruteforce–программу для атаки на root или других пользователей прямо с этого–же сервера.

Новая опция findtime — определяет длительность интервала в секундах, за которое событие должно повториться определённое количество раз, после чего санкции вступят в силу. Если специально не определить этот параметр, то будет установлено значение по умолчанию равное 600 (10 минут). Проблема в том, что ботнеты, участвующие в «медленном брутфорсе», умеют обманывать стандартное значение. Иначе говоря, при maxretry равным 6, атакующий может проверить 5 паролей, затем выждать 10 минут, проверить ещё 5 паролей, повторять это снова и снова, и его IP забанен не будет. В целом, это не угроза, но всё же лучше банить таких ботов.

Прежде чем вносить изменения следуя рекомендациям, отметим, что не стоит редактировать основной файл настроек jail.conf, для этого предусмотрены файлы с расширением *.local, которые автоматически подключаются и имеют высший приоритет.

nano /etc/fail2ban/jail.local
[DEFAULT]
## Постоянный IP-адрес.
## Если не переопределить ignoreip здесь,
## то стоит закомментировать этот параметр в jail.conf.
ignoreip = 57.66.158.131

[ssh]
## если в течении 1 часа:
findtime    = 3600
## произведено 6 неудачных попыток логина:
maxretry    = 6
## то банить IP на 24 часа:
bantime     = 86400

Осталось перезапустить Fail2ban:

service fail2ban restart
* Restarting authentication failure monitor fail2ban        [ OK ]
tail /var/log/fail2ban.log
2013-01-20 22:00:35,911 fail2ban.jail   : INFO   Jail 'ssh' stopped
2013-01-20 22:00:35,916 fail2ban.server : INFO   Exiting Fail2ban
2013-01-20 22:00:36,257 fail2ban.server : INFO   Changed logging target to
/var/log/fail2ban.log for Fail2ban v0.8.6
2013-01-20 22:00:36,258 fail2ban.jail   : INFO   Creating new jail 'ssh'
2013-01-20 22:00:36,259 fail2ban.jail   : INFO   Jail 'ssh' uses poller
2013-01-20 22:00:36,271 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2013-01-20 22:00:36,271 fail2ban.filter : INFO   Set maxRetry = 6
2013-01-20 22:00:36,272 fail2ban.filter : INFO   Set findtime = 3600
2013-01-20 22:00:36,272 fail2ban.
actions: INFO Set banTime = 86400 2013-01-20 22:00:36,298 fail2ban.jail : INFO Jail 'ssh' started

Заключение

В статье затронуты только базовые возможности Fail2Ban, применимые для защиты SSH на типовом Linux–сервере. Более подробную документацию по программе вы можете найти в официальной Wiki на авторском веб–сайте.

Fail2ban ▷ Настройка на Linux: Debian, Ubuntu, CentOS

В этой статье мы вновь вернемся к теме безопасности сервера и расскажем, как защитить VPS при помощи программы Fail2ban. Основное ее предназначение — защита хоста от несанкционированного доступа, что возможно благодаря тщательному отслеживанию сетевой активности на основных портах и чтению журналов записей (лог-файлов). Программа особенно эффективна против так называемых brute-force атак, поскольку она нейтрализует атакующего таким образом, что все пакеты, отправленные с устройства, IP-адрес которого по той или иной причине попал в черный список, отбрасываются. Блокировка настраивается путем внесения изменений в правила iptables. Итак, приступим к настройке арендованного VPS сервера.

Содержание

Установка на Ubuntu 14.04

1. Для установки программы Fail2ban выполните следующие команды:

sudo apt-get update 
sudo apt-get install fail2ban

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

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

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

Далее вам нужно будет выполнять редактирование только /etc/fail2ban/jail. local. Он будет подключен системой автоматически и имеет высший приоритет при исполнении.

3. Откройте файл jail.local для редактирования одной из команд: Если вам удобнее работать с редактором nano:

sudo nano /etc/fail2ban/jail.local

Если для вас предпочтительнее редактор vi:

sudo vi /etc/fail2ban/jail.local

Обратите внимание на секцию [DEFAULT].

Она содержит в себе основные правила, заданные по умолчанию для Fail2ban.

ignoreip — значения этого параметра говорят о том, какие IP-адреса блокироваться не будут вовсе. Если вы хотите, чтобы Fail2ban игнорировал при проверке несколько IP-адресов, их необходимо указать в значении ignoreip через пробел.

bantime — данный параметр означает время в секундах, в течение которого подозрительный IP будет заблокирован. Изначально его значение составляет 10 минут.

findtime — определяет промежуток времени в секундах, в течение которого программой будет определяться наличие подозрительной активности.

maxretry — допустимое число неуспешных попыток получения доступа к серверу. При превышении указанного значения IP попадает в бан.

Ниже будут представлены другие секции, при помощи которых можно настроить защиту различных сервисов, установленных на ваш виртуальный сервер, например, ssh, ftp и прочих. Подробная процедура их настройки будет рассмотрена в конце данной статьи в разделе «Настройка Fail2ban».

4. После редактирования jail.local обязательно сделайте перезапуск Fail2ban командами

sudo service fail2ban restart
tail /var/log/fail2ban.log

Установка Fail2ban на CentOS 6.*

1. Чтобы установить программу на виртуальный сервер, выполните поочередно такие команды:

yum update
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install fail2ban

2. По аналогии с п. 2 в инструкции для Ubuntu создайте локальную копию конфигурационного файла и откройте этот файл для редактирования командами:

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

3. Активируйте защиту своего VPS там, где нужно, редактируя содержимое jail.local. Подробная инструкция по настройке представлена далее в разделе «Настройка Fail2ban». Внимательно следите за корректностью пути к файлу хранения логов в значении параметра logpath.

4. После редактирования конфигурационного файла перезапустите Fail2ban командой

sudo service fail2ban restart

Установка Fail2ban на Debian 7

1. Установка программы на VPS выполняется следующим набором команд:

apt-get update && apt-get upgrade
sudo apt-get install fail2ban

2. Повторите п. 2 из двух предыдущих разделов для создания локальной копии конфигурационного файла jail.conf:

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

3. Настройка алгоритма работы Fail2ban задается точно таким же образом, как и для операционных систем Ubuntu и CentOS. Вам необходимо активировать нужные секции jail.local ([ssh], [apache] и прочие, в зависимости от портов, защиту которых вы хотите активировать) и сохранить результаты редактирования конфигурационного файла. Более подробное описание этой процедуры представлено ниже в разделе «Настройка Fail2ban».

4. После правки конфигурационного файла выполните перезапуск Fail2ban командой

sudo service fail2ban restart

Настройка Fail2ban

Первым делом настройте защиту своего VPS по протоколу SSH при помощи программы Fail2ban. Для этого найдите в файле jail.local секцию [ssh].

Она должна быть активна по умолчанию. Тем не менее, на всякий случай, убедитесь, что в значении параметра enabled установлено true, а не false.

Укажите значения параметров, на основании которых Fail2ban должен выполнять отслеживание активности:

filter — фильтр, который будет использоваться. По умолчанию это /etc/fail2ban/filter.d/sshd.conf;

action — действия, которые будет выполнять Fail2ban при обнаружении атакующего IP-адреса, все правила реагирования на действия злоумышленника описаны в файле /etc/fail2ban/action.d. Соответственно, в качестве значения параметра action не может быть указана информация, которой нет в файле /etc/fail2ban/action.d;

logpath — полный путь к файлу, в который будет записываться информация о попытках получения доступа к VPS.

findtime — время в секундах, в течение которого наблюдается подозрительная активность;

maxretry — разрешенное количество повторных попыток подключения к серверу;

bantime — промежуток времени, в течение которого попавший в черный список IP будет оставаться заблокированным.

Стоит обратить внимание на тот факт, что вовсе необязательно прописывать значения вышеуказанных параметров в каждой секции. Если их не упоминать, в действие вступят настройки, указанные в главном разделе [DEFAULT]. Главное, чтобы для переменной enabled было указано значение true.

Защита протокола SSH

Рассмотрим применение параметров реагирования более детально. Пример конфигурации Fail2ban на порту SSH:

[ssh]
enabled = true
port 	= ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp]
	sendmail-whois[name=ssh, dest=****@yandex.ru, sender=fail2ban@***.ru]
logpath = /var/log/auth.log
maxretry = 3
bantime = 600

Запись выше означает, что, если выполнено более 3 неудачных попыток подключения к VPS через основные порты SSH, то IP-адрес, с которого выполнялась авторизация, попадет в бан на 10 минут. Правило запрета будет добавлено в iptables. В то же время владелец сервера получит уведомление на e-mail, указанный в значении переменной dest, о том, что указанный IP был заблокирован за попытку получения несанкционированного доступа по протоколу SSH. Также в сообщении будет указана WHOIS информация о заблокированном IP. Пример такого уведомления от Fail2ban:

Hi,

The IP 61.147.103.113 has just been banned by Fail2Ban after
3 attempts against SSH.

Here are more information about 61.147.103.113:

% [whois.apnic.net]
% Whois data copyright terms http://www.apnic.net/db/dbcopyright.html

% Information related to '61.147.0.0 - 61.147.255.255'

inetnum: 61.147.0.0 - 61.147.255.255
netname: CHINANET-JS
descr: CHINANET jiangsu province network
descr: China Telecom
descr: A12,Xin-Jie-Kou-Wai Street
descr: Beijing 100088
country: CN
admin-c: CH93-AP
tech-c: CJ186-AP
mnt-by: MAINT-CHINANET
mnt-lower: MAINT-CHINANET-JS
mnt-routes: maint-chinanet-js
changed: [email protected] 20020209
changed: [email protected] 20030306
status: ALLOCATED non-PORTABLE
source: APNIC

role: CHINANET JIANGSU
address: 260 Zhongyang Road,Nanjing 210037
country: CN
phone: +86-25-86588231
phone: +86-25-86588745
fax-no: +86-25-86588104
e-mail: [email protected]
remarks: send anti-spam reports to [email protected]
remarks: send abuse reports to [email protected]
remarks: times in GMT+8
admin-c: Ch460-AP
tech-c: CS306-AP
tech-c: CN142-AP
nic-hdl: CJ186-AP
remarks: www.jsinfo.net
notify: [email protected]
mnt-by: MAINT-CHINANET-JS
changed: [email protected] 20090831
changed: [email protected] 20090831
changed: [email protected] 20090901
source: APNIC
changed: [email protected] 20111114

person: Chinanet Hostmaster
nic-hdl: CH93-AP
e-mail: [email protected]
address: No.31 ,jingrong street,beijing
address: 100032
phone: +86-10-58501724
fax-no: +86-10-58501724
country: CN
changed: [email protected] 20070416
changed: zhengzm@gsta. com 20140227
mnt-by: MAINT-CHINANET
source: APNIC

% Information related to '61.147.0.0/16AS23650'

route: 61.147.0.0/16
descr: CHINANET jiangsu province network
country: CN
origin: AS23650
mnt-by: MAINT-CHINANET-JS
changed: [email protected] 20030414
source: APNIC

% This query was served by the APNIC Whois Service version 1.69.1-APNICv1r0 (UNDEFINED)

Regards,

Fail2Ban

В качестве значения переменной sender после fail2ban@ укажите домен либо хостнейм VPS.

Важно! Для того чтобы сообщение о блокировке злоумышленника отправлялось на ваш e-mail, необходимо наличие почтового сервера на VPS.

Дополнительно для защиты SSH активируйте следующую секцию:

[ssh-ddos]
enabled = true
port 	= ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 2

Для хранения больших списков заблокированных IP-адресов можно использовать комбинацию Netfilter/Iptables и IPsets. Чтобы настроить работу Fai2ban таким образом, активируйте раздел [ssh-iptables-ipset4]:

[ssh-iptables-ipset4]
enabled = true
port 	= ssh
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
findtime = 300
maxretry = 3
bantime = 600

После правки конфигурационного файла сохраните внесенные изменения.

Аналогичным образом можно защитить и прочие сервисы.

Защита почтового сервера

Ниже представлены примеры настроек конфигурационного файла для защиты почтового сервера postfix.

[postfix]
enabled = true
port 	= smtp,ssmtp,submission
action = iptables[name=Postfix-smtp, port=smtp, protocol=tcp]
filter = postfix
logpath = /var/log/mail.log
bantime = 86400
maxretry = 3
findtime = 3600
ignoreip = 127.0.0.1

Важно! Следите за тем, чтобы путь к файлу хранения логов (logpath) был указан корректно. В противном случае перезапуск Fail2ban завершится сообщением об ошибке. Если какой-то из лог-файлов отсутствует на вашем VPS, вы можете его создать самостоятельно командой touch, например, touch /var/log/mail.log. Обязательно назначьте ему необходимые права доступа командой chmod 755 /var/log/mail.log

[sasl]
enabled = true
port 	= smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s
filter = postfix-sasl
action = iptables[name=Postfix-smtp, port=smtp, protocol=tcp]
logpath = /var/log/mail.log
bantime = 86400
maxretry = 3
findtime = 3600

Защиту почтового сервера dovecot можно активировать следующим образом:

[dovecot]
enabled = true
port = smtp,ssmtp,submission,imap2,imap3,imaps,pop3,pop3s
filter = dovecot
action = iptables-multiport[name=dovecot-pop3imap,port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 3
findtime = 3600
bantime = 86400

Пример конфигурации jail.local для защиты roundcube:

[roundcube-auth]
enabled = true
filter = roundcube-auth
port 	= http,https
logpath = /var/log/mail.log
action = iptables-multiport[name=roundcube, port="http,https"]
bantime = 86400
maxretry = 3
findtime = 3600

Защита веб-сервера (apache)

Для защиты веб-сервера Apache можно использовать следующие настройки Fail2ban:

[apache]
enabled = true
port 	= http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
[apache-multiport]
enabled = true
port 	= http,https
filter 	= apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
[apache-noscript]
enabled = true
port 	= http,https
filter = apache-noscript
logpath = /var/log/apache2/error.log
maxretry = 3
[apache-overflows]
enabled = true
port 	= http,https
filter = apache-overflows
logpath = /var/log/apache2/error. log
maxretry = 2

Как вы уже могли заметить, в используемых выше секциях файла jail.local отсутствуют значения параметра action. В этом случае при обнаружении атаки на сервис apache программа Fail2ban будет выполнять действие, определенное в секции [DEFAULT], а именно action = iptables-multiport. Это значит, что атакующий IP-адрес будет заблокирован в iptables при помощи так называемого модуля multiports. Модуль multiports позволяет настроить правило сразу для диапазонов портов.

Защита FTP сервера

Для защиты FTP-сервера vsftpd с помощью Fail2ban можно использовать следующие параметры:

[vsftpd]
enabled = true
port 	= ftp,ftp-data,ftps,ftps-data
filter = vsftpd
logpath = /var/log/vsftpd.log
action = iptables[name=VSFTPD, port=21, protocol=tcp]
bantime = 600
maxretry = 3
findtime = 1800

Не забудьте о необходимости перезапуска Fail2ban после каждого редактирования конфигурационного файла.

На этом настройка Fail2ban завершена. Ознакомиться с полным списком правил, которыми программа будет руководствоваться при мониторинге активности на вашем VPS, можно с помощью команды sudo iptables –L

Основные моменты по установке и настройке программы рассмотрены. В случае, если какой-то IP-адрес будет заблокирован Fail2ban по ошибке, удалить его из черного списка можно командой:

sudo fail2ban-client set JAIL unbanip IP

Где JAIL — название секции конфигурационного файла jail.local, в соответствии с правилами которой была активирована блокировка, IP — адрес, который нужно разблокировать.

Пример команды разблокировки:

sudo fail2ban-client set ssh-iptables unbanip 61.147.103.113

Fail2ban | Русскоязычная документация по Ubuntu

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

Для защиты от такого подбора пароля (такую атаку часто называют брутфорсом — см. Полный перебор) есть удачное и изящное решение — fail2ban.

Установка

Этот пакет есть в репозитории, и базовая установка очень проста:

sudo apt-get install fail2ban

По умолчанию защита от брутфорса для SSH включена.

Основная идея Fail2ban — при превышении заданного числа неудачных вводов пароля подряд (по умолчанию — 6) бан IP, с которого были попытки подбора на заданное время (по умолчанию — 600 секунд).

Настройка

Параметры можно посмотреть и поменять в файле /etc/fail2ban/jail.conf. Существующие фильтры (т.е. правила, по которым определяется неудачная попытка ввода пароля) лежат в директории /etc/fail2ban/filter.d (можно их править или на их основе делать свои фильтры), а существующие правила реагирования — в директории /etc/fail2ban/action.d. Все файлы довольно хорошо откомментированы.

Ниже преведено несколько примеров конфигурации /etc/fail2ban/jail.conf.

Удалённый доступ

[ssh-iptables]

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

Почта

[dovecot-iptables]

enabled  = true
filter   = dovecot
action   = iptables-multiport[name=DCOT, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath  = /var/log/maillog
findtime = 300
maxretry = 5
bantime  = 1800

[postfix-iptables]

enabled  = true
filter   = postfix
action   = iptables-multiport[name=PFIX, port="smtp,smtps", protocol=tcp]
logpath  = /var/log/maillog
maxretry = 5
bantime  = 7200

[sasl-iptables]

enabled  = true
filter   = sasl
action   = iptables-multiport[name=SASL, port="smtp,smtps", protocol=tcp]
logpath  = /var/log/maillog
findtime = 300
maxretry = 5
bantime  = 1800

Ссылки

Fail2ban обзор, установка, настройка. — Asterisk IP-телефония

Любой сервис, доступный из Интернета, подвержен атакам злоумышленников. Если сервис требует аутентификации, несанкционированные пользователи и боты будут пытаться проникнуть в систему путем перебора учетных данных.

К примеру, сервис SSH станет объектом атак ботов, которые попытаются пройти аутентификацию с помощью стандартных учетных данных. К счастью, сервисы типа fail2ban помогают смягчить такие атаки.

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

Общие сведения

Основная идея fail2ban заключается в отслеживании логов общих сервисов для выявления ошибок аутентификации.

Когда fail2ban мониторит логи сервиса, он смотрит на настроенный для этого сервиса фильтр. Фильтр предназначен для определения сбоев аутентификации этого конкретного сервиса на основе сложных регулярных выражений. Шаблоны регулярных выражений определяются в переменной failregex.

К счастью, fail2ban предлагает готовые файлы фильтров для популярных сервисов. Когда строка в файле лога сервиса совпадает с параметром failregex в соответствующем фильтре, fail2ban  выполняет заданное фильтром действие. Действие определяется в переменной action в зависимости от предпочтений администратора.

Действие по умолчанию – блокировка потенциально вредоносного хоста/IP-адреса путем изменения правил брандмауэра iptables. Вы можете расширить это действие –  настроить электронные уведомления администратора с данными о злоумышленнике или строками лога, которые вызвали указанное действие.

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

По умолчанию fail2ban блокирует адрес на 10 минут в случае обнаружения трех неудачных попыток авторизации в течение 10 минут. Количество неудачных попыток аутентификации, необходимое для блокировки адреса, переопределяется в разделе SSH конфигурационного файла по умолчанию – он разрешает до 6 попыток. Администратор может настроить этот параметр самостоятельно.

При использовании цели по умолчанию (iptables) для отслеживания SSH-трафика при запуске сервиса fail2ban создает новую цепочку. Он добавляет новое правило в цепочку INPUT, которая направляет весь TCP-трафик, направленный на порт 22, в новую цепочку. В новой цепочке fail2ban вставляет одно правило, которое возвращается в цепочку INPUT.

Это заставляет трафик прыгать в новую цепочку, а затем возвращаться обратно. Сначала это не влияет на трафик. Однако когда IP-адрес превышает количество попыток аутентификации, в начало новой цепочки добавляется правило, которое будет сбрасывать трафик от этого IP-адреса. Когда срок блокировки истечет, правило iptables будет удалено. Цепочка и связанные с ней правила удаляются при выходе из fail2ban.

В данной статье настроим конфигурацию fail2ban для asterisk и ssh. В качестве стенда для выполнения настройки служит centos 7 + Asterisk 15.7.2.

Установка Fail2ban

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

yum install epel-release

Теперь можно установить пакет fail2ban:

yum install fail2ban
Установка fail2ban.

После завершения установки используйте инструмент systemctl, чтобы запустить и включить автозапуск fail2ban:

systemctl enable fail2ban

Проверьте что всё в порядке

systemctl status fail2ban

Настройка Fail2ban

Сервис Fail2ban хранит настройки в каталоге /etc/fail2ban. В нём можно найти файл jail.conf, содержащий стандартные настройки.

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

Файл jail.conf содержит раздел [DEFAULT], после которого следует раздел для индивидуальных сервисов. Файл jail.local может переопределить любое из этих значений. Файлы применяются в алфавитном порядке:

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf,
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local,

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

Создадим файл jail.local с настройками для asterisk и ssh в текстовом редакторе:

nano /etc/fail2ban/jail.local

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

[DEFAULT]
ignoreip = 127.0.0.1
bantime = 86400
findtime = 600
maxretry = 5
backend = auto

Этот файл переопределяет параметры:

  • ignoreip — задаёт белый список адресов. На данный момент он не блокирует исходящий трафик локальной машины. Можно добавить дополнительные ip-адреса через пробел.
  • bantime — устанавливает интервал времени, в течение которого клиент будет заблокирован, если он не смог пройти аутентификацию. Значение параметра измеряется в секундах; по умолчанию установлено 600 секунд, (10 минут).
  • findtime — задаёт длительность интервала, в течение которого событие должно повториться определённое количество раз, после чего клиент будет заблокирован.
  • maxretry — устанавливает количество неудавшихся попыток входа. backend — определяет, как fail2ban будет контролировать логи. Настройка auto означает, что fail2ban будет пробовать pyinotify, затем gamin, а затем алгоритм опроса, основанный на доступных данных

После раздела [DEFAULT] идут разделы для определенных сервисов, которые могут использоваться для переопределения настроек по умолчанию. Как правило, в этих разделах переопределяются только значения, которые отличаются от стандартных значений.

Раздел для сервиса asterisk будет иметь следующие параметры:

[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=SIP, protocol=all]
logpath = /var/log/asterisk/fail2ban
maxretry = 5
  • [asterisk-iptables] – заголовок раздела для сервиса.
  • enabled — даный раздел будет прочитан и включен
  • filter — указывает файлы фильтров определяющие, какие строки fail2ban должен найти в логах, чтобы определить вредоносное поведение.
  • action — действия, которые будет выполнять Fail2ban при обнаружении атакующего IP-адреса, все правила реагирования на действия злоумышленника описаны в файле /etc/fail2ban/action.d. Соответственно, в качестве значения параметра action не может быть указана информация, которой нет в файле /etc/fail2ban/action.d.
  • logpath — путь к файлу журнала, который программа Fail2ban будет обрабатывать с помощью заданного ранее фильтра. Вся история удачных и неудачных входов в систему, в том числе и по SSH, по умолчанию записывается в log–файл /var/log/auth.log.
  • maxretry — устанавливает количество неудавшихся попыток входа.

Раздел для сервиса ssh будет иметь следующие параметры:

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

Набор параметров раздела для сервиса ssh похож на раздел для сервиса asterisk с той лишь разницей, что параметры указаны для сервиса ssh.

Сохраните и закройте файл. Перезапустите fail2ban при помощи systemctl для применения внесенных изменений:

systemctl restart fail2ban

Лучше, быстрее, надежнее / Хабр


Про fail2ban написано уже много, в том числе и на хабре. Эта статья немного о другом — как сделать защиту им еще надежнее и о еще пока неизвестных в широких кругах новых функциях fail2ban. Добавлю сразу — речь пойдет пока про development branch, хотя уже долго проверенный в бою.
Краткое вступление

В большинстве своем fail2ban устанавливается из дистрибутива (как правило это какая-нибудь стабильная старая версия) и настраивается по манам из интернета за несколько минут. Затем годами работает, без вмешательства админа. Нередко даже логи, за которыми вроде как следит fail2ban, не просматриваются.
Так вот, сподвигнуть на написание этого поста меня заставил случай, произошедший с одним сервером моего хорошего знакомого. Классика жанра — пришла абуза, за ней вторая и пошло поехало. Хорошо еще злоумышленник попался ленивый — логи не потер, да и повезло еще крупно, что logrotate был настроен, чтобы хранить логи месяцами.

Оказалось все довольно банально, подобрали пароль к его админской почте, который по совместительству был паролем для ssh (естественно без ключа). Не рут, но судоер, со всеми вытекающими. Первый его вопрос был: как подобрали — у меня же fail2ban там. И вот здесь как раз засада: не все представляют себе, что подбором паролей сегодня занимаются уже не отдельные компьютеры, а целые бот-сети, кстати поумневшие донельзя. Так вот по логам выяснили, что тут как раз такой случай: перебирала бот-сеть, причем на практике выяснившая его настройки в fail2ban (maxRetry=5, findTime=600 и banTime=600). Т.е. чтобы избежать бана, сеть делала 4 попытки в течении 10 минут с каждого IP. На минуточку в сети порядка 10 тысяч уникальных IP = что-то более 5 с половиной миллионов паролей в сутки.
Кроме того его почтовик делал большую глупость — а именно паузу до 10 секунд, при логине с неправильным именем. Т.е. выяснить, что некоторые имена, в том числе admin, реально имеются, этой сетке не составило труда. Далее шел целенаправленный перебор только паролей для имеющихся имен.
Подробнее на «ремонте» останавливаться не буду — это история долгая, и вообще тема для отдельной статьи. Скажу только, что все почистили и все разрешилось малой кровью, да и отделался он практически «легким» испугом.

Так вот, мысль написать статью возникла после того, как мне (частично заслужено) было высказано: «Так ты про такое знал и ничего не сказал, не предупредил. Да еще и решение есть и не поделился. Ну и сволочь ты». Короче, посему посту — быть.

Мой fail2ban

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

Так вот, моя последняя расширенная версия [sebres:ban-time-incr], позволяет вывести этот назойливый зоопарк раз и навсегда (ну или пока они снова не приспособятся). Это фишка довольно часто обсуждалась всем коммюнити, но как-то руки не доходили. У меня оно жило в виде отдельных скриптов и каких-то кастомных изменений, пока не оформилось в готовый функционал.

Если коротко, то система, запоминая плохие IP адреса, позволяет каждый раз динамически (экспоненциально) увеличивать время блокировки (banTime) в зависимости от количества предыдущих запретов (banCount). При этом также каждый раз уменьшая количество (maxRetry) возможных провальных попыток (failure) до следующего бана. Наглядно это можно увидеть на следующем примере:

[Click to view LOG]
2014-09-23 20:05:31,146 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (10 # 5 days, 8:04:55 -> 2014-09-29 04:10:24)
2014-09-23 20:05:31,120 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-23 20:20:29)
2014-09-23 15:30:32,625 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-20 23:24:14,620 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (9 # 2 days, 16:06:18 -> 2014-09-23 15:30:31)
2014-09-20 23:24:14,569 fail2ban. actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-20 23:39:13)
2014-09-20 21:10:36,708 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-19 13:03:03,377 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (8 # 1 day, 8:07:34 -> 2014-09-20 21:10:36)
2014-09-19 13:03:03,361 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-19 13:18:02)
2014-09-19 12:38:17,743 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-18 20:13:23,647 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (7 # 16:24:55 -> 2014-09-19 12:38:17)
2014-09-18 20:13:23,620 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 20:28:22)
2014-09-18 20:07:06,053 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-18 12:03:53,282 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (6 # 8:03:14 -> 2014-09-18 20:07:05)
2014-09-18 12:03:53,266 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 12:18:51)
2014-09-18 11:22:40,704 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-18 07:11:12,200 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (5 # 4:09:43 -> 2014-09-18 11:20:54)
2014-09-18 07:11:12,160 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 07:26:11)
2014-09-18 06:47:46,618 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-18 04:37:29,972 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (4 # 2:02:16 -> 2014-09-18 06:39:44)
2014-09-18 04:37:29,967 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 04:52:28)
2014-09-18 04:32:49,491 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-18 02:55:05,706 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (3 # 1:23:31 -> 2014-09-18 04:18:35)
2014-09-18 02:55:05,698 fail2ban.actions  [named-refused] Ban     XXX. XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 03:10:04)
2014-09-18 01:18:37,976 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-18 00:40:09,592 fail2ban.observer [named-refused] Increase Ban    XXX.XXX.XX.XXX (2 # 0:38:30 -> 2014-09-18 01:18:37)
2014-09-18 00:40:09,548 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-18 00:55:07)
2014-09-17 22:47:05,872 fail2ban.actions  [named-refused] Unban   XXX.XXX.XX.XXX
2014-09-17 22:32:05,804 fail2ban.actions  [named-refused] Ban     XXX.XXX.XX.XXX (_ # 0:15:00 -> 2014-09-17 22:47:05)

Здесь хорошо заметно, как каждый следующий бан продлевает время блокировки от 15 минут (0:15:00) первый раз, до 5 с лишним дней (5 days, 8:04:55) после десятой блокировки. У меня в базе есть IP у которых «срок» уже — от нескольких месяцев до перманентного бана.

Ниже можно увидеть, как новый функционал отразился на решении собственно банить IP XXX.XXX.XX.XXX. В примере параметр maxRetry установлен равным 5. Так мы видим, что пока IP не признан плохим он был первый раз забанен после 5-ти попыток, второй раз, уже как плохой — после 3-х (каждая попытка была засчитана за 2), третий и т.д. — после 2-х (попытка идет за 3) и четвертый раз забанен сразу после первой попытки (считается сразу за 5-ть):

[Click to view LOG]
2014-09-18 04:37:29,155 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 04:37:28, 3 # -> 5, Ban
2014-09-18 04:37:29,148 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 04:37:28
......
2014-09-18 02:55:04,790 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 02:55:04, 2 # -> 3, Ban
2014-09-18 02:55:04,763 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 02:55:04
2014-09-18 02:22:37,683 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 02:22:37, 2 # -> 3
2014-09-18 02:22:37,648 fail2ban.filter   [named-refused] Found XXX.XXX.XX. XXX - 2014-09-18 02:22:37
......
2014-09-18 00:40:08,908 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-18 00:40:08, 1 # -> 2, Ban
2014-09-18 00:40:08,625 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-18 00:40:08
2014-09-17 23:48:54,404 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-17 23:48:53, 1 # -> 2
2014-09-17 23:48:54,397 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 23:48:53
2014-09-17 22:49:04,647 fail2ban.observer [named-refused] Found XXX.XXX.XX.XXX, bad - 2014-09-17 22:49:03, 1 # -> 2
2014-09-17 22:49:04,620 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 22:49:03
......
2014-09-17 22:32:05,593 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 22:32:05
2014-09-17 22:06:29,952 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 22:06:29
2014-09-17 21:47:43,439 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 21:47:42
2014-09-17 20:43:41,490 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 20:43:40
2014-09-17 16:44:35,130 fail2ban.filter   [named-refused] Found XXX.XXX.XX.XXX - 2014-09-17 16:44:34

Без этой логики подсчета failure, умные бот-сети научились подстраивать свою работу так, чтобы просто не попадать в бан. Когда я допилил таки и эту логику и выкатил в продакшн, за считанные дни я избавился практически от всей той нечисти, которую привык видеть годами в своих логах. Например, сейчас средний нормальный ежедневный прирост моих auth.log где то в районе 20-50 строк, раньше на некоторых серверах он был в сотни и тысячи раз больше.

Пока что это development branch, лежит pull request-ом, релиз запланирован пока в версии 0.9.2.
Кому интересно, почитать подробнее про реализацию и историю решения можно здесь — Ban time incr by sebres · Pull Request #716 · fail2ban/fail2ban.

Однако пока эта версия ляжет апдейтом на ваш сервер, пройдет еще немало времени — пока релиз выйдет в mainline, пока его в дистрибутивы возьмут… История длинная, например тот же debian все еще использует 0. 8.x — собственно поэтому и статья. Так что качаем руками, устанавливаем… профит.

Взять эту версию можно здесь fail2ban-ban-time-incr.zip (sebres master branch).
Порт для debian-ов: ban-time-incr-debian.zip (merged master debian branch, и хоть и не main line — буду стараться по возможности поддерживать ветку актуальной).

Установить его довольно просто. Если у вас уже до того был fail2ban, установленный из дистрибутива, сохраняем из «/etc/fail2ban/» старые «fail2ban.local» и «jail.local» (Ну и лучше старые «fail2ban.conf» и «jail.conf»). Я бы на всякий случай (из-за возможных личных изменениях в filter и action) сохранил бы куда-нибудь весь каталог «/etc/fail2ban/».

Далее сносим старый дистрибутивный fail2ban, например:

sudo service fail2ban stop
sudo apt-get remove fail2ban

Собственно установка:
cd /tmp
unzip ~/downloads/fail2ban-ban-time-incr.zip
cd fail2ban-ban-time-incr/
sudo python setup.py install

[UPD] Иногда на некоторых дистрибутивах, при ручной установке, почему-то не устанавливается сервис (например нет файла /etc/init.d/fail2ban) — и соответственно через сервис не (авто)стартует, только через fail2ban-client start.[Что делать…]Это можно поправить копированием из дистрибутива или например из архива (потом не забываем поправить права):
cd /tmp/fail2ban-ban-time-incr-debian
sudo cp /etc/init.d/fail2ban ~/init.fail2ban.org
sudo cp ./files/debian-initd /etc/init.d/fail2ban
chmod u+x,g+x,o+x /etc/init.d/fail2ban
И проверить внутри путь к fail2ban-client (which fail2ban-client):
— при /usr/local/bin/fail2ban-clientDAEMON=/usr/local/bin/$NAME-client
— при /usr/bin/fail2ban-clientDAEMON=/usr/bin/$NAME-client
Не забываем проверить автозапуск сервиса (update-rc.d, rcconf, file-rc… любимое подставить).
[/UPD]

Теперь чтобы заработал новый функционал, нужно в вашем jail. local в [default] (либо для каждой конкретной jail) добавить опцию: bantime.increment = true. Пример и описание можно пока найти в «jail.conf».
Некоторое здесь кратко:

  • bantime.rndtime — максимальное время, используется для добавления к banTime случайного времени, для предотвращения «умных» бот-сетей вычислять точное время, когда IP разблокируется снова. Пример bantime.rndtime = 10m
  • bantime.factor — коэффициент для вычисления экспоненты роста для формулы bantime.formula или множителей bantime.multipliers, по умолчанию значение коэффициента 1, что соответствует увеличению времени запрета на 1, 2, 4, 8, 16… Увеличивая этот параметр для некоторых jail, можно увеличивать время блокировки более агрессивно.
  • bantime.formula — используется по умолчанию для вычисления следующего значения времени запрета, значение по умолчанию: bantime.formula = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor
    Тот же рост времени запрета будет достигнут используя множители bantime.multipliers равные 1, 2, 4, 8, 16, 32…
    Пример более агрессивной формулы для фактора «1» и имеет те же значения роста только для фактора равного «2.0 / 2.885385″:
    bantime.formula = ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)
  • bantime.multipliers — параметр может используется вместо формулы дискретно для вычисления следующего значения времени запрета. Значение множителя равное «-1» (может стоять только в конце списка) и заносит адрес в перманентный бан (до ручного разблокирования).
    Пример 1: bantime.multipliers = 1 2 4 8 16 32 64 — увеличивает время запрета на 1, 2, 4,… и если последний ban count был больше последнего индекса мультипликаторов, то будет всегда использован последний множитель (64 в примере), что при факторе равном «1» и оригинальном времени запрета (10 минут) — соответствует 10. 6 часам.
    Пример 2: bantime.multipliers = 1 5 30 60 300 720 1440 2880 — может использоваться для небольшого начального времени запрета (bantime = 60) — т.к. увеличение становится более агрессивным, имеем bantime равный: 1 мин, 5 мин, 30 мин, 1 час, 5 часов, 12 часов, 1 день, 2 дня соответственно.

Если во время проб или в продакшн какой-нибудь (хороший) IP случайно многократно улетел в бан (и стал соответственно плохим) он забудется (снова станет «белым») сам по истечении трехкратного времени последнего бана и dbpurgeage (находится в fail2ban.local), либо если с него руками снять бан, используя:
fail2ban-client set $JAIL unbanip $IP

Я для тестирования регулярок использую fail2ban-regex, а для теста работоспособности что-нибудь типа:
logger -t 'test:auth' -i -p auth.info "pam_unix(test:auth): authentication failure; logname= uid=0 euid=0 tty=test ruser=admin rhost=1.2.3.4"

Не забываем про старт:
sudo service fail2ban start

Вот собственно и все, теперь надеюсь ваш сервер стал еще чуточку защищенней. Ну а вы не ленитесь и поглядывайте все-таки в логи (доверяй, но проверяй).

P.S. Стандартная приписка: Fail2Ban is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. Короче говоря — пользуйтесь на здоровье, но на свой страх и риск…
И да пребудут ваши сервера в безопасности.

P.P.S. Да чуть не забыл, у меня тут назапланировано что-то допилить, что-то уже готово, нужно просто оформить нормально и выложить, так вот — опрос «Что по вашему следовало бы (до)делать в первую очередь».

Настройка Fail2Ban в Linux для защиты SSH, Apache, MySQL, Exim

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

Любой сервис сервера, порты которого открыты во внешний мир, потенциально уязвим. Порты некоторых сервисов можно закрыть, но так можно поступить не со всеми. Например, если вы хотите, чтобы у вас полноценно работала почтовая SMTP служба, вы не можете отключить ее или заблокировать порт на firewall и время от времени в логах можно наблюдать записи о попытке подбора пароля к учетной записи. Так происходит и с другими сервисами.

Обычно на всех своих серверах, я закрываю SSH доступа с наружи, т.к. подключаюсь к своим серверам со своего статического IP-адреса или через OpenVPN подключение. Но это не всегда возможно. На помощь приходит замена стандартных портов, либо настройка на сервере службы fail2ban. В этом примере мы покажем, как установить и использовать fail2ban в CentOS, однако вы можете использовать эту инструкцию и для других дистрибутивов Linux.

Установка и первичная настройка Fail2Ban в CentOS 8/7

Пакет для установки fail2ban находится в репозитории Epel, подключим его:

# yum install epel-release -y

После подключения репозитория, можно установить fail2ban через yum или dnf (в CentOS 8):

# yum install fail2ban -y

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

[root@server ~]# systemctl enable fail2ban

Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.

Служба fail2ban хранит файлы конфигурации в директории /etc/fail2ban. Главный файл конфигурации — /etc/fail2ban/jail.conf. Так как данный файл может быть перезаписан при обновлении сервиса, для работы нужно создать файл jail. local. Также файлы в директории /etc/fail2ban/jail.d/ могут использоваться для переопределения настроек в выше указанных файлах. Файлы применяются в следующем порядке:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Использование Fail2Ban для защиты SSH от перебора паролей

Создадим файл и внесем настройки:

# nano /etc/fail2ban/jail.local

И добавим в него содержимое:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true

Данная конфигурация устанавливает новое время для блокировки IP адресовм для всех служб, устанавливает использование iptables для блокировок и включается защиту для sshd.

Чтобы использовать для фильтрации firewalld, укажите:

banaction = firewallcmd-ipset

После изменения настроек перезапустите сервис:

# systemctl restart fail2ban

Чтобы посмотреть статус fail2ban, и проверить список защищаемых службы, выполните команду:

[root@server ~]# fail2ban-client status

Status
|- Number of jail: 1
`- Jail list: sshd

Вы можете запросить текущий статус блокировок fail2ban для конкретной службы:

# fail2ban-client status sshd

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

Разблокируйте строку:

ignoreip = 127.0.0.1/8

Измените следующие значения:
bantime = 10m — время на которое будет заблокирован IP
findtime = 10m — время, в течение которого будут подсчитываться неудачные попытки авторизации.
maxretry = 3 — количество попыток до блокировки

Чтобы получать оповещения по электронной почте, вам нужно настроить следующие параметры:
destemail = root@build-centos. info –получатель
sender = [email protected] — отправитель
mta = postfix — SMTP служба, через которую осуществляется отправка

Чтобы настроить блокировку для отдельных сервисов, в файле /etc/fail2ban/jail.local после блока [DEFAULT] создается блок для нужного сервиса, например, как с sshd. Добавим в него некоторые настройки:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s

Мы указали какой порт блокировать и куда писать логи блокировки. Обратите внимание на директорию /etc/fail2ban/filter.d, там описываются фильтры с помощью которых будут анализироваться записи в журнале и проверять, указывает ли та или иная запись на неудачную аутентификацию. Если вывести список файлов в каталоге, можно обнаружить правила fail2ban для большинство популярных сервисов:
# ls /etc/fail2ban/filter.d

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

Логи Fail2Ban

Чтобы проверить журнал fail2ban, выполните команду:

# journalctl -b -u fail2ban

Так же можно проверить логи в реальном времени:

# tail -F /var/log/fail2ban.log

Вывод из лога:

2019-12-05 12:13:26,914 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186.180.17
2019-12-05 12:13:26,930 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186.180.223
2019-12-05 12:13:26,944 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 36.72.82.10
2019-12-05 12:13:26,958 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 40.117.135.57
2019-12-05 12:13:26,973 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 45.55.155.224
2019-12-05 12:13:26,988 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 67.205.135.127
2019-12-05 12:13:27,003 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 83.171.107.216
2019-12-05 12:13:43,362 fail2ban. filter [9750]: INFO [sshd] Found 183.87.134.98 - 2019-12-05 12:13:42
2019-12-05 12:13:45,571 fail2ban.filter [9750]: INFO [sshd] Found 183.87.134.98 - 2019-12-05 12:13:45
2019-12-05 12:15:46,109 fail2ban.filter [9750]: INFO [sshd] Found 112.64.170.178 - 2019-12-05 12:15:45
2019-12-05 12:17:05,317 fail2ban.actions [9750]: NOTICE [sshd] Unban 222.186.175.216

Как видите, fail2ban работает и периодически блокирует или убирает блокировку для IP адресов.

Чтобы проверить, какие IP адреса заблокированы в iptables службой fail2ban, выполните:

# iptables -L

Как видите, с открытым наружу ssh, время от времени кто-то пытается подобрать пароль и авторизоваться. Если проверить статистику через какое-то время, видно, что количество заблокированных IP растет.

Защита Apache с помощью Fail2Ban

Если вы хотите настроить fail2ban для вашего apache (httpd), добавьте следующие настройки в jail.local:

# выявляем неудачные попытки ввода пароля
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/httpd/error_log
maxretry = 3
# блокирует IP, которые напрямую обращаются к скриптам с расширением php, asp, exe, pl, cgi, scgi
[apache-noscript]
enabled = true
port= http,https
filter = apache-noscript
logpath = /var/log/httpd/error_log
maxretry = 3
# выявляем попытки переполнения Апача
[apache-overflows]
enabled = true
port= http,https
filter = apache-overflows
logpath = /var/log/httpd/error_log
maxretry = 2
# выявляем неудачные попытки поиска в домашней директории на сервере
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/httpd/*error_log
maxretry = 2

После изменения конфигурационного файла, выполняем рестарт сервиса и проверяем статус:

[root@server ~]# fail2ban-client status apache

Status for the jail: apache
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/httpd/error_log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

Для теста, я установил на сервер Joomla, после чего пытался открыть несуществующий файл и fail2ban меня заблокировал:

[root@server httpd]# fail2ban-client status apache-noscript

Status for the jail: apache-noscript
|- Filter
| |- Currently failed: 1
| |- Total failed: 6
| `- File list: /var/log/httpd/error_log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: *.*.*.*

Настройка связки Fail2Ban и Nginx

Если веб-сервером у вас выступает nginx и на сайте есть разделы требующие авторизации, у вас так же могут быть проблемы с попытками перебора паролей. Для fail2ban мы можем указать использовать файл nginx-http-auth.conf, По умолчанию он уже описан в конфигурационном файле /etc/fail2ban/jail.conf:

[root@server ~]# cat /etc/fail2ban/jail.conf | grep nginx

[nginx-http-auth]
logpath = %(nginx_error_log)s
# To use 'nginx-limit-req' jail you should have `ngx_http_limit_req_module`
# and define `limit_req` and `limit_req_zone` as described in nginx documentation
# http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
# or for example see in 'config/filter.d/nginx-limit-req.conf'
[nginx-limit-req]
logpath = %(nginx_error_log)s
[nginx-botsearch]
logpath = %(nginx_error_log)s
logpath = %(nginx_access_log)s

Нам нужно ли включить его в конфигурационном файле /etc/fail2ban/jail.local добавив:

[nginx-http-auth]
enabled = true

После все проведенных настроек, не забываем выполнять перезагрузку сервиса:

# systemctl restart fail2ban

Защита MySQL с помощью Fail2Ban

Для защиты MySQL нужно добавить отдельный блок в конфигурационный файл jail.local:

[mysqld-auth]
enabled = true
filter = mysqld-auth
port = 3306
logpath = /var/log/mysql/error.log

Данная настройка защитит вас от перебора паролей для пользователя mysql (это очень частый брутфорс).

Правила Fail2Ban для Exim

Чтобы настроить защиту для почтового сервиса exim, внесите следующую конфигурацию:

[exim]
enabled = true
filter = exim
action = iptables-multiport[name=exim,port="25,465,587"]
logpath = /var/log/exim/mainlog

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

Белый список IP в Fail2Ban, разблокировка IP-адресов

Чтобы разблокировать IP, который попал в блокировку fail2ban, используйте команду:

# fail2ban-client set SECTION unbanip IP — где SECTION название секции в конфигурационном файле, по правилам которого был заблокирован ваш IP адрес. Например:

# fail2ban-client set apache-noscript unbanip 185.*.*.*

Вы можете добавить определенные IP адреса в исключения fail2ban (белый список). Для этого в конфигурационном файле jail.conf внесите IP в строку:

ignoreip =185.*.*.*

Добавив свой IP-адрес в исключения, я выполнил несколько атак подобно предыдущей и блокировки не произошло.

Как вы видите, fai2ban довольно просто в настройке, но вполне эффективное средство дополнительной защиты вашего сервера от злоумышленников. Для Windows к сожалению, я не видел бесплатных программ с подобным функционалом (можно попробовать реализовать блокировку IP адресов с помощью PowerShell – см. статью Защита RDP от перебора паролей).

Как настроить Fail2ban на CentOS и Ubuntu? Защита ssh.

Различные сервисы на вашем сервере доступные из сети (SSH, Apache, Nginx, Asterisk) зачастую подвержены брут-форс атакам. Самая распространенная проблема это подбор пароля от SSH логина администратора. Для защиты от таких атак идеально подойдет Fail2ban. Fail2ban умеет просматривать логии различных сервисов на сервере и на их основе менять правила фаервола. Например заблокировать IP адрес злодея в iptables.

В данной инструкции мы рассмотрим, как установить и настроить Fail2ban на сервере с CentOS или Ubuntu.

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

Т.к. данный сервис  не доступен в официальном репозитарии CentOS, то сначала установим пакеты EPEL:

sudo yum install epel-release

И уже теперь установим сам Fail2ban:

sudo yum install fail2ban

Установка на Ubuntu 16

Сервис доступен в официальном репозитарии, но сначала рекомендуем обновить базу доступных пакетов:

sudo apt-get update

После чего устанавливаем утилиту:

sudo apt-get install fail2ban

Начальная настройка

Настройка будет одинаковая для всех Linux дистрибутивов. Fail2ban хранит свои конфигурационные файлы в папке

/etc/fail2ban

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

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

Также вы можете создавать файлы  с индивидуальными настройками в папке /etc/fail2ban/jail.d/ . Подобнее мы рассмотрим это далее. Настройки из этих файлов будут подтягивать и заменять указанные в jail.conf  в ходе работы Fail2ban. Настройки применяются из файлов в следующем порядке:

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, — любые файлы с расширением conf. Применяются в алфавитном порядке.
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, — любые файлы с расширением local. Применяются в алфавитном порядке.

Все файлы могут содержать секцию [DEFAULT], содержимое которой будет применяться в первую очередь. Также в них могут содержаться секции для отдельных сервисов, так называемые  «jails».

Давайте сначала рассмотрим настройки по умолчанию, а затем сделаем собственные.

Если открыть файл jail.conf, то в нем в разделе [DEFAULT] находятся следующие основные параметры:

ignoreip = 127.0.0.1/8

Трафик с данных IP адресов не будет подвергаться анализу, игнорироваться при проведении проверки. Своего рода «белые список».

bantime = 600

Указывается в секундах.  Определяет на которой период времени будет блокироваться доступ, в случае срабатывания правила. 

findtime = 600

Указывается в секундах. Устанавливает период времени в течение которого подсчитывается количество срабатываний правил, после которого надо применять фильтр (бан). Работает в паре со следующим параметром «maxretry». Значения по умолчанию означают что если правило сработает 3 раза за 600 секунд, то IP адрес будет добавлен в бан.

maxretry = 3

Количество попыток. См. пояснение к параметру «findtime».

destemail = root@localhost

Если вы хотите получать уведомления о срабатывании блокировки, то в этом поле указывается email на который будет отправляться уведомление.

sendername = Fail2Ban

Работает в паре с «destemail». Определяет кто будет указан в качестве отправителя email нотификаций.

mta = sendmail

Работает в паре с «destemail». Определяет через какой сервис будут отправляться email.

action = $(action_)s Данный параметр определяем какой действие необходимо предпринять при срабатывании правила. Список возможных значений находится выше в файле jail.conf. Рассмотрим наиболее популярные:

action_ — простое изменение параметров фаервола.

action_mw – помимо настройки фаервола будет отправлена email нотификация.

action_mwl  — помимо настройки фаервола будет отправлена email нотификация с примером записи из лога.

В случае использования последних двух вариантов не забудьте сделать необходимые настройки email нотификации (см. выше).

Настройки для отдельных сервисов

После раздела [DEFAULT] идут индивидуальные настройки для каждого сервиса. Обычно они включают в себя параметр port, которые необходимо блокировать и logpath – логии которые необходимо анализировать на предмет атаки. Например, для SSH «jail» уже включен по умолчанию в /etc/fail2ban/jail.local и имеет следующие настройки:

[sshd]
# To use more aggressive sshd filter (inclusive sshd-ddos failregex):
#filter = sshd-aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

В данном примере ssh это предопределенная переменная для стандартного SSH порта. А %(sshd_log)s использует значение, которое определяется в других стандартных настройках Fail2ban. Параметр filter определяет является ли строка в логах индикатором об ошибочной авторизации или нет. По сути это отсылка к регулярным выражениям, которые находятся в файлах .conf  в папке /etc/fail2ban/filter.d. Правила формирования регулярных выражений мы не будем рассматривать, т.к. они достаточно сложные.

По умолчанию «jail» для отдельных сервисов выключены. Чтобы включить необходимо в jail.local в разделе сервиса добавить параметр:

enabled = true

Давайте сделаем это для SSH. Раздел sshd в /etc/fail2ban/jail.local  будет выглядеть следующим образом:

[sshd]
enabled = true
# To use more aggressive sshd filter (inclusive sshd-ddos failregex):
#filter = sshd-aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Чтобы настройки применились перезапустим fail2ban:

sudo systemctl restart fail2ban

 

Проверка и мониторинг работы

Чтобы убедиться, что fail2ban запущен и работает введем команду:

sudo systemctl status fail2ban

В случае проблем, логи можно посмотреть следующим образом:

sudo journalctl -b -u fail2ban

А также тут:

sudo tail -F /var/log/fail2ban.log

Чтобы увидеть статус всех «jail» или только из них можно воспользоваться следующими командами:

sudo fail2ban-client status
sudo fail2ban-client status «jail_name»

Например: 

sudo fail2ban-client status sshd

Чтобы просмотреть актуальные настройки Firewall введите:

sudo iptables –S

Тестирование защиты SSH

Чтобы убедиться что сделанные нами настройки fail2ban верны. Можно эмулировать атаку. Для этого попробуйте подключиться к серверу под защитой Fail2ban с другого сервер / устройства по SSH и ввести неверный пароль от учетной записи. Повторите эти действия несколько раз.

Важно! Не рекомендуем делать это на устройстве с которого вы в данный момент конфигурируете сервер, т.к. в случае успеха ваша текущее соединение будет сброшено.

В случае верных настроек, когда блокировка fail2ban сработает, при попытке подключения вам будет показано предупреждение Permission denied или отказано в доступе к серверу.

На сервере с fail2ban в текущих настройках Firewall вы также найдете строку с описанием блокировки:

sudo iptables –S

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-ssh -s 0.0.0.0/32(ваш IP) -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN

Вторая снизу строка в данном примере означает что ваш указанный IP адрес был заблокирован.

Как просмотреть список заблокированных IP

Чтобы посмотреть список текущих заблокированных IP адресов введите команду:

sudo fail2ban-client status «jail_name»

Чтобы увидеть список активных jails введите:

sudo fail2ban-client status

Заблокированные IP адреса будут указаны в следующем виде:

`- action
   |- Currently banned: 2
   |  `- IP list:       1.1.1.1 2.2.2.2

Также как указывалось выше заблокированные IP можно найти в данных iptables командой:

sudo iptables –S

Как разблокировать IP адрес

Для того чтобы разблокировать ( удалить / достать из бана) IP адрес, необходимо ввести команду:

fail2ban-client set  «jail_name» unbanip «IP адрес»

Например:

fail2ban-client set  sshd unbanip 1.1.1.1

 

Загрузки — Fail2ban

Архивы официальных исходников

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

Контроль версий исходного кода

В сентябре 2011 года управление версиями разработки переключилось с SVN на SF на git, размещенный на github. Чтобы внести свой вклад, создайте свой собственный форк Fail2ban на github, внесите в него свои изменения и отправьте запросы на вытягивание.

Вы также сможете загрузить полные архивы исходного кода для любого существующего тега / выпуска или мастера разработки из fail2ban Releases на github.

Пакеты

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

Gentoo Пакеты находятся в Portage.
Debian Пакеты доступны здесь.Сборки Backport доступны в NeuroDebian.
Ubuntu Пакеты доступны здесь. Сборки Backport доступны в NeuroDebian.
Fedora RPM доступны, просто запустив: yum install fail2ban
Red Hat / CentOS об / мин доступны через EPEL.
Gral Linux об / мин доступны здесь. Эти RPM можно использовать и на Centos 3 и RHAS 3.
IPcop Аддон доступен здесь.Спасибо Маркусу Хоффманну
Mandriva RPM доступны через официальный репозиторий contrib. Пожалуйста, запустите urpmi fail2ban. Спасибо Tomasz Paweł Gajc
SUSE / openSUSE об / мин доступны здесь. Спасибо Андрею Семену
ArchLinux Пакет доступен в AUR.
Slackware Пакеты доступны здесь. Спасибо Кристиану Ведовато. Скрипт SlackBuild для создания пакетов Slackware доступен здесь.
FreeBSD Порт здесь.
Mac OS X Доступно на MacPorts

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

Введение

Хотя подключение к серверу через SSH может быть очень безопасным, сам демон SSH — это служба, которая должна быть доступна в Интернете для правильной работы. Это сопряжено с определенным риском и создает вектор атаки для потенциальных злоумышленников.

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

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

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

Установите Fail2Ban в Ubuntu 14.04

Процесс установки этого инструмента прост, поскольку команда разработчиков Ubuntu поддерживает пакет в репозиториях по умолчанию.

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

  
  • sudo apt-get update
  • sudo apt-get install fail2ban

Как видите, установка тривиальна.Теперь мы можем приступить к настройке утилиты для собственного использования.

Настройте Fail2Ban с вашими настройками службы

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

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

Хотя мы должны включать только отклонения от значения по умолчанию в файл jail.local , проще создать файл jail.local на основе существующего файла jail.conf . Поэтому мы скопируем этот файл с закомментированным содержимым в качестве основы для файла jail.local . Вы можете сделать это, набрав:

  
  • awk '{printf "#"; Распечатать; } '/ etc / fail2ban / jail.conf | sudo tee /etc/fail2ban/jail.local

После копирования файла мы можем открыть исходный файл jail.conf , чтобы увидеть, как все настроено по умолчанию

  
  • sudo nano /etc/fail2ban/jail.conf

В этом файле есть несколько настроек, которые вы, возможно, захотите изменить. Параметры, расположенные в разделе [ПО УМОЛЧАНИЮ] , будут применены ко всем службам, включенным для fail2ban, которые не переопределены в собственном разделе службы.

/etc/fail2ban/jail.conf

  [ПО УМОЛЧАНИЮ]
. . .
ignoreip = 127.0.0.1/8
. . .
  

Параметр ignoreip настраивает исходные адреса, которые игнорирует fail2ban. По умолчанию он настроен так, чтобы не запрещать трафик с локального компьютера. Вы можете добавить дополнительные адреса для игнорирования, добавив раздел [DEFAULT] с настройкой ignoreip под ним в файл jail.local . Вы можете добавить дополнительные адреса, добавив их в конец директивы через пробел.

/etc/fail2ban/jail.conf

  [ПО УМОЛЧАНИЮ]
. . .
bantime = 600
. . .
  

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

/etc/fail2ban/jail.conf

  [ПО УМОЛЧАНИЮ]
. . .
findtime = 600
maxretry = 3
. . .
  

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

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

/etc/fail2ban/jail.conf

  [ПО УМОЛЧАНИЮ]
.. .
destemail = корень @ localhost
sendername = Fail2Ban
mta = sendmail
. . .
  

Если вы хотите настроить оповещения по электронной почте, вам нужно будет оценить параметры destemail , sendername и mta . Параметр destemail устанавливает адрес электронной почты, на который должны поступать сообщения о запрете. Имя отправителя устанавливает значение поля «От» в электронном письме. Параметр mta определяет, какая почтовая служба будет использоваться для отправки почты.Снова добавьте их в файл jail.local под заголовком [DEFAULT] и установите правильные значения, если вы хотите их изменить.

/etc/fail2ban/jail.conf

  [ПО УМОЛЧАНИЮ]
. . .
действие = $ (действие_) с
. . .
  

Этот параметр настраивает действие, которое выполняет fail2ban, когда хочет установить бан. Значение action_ определено в файле незадолго до этого параметра. Действие по умолчанию — просто настроить брандмауэр на отклонение трафика от хоста-нарушителя, пока не истечет время блокировки.

Если вы хотите настроить оповещения по электронной почте, добавьте или раскомментируйте элемент action в файле jail.local и измените его значение с action_ на action_mw . Если вы хотите, чтобы электронное письмо включало соответствующие строки журнала, вы можете изменить его на action_mwl . Убедитесь, что у вас настроены соответствующие настройки почты, если вы решите использовать почтовые уведомления.

Индивидуальные настройки тюрьмы

Наконец, мы переходим к той части файла конфигурации, которая имеет дело с отдельными службами.Они указаны в заголовках разделов, например, [ssh] .

Каждый из этих разделов можно включить, раскомментировав заголовок в jail.local и изменив строку enabled на «true»:

/etc/fail2ban/jail.local

  [jail_to_enable]
. . .
enabled = true
. . .
  

По умолчанию служба SSH включена, а все остальные отключены.

Эти разделы работают, используя значения, установленные в разделе [DEFAULT] , в качестве основы и изменяя их по мере необходимости.Если вы хотите переопределить какие-либо значения, вы можете сделать это, добавив раздел соответствующей службы в jail.local и изменив его значения.

Некоторые другие настройки, которые задаются здесь, — это фильтр , который будет использоваться для определения того, указывает ли строка в журнале на неудачную аутентификацию, и путь журнала , который сообщает fail2ban, где расположены журналы для этой конкретной службы.

Фильтр Значение на самом деле является ссылкой на файл, расположенный в каталоге / etc / fail2ban / filter.d с удаленным расширением .conf . Эти файлы содержат регулярные выражения, которые определяют, является ли строка в журнале неудачной попыткой аутентификации. Мы не будем подробно рассматривать эти файлы в этом руководстве, потому что они довольно сложны, а предустановленные настройки хорошо соответствуют соответствующим строкам.

Однако вы можете увидеть, какие фильтры доступны, заглянув в этот каталог:

  
  • ls /etc/fail2ban/filter.d

Если вы видите файл, который выглядит как связанный с используемой вами службой, вам следует открыть его в текстовом редакторе.Большинство файлов достаточно хорошо прокомментированы, и вы должны иметь возможность хотя бы сказать, для защиты от каких условий был разработан сценарий. Большинство этих фильтров имеют соответствующие (отключенные) разделы в файле jail.conf , которые при желании можно включить в файле jail.local .

Например, представьте, что мы обслуживаем веб-сайт с помощью Nginx, и понимаете, что часть нашего сайта, защищенная паролем, подвергается атакам при попытках входа в систему. Мы можем указать fail2ban использовать nginx-http-auth.conf , чтобы проверить это условие в файле /var/log/nginx/error.log .

Фактически это уже настроено в разделе [nginx-http-auth] в нашем файле /etc/fail2ban/jail.conf . Нам просто нужно раскомментировать раздел в файле jail.local и перевернуть параметр enabled , чтобы защитить наш сервис:

/etc/fail2ban/jail.local

 . . .
[nginx-http-auth]

enabled = true
.. .
  

Если вы включите это, вы захотите перезапустить службу fail2ban, чтобы убедиться, что ваши правила построены правильно.

Собираем все вместе

Теперь, когда вы понимаете основную идею fail2ban, давайте рассмотрим базовую настройку.

Мы собираемся настроить политику автоматического запрета для SSH и Nginx, как описано выше. Мы хотим, чтобы fail2ban отправлял нам электронное письмо, когда IP заблокирован.

Во-первых, давайте установим все необходимое программное обеспечение.

Если у вас его еще нет, вам понадобится nginx, поскольку мы собираемся отслеживать его журналы, и вам понадобится sendmail, чтобы отправлять нам уведомления. Мы также возьмем iptables-persistent , чтобы сервер мог автоматически устанавливать наши правила брандмауэра при загрузке. Их можно получить из репозиториев Ubuntu по умолчанию:

  
  • sudo apt-get update
  • sudo apt-get install nginx sendmail iptables-persistent

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

  
  • sudo service fail2ban stop

Установите базовый брандмауэр

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

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

  
  • sudo iptables -A ВВОД -i lo -j ПРИНЯТЬ
  • sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT
  • sudo iptables -A ВВОД -p tcp --dport 22 -j ПРИНЯТЬ
  • sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ПРИНЯТЬ
  • sudo iptables -A INPUT -j DROP

Эти команды реализуют указанную выше политику.Мы можем увидеть наши текущие правила брандмауэра, набрав:

  
  

Выход

-P ВВОД ПРИНЯТЬ -P ПРИНЯТЬ ВПЕРЕД -P ПРИНЯТЬ ВЫХОД -A ВВОД -i lo -j ПРИНЯТЬ -A ВВОД -m conntrack --ctstate СВЯЗАН, УСТАНОВЛЕН -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 22 -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 80 -j ПРИНЯТЬ -A INPUT -j DROP

Вы можете сохранить брандмауэры, чтобы они пережили перезагрузку, набрав:

  
  • sudo dpkg-reconfigure iptables-persistent

После этого вы можете перезапустить fail2ban , чтобы реализовать правила упаковки:

  
  • sudo service fail2ban start

Мы можем увидеть наши текущие правила брандмауэра, набрав:

  
  

Выход

-P ВВОД ПРИНЯТЬ -P ПРИНЯТЬ ВПЕРЕД -P ПРИНЯТЬ ВЫХОД -N fail2ban-ssh -A ВХОД -p tcp -m multiport --dports 22 -j fail2ban-ssh -A ВВОД -i lo -j ПРИНЯТЬ -A ВВОД -m conntrack --ctstate СВЯЗАН, УСТАНОВЛЕН -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 22 -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 80 -j ПРИНЯТЬ -A INPUT -j DROP -A fail2ban-ssh -j ВОЗВРАТ

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

Настройка конфигурации Fail2ban

Теперь нам нужно настроить fail2ban, используя те настройки, которые нам нужны. Откройте файл jail.local :

  
  • sudo nano / etc / fail2ban / jail.местный

Мы можем установить более суровое время бана. Найдите и раскомментируйте заголовок [ПО УМОЛЧАНИЮ] . Под заголовком по умолчанию измените настройку bantime , чтобы наш сервис блокировал клиентов на полчаса:

/etc/fail2ban/jail.local

  [ПО УМОЛЧАНИЮ]
. . .
bantime = 1800
. . .
  

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

/etc/fail2ban/jail.local

  [ПО УМОЛЧАНИЮ]
. . .
destemail = [email protected]
. . .
  

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

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

Мы собираемся выбрать action_mwl , потому что строки журнала помогут нам устранить неполадки и собрать дополнительную информацию, если есть проблемы:

/etc/fail2ban/jail.local

  [ПО УМОЛЧАНИЮ]
. . .
действие =% (action_mwl) s
. . .
  

Переходя к разделу SSH, если мы хотим настроить количество неудачных попыток, которые должны быть разрешены до того, как будет установлен запрет, вы можете отредактировать запись maxretry .Если вы используете порт, отличный от «22», вам нужно соответствующим образом настроить параметр порт . Как мы уже говорили, эта служба уже включена, поэтому нам не нужно ее изменять.

Затем найдите раздел nginx-http-auth . Раскомментируйте заголовок и измените параметр enabled на «true».

/etc/fail2ban/jail.local

 . . .
[nginx-http-auth]

enabled = true
. . .
  

Это должно быть все, что вам нужно сделать в этом разделе, если ваш веб-сервер не работает на нестандартных портах или если вы переместили путь к журналу ошибок по умолчанию.

Перезапуск службы Fail2ban

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

Теперь запустите или перезапустите службу fail2ban. Иногда лучше полностью отключить службу, а затем запустить ее снова:

  
  • sudo service fail2ban stop

Теперь мы можем перезапустить его, набрав:

  
  • sudo service fail2ban start

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

  
  

Выход

-P ВВОД ПРИНЯТЬ -P ПРИНЯТЬ ВПЕРЕД -P ПРИНЯТЬ ВЫХОД -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A ВХОД -p tcp -m multiport --dports 22 -j fail2ban-ssh -A ВВОД -i lo -j ПРИНЯТЬ -A ВВОД -m conntrack --ctstate СВЯЗАН, УСТАНОВЛЕН -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 22 -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 80 -j ПРИНЯТЬ -A INPUT -j DROP -A fail2ban-nginx-http-auth -j ВОЗВРАТ -A fail2ban-ssh -j ВОЗВРАТ

Красные строки созданы нашими политиками fail2ban.Прямо сейчас они просто направляют трафик в новые, почти пустые цепочки, а затем пропускают поток обратно в цепочку INPUT.

Однако именно в этих новых цепочках будут добавлены правила бана.

Проверка политики запрета

С другого сервера, с которого не нужно входить на ваш сервер fail2ban, мы можем протестировать правила, заблокировав наш второй сервер.

После входа на второй сервер попробуйте подключиться к серверу fail2ban по SSH.Вы можете попробовать подключиться, используя несуществующее имя, например:

  
  • ssh blah @ fail2ban_server_IP

Введите случайные символы в запрос пароля. Повторите это несколько раз. В какой-то момент сервер fail2ban перестанет отвечать сообщением Permission denied . Это означает, что ваш второй сервер заблокирован на сервере fail2ban.

На вашем сервере fail2ban вы можете увидеть новое правило, снова проверив наши iptables:

  
  

Выход

-P ВВОД ПРИНЯТЬ -P ПРИНЯТЬ ВПЕРЕД -P ПРИНЯТЬ ВЫХОД -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A ВХОД -p tcp -m multiport --dports 22 -j fail2ban-ssh -A ВВОД -i lo -j ПРИНЯТЬ -A ВВОД -m conntrack --ctstate СВЯЗАН, УСТАНОВЛЕН -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 22 -j ПРИНЯТЬ -A ВВОД -p tcp -m tcp --dport 80 -j ПРИНЯТЬ -A INPUT -j DROP -A fail2ban-nginx-http-auth -j ВОЗВРАТ -A fail2ban-ssh -s 203.0.113.14 / 32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j ВОЗВРАТ

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

Заключение

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

Если вы хотите узнать больше о том, как работает fail2ban, вы можете ознакомиться с нашим руководством о том, как работают правила и файлы fail2ban.

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

fail2ban / fail2ban: демон для блокировки хостов, вызывающих множественные ошибки аутентификации

  __ _ _ ___ _
                    / _ | __ _ (_) | _) | __ __ _ _ _
                   | _ / _` | | | / / | '_ \ / _` | '\
                   | _ | \ __, _ | _ | _ / ___ | _.__ / \ __, _ | _ || _ |
                   v1.0.1.dev1 20 ?? / ?? / ??
  

Fail2Ban: запретить хосты, вызывающие множественные ошибки аутентификации

Fail2Ban сканирует файлы журналов, такие как /var/log/auth.log , и запрещает выполнение IP-адресов. слишком много неудачных попыток входа в систему. Это достигается путем обновления правил системного брандмауэра. для отклонения новых подключений с этих IP-адресов за настраиваемую сумму времени. Fail2Ban готов к чтению многих стандартных файлов журналов, например, для sshd и Apache, и легко настраивается для чтения любого журнала файл по вашему выбору, для любой ошибки, которую вы пожелаете.

Хотя Fail2Ban может снизить частоту неправильной аутентификации попыток, он не может устранить риск, связанный со слабой аутентификацией. Настройте службы для использования только двухфакторной аутентификации или публичной / частной аутентификации механизмы, если вы действительно хотите защитить сервисы.

Начиная с версии 0.10 fail2ban поддерживает сопоставление адресов IPv6.

Этот README представляет собой быстрое введение в Fail2Ban. Дополнительная документация, FAQ и HOWTO можно найти на странице руководства по fail2ban (1), Wiki, Документация для разработчиков и сайт: https: // www.fail2ban.org

Установка:

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

Требуется:

Дополнительно:

Для установки:

  tar xvfj fail2ban-1.0.1.tar.bz2
компакт-диск fail2ban-1.0.1
sudo python setup.py установить
  

Кроме того, вы можете клонировать исходный код из GitHub в каталог по вашему выбору и выполнить установку оттуда. Выберите правильную ветку, например, master или 0.11

  git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py установить
  

Это установит Fail2Ban в каталог библиотеки python. Исполняемый файл скрипты помещаются в / usr / bin , а конфигурация — в / etc / fail2ban .

Fail2Ban теперь должен быть правильно установлен. Просто наберите:

  fail2ban-client -h
  

, чтобы проверить, все ли в порядке. Вы всегда должны использовать fail2ban-client и никогда не вызывайте fail2ban-server напрямую.Вы можете убедиться, что у вас установлена ​​правильная версия с

  версия fail2ban-client
  

Обратите внимание, что системный сценарий инициализации / обслуживания не устанавливается автоматически. Чтобы включить fail2ban в качестве автоматической службы, просто скопируйте скрипт для своего distro из каталога файлов в каталог /etc/init.d . Пример (на базе Debian система):

  cp файлы / debian-initd /etc/init.d/fail2ban
update-rc.d fail2ban по умолчанию
запуск службы fail2ban
  

Конфигурация:

Вы можете настроить Fail2Ban, используя файлы в / etc / fail2ban .Возможно настроить сервер с помощью команд, отправленных ему fail2ban-client . В доступные команды описаны на странице руководства fail2ban-client (1). Также см Справочные страницы fail2ban (1) и jail.conf (5) для дальнейших ссылок.

Статус кода:

Контакты:

Ошибки, пожелания, обсуждения?

См. CONTRIBUTING.md

Вы только что оценили эту программу:

Выразить благодарность оригинальному автору (Сирил Жакье) или лучше в список рассылки поскольку Fail2Ban уже много лет является «управляемым сообществом».

Благодарности:

См. Файл СПАСИБО.

Лицензия:

Fail2Ban — бесплатное программное обеспечение; вы можете распространять и / или изменять его под условия Стандартной общественной лицензии GNU, опубликованной Бесплатным программным обеспечением Фонд; либо версии 2 Лицензии, либо (по вашему выбору) любой более поздней версии версия.

Fail2Ban распространяется в надежде, что он будет полезен, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЯ; даже без подразумеваемых гарантий ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЕ НАЗНАЧЕНИЕ.Подробнее см. Стандартную общественную лицензию GNU.

Вы должны были получить копию Стандартной общественной лицензии GNU вместе с Fail2Ban; в противном случае напишите в Free Software Foundation, Inc., 51 Франклин. Street, Fifth Floor, Boston, MA 02110, USA

Использование Fail2ban для защиты вашего сервера — Учебное пособие

Что такое Fail2Ban

Fail2ban — это приложение для анализа журналов, которое отслеживает системные журналы на предмет признаков автоматической атаки на ваш Linode.В этом руководстве вы узнаете, как использовать Fail2ban для защиты вашего сервера.

Когда обнаруживается попытка взлома с использованием определенных параметров, Fail2ban добавляет новое правило в iptables, чтобы заблокировать IP-адрес злоумышленника либо на определенный период времени, либо навсегда. Fail2ban также может предупредить вас по электронной почте о том, что происходит атака.

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

Примечание Для выполнения действий в этом руководстве требуются права root. Обязательно выполните следующие шаги как root или с префиксом sudo . Для получения дополнительной информации о привилегиях см. Наш Руководство по пользователям и группам.
Осторожно

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

Как установить Fail2ban

Следуйте Руководство по началу работы для настройки вашего основного сервера.Вы также можете просмотреть Руководство по обеспечению безопасности вашего сервера перед началом.

CentOS 7

  1. Убедитесь, что ваша система обновлена, и установите репозиторий EPEL:

      yum update && yum install epel-release
      
  2. Установить Fail2Ban:

      yum install fail2ban
      
  3. Установите Sendmail, если вам дополнительно нужна поддержка по электронной почте. Sendmail не требуется для использования Fail2Ban .:

      yum install sendmail
      
  4. Запустите и включите Fail2ban и, при необходимости, Sendmail:

      systemctl start fail2ban
    systemctl включить fail2ban
    systemctl запустить sendmail
    systemctl включить sendmail
      
    Примечание

    Если вы столкнетесь с ошибкой, что нет каталога / var / run / fail2ban, чтобы содержать файл сокета / var / run / fail2ban / fail2ban.sock , создайте каталог вручную:

      mkdir / var / run / fail2ban
      

Debian

  1. Убедитесь, что ваша система обновлена:

      apt-get update && apt-get upgrade -y
      
  2. Установить Fail2ban:

      apt-get install fail2ban
      

    Служба запускается автоматически.

  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

      apt-get install sendmail-bin sendmail
      
    Примечание

    Текущая версия Sendmail в Debian Jessie имеет ошибка восходящего потока, которая вызывает следующие ошибки при установке sendmail-bin .Установка зависает на минуту, но потом завершается.

      Создание /etc/mail/sendmail.cf ...
    ОШИБКА: FEATURE () должен стоять перед MAILER () MAILER ('local') должен стоять после FEATURE ('always_add_domain')
    ОШИБКА: FEATURE () должен стоять перед MAILER () MAILER ('local') должен стоять после FEATURE ('allmasquerade')
      

Fedora

  1. Обновите свою систему:

      dnf update
      
  2. Установить Fail2ban:

      dnf install fail2ban
      
  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

      dnf install sendmail
      
  4. Запустите и включите Fail2ban и, при необходимости, Sendmail:

      systemctl start fail2ban
    systemctl включить fail2ban
    systemctl запустить sendmail
    systemctl включить sendmail
      

Ubuntu

  1. Убедитесь, что ваша система обновлена:

      apt-get update && apt-get upgrade -y
      
  2. Установить Fail2ban:

      apt-get install fail2ban
      

    Служба запускается автоматически.

  3. (необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

      apt-get install sendmail
      
  4. Разрешить доступ SSH через UFW, а затем включить брандмауэр:

      ufw allow ssh
    ufw включить
      

Как настроить Fail2ban

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

Настроить fail2ban.local

  1. fail2ban.conf содержит профиль конфигурации по умолчанию. Настройки по умолчанию дают вам разумную рабочую настройку. Если вы хотите внести какие-либо изменения, лучше всего сделать это в отдельном файле, fail2ban.local , который отменяет fail2ban.conf . Переименуйте копию fail2ban.conf в fail2ban.local .

      cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
      
  2. Отсюда вы можете выбрать редактирование определений в fail2ban.local в соответствии с желаемой конфигурацией. Значения, которые можно изменить:

    • loglevel : уровень детализации журналов Fail2ban может быть установлен на 1 (ошибка), 2 (предупреждение), 3 (информация) или 4 (отладка).
    • logtarget : записывает действия в определенный файл. Значение по умолчанию /var/log/fail2ban.log помещает все записи в определенный файл. Кроме того, вы можете изменить значение на:
      • STDOUT : вывод любых данных
      • STDERR : вывод любых ошибок
      • SYSLOG : ведение журнала на основе сообщений
      • FILE : вывод в файл
    • socket : расположение файла сокета.
    • pidfile : расположение файла PID.

Backend Configuration Fail2ban

  1. Файл jail.conf включает Fail2ban для SSH по умолчанию для Debian и Ubuntu, но не CentOS. Все остальные протоколы и конфигурации (HTTP, FTP и т. Д.) Закомментированы. Если вы хотите изменить это, создайте jail.local для редактирования:

      cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
      
  2. При использовании CentOS или Fedora вам необходимо изменить опцию backend в тюрьме .локальный с auto на systemd . Это не обязательно в Debian 8 или Ubuntu 16.04, хотя оба они также используют systemd.

Файл: /etc/fail2ban/jail.local
  1
2
3
4
5
6
7
  
  # "backend" указывает серверную часть, используемую для получения модификации файлов.
# Доступные варианты: pyinotify, gamin, polling, systemd и auto.
# Эту опцию также можно переопределить в каждой тюрьме.. . .

backend = systemd  
Примечание

Если для конфигурации backend задано значение auto , Fail2ban отслеживает файлы журнала, сначала используя pyinotify . Затем он пробует gamin . Если ни один из них не доступен, алгоритм опроса решает, что делать дальше.

По умолчанию в CentOS 7 тюрьмы не включены. Например, чтобы включить тюрьму демона SSH, раскомментируйте следующие строки в jail.локальный :

Файл: /etc/fail2ban/jail.local
  1
2
  
  [sshd]
enabled = true  

Конфигурации Fail2ban jail.local

Чтобы более подробно ознакомиться с доступными настройками Fail2ban, откройте файл jail.local и просмотрите доступные конфигурации.

Файл: /etc/fail2ban/jail.local
  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
  
  [ПО УМОЛЧАНИЮ]

    ignoreip = 127.0,0.1 / 8
    bantime = 600
    findtime = 600
    maxretry = 3
    backend = auto
    usedns = предупреждать
    destemail = [адрес электронной почты защищен]
    sendername = Fail2Ban
    banaction = iptables-multiport
    mta = sendmail
    протокол = tcp
    цепочка = ВХОД
    action_ =% (запрет) ...
    action_mw =% (запрет) ...
    протокол = "% (протокол) s" ...
    action_mwl =% (banaction) s ...  

Например, если вы установите для параметра usedns значение no , Fail2ban не использует обратный DNS для установки своих запретов, а вместо этого блокирует IP адрес.Если установлено значение warn , Fail2ban выполняет обратный поиск имени хоста и использует его для выполнения запрета.

Цепь Настройка относится к серии iptables правила, в которых нужно добавлять прыжки в бан-действиях. По умолчанию это установлено для цепочки INPUT . Вы можете узнать больше о цепочках iptables в нашем Что такое руководство по iptables.

Конфигурация отбрасывания трафика цепочки Fail2ban

Вы можете использовать параметр iptables --line-numbers для просмотра правил Fail2ban.

  iptables -L f2b-sshd -v -n --line-numbers
  

Вы должны получить аналогичный результат:

  Цепочка fail2ban-SSH (1 ссылка)
num pkts bytes target prot opt ​​in source назначение
1 19 2332 ОТКАЗАТЬ все - * * 192.0.0.0 0.0.0.0/0
2 16 1704 ОТКАЗАТЬ все - * * 192.0.0.1 0.0.0.0/0
3 15 980 УДАЛИТЬ все - * * 192.0.0.2 0.0.0.0/0
4 6 360 УДАЛИТЬ все - * * 192.0.0.3 0.0.0.0/0
5 8504 581K ВОЗВРАТ все - * * 0.0.0.0/0 0.0.0.0/0 
 

Вы можете удалить правило, примененное к IP-адресу, с помощью команды iptables -D chain rulenum . Замените rulenum на соответствующий номер правила IP-адреса из столбца num . Например, чтобы удалить IP-адрес 192.0.0.1 , введите следующую команду:

  iptables -D fail2ban-SSH 2
  

Время запрета и количество повторов Конфигурация Fail2Ban

Установите bantime , findtime и maxretry , чтобы определить обстоятельства и продолжительность запрета:

Файл: / etc / fail2ban / jail.местный
  1
2
3
4
5
6
7
  
  # bantime - количество секунд, в течение которых хост заблокирован.
bantime = 600

# Хост забанен, если он сгенерировал "maxretry" в течение последнего "findtime"
# секунды.
findtime = 600
maxretry = 3  
  • findtime : интервал времени между попытками входа в систему до установки блокировки. Например, если Fail2ban настроен на блокировку IP-адреса после пяти (5) неудачных попыток входа в систему, эти 5 попыток должны произойти в пределах установленного 10-минутного ограничения findtime .Значение findtime должно быть заданным количеством секунд.

  • maxretry : Fail2ban использует findtime и maxretry , чтобы решить, когда бан оправдан. Если количество попыток превышает лимит, установленный в maxretry , и находится в пределах временного лимита findtime , блокировка устанавливается Fail2ban. По умолчанию установлено значение 3 .

  • bantime : интервал времени в секундах, в течение которого IP заблокирован.Если установлено отрицательное число, запрет будет постоянным. По умолчанию установлено значение 600, чтобы запретить IP на 10 минут.

ignoreip Fail2ban Configurations

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

Файл: /etc/fail2ban/jail.local
  1
2
3
4
5
6
  
  [ПО УМОЛЧАНИЮ]

# ignoreip может быть IP-адресом, маской CIDR или хостом DNS.Fail2ban не будет
# забанить хост, который совпадает с адресом в этом списке. Несколько адресов могут быть
# определяется с использованием разделителя пробелов.
ignoreip = 127.0.0.1/8 123.45.67.89  

ignoreip : этот параметр помогает определить IP-адреса, которые следует исключить из правил Fail2ban. Чтобы игнорировать определенные IP-адреса, добавьте их в конфигурацию ignoreip , как показано в примере. По умолчанию эта команда не запрещает localhost .Если вы часто работаете с одного IP-адреса, вам следует подумать о добавлении его в список игнорирования.

Если вы хотите внести в белый список IP-адреса только для определенных тюрем, это можно сделать с помощью команды fail2ban-client . Замените JAIL именем вашей тюрьмы, а 192.0.0.1 IP-адресом, который вы хотите добавить в белый список.

  fail2ban-client установить JAIL addignoreip 192.0.0.1
  

Уведомления по электронной почте Fail2ban

Примечание об электронной почте на Linode Это руководство может включать или приводить к отправке электронной почты.В целях борьбы со спамом Linode ограничивает исходящие соединения на портах 25, 465 и 587 на всех Linode для новых учетных записей, созданных после 5 ноября 2019 года. Для получения дополнительной информации см. Отправка электронной почты на Linode.

Это руководство может включать или приводить к отправке электронной почты. В целях борьбы со спамом Linode ограничивает…

Чтобы получать электронную почту при срабатывании fail2ban, измените настройки электронной почты:

  • destemail : адрес электронной почты, на который вы хотите получать электронные письма.

  • имя отправителя : имя, под которым отображается электронное письмо.

  • отправитель : адрес электронной почты, с которого Fail2ban отправляет электронные письма.

Примечание Если не уверены, что указать под отправителем , запустите команду sendmail -t [электронная почта защищена] , заменив [электронная почта защищена] своим адресом электронной почты. Проверьте свою электронную почту (включая папки со спамом, если необходимо) и просмотрите электронную почту отправителя.Этот адрес можно использовать для вышеуказанной конфигурации.

Вам также необходимо настроить параметр action , который определяет, какие действия происходят при достижении порогового значения для бана. По умолчанию % (action_) s , блокирует только пользователя. % (action_mw) s банит и отправляет электронное письмо с отчетом WhoIs; а % (action_mwl) s блокирует и отправляет электронное письмо с отчетом WhoIs и всеми соответствующими строками в файле журнала. Это также можно изменить в зависимости от тюрьмы.

Fail2ban Banaction and ports Configuration

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

Средняя конфигурация тюрьмы выглядит следующим образом:

Файл: /etc/fail2ban/jail.local
  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
  
  # Действие запрета по умолчанию (например,грамм. iptables, iptables-новый,
# iptables-multiport, shorewall и т. д.) Используется для определения
# действие_ * переменные. Может быть переопределено глобально или на
# раздел в файле jail.local
banaction = iptables-multiport
banaction_allports = iptables-allports

[ssh]

enabled = true
порт = ssh
фильтр = sshd
logpath = /var/log/auth.log
maxretry = 6  
  • banaction : Определяет действие, которое следует использовать при достижении порога. Если вы настроили брандмауэр на использование firewalld, установите значение firewallcmd-ipset , а если вы настроили брандмауэр на использование UFW, установите значение ufw .
  • banaction_allports : блокирует удаленный IP-адрес на каждом порту. Если вы настроили брандмауэр для использования firewalld, установите значение firewallcmd-ipset .
  • включен : Определяет, включен ли фильтр.
  • порт : порт Fail2ban должен ссылаться на службу. Если используется порт по умолчанию, здесь можно разместить имя службы. Если используется нетрадиционный порт, это должен быть номер порта.Например, если вы переместили свой порт SSH на 3456, вы замените ssh на 3456 .
  • фильтр : имя файла, расположенного в /etc/fail2ban/filter.d , который содержит информацию failregex, используемую для надлежащего анализа файлов журнала. Суффикс .conf указывать не нужно.
  • logpath : Указывает расположение журналов службы.
  • maxretry : Отменит глобальную maxretry для определенной службы.Также можно добавить findtime и bantime .
  • действие : Это можно добавить как дополнительную настройку, если действие по умолчанию не подходит для тюрьмы. Дополнительные действия можно найти в папке action.d .
Примечание

Jails также можно настроить как отдельные файлы .conf , помещенные в каталог jail.d . Формат остался прежним.

Использование фильтров Fail2ban для защиты вашего сервера

В этом разделе вы исследуете фильтры Fail2ban вашей системы, определенные в их файлах конфигурации.

В зависимости от версии Fail2ban вашей системы, вы можете найти системные фильтры в файле /etc/fail2ban/jail.conf или в файле /etc/fail2ban/jail.d/defaults-*.conf .

Откройте файл /etc/fail2ban/jail.conf и проверьте фильтр ssh / sshd :

Файл: /etc/fail2ban/jail.conf
  1
2
3
4
5
6
7
  
  [ssh]

enabled = true
порт = ssh
фильтр = sshd
logpath = / var / log / auth.бревно
maxretry = 5  

Если вы используете версию Fail2ban выше 0,8 , проверьте оба своих файла по умолчанию - файлы *. conf и jail.conf .

Если в вашей системе установлен Fail2ban версии 0.8 или выше, ваш файл jail.conf будет иметь вид следующего примера:

Файл: /etc/fail2ban/jail.conf
  1
2
3
4
  
  [sshd]

порт = ssh
logpath =% (sshd_log) s  

Наконец, система, использующая Fail2ban 0.8 или выше имеет значение по умолчанию - *. Conf , который включает следующие фильтры:

Файл: /etc/fail2ban/jail.d/defaults-*.conf
  1
2
3
4
  
  [sshd]

enabled = true
maxretry = 3  

Вы можете протестировать существующие фильтры, запустив пример команды и заменив logfile , failregex и ignoreregex своими собственными значениями.

  файл журнала fail2ban-regex failregex ignoreregex
  

Используя примеры из начала этого раздела, команда выглядит следующим образом:

  fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
  

Ваши фильтры Fail2ban должны работать с:

  1. Различными типами журналов, созданными разным программным обеспечением

  2. Различными конфигурациями и несколькими операционными системами

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

Настройка конфигурации ignoreregex

Перед внесением изменений в конфигурацию failregex необходимо настроить ignoreregex . Fail2ban должен знать, что считается нормальной активностью сервера, а что нет.

Например, чтобы исключить работу cron на вашем сервере или исключить MySQL, вы можете настроить ignoreregex для фильтрации журналов, созданных этими двумя программами:

Файл: / etc / fail2ban / filter.d / sshd.conf
  1
2
3
4
  
  ignoreregex =: pam_unix \ ((cron | sshd): session \): session (open | clos) ed для пользователя (daemon | munin | mysql | root) (by \ (uid = 0 \)) ? $
            : Успешный su для (mysql) от root $
            Новый сеанс \ d + пользователя (mysql) \. $
            Удален сеанс \ d + \. $  

Теперь, когда вы отфильтровали журналы каждой программы, вы можете настроить failregexs , чтобы блокировать то, что вы хотите.

Настройка Failregexs

Хотя Fail2ban поставляется с рядом фильтров, вы можете дополнительно настроить эти фильтры или создать свои собственные в соответствии с вашими потребностями. Fail2ban использует регулярные выражения (regex) для анализа файлов журналов, ища случаи попыток взлома и сбоев пароля. Fail2ban использует расширения регулярных выражений Python.

Лучший способ понять, как работает failregex, — это написать его. Хотя мы не рекомендуем, чтобы Fail2ban контролировал доступ к вашему WordPress.войти на веб-сайты с интенсивным трафиком из-за проблем с процессором, он предоставляет экземпляр легкого для понимания файла журнала, который вы можете использовать, чтобы узнать о создании любого failregex.

Напишите регулярное выражение для Fail2ban

  1. Перейдите в access.log своего веб-сайта (обычно расположенный по адресу /var/www/example.com/logs/access.log ) и найдите неудачную попытку входа в систему. Это похоже на:

    Файл: /var/www/example.com/logs/access.log
      123.45.67.89 - - [01 / Oct / 2015: 12: 46: 34 -0400] "POST /wp-login.php HTTP / 1.1" 200 1906 "http://example.com/wp-login.php" " Mozilla / 5.0 (Macintosh; Intel Mac OS X 10.10; rv: 40.0) Gecko / 20100101 Firefox / 40.0 " 

    Обратите внимание, что вам нужно отслеживать только до 200 :

    Файл: / var / www / example.com / logs / access.log
      123.45.67.89 - - [01 / Oct / 2015: 12: 46: 34 -0400] "POST /wp-login.php HTTP / 1.1" 200  
  2. IP-адрес, с которого произошла неудачная попытка, всегда определяется как .Следующие несколько символов неизменны и могут быть введены как литералы:

       - - \ [
      

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

  3. Следующий раздел, дата попытки входа в систему, может быть записан как сгруппированные выражения с использованием регулярных выражений. Первая часть, 01 в этом примере, может быть записана как (\ d {2}) : скобки группируют выражение, а \ d ищет любые числовые цифры. {2} отмечает, что выражение ищет две цифры подряд, то есть день месяца.

    На данный момент у вас должно быть:

       - - \ [(\ d {2})
      

    Следующая косая черта затем вызывается с буквальной косой чертой, за которой следует \ w {3} , который ищет последовательность из 3 буквенно-цифровых символов (например, AZ, 0-9, в любом случае ). Следующая косая черта также должна быть буквальной:

       - - \ [(\ d {2}) / \ w {3} /
      

    Раздел для года должен быть записан аналогично дню, но без необходимости в группе захвата и для четырех последовательных символов (и буквального двоеточия):

       - - \ [(\ d {2}) / \ w {3} / \ d {4}:
      
  4. Следующая последовательность представляет собой серию двузначных чисел, составляющих время.Поскольку мы определили день месяца как двузначное число в группе захвата (круглые скобки), мы можем ссылаться на него, используя \ 1 (поскольку это первая группа захвата ). Опять же, двоеточия являются литералами:

       - - \ [(\ d {2}) / \ w {3} / \ d {4}: \ 1: \ 1: \ 1
      

    Если вы не хотите использовать обратные ссылки, это также можно записать как:

       - - \ [\ d {2} / \ w {3} / \ d {4}: \ d {2 }: \ d {2}: \ d {2}
      
  5. Сегмент -0400 должен быть записан аналогично году с дополнительным литералом -: - \ d {4} .Наконец, вы можете закрыть квадратную скобку (сначала экранировать обратную косую черту), а закончить оставшуюся часть буквальной строкой:

       - - \ [(\ d {2}) / \ w {3} / \ d {4}: \ 1: \ 1: \ 1 - \ d {4} \] "POST /wp-login.php HTTP / 1.1" 200
      

    Или:

       - - \ [\ d {2} / \ w {3} / \ d {4}: \ d {2}: \ d {2}: \ d {2} - \ d {4} \] "POST /wp-login.php HTTP / 1.1" 200
      

Примените Failregex

После создания failregex его необходимо добавить в фильтр.

  1. Перейдите в каталог Fail2ban filter.d :

      cd /etc/fail2ban/filter.d
      
  2. Создайте файл с именем wordpress.conf и добавьте свой failregex:

Файл: /etc/fail2ban/filter.d/wordpress.conf
  1
2
3
4
5
6
  
  # Fail2Ban фильтр для WordPress

[Определение]

failregex =  - - \ [(\ d {2}) / \ w {3} / \ d {4}: \ 1: \ 1: \ 1 - \ d {4} \] "POST / wp- авторизоваться.php HTTP / 1.1 "200
ignoreregex =  
  Сохранить и выйти.
  
  1. Добавьте раздел WordPress в jail.local :
Файл: /etc/fail2ban/jail.local
  1
2
3
4
5
  
  [wordpress]
enabled = true
фильтр = wordpress
logpath = /var/www/html/andromeda/logs/access.log
порт = 80,443  

Здесь используется блокировка по умолчанию и действие по электронной почте.Другие действия можно определить, добавив строку action = .

Сохраните и выйдите, затем перезапустите Fail2ban.

Использование клиента Fail2ban

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

  fail2ban-client КОМАНДА
  
  • start : запускает сервер Fail2ban и блокирует его.
  • reload : перезагружает файлы конфигурации Fail2ban.
  • reload JAIL : заменяет JAIL именем тюрьмы Fail2ban; это перезагружает тюрьму.
  • stop : Завершает работу сервера.
  • статус : покажет статус сервера и включит тюрьмы.
  • status JAIL : покажет статус тюрьмы, включая все заблокированные IP-адреса.

Например, чтобы проверить, что Fail2Ban запущен, а тюрьма SSHd включена, запустите:

  fail2ban-client status
  

Результат должен быть:

  Статус
| - Количество тюрем: 1
`- Список тюрем: sshd
  

Для получения дополнительной информации о командах fail2ban-client см. Fail2ban вики.

Восстановление блокировки

В случае, если вы обнаружите, что не можете подключиться к вашему Linode из-за fail2ban, вы все равно можете получить доступ, используя наш внеполосный Лиш Консоль.

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

  iptables -n -L
  

Найдите свой IP-адрес в столбце source любых цепочек fail2ban (всегда с префиксом f2b или fail2ban ), чтобы убедиться, были ли вы заблокированы службой fail2ban:

  Chain f2b-sshd (1 ссылка)
target prot opt ​​источник назначения
ОТКАЗАТЬ все - 203.0.113.0 0.0.0.0/0 отклонить-с icmp-e 
 

Чтобы удалить ваш IP-адрес из jail, вы можете использовать следующую команду, заменив 203.0.113.0 и jailname на IP-адрес и имя тюрьмы, которую вы хотите разблокировать:

  fail2ban-client set jailname unbanip 203.0.113.0
  
Примечание

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

  fail2ban-client status
  

Если вы обнаружите, что хотите прекратить использование службы fail2ban в любое время, вы можете ввести следующее:

  fail2ban-client stop
  

CentOS 7 и Fedora дополнительно требуют, чтобы две дополнительные команды были полностью остановлены и отключены:

  systemctl stop fail2ban
systemctl disable fail2ban  

Безопасность Linux: защитите свои системы с помощью fail2ban

Безопасность для системных администраторов — это постоянная борьба, потому что вы должны защитить свои системы в достаточной степени, чтобы защитить их от нежелательных атак, но не настолько, чтобы снизить производительность труда пользователей.Это сложный баланс. Всегда есть жалобы на «слишком много» безопасности, но когда система скомпрометирована, жалобы варьируются от «Недостаточно безопасности» до «Почему вы не использовали более эффективные меры безопасности?» Это настоящая борьба. Вы можете установить элементы управления, которые эффективны против атак злоумышленников и в то же время достаточно скрытны, чтобы позволить пользователям действовать в целом беспрепятственно. Fail2ban — это ответ для защиты сервисов от грубой силы и других автоматических атак.

Примечание. Fail2ban можно использовать только для защиты сервисов, требующих аутентификации по имени пользователя и паролю. Например, вы не можете защитить ping с помощью fail2ban.

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

Установка и начальная настройка

К счастью, есть готовый к установке пакет для fail2ban , который включает все зависимости, если таковые имеются, для вашей системы.

  $ sudo dnf -y установить fail2ban  

Включить и запустить fail2ban .

  $ sudo systemctl включить fail2ban

$ sudo systemctl start fail2ban  

Если у вас нет какой-либо проблемы с синтаксисом в конфигурации fail2ban , вы не увидите никаких стандартных выходных сообщений.

Теперь настроим несколько основных вещей в fail2ban для защиты системы, не мешая ей самой. Скопируйте файл / etc / fail2ban / jail.conf в файл /etc/fail2ban/jail.local . Интересующий нас конфигурационный файл jail.local .

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

Откройте файл /etc/fail2van/jail.local в своем любимом редакторе и внесите следующие изменения или проверьте, установлены ли эти несколько параметров. Найдите параметр ignoreip и добавьте в эту строку все IP-адреса, которые должны иметь доступ без возможности блокировки.По умолчанию вы должны добавить адрес обратной связи и все IP-адреса, локальные для защищенной системы.

  ignoreip = 127.0.0.1/8 192.168.1.10 192.168.1.20  

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

  $ sudo systemctl перезапуск fail2ban  

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

Настройка отфильтрованной службы

Новая установка fail2ban для вас мало что поможет. Вы должны настроить так называемые фильтры для любой службы, которую хотите защитить. Почти каждая система Linux должна быть доступна по SSH. Есть некоторые обстоятельства, при которых вы наверняка остановите и отключите SSHD, чтобы лучше защитить свою систему, но я предполагаю, что каждая система Linux разрешает SSH-соединения.

Пароли, как всем известно, не являются хорошим решением безопасности.Однако часто это стандарт, по которому мы живем. Итак, если пользовательский или административный доступ ограничен SSH, вам следует принять меры для его защиты. Использование fail2ban для «наблюдения» SSHD на предмет неудачных попыток доступа с последующим запретом — хорошее начало.

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

Чтобы настроить отфильтрованные службы, необходимо создать соответствующий файл «тюрьмы» в каталоге /etc/fail2ban/jail.d . Для SSHD создайте новый файл с именем sshd.local и введите в него инструкции по фильтрации служб.

  [sshd]
enabled = true
порт = ssh
действие = iptables-multiport
logpath = / var / log / secure
maxretry = 3
bantime = 600  

Создайте заголовок [sshd] и введите параметр, который вы видите выше, в качестве отправной точки.Большинство настроек говорят сами за себя. Для двух, которые могут быть интуитивно неочевидными, параметр «действие» описывает действие, которое вы хотите, чтобы fail2ban предпринял в случае нарушения. Для нас fail2ban использует iptables для блокировки IP-адреса системы-нарушителя на «бантайм» в 600 секунд (10 минут).

Конечно, вы можете изменить любой из этих параметров в соответствии со своими потребностями. Десяти минут кажется достаточно долгим, чтобы заставить бота или скрипт «перейти» на менее безопасные хосты.Однако десять минут — это не так много, чтобы оттолкнуть пользователей, которые ошибочно вводят свои пароли более трех раз.

Когда вы будете удовлетворены настройками, перезапустите службу fail2ban .

Как выглядит бан

В защищенной системе (192.168.1.83) хвост /var/log/fail2ban.log , чтобы увидеть любые текущие действия запрета.

  2020-05-15 09: 12: 06,722 fail2ban.filter [25417]: INFO [sshd] Найдено 192.168.0.1.1.69 - 2020-05-15 09:12:06
2020-05-15 09: 12: 07,018 fail2ban.filter [25417]: INFO [sshd] Найдено 192.168.1.69 - 2020-05-15 09:12:07
2020-05-15 09: 12: 07,286 fail2ban.actions [25417]: NOTICE [sshd] Ban 192.168.1.69
2020-05-15 09: 22: 08,931 fail2ban.actions [25417]: NOTICE [sshd] Unban 192.168.1.69  

Вы можете видеть, что IP-адрес 192.168.1.69 был забанен в 09:12 и разблокирован через десять минут в 09:22.

В удаленной системе 192.168.1.69 действие запрета выглядит следующим образом:

  $ ssh 192.168.1.83

[email protected] пароль:

В доступе отказано, попробуйте еще раз.

[email protected] пароль:

В доступе отказано, попробуйте еще раз.

[email protected] пароль:

В доступе отказано (publickey, gssapi-keyex, gssapi-with-mic, пароль).

$ ssh 192.168.1.83

ssh: подключиться к хосту 192.168.1.83 порт 22: в соединении отказано  

Как видите, я трижды неправильно ввел свой пароль, прежде чем меня забанили. Забаненный пользователь, если он явно не проинформирован, не будет знать, почему он больше не может достичь целевой системы.Фильтр fail2ban выполняет действие тихого запрета. Он не дает никаких объяснений удаленному пользователю и не уведомляет пользователя о снятии запрета.

Разбановка системы

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

  $ sudo fail2ban-client set sshd unbanip 192.168.1.69  

Вам не нужно перезапускать демон fail2ban после выполнения этой команды.

Заключение

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

Вы можете найти примеры других фильтров и некоторые расширенные реализации fail2ban , описанные на fail2ban.org.

[Хотите узнать больше о безопасности? Ознакомьтесь с контрольным списком ИТ-безопасности и соответствия требованиям. ]

Как укрепить сервер с помощью fail2ban

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

Информация в этой статье относится только к продуктам, перечисленным на боковой панели «Сведения о статье». Для выполнения описанных ниже процедур у вас должен быть root-доступ к серверу.

О fail2ban

Приложение fail2ban отслеживает файлы журнала сервера на предмет попыток вторжения и другой подозрительной активности. После заранее определенного количества отказов хоста fail2ban автоматически блокирует его IP-адрес на определенное время.

С помощью fail2ban вы можете защитить свой сервер от попыток несанкционированного доступа.Это особенно эффективно для снижения риска атак по сценариям и ботнетов.

Хотя fail2ban может помочь защитить ваш сервер, он не может устранить все угрозы. Убедитесь, что вы приняли дополнительные меры безопасности, например, описанные в этой статье.
Установка fail2ban

Чтобы установить пакет fail2ban для вашего дистрибутива Linux:

  • Для Debian и Ubuntu введите следующую команду:

     apt-get install fail2ban 
  • Для CentOS и Fedora введите следующую команду:

     yum install fail2ban 
    Чтобы загрузить и установить пакет fail2ban в CentOS и Fedora, в вашей системе должен быть включен репозиторий EPEL (Extra Packages for Enterprise Linux).Дополнительные сведения об этом репозитории и о том, как его включить, см. В этой статье.
Настройка fail2ban

После установки fail2ban вы готовы его настроить. Для этого выполните следующие действия:

  1. Войдите на свой сервер, используя SSH.
  2. В командной строке введите следующую команду:
     cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 

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

  3. Откройте файл jail.local в предпочитаемом текстовом редакторе.
  4. Найдите раздел [ПО УМОЛЧАНИЮ] , который содержит следующие глобальные параметры:

  5. После настройки глобальных параметров fail2ban вы теперь готовы включать и отключать тюрьмы для определенных протоколов и служб, которые вы хотите защитить. По умолчанию fail2ban отслеживает попытки входа в систему по SSH (вы можете найти раздел [ssh-iptables] в тюрьме .local для просмотра конкретных настроек тюрьмы SSH).

    Файл jail.local содержит настройки тюрьмы по умолчанию для нескольких протоколов. Часто все, что вам нужно сделать, чтобы включить тюрьму, — это изменить ее строку enabled = false на enabled = true и перезапустить fail2ban. Вы также можете определить пользовательские тюрьмы и фильтры для дополнительной гибкости. Для получения дополнительной информации о том, как это сделать, посетите http://www.fail2ban.org/wiki/index.php/MANUAL_0_8.
  6. Сохраните изменения в тюрьме .локальный файл .
  7. Чтобы перезапустить службу fail2ban и загрузить новую конфигурацию, введите следующую команду:

     service fail2ban restart 

    Чтобы отобразить список IP-адресов, заблокированных в настоящее время fail2ban, введите следующую команду:

     iptables -S 

    Например, в следующей строке показан IP-адрес, заблокированный тюрьмой SSH:

     -A fail2ban-SSH -s 10.0.1.124/32 -j REJECT --reject-with icmp-port-unreachable 
Дополнительная информация

Fail2ban — Gentoo Wiki

Служба fail2ban сканирует файлы журнала на предмет определенных повторяющихся попыток (например, неудачных попыток аутентификации SSH или большого объема запросов GET / POST на веб-сервере) и при обнаружении автоматически создает брандмауэр или обертки TCP, отбрасывающие или отклоняющие правило, гарантирующее, что доступность услуги не будет нарушена.

Несмотря на то, что служба поддерживает многие службы «из коробки», она очень универсальна по конфигурации и может быть легко расширена.

Характеристики

Тюрьма

Основная цель fail2ban — это тюрьмы сервисов. Когда служба, такая как SSHd, находится в тюрьме, fail2ban будет постоянно искать в журналах этой службы возможные повторные попытки. В тот момент, когда заданное количество ( maxretry ) попыток обнаруживается в пределах определенного временного окна ( findtime ), тогда автоматически устанавливается правило блокировки (например, через iptables) на данный период времени ( bantime ).

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

ФАЙЛ /etc/fail2ban/jail.conf Пример кода для тюрьмы SSH

 
 [ПО УМОЛЧАНИЮ]
ignoreip = 127.0.0.1
ignoreip = 192.168.100.24 # Сеть управления
bantime = 86400 # 1 день (в секундах)
findtime = 300 # 5 минут (в секундах)
maxretry = 3 # количество повторов по умолчанию

# Запись в тюрьму для SSH с использованием iptables для брандмауэра
[ssh-iptables]
enabled = true # Обратите внимание, что по умолчанию он отключен
фильтр = sshd
действие = iptables [имя = SSH, порт = ssh, протокол = TCP]
logpath = / var / log / auth.бревно
maxretry = 5 # Заменить значение по умолчанию 3
 
тюрьма.d

Тюрьмы можно и нужно разбивать на отдельные файлы тюрем. Отдельные тюрьмы легче отсортировать, а также отключить или включить. Fail2ban использует синтаксис jail.d / *. Conf, поэтому перемещение sshd.conf в sshd.conf.backup отключит тюрьму.

ФАЙЛ /etc/fail2ban/jail.d/sshd.conf syslog-ng & ufw пример

 
 [ssh-iptables]
enabled = true
фильтр = sshd
действие = ufw [имя = SSH, порт = ssh, протокол = TCP]
logpath = / var / log / messages
maxretry = 5 # Заменить значение по умолчанию 3
 

Выражения фильтра

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

Действия

Внутри /etc/fail2ban/action.d можно создавать различные определения действий. Эти файлы содержат команды, которые нужно выполнить, чтобы заблокировать и разблокировать данный хост. По умолчанию правила существуют для iptables, nftables, tcpwrappers, shorewall и других.

Сканирование журнала

Служба fail2ban поддерживает как опрос файлов, так и более эффективные уведомления об изменении файлов; если установлен dev-python / pyinotify или app-admin / gamin и пользователь не изменил директиву backend , тогда будет использоваться pyinotify или gamin, в противном случае выполняется опрос.Конечно, это можно настроить в /etc/fail2ban/jail.conf.

Использование fail2ban

Установка

Установить net-analyzer / fail2ban очень просто:

root # emerge --ask net-analyzer / fail2ban

На момент написания не нужно устанавливать USE-флаги (USE-флаг SELinux не может быть выбран и предназначен для использования в системах с поддержкой SELinux). Чтобы использовать gamin, также установите app-admin / gamin:

root # emerge --ask app-admin / gamin

Чтобы использовать серверную часть sqlite, включите флаг использования sqlite для dev-lang / python.

Конфигурация

Чтобы настроить fail2ban, перейдите в / etc / fail2ban.

Начните с jail.conf, поскольку он содержит, какие правила использовать (и какие службы контролировать), и только переопределит соответствующие настройки и активирует правила в jail.d / *. Conf. При необходимости создайте новые фильтры или действия, если включенная конфигурация не удовлетворяет требованиям.

Например, чтобы включить фильтры SSH по умолчанию для пользователей rsyslog:

ФАЙЛ / etc / fail2ban / jail.d / sshd.conf rsyslog

 

Или для пользователей syslog-ng:

ФАЙЛ /etc/fail2ban/jail.d/sshd.conf syslog-ng

 
 [sshd]
enabled = true
logpath = / var / log / messages
 


По завершении запустите службу fail2ban и добавьте ее на уровень запуска по умолчанию.

корень # запуск rc-service fail2ban

root # rc-update добавить fail2ban по умолчанию

Взаимодействие

В рамках службы fail2ban также доступен fail2ban-client , который может запрашивать службу fail2ban.

Например, чтобы увидеть запущенные тюрьмы:

root # статус fail2ban-client

 Статус
| - Количество тюрем: 1
`- Список тюрем: sshd 

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

root # fail2ban-client status sshd

 Статус для джейла: sshd
| - фильтр
| | - Список файлов: /var/log/auth.log
| | - На данный момент не удалось: 1
| `- Всего сбоев: 12
`- действие
   | - Забанен на данный момент: 1
   | `- Список IP: 192.168.100.50
   `- Всего заблокировано: 2 

Чтобы получить компактную версию для всех джейлов, включая забаненные IP:

root # fail2ban-client забанен

 [{'sshd': ['192.168.100.50']}, {'apache-auth': []}] 

Устранение неполадок

Если фильтры не работают должным образом, используйте fail2ban-regex , чтобы опробовать их. Передайте ему файл журнала для проверки и фильтр для запуска, и он вернет то, что нашел.

корень # fail2ban-regex / var / log / auth.\ s * (?: \ S +)? (?: @ vserver_ \ S +)? (?: (?: \ [\ d + \])?: \ s + [\ [\ (]? sshd (?: \ (\ S + \))? [\] \)]?:? | [\ [\ (]? Sshd (?: \ (\ S + \))? [\] \)]?:? (?: \ [\ D + \])?:)? \ s * Пользователь \ S + из не разрешен, поскольку ни одна из групп пользователей не указана в AllowGroups $ | `- Количество совпадений: [1] 30 совпадений [2] 0 совпадений [3] 0 совпадений [4] 0 совпадений [5] 0 совпадений [6] 0 совпадений [7] 0 совпадений [8] 0 совпадений [9] 0 совпадений [10] 0 совпадений Игнорировать | - Регулярные выражения: | `- Количество совпадений: Резюме ======= Найдены адреса: [1] 192.168.100.50 (среда, 28 декабря, 12:46:56 2011 г.) 192.168.100.50 (среда, 28 декабря, 12:47:00 2011 г.) 192.168.100.50 (среда, 28 декабря, 12:47:03 2011) 192.168.100.50 (среда, 28 декабря, 12:47:15 2011 г.) 192.168.100.50 (среда, 28 декабря, 12:47:18 2011 г.) 192.168.100.50 (среда, 28 декабря, 12:47:21 2011 г.) 192.168.100.50 (среда, 28 декабря, 14:23:08 2011) 192.168.100.50 (среда, 28 декабря, 14:23:12 2011) 192.168.100.50 (среда, 28 декабря, 14:23:23 2011) 192.168.100.50 (среда, 28 декабря, 14:23:28 2011) 192.168.100.50 (среда, 28 декабря, 14:23:31 2011 г.) 192.168.100.50 (среда, 28 декабря, 14:23:35 2011) 192.168.100.50 (среда, 28 декабря, 15:15:09 2011) 192.168.100.50 (среда, 28 декабря, 15:15:12 2011) 192.168.100.50 (среда, 28 декабря, 15:15:14 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:15:17 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:15:20 2011) 192.168.100.50 (среда, 28 декабря, 15:15:23 2011) 192.168.100.50 (среда, 28 декабря, 15:21:29 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:21:32 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:21:34 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:21:38 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:21:41 2011 г.) 192.168.100.50 (среда, 28 декабря, 15:21:43 2011 г.) 192.168.100.50 (среда, 28 декабря, 17:36:00 2011) 192.168.100.50 (среда, 28 декабря, 17:36:03 2011) 192.168.100.50 (среда, 28 декабря, 17:36:05 2011) 192.168.100.50 (среда, 28 декабря, 17:36:10 2011 г.) 192.168.100.50 (среда, 28 декабря, 17:36:13 2011) 192.168.100.50 (среда, 28 декабря, 17:36:16 2011) [2] [3] [4] [5] [6] [7] [8] [9] [10] Хиты шаблона даты: 2120 хитов: МЕСЯЦ День Час: Минута: Секунда 0 хитов: WEEKDAY MONTH День Час: Минута: Второй год 0 хитов: WEEKDAY MONTH День Час: Минута: Секунда 0 хитов: Год / Месяц / День Час: Минута: Секунда 0 хитов: День / Месяц / Год Час: Минута: Секунда 0 хитов: День / МЕСЯЦ / Год: Час: Минута: Секунда 0 хитов: Месяц / День / Год: Час: Минута: Секунда 0 хитов: Год-Месяц-День Час: Минута: Секунда 0 хитов: День-МЕСЯЦ-Год Час: Минута: Секунда [.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *