Как защитить свой Linux-сервер с помощью fail2ban

5 февраля 2021 |

Как защитить свой Linux-сервер с помощью fail2ban

A stylized terminal window running on an Ubuntu-style Linux laptop. Fatmawati Achmad Zaenuri / Shutterstock

С помощью fail2ban ваш компьютер Linux автоматически блокирует IP-адреса, у которых слишком много сбоев подключения. Это саморегулирующаяся безопасность! Мы покажем вам, как его использовать.

Безопасность Безопасность Безопасность

Герцогиня Виндзорская Уоллис Симпсон однажды сказала: «Никогда нельзя быть слишком богатым или слишком худым». Мы обновили это для нашего современного взаимосвязанного мира: никогда нельзя быть слишком осторожным или слишком защищенным.

Если ваш компьютер принимает входящие запросы на соединение, такие как соединения Secure Shell (SSH), или действует как веб-сервер или сервер электронной почты, вам необходимо защитить его от атак грубой силы и подбора паролей.

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

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

fail2ban интегрируется с iptables межсетевого экрана Linux. Он применяет запреты на подозрительные IP-адреса, добавляя правила к брандмауэру. Чтобы не загромождать это объяснение, мы используем iptables с пустым набором правил.

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

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

sudo iptables -L

Установка fail2ban

Установка fail2ban проста во всех дистрибутивах, которые мы использовали для исследования этой статьи. В Ubuntu 20.04 команда выглядит следующим образом:

sudo apt-get install fail2ban

В Fedora 32 введите:

sudo dnf install fail2ban

В Manjaro 20.0.1 мы использовали pacman:

sudo pacman -Sy fail2ban

Настройка fail2ban

Установка fail2ban содержит файл конфигурации по умолчанию с именем jail.conf. Этот файл перезаписывается при обновлении fail2ban, поэтому мы потеряем наши изменения, если внесем изменения в этот файл.

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

Вот как скопировать файл:

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

Теперь откройте файл в вашем любимом редакторе. Мы собираемся использовать gedit:

sudo gedit / etc / fail2ban / jail.local

Мы будем искать в файле два раздела: [DEFAULT] и [sshd]. Однако постарайтесь найти актуальные разделы. Эти ярлыки также появляются в верхней части раздела, описывающего их, но это не то, что нам нужно.

/etc/fail2ban/jail.local opened in a gedit window.

Вы найдете раздел [ПО УМОЛЧАНИЮ] где-то поблизости строка 40. Это длинный раздел с множеством комментариев и пояснений.

/etc/fail2ban/jail.local opened in a gedit window and scrolled to line 89.

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

  • ignoreip : Белый список IP-адресов, которые никогда не будут заблокированы. У них есть постоянная карта Get Out of Jail Free. IP-адрес localhost (127.0.0.1) по умолчанию включен в список вместе с его эквивалентом IPv6 (:: 1). Если есть другие IP-адреса, которые, как вы знаете, никогда не следует запрещать, добавьте их в этот список и оставьте между ними пробел.
  • bantime: время, на которое IP-адрес заблокирован («m» означает минуты). Если вы введете значение без «m» или «h» (для часов), оно будет считаться секундами. Значение -1 навсегда заблокирует IP-адрес. Будьте очень осторожны, чтобы не заблокировать себя навсегда.
  • findtime: время, в течение которого слишком много неудачных попыток подключения приведет к блокировке IP-адреса.
  • maxretry: значение за «слишком много неудачных попыток.

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

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

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

Настройка тюрьмы

Джейллы позволяют перемещать типы соединений в мониторинг fail2ban и из него. Если настройки по умолчанию не соответствуют тем, которые вы хотите применить к тюрьме, вы можете установить определенные значения для bantime, findtime и maxretry.

Прокрутите вниз примерно до строки 280, и вы увидите [sshd ].

/etc/fail2ban/jail.local opened in a gedit window and scrolled to line 280.

Здесь вы можете установить значения для тюрьмы SSH-соединения. Чтобы включить эту тюрьму в мониторинг и запрет, мы должны ввести следующую строку:

enabled = true

Мы также набираем эту строку:

maxretry = 3

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

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

Включение fail2ban

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

Чтобы включить fail2ban как службу, мы используем команду systemctl:

sudo systemctl enable fail2ban

Мы также используем ее для запуска службы:

sudo systemctl start fail2ban

Мы также можем проверить статус службы с помощью systemctl:

sudo systemctl status fail2ban.service

Все выглядит хорошо — у нас зеленый свет, значит, все хорошо.

Посмотрим, согласен ли fail2ban:

sudo fail2ban-client status

Это отражает то, что мы настроили. Мы включили одну тюрьму под названием [sshd]. Если мы включим имя тюрьмы в нашу предыдущую команду, мы сможем взглянуть на нее глубже:

sudo fail2ban-client status sshd

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

Тестирование нашей тюрьмы

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

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

Затем мы сделаем еще одну попытку подключения и еще три раза введем неверный пароль. Первая попытка ввода неверного пароля в третьем запросе подключения должна вызвать fail2ban.

После первого неверного пароля на третий запрос подключения мы не получаем ответа с удаленной машины. Мы не получаем никаких объяснений, мы просто не против.

Вы должны нажать Ctrl + C, чтобы вернуться в командную строку. Если мы попробуем еще раз, мы получим другой ответ:

ssh dave@ubuntu20-04.local

Ранее сообщение об ошибке было «Permission denied. ” На этот раз в соединении категорически отказано. Мы персона нон грата. Нас забанили.

Давайте еще раз посмотрим на подробности тюрьмы [sshd]:

sudo fail2ban-client status sshd

Там было три сбоя, и один IP-адрес (192.168.4.25) был забанен.

Как мы упоминали ранее, fail2ban применяет запреты, добавляя правила в набор правил брандмауэра. Давайте еще раз посмотрим на набор правил (раньше он был пустым):

sudo iptables -L

В политику INPUT добавлено правило, отправляющее SSH-трафик на цепочка f2b-sshd. Правило в цепочке f2b-sshd отклоняет SSH-соединения с 192.168.4.25. Мы не меняли настройку по умолчанию для времени блокировки, поэтому через 10 минут этот IP-адрес будет разблокирован и сможет делать новые запросы на подключение.

Если вы установите более длительный срок блокировки (например, несколько часов), но Если вы хотите разрешить IP-адресу сделать еще один запрос на соединение раньше, вы можете досрочно освободить его.

Для этого мы вводим следующее:

sudo fail2ban-client set sshd unbanip 192.168.5.25

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

ssh dave @ ubuntu20- 04.local

Просто и эффективно

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

Как защитить свой Linux-сервер с помощью fail2ban

Tags:

Напишите пару строк: