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

Опубликовано: 2022-01-29
Стилизованное окно терминала, работающее на ноутбуке Linux в стиле Ubuntu.
Фатмавати Ахмад Заэнури/Shutterstock

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

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

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

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

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

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

Реклама

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

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

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

 судо iptables -L 

СВЯЗАННЫЕ: Руководство для начинающих по iptables, брандмауэру Linux

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

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

 sudo apt-get установить fail2ban 

В Fedora 32 введите:

 sudo dnf установить 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 открывается в окне gedit.

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

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

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

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

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

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

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

СВЯЗАННЫЕ С: Как графически редактировать текстовые файлы в Linux с помощью gedit

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

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

Реклама

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

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

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

 включено = верно

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

 максимальная попытка = 3

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

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

Включение fail2ban

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

Реклама

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

 sudo systemctl включить fail2ban

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

 sudo systemctl запустить fail2ban 

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

 статус sudo systemctl fail2ban.service 

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

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

 статус клиента sudo fail2ban 

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

 sudo fail2ban-клиент статус sshd 

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

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

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

Реклама

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

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

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

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

 ssh [email protected] 

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

Давайте еще раз посмотрим на детали джейла [sshd]:

 sudo fail2ban-клиент статус sshd 

Реклама

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

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

 судо iptables -L 

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

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

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

 sudo fail2ban-client установить sshd unbanip 192.168.5.25 

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

 ssh [email protected] 

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

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

СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов