How To: Защищаем SSH с помощью fail2ban

Перевод: How To: Use fail2ban to Protect SSH

fail2ban Fail2ban

У меня есть несколько серверов, в том числе и в домашнем офисе, которые доступны по SSH. Несмотря на то, что я уже настроил их использовать нестандартный порт для SSH, довольно часто в логах я замечаю неудавшиеся попытки залогиниться под стандартными пользователями. Я решил улучшить защиту и активировал fail2ban.

Что такое fail2ban?

fail2ban это софт для Linux и Unix систем, который мониторит стандартные логи операционной системы и её сервисов, находит неудачные попытки доступа с удалённых серверов и, если их было достаточно много, блокирует доступ к IP адресам этих серверов посредством IPtables.

Идея в том, что если какой-то IP адрес неудачно подключался больше 3 раз за 10 минут – то скорее всего это попытка взлома, и лучше такой адрес на какое-то время заблокировать. Это минимизирует риски, потому что доступ с подозрительных IP адресов блокируется на уровне firewall, так что дальнейшие попытки перебора пользователей и паролей больше не проводятся.

ИНТЕРЕСНО: fail2ban может защищать множество сервисов, не только SSH – в комплекте есть растущая библиотека лог файлов и правил их мониторинга.

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

Даже на моей системе Raspberry Pi было очень просто установить fail2ban:

$ sudo apt install fail2ban

ВАЖНО: перепроверьте, что у вас установлен iptables.

После установки сервис уже готов к запуску с помощью команд systemctl или service.

Настройка fail2ban

Перед запуском сервиса, пожалуй стоит его настроить.

Основные настройки для меня:

  • Порт SSH – по умолчанию fail2ban будет блокировать стандартный SSH порт 22, но если у нас SSH сервер испоьзует другой порт, то это следует отразить в настройках fail2ban
  • Настройки почты – fail2ban сможет слать вам емейлы по поводу банов и окончания банов

Так что редактируем /etc/fail2ban/jail.conf файл из-под пользователя root. Я сделал следующее:

Настройки электронной почты в fail2ban Настройки электронной почты в fail2ban

Указываем нестандартный порт 202 для сервиса SSH Указываем нестандартный порт 202 для сервиса SSH

Как Использовать fail2ban

Запускаем сервис:

$ sudo systemctl start fail2ban

и смотрим в лог файл /var/log/fail2ban.log:

2020-01-09 22:32:55,710 fail2ban.server         [6038]: INFO    --------------------------------------------------  
2020-01-09 22:32:55,712 fail2ban.server         [6038]: INFO    Starting Fail2ban v0.10.2  
2020-01-09 22:32:55,727 fail2ban.database       [6038]: INFO    Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'  
2020-01-09 22:32:55,731 fail2ban.jail           [6038]: INFO    Creating new jail 'sshd'  
2020-01-09 22:32:55,779 fail2ban.jail           [6038]: INFO    Jail 'sshd' uses pyinotify {}  
2020-01-09 22:32:55,798 fail2ban.jail           [6038]: INFO    Initiated 'pyinotify' backend  
2020-01-09 22:32:55,801 fail2ban.filter         [6038]: INFO      maxLines: 1  
2020-01-09 22:32:55,934 fail2ban.server         [6038]: INFO    Jail sshd is not a JournalFilter instance  
2020-01-09 22:32:55,936 fail2ban.filter         [6038]: INFO    Added logfile: '/var/log/auth.log' (pos = 385669, hash = 9d2089e21756515d4394ead79bad08c298835101)  
2020-01-09 22:32:55,939 fail2ban.filter         [6038]: INFO      encoding: UTF-8  
2020-01-09 22:32:55,940 fail2ban.filter         [6038]: INFO      maxRetry: 3  
2020-01-09 22:32:55,942 fail2ban.filter         [6038]: INFO      findtime: 600  
2020-01-09 22:32:55,943 fail2ban.actions        [6038]: INFO      banTime: 1800  
2020-01-09 22:32:55,974 fail2ban.jail           [6038]: INFO    Jail 'sshd' started  
2020-01-10 02:46:49,790 fail2ban.filter         [6038]: INFO    [sshd] Found 218.93.239.44 - 2020-01-10 02:46:49  
2020-01-10 02:46:49,825 fail2ban.filter         [6038]: INFO    [sshd] Found 218.93.239.44 - 2020-01-10 02:46:49  
2020-01-10 02:46:51,811 fail2ban.filter         [6038]: INFO    [sshd] Found 218.93.239.44 - 2020-01-10 02:46:51  
2020-01-10 02:46:52,382 fail2ban.actions        [6038]: NOTICE  [sshd] Ban 218.93.239.44

Как Читать Логи fail2ban

Как видно из примера лога выше, сервис fail2ban запустил “клетку” (“jail”) для контроля сервиса SSH. Я запустил fail2ban в 22:32 вчера вечером, и уже в 2:46am заблокировал первый подозрительный IP адрес 218.93.239.44.

Можно также проверить iptables, там уже могли оказаться заблокированные IP адреса:

root@srv:/# iptables -nvL
 Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination
   266 17432 f2b-sshd   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 202
 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination
 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts bytes target     prot opt in     out     source               destination
 Chain f2b-sshd (1 references)
  pkts bytes target     prot opt in     out     source               destination
     0     0 REJECT     all  --  *      *       218.93.239.44        0.0.0.0/0            reject-with icmp-port-unreachable
   266 17432 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Как-то так! Надеюсь, вы узнали для себя что-то новое!

Полезные ссылки




Давайте учиться вместе!

Заходите на страницу Facebook или присоединяйтесь к чату в Telegram:
Я использую браузер Brave
Попробуйте сами: Brave Browser
IT Консалтинг
У меня есть консалтинговая компания: Tech Stack Solutions. Я помогаю планировать и создавать облачные решения на базе AWS и помогаю с развёртыванием и поддержкой сервисов на Unix/Linux. Свяжитесь со мной тут.
Последние заметки
19 Sep 2022

Linux Mint как OS для десктопа

08 Jul 2021

rsync over SSH

18 Jun 2021

Вышла CentOS 8.4

Recent Tweets