Как обезопасить SSH с помощью Fail2Ban

Защита вашего сервера от атак методом перебора паролей – это необходимость. Вопрос в том, как именно? К счастью для вас, Fail2Ban находится буквально за углом, чтобы защитить ваш сервер, но конфигурация Fail2Ban по умолчанию требует некоторой настройки для достижения оптимальной безопасности. Не волнуйтесь, этот учебник покрывает вас.

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

Готовы? Читайте, чтобы оптимизировать безопасность вашего SSH-сервера!

Предварительные требования

Этот учебник включает пошаговые инструкции. Если вы хотите следовать за ними, убедитесь, что у вас есть следующее:

  • Серверы Ubuntu и Debian – В этом учебнике используется сервер с установленной Ubuntu 18.04 LTS для настройки Fail2Ban и сервер Debian 10 для тестирования конфигураций блокировки Fail2Ban.
  • Root доступ или привилегии sudo на сервере для выполнения команд от имени суперпользователя.
  • Fail2Ban установлен на сервере Ubuntu или Debian.

Настройка базового брандмауэра

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

1. Сначала выполните команду service ниже, чтобы остановить Fail2Ban (fail2ban stop) от запуска. Останавливайте Fail2Ban при внесении изменений в ваши файлы конфигурации, чтобы вы могли протестировать изменения и убедиться, что они работают как ожидалось.

sudo service fail2ban stop
Stopping the fail2ban service

2. Выполните команду apt install для установки Sendmail и IPTables-persistent. Sendmail – это программа, которую использует Fail2Ban для уведомления вас, когда он блокирует IP-адрес. IPTables-persistent – это программа, которая сохраняет ваши измененные настройки конфигурации в файле /etc/sysconfig/iptables.

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

sudo apt install sendmail iptables-persistent -y

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

## Первое правило - Принимает весь трафик, генерируемый сервером (интерфейс lo) 
sudo iptables -A INPUT -i lo -j ACCEPT
## Второе правило - Принимает весь трафик, который является частью 
## установленного или связанного соединения
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
## Третье правило - Разрешает трафик SSH на порту 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Четвертое правило - Отбрасывает весь остальной трафик
sudo iptables -A INPUT -j DROP
Adding four rules to your firewall

4. Запустите команду iptables ниже, чтобы просмотреть сводку того, что вы настроили в своем брандмауэре.

sudo iptables -S

Ниже выделены правила, которые вы добавили в свой брандмауэр.

Checking your firewall rules

5. Затем выполните следующие команды, чтобы сохранить ваши правила в файле /etc/sysconfig/iptables-config и запустить сервис Fail2Ban. Файл iptables-config содержит все ваши постоянные правила брандмауэра.

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

sudo dpkg-reconfigure iptables-persistent
sudo service fail2ban start

6. Наконец, повторно выполните команду iptables ниже, чтобы просмотреть ваши правила брандмауэра.

sudo iptables -S

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

Previewing your firewall rules

Настройка локальной конфигурации Fail2Ban

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

Возможно, вам захочется создать пользовательские правила для вашего SSH-сервера. Если это так, то вы создадите новый файл jail.local (на основе файла jail.conf) и поместите в него правила, специфичные для SSH. Это позволит вам переопределить настройки в файле jail.conf для вашего сервера.

1. Запустите команду awk ниже, чтобы выполнить следующее:

  • Выведите содержимое ('{ printf "# "; print; }') файла /etc/fail2ban/jail.conf.
  • Создайте файл с именем jail.local (на основе файла jail.conf), который можно использовать для переопределения настроек по умолчанию в файле jail.conf.
  • Отправьте содержимое файла /etc/fail2ban/jail.conf в команду tee. Это запишет содержимое файла jail.conf на вашем локальном файловом хранилище (/etc/fail2ban/jail.local).
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local
Creating the jail.local file

2. После создания файла jail.local выполните следующую команду ls. Команда перечислит содержимое каталога Fail2Ban вашего сервера (/etc/fail2ban), чтобы убедиться, что ваш файл jail.local создан правильно.

ls /etc/fail2ban

Если вы видите новый файл jail.local, как показано ниже, то ваш локальный файл был создан правильно.

Checking the newly created local file (jail.local)

3. Откройте файл /etc/fail2ban/jail.local в вашем предпочтительном текстовом редакторе и перейдите к разделу [ssh].

Раскомментируйте опции [sshd] и enabled, удалив символ # перед опциями, как показано ниже, чтобы включить SSH.

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

Enabling the [ssh] section

4. Прокрутите вниз и раскомментируйте раздел [DEFAULT], показанный ниже. Этот раздел предназначен для настройки параметров по умолчанию для Fail2Ban. Любые настройки в этом разделе будут применяться ко всем jails, которыми управляет Fail2Ban.

Uncommenting the [DEFAULT] option

5. Затем прокрутите вниз до раздела bantime и установите bantime в 60 минут. Опция bantime устанавливает время в минутах, в течение которого IP-адрес блокируется после неудачной попытки входа.

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

Setting a ban duration

6. Перейдите к параметрам findtime и maxretry. Оставьте значение findtime без изменений (10m), а значение maxretry установите на 3.

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

Значение по умолчанию для параметра findtime составляет 10 минут, а для параметра maxretry — 5 попыток в течение 10-минутного периода. Следовательно, IP-адрес, который неудачно пытается войти в систему 5 раз в течение 10 минут, будет заблокирован.

Setting a Window Time for an IP Address to Login Before Getting Banned

7. Прокрутите вниз, раскомментируйте и настройте параметры destemail, sender и mta:

  • destemail – Введите адрес электронной почты, на который Fail2Ban отправляет уведомления.
  • sender – Установите адрес в поле «От кого» в письме, которое Fail2Ban отправляет на адрес destemail.
  • mta – Оставьте значение по умолчанию (sendmail). Параметр mta устанавливает агента доставки электронной почты, который использует Fail2Ban для отправки уведомлений.
Configuring destemail, sender, and mta options

8. Перейдите к параметрам действия, как показано ниже, и раскомментируйте параметр action_mwl. Это позволит Fail2Ban отправлять вам электронные письма отчетов о журнале, которые вы можете изучить, чтобы более детально исследовать возможные проблемы безопасности на вашем сервере.

Сохраните изменения и выйдите из текстового редактора.

Enabling Logwatch Emails

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

sudo service fail2ban stop
sudo service fail2ban start

10. Наконец, выполните команду ниже, чтобы проверить статус вашей службы fail2ban. sudo service fail2ban status. Если служба Fail2Ban работает, вы получите вывод, аналогичный приведенному ниже.

sudo service fail2ban status

Если служба Fail2Ban работает, вы получите вывод, аналогичный приведенному ниже.

Checking the Fail2Ban Service Status

Проверка конфигураций блокировки

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

1. Войдите в свой вторичный сервер (Debian) и выполните команду ниже, чтобы подключиться по SSH к вашему серверу Fail2Ban.

В этой демонстрации используется сервер Debian 10 с IP-адресом 134.122.20.103 для ssh на сервер fail2ban с IP-адресом 69.28.83.134.

2. Введите случайный пароль при запросе и нажмите Enter.

При первой попытке сервер Fail2Ban остановит попытку входа по SSH и выведет сообщение Permission denied, как показано ниже. Повторите попытку входа по SSH еще два-три раза, и сервер Fail2Ban в конечном итоге перестанет реагировать на вашу попытку входа по SSH.

На этом этапе вы больше не получите сообщения Permission denied, а увидите пустой экран. Пустой экран указывает на то, что ваш второй сервер (Debian) был заблокирован сервером Fail2Ban.

Testing if a server gets banned from Fail2Ban server after several failed logins

Но возможно, у вас уже есть список IP-адресов, которые нужно заблокировать на вашем сервере Fail2Ban. Если это так, откройте файл jail.local и перейдите к разделу [DEFAULT]. Раскомментируйте параметр ignoreip и укажите IP-адреса для блокировки, как показано ниже.

Адрес может быть либо несколькими отдельными записями IPv4 или IPv6, либо разделенными запятыми.

Setting IP Addresses to Block from Fail2Ban Server

3. На вашем сервере Fail2Ban (Ubuntu) повторно выполните команду iptables, указанную ниже, чтобы просмотреть правила вашего брандмауэра.

sudo iptables -S

Обратите внимание на то, что есть новое правило, отклоняющее попытки входа по SSH с IP-адреса 134.122.20.103.

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

Checking additional firewall rules

Заключение

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

А что если воспользоваться этим новым знанием на полную катушку? Возможно, начните с блокировки IP-адресов на всех портах с помощью Fail2Ban на хосте Docker?

Source:
https://adamtheautomator.com/fail2ban-ssh/