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

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

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

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

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

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

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

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

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

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

sudo iptables -L

sudo iptables -L в окне терминала.

Установка fail2ban

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

sudo apt-get install fail2ban

sudo apt-get install fail2ban в окне терминала.

В Fedora 32 введите:

sudo dnf install fail2ban

sudo dnf установить fail2ban в окне терминала.

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

sudo pacman -Sy fail2ban

sudo pacman -Sy fail2ban в окне терминала.

Настройка fail2ban

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

  Как быстро найти и удалить большие файлы в Linux с помощью Large Files Finder

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

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

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

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local в окне терминала.

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

sudo gedit /etc/fail2ban/jail.local

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

/etc/fail2ban/jail.local открыт в окне gedit.

Вы найдете [DEFAULT] раздел где-то около строки 40. Это длинный раздел с множеством комментариев и пояснений.

/etc/fail2ban/jail.local открывается в окне gedit и прокручивается до строки 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 для мониторинга только выбранного набора типов подключения.

  Как установить тему Neo-to GTK в Linux

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

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

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

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

/etc/fail2ban/jail.local открывается в окне gedit и прокручивается до строки 280.

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

enabled = true

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

maxretry = 3

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

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

Включение fail2ban

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

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

sudo systemctl enable fail2ban

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

sudo systemctl start fail2ban

sudo systemctl включить fail2ban в окне терминала.

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

sudo systemctl status fail2ban.service

sudo systemctl status fail2ban.service в окне терминала.

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

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

sudo fail2ban-client status

sudo fail2ban-client статус в окне терминала.

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

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd в окне терминала.

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

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

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

  6 лучших редакторов Markdown для Linux

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

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

ssh dave@ubtuntu20-04.local в окне терминала с множеством неудачных попыток ввода пароля.

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

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

ssh [email protected]

ssh dave@ubuntu20-04.local в окне терминала с отказом в ответе на соединение.

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

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

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd в окне терминала.

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

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

sudo iptables -L

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

sudo fail2ban-client устанавливает sshd unbanip 192.168.5.25 в окне терминала.

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

ssh [email protected]

ssh dave@ubuntu20-04.local в окне терминала.

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

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