Как защитить свой Linux-сервер с помощью fail2ban
Опубликовано: 2022-01-29 С помощью 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]. Однако позаботьтесь о том, чтобы найти настоящие разделы. Эти метки также отображаются в верхней части раздела, который их описывает, но это не то, что нам нужно.
Вы найдете раздел [DEFAULT] где-то в строке 40. Это длинный раздел с множеством комментариев и пояснений.
Прокрутите вниз примерно до строки 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].
Здесь вы можете установить значения для тюрьмы соединения 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 | ||
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Процессы | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · тайм-аут · стена · да · убить · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · дата · bg · fg | |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов