Это руководство по эффективной защите SSH-серверов с помощью SSHGuard от атак методом перебора — узнайте, как это сделать!
SSH (Secure Shell) служит критической точкой входа на ваш сервер, предлагая мощный зашифрованный метод удаленного администрирования. Однако его безопасность настолько высока, насколько надежны меры по его защите.
Введите SSHGuard — надежный инструмент, предназначенный для защиты вашего SSH-сервера от атак методом перебора и других распространенных уязвимостей. В этом руководстве будут показаны практические шаги по его реализации, что повысит безопасность вашего сервера и даст вам душевное спокойствие.
Но прежде чем мы перейдем к практической части, давайте прольем больше света на само программное обеспечение.
Что такое SSHGuard?
SSHGuard – это инструмент безопасности, который защищает серверы от атак методом перебора, в первую очередь тех, которые нацелены на SSH-сервисы. Он функционирует как система предотвращения вторжений на основе журналов, отслеживая журналы сервера на предмет признаков вредоносной активности, таких как повторяющиеся неудачные попытки входа в систему.
Когда SSHGuard обнаруживает такое подозрительное поведение, он автоматически блокирует IP-адреса нарушителей, используя правила брандмауэра.
Кроме того, он поддерживает несколько форматов ведения журнала и может быть интегрирован с различными серверными системами брандмауэра, такими как UFW, firewalld, iptables, nftables, IPFW и pf, для управления блокировкой потенциально вредоносного трафика.
Да, мы знаем. Это может напомнить вам о том, что делает Fail2Ban (ознакомьтесь с нашим руководством для получения более подробной информации). Хотя эти два инструмента имеют сходство, у них также есть ключевые различия. Итак, давайте кратко рассмотрим их, чтобы помочь вам решить, какой инструмент лучше соответствует вашим потребностям.
SSHGuard против Fail2Ban: ключевые отличия
SSHGuard и Fail2Ban отслеживают файлы журналов на предмет подозрительной активности, а затем принимают меры по блокировке IP-адресов-нарушителей. Однако, несмотря на схожие функциональные возможности, между ними есть различия.:
Подход к мониторингу:
- SSHGuard напрямую отслеживает файлы журналов и может интерпретировать сами записи журнала, не требуя регулярных выражений.
- Fail2Ban, с другой стороны, в значительной степени полагается на регулярные выражения для анализа файлов журналов и выявления моделей оскорбительного поведения. Это делает его очень гибким и настраиваемым, поскольку его можно адаптировать для мониторинга практически любой службы, которая записывает данные в файл журнала.
Мониторинг служб по умолчанию:
- SSHGuard в первую очередь предназначен для защиты SSH-серверов, но поддерживает и другие службы, такие как почтовые серверы и FTP.
- Fail2Ban можно настроить для защиты широкого спектра служб, помимо SSH, включая веб-серверы, почтовые серверы, серверы общего доступа к файлам, FTP и многое другое.
Реализация и производительность:
- SSHGuard написан на C, что может обеспечить лучшую производительность в отношении скорости и использования ресурсов.
- Fail2Ban написан на Python, что может сделать его немного медленнее, но также и более адаптируемым благодаря обширным библиотекам Python и простоте написания сценариев.
Механизмы блокировки:
- SSHGuard использует более простой механизм блокировки, который напрямую интегрируется с инструментами брандмауэра, такими как UFW, firewalld, iptables, pf, IPFW и др.
- Fail2Ban в основном использует iptables, но может быть настроен для работы с различными другими действиями, такими как отправка электронных писем, запуск пользовательских скриптов или интеграция с более сложными настройками брандмауэра.
Простота настройки:
- SSHGuard обеспечивает более простую настройку для пользователей, в первую очередь связанных с SSH и несколькими другими сервисами, часто требуя меньше настроек.
- Fail2Ban может потребовать более подробной настройки для настройки регулярных выражений и определения конкретных правил и действий для различных служб, но это также обеспечивает больший контроль и настройку.
Установка SSHGuard в Linux
Ниже показано, как установить SHHGuard, в зависимости от вашего дистрибутива Linux.
Debian/Ubuntu/Linux Mint
sudo apt install sshguard
Fedora
sudo dnf install sshguard
Имейте в виду, что выполнение приведенной выше команды также приведет к установке пакета “sshguard-firewalld”, поскольку Firewalld – это брандмауэр по умолчанию, используемый в системах Fedora. При необходимости вы также можете установить пакеты “sshguard-iptables” или “sshguard-nftables” в качестве альтернативных серверных частей брандмауэра для SSHGuard.
Включите и запустите службу:
sudo systemctl enable --now sshguard.service
Alma Linux/Rocky Linux
Поскольку пакет SSHGuard находится в репозитории EPEL, сначала добавьте его в свою систему (если вы еще этого не сделали) и обновите индекс пакета.
sudo dnf install epel-release sudo dnf update
Затем вы можете установить SSHGuard, выполнив следующее:
sudo dnf install sshguard
Как и в Fedora, дополнительный пакет “sshguard-firewalld” будет установлен в качестве серверной части по умолчанию для использования SSHGuard. Также доступны два других варианта: “sshguard-iptables” и “sshguard-nftables”.
Наконец, включите и запустите службу:
sudo systemctl enable --now sshguard.service
Настройка SSHGuard
В файле “sshguard.conf” вы настраиваете параметры для SSHGuard для защиты вашего сервера. Этот файл позволяет вам указать, как ведет себя SSHGuard, что он отслеживает и как реагирует на потенциальные атаки.
В системах на базе Debian (Debian, Ubuntu и т.д.) Файл находится по адресу:
/etc/sshguard/sshguard.conf
В дистрибутивах на базе RHEL, таких как Alma Linux, Rocky Linux, Fedora, вы можете найти это по следующему пути:
/etc/sshguard.conf
Вот как это выглядит по умолчанию в Debian:
Вот объяснение его распространенных опций:
- BACKEND: Этот параметр определяет тип серверной части брандмауэра, которую SSHGuard должен использовать для блокирования злоумышленников. Например, вы можете увидеть такие значения, как “sshg-fw-nft-sets”, “sshg-fw-firewalld”, “sshg-fw-iptables”, “sshg-fw-pf” и т.д., в зависимости от брандмауэра вашей системы.
- LOGREADER: определяет метод, который SSHGuard использует для чтения ваших файлов журналов. Он определяет, как SSHGuard обрабатывает записи журнала для обнаружения вредоносной активности.
- THRESHOLD: это количество неправомерных действий (например, неудачных попыток входа в систему) с одного IP-адреса, которое заставляет SSHGuard блокировать этот адрес. Установка этого значения ниже означает более быстрые баны, но будьте осторожны и не устанавливайте его слишком низко, что может заблокировать законных пользователей, которые неправильно вводят свои пароли.
- BLOCK_TIME: определяет, на сколько (в секундах) IP-адрес будет заблокирован после достижения порога злоупотребления, с настройкой по умолчанию в две минуты (120 секунд). По истечении этого времени блокировка снимается, если только IP-адрес не вызовет новую блокировку.
- DETECTION_TIME: устанавливает временные рамки (в секундах), в течение которых повторные нарушения с одного и того же IP-адреса учитываются для достижения порога блокировки. По сути, он устанавливает период, в течение которого SSHGuard отслеживает подозрительные действия с определенного IP-адреса.
- WHITELIST_FILE: полный путь к файлу, в котором вы можете указать IP-адреса или диапазоны, которые никогда не должны блокироваться, независимо от того, как они себя ведут. Это полезно для гарантии того, что вы случайно не заблокируете себя или доверенные IP-адреса.
Позвольте мне теперь показать вам, как настроить SSHGuard в зависимости от используемого вами брандмауэра.
Настройка SSHGuard при использовании UFW/nftables
Во-первых, мы хотим начать с важного пояснения. Во многих руководствах UFW указан в качестве серверной части для SSHGuard, что не совсем верно по одной простой причине – SSHGuard предлагает не серверную часть UFW, а, по сути, серверную часть nftables.
UFW (простой брандмауэр) – это просто удобный интерфейс (уровень абстракции) для управления правилами брандмауэра iptables/nftables в Linux под капотом. Он используется по умолчанию в Ubuntu.
Итак, чтобы настроить SSHGuard для работы с ним, убедитесь, что параметр “BACKEND” содержит “/usr/libexec /sshguard/sshg-fw-nft-sets” в качестве значения.
Однако, прежде чем SSHGuard сможет манипулировать правилами UFW, необходимо убедиться, что UFW настроен на управление внешними приложениями, такими как SSHGuard. Для этого необходимо добавить перехваты для SSHGuard в конфигурацию UFW. Для этого отредактируйте файл UFW “before.rules”:
sudo nano /etc/ufw/before.rules
Добавьте следующие строки после раздела “allow all on loopback”, чтобы создать новую цепочку для SSHGuard:
# Create a chain for SSHGuard -A ufw-before-input -j SSHGUARD -A ufw-before-output -j SSHGUARD -A ufw-before-forward -j SSHGUARD
Сохраните файл и выйдите из него. Затем перезапустите службу UFW.
sudo systemctl restart ufw
Если вы изменили конфигурацию SSHGuard, перезапустите и его службу.
sudo systemctl restart sshguard
Вот и все. Теперь SSHGuard полностью настроен для защиты вашего сервера от SSH-атак методом перебора. Попробуйте выполнить несколько некорректных SSH-подключений к вашему серверу, чтобы проверить это. После третьей неудачной попытки (“THRESHOLD=30“) SSHGuard заблокирует ваше соединение на две минуты (“BLOCK_TIME=120“).
Хотите проверить, какие адреса были заблокированы? Самый простой способ – напрямую указать таблицу SSHGuard nftables, которая содержит список заблокированных IP-адресов.
sudo nft list table sshguard
Вы также можете отслеживать файл “/ var /log/auth.log”, чтобы просматривать записи действий SSHGuard.
sudo tail -f /var/log/auth.log
Настройка SSHGuard при использовании iptables
Можете назвать меня старомодным (мы не будем спорить, потому что вы правы), но мы предпочитаем использовать SSHGuard с брандмауэром iptables для серверной части. Вот как это сделать.
Сначала убедитесь, что SSHGuard настроен на использование iptables, проверив файл конфигурации SSHGuard, который должен содержать параметр “BACKEND”, для параметра “/usr/libexec/sshguard/sshg-fw-iptables”.”
sudo nano /etc/sshguard/sshguard.conf
Конечно, если вы внесли какие-либо изменения в конфигурацию SSHGuard, обязательно перезапустите ее:
sudo systemctl restart sshguard
Затем создайте новую цепочку iptables для SSHGuard:
sudo iptables -N sshguard
Убедитесь, что весь SSH-трафик проходит через цепочку “sshguard”:
sudo iptables -A INPUT -p tcp --dport 22 -j sshguard
Чтобы сделать внесенные изменения постоянными (доступными после перезагрузки) следуйте приведенным ниже командам:
sudo apt install iptables-persistent sudo iptables-save -f /etc/iptables/rules.v4
Чтобы просмотреть список IP-адресов, заблокированных в данный момент SSHGuard, выполните следующее:
sudo iptables -L sshguard -n
Вы также можете отслеживать действия SSHGuard в режиме реального времени, запустив:
sudo journalctl -u sshguard -f
Настройка SSHGuard при использовании firewalld
Firewalld – это инструмент управления брандмауэром для Linux. В основном он используется в дистрибутивах на базе RHEL, таких как Alma Linux, Rocky Linux и Fedora. Инструмент поддерживает зоны брандмауэра, которые определяют уровень доверия к сетевым подключениям или интерфейсам. Чтобы узнать больше об этом и о том, как им пользоваться, посетите наше подробное руководство “Firewalld в примерах”. Теперь вернемся к теме.
Чтобы указать SSHGuard использовать firewalld в качестве серверной части, убедитесь, что для параметра “BACKEND” в файле “sshguard.conf” установлено значение “/usr/ libexec /sshguard /sshg-fw-firewalld”.
sudo nano /etc/sshguard.conf
Кроме того, не забудьте перезапустить службу SSHGuard, если вы внесли какие-либо изменения в саму конфигурацию:
sudo systemctl restart sshguard
Заблокированные злоумышленники добавляются к двум правилам, названным “sshguard4” (для адресов IPv4) и “sshguard6” (для адресов IPv6), соответственно, добавленным в зону брандмауэра по умолчанию (“public“).
Чтобы просмотреть список IP-адресов, заблокированных в данный момент SSHGuard, выполните следующее:
sudo firewall-cmd --info-ipset=sshguard4
Соответственно, для IPv6-адресов команда:
sudo firewall-cmd --info-ipset=sshguard6
Наконец, вы можете отслеживать действия SSHGuard в режиме реального времени, запустив:
sudo journalctl -u sshguard -f
Однако, если вы используете другую зону брандмауэра, вы можете настроить ее, следуя приведенным ниже инструкциям. Просто замените “<zone-name>” на ваше конкретное название зоны.
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard4 drop" sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard6 drop"
Белый список IP-адресов
Белый список IP-адресов в SSHGuard позволяет гарантировать, что определенные IP-адреса никогда не будут заблокированы, независимо от их активности. Это может быть важно для IP-адресов, которым вы доверяете, таких как системные администраторы или автоматизированные процессы, которые могут иметь частый законный доступ по SSH. Вот как вы можете внести IP-адреса в белый список в SSHGuard.
Сначала убедитесь, что параметр “WHITELIST_FILE” в файле “sshguard.conf” активен и не закомментирован.
Расположение файла со списком адресов, внесенных в белый список, может отличаться в зависимости от вашего дистрибутива Linux. Для тех, кто использует системы на базе Debian, такие как Ubuntu, он находится по адресу:
/etc/sshguard/whitelist
Для систем на базе RHEL, таких как Alma, Rocky и Fedora:
/etc/sshguard.whitelist
Здесь вы можете ввести хосты, которые, по вашему мнению, никогда не будут блокироваться SSHGuard, тремя различными способами:
- Один IP-адрес
- Диапазон сети
- Полное доменное имя (FQDN) хоста
Например:
192.168.0.34 192.168.0.0/24 myhost.domain.com
Итак, откройте файл в текстовом редакторе, введите нужные адреса, сохраните файл и выйдите. Конечно, после этого не забудьте перезапустить службу SSHGuard.
sudo systemctl restart sshguard
Заключение
Защита вашего SSH-сервера с помощью SSHGuard обеспечивает надежный уровень защиты от атак методом перебора и других попыток несанкционированного доступа. Помните, ключ к поддержанию безопасности заключается не только в начальной настройке, но и в постоянном мониторинге и обновлении ваших конфигураций по мере появления новых угроз.
Для получения дополнительной информации посетите веб-сайт проекта или обратитесь к документации SSHGuard.
Спасибо за ваше время! Если у вас есть какие-либо вопросы, пожалуйста, оставьте их в разделе комментариев ниже.