С помощью fail2ban ваш компьютер Linux автоматически блокирует IP-адреса, у которых слишком много сбоев подключения. Это саморегулирующаяся безопасность! Мы покажем вам, как им пользоваться.
Оглавление
Безопасность Безопасность Безопасность
Герцогиня Виндзорская, Уоллис Симпсон, однажды известная фраза: «Никогда нельзя быть слишком богатым или слишком худым». Мы обновили это для нашего современного взаимосвязанного мира: никогда нельзя быть слишком осторожным или слишком безопасным.
Если ваш компьютер принимает входящие запросы на подключение, например Безопасная оболочка (SSH) или выступает в качестве веб-сервера или сервера электронной почты, вам необходимо защитить его от атак грубой силы и подбора паролей.
Для этого вам необходимо отслеживать запросы на соединение, которые не попадают в учетную запись. Если они неоднократно не проходят аутентификацию в течение короткого периода времени, им следует запретить дальнейшие попытки.
Единственный способ добиться этого практически — автоматизировать весь процесс. После небольшой настройки fail2ban будет управлять мониторинг, запрет и разблокировка для вас.
fail2ban интегрируется с брандмауэр Linux iptables. Он применяет запреты на подозрительные 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]. Тем не менее, постарайтесь найти актуальные разделы. Эти ярлыки также появляются в верхней части раздела, в котором они описаны, но это не то, что нам нужно.
Вы найдете [DEFAULT] раздел где-то около строки 40. Это длинный раздел с множеством комментариев и пояснений.
Прокрутите вниз примерно до строки 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.
Настройка тюрьмы
Jails позволяют перемещать типы соединений в мониторинг fail2ban и из него. Если настройки по умолчанию не соответствуют тем, которые вы хотите применить к тюрьме, вы можете установить определенные значения для bantime, findtime и maxretry.
Прокрутите вниз примерно до строки 280, и вы увидите [sshd] раздел.
Здесь вы можете установить значения для тюрьмы подключения 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 [email protected]
Ранее сообщение об ошибке было «В разрешении отказано». На этот раз в соединении категорически отказано. Мы персона нон грата. Нас забанили.
Давайте посмотрим на детали [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 [email protected]
Просто и эффективно
Чем проще, тем лучше, а fail2ban — элегантное решение сложной проблемы. Он требует очень небольшой настройки и практически не требует дополнительных затрат для вас или вашего компьютера.