Защита SSH от брута / Fail2ban

Maylo

Moderator
Регистрация
14 Апр 2018
Сообщения
175
Симпатии
234
#1
Добрый день всем! Столкнулся с тем , что на моих дедиках сплошь пытаются брутить ssh :) Решил защититься, чтобы спать спокойно.

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

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

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



Установка 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


Просмотреть забаненные можно в :
tail -f /var/log/fail2ban.log

2017-09-08 06:38:35,103 fail2ban.actions[21166]: WARNING [ssh-iptables] Ban 193.151.197.110
2017-09-08 06:44:30,454 fail2ban.actions[21166]: WARNING [ssh-iptables] Ban 91.197.232.111
2017-09-08 06:51:42,879 fail2ban.actions[21166]: WARNING [ssh-iptables] Unban 104.52.24.81
2017-09-08 06:53:28,988 fail2ban.actions[21166]: WARNING [ssh-iptables] Unban 213.5.29.86
2017-09-08 07:17:17,395 fail2ban.actions[21166]: WARNING [ssh-iptables] Unban 190.205.54.150
2017-09-08 07:44:48,009 fail2ban.actions[21166]: WARNING [ssh-iptables] Ban 118.180.18.102
2017-09-08 07:47:06,146 fail2ban.actions[21166]: WARNING [ssh-iptables] Ban 112.144.41.186
2017-09-08 07:56:49,720 fail2ban.actions[21166]: WARNING [ssh-iptables] Ban 49.51.37.225
2017-09-08 08:09:03,425 fail2ban.actions[21166]: WARNING [ssh-iptables] Unban 123.207.242.81
2017-09-08 08:10:46,529 fail2ban.actions[21166]: WARNING [ssh-iptables] Ban 62.232.118.202



Спите спокойно :)