Поиск по сайту:

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


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

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

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

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

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

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

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

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

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

sudo iptables -L

Установка фейл2бан

Установка 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]. Однако позаботьтесь о том, чтобы найти настоящие разделы. Эти метки также отображаются в верхней части раздела, который их описывает, но это не то, что нам нужно.

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

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

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

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

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

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

Настройка джейла

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

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

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

enabled = true

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

maxretry = 3

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

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

Включение 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

Ранее сообщение об ошибке было «Отказано в доступе». На этот раз соединение было полностью отклонено. Мы персона нон грата. Нам запретили.

Давайте еще раз посмотрим на детали джейла [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. Мы не изменили настройку по умолчанию для bantime, поэтому через 10 минут этот IP-адрес будет разблокирован и сможет отправлять новые запросы на подключение.

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

Для этого набираем следующее:

sudo fail2ban-client set sshd unbanip 192.168.5.25

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

ssh dave@ubuntu20-04.local

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

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

RELATED: Best Linux Laptops for Developers and Enthusiasts