Поиск по сайту:

Как заблокировать брутфорс-атаки SSH с помощью SSHGUARD


SSHGuard – это демон с открытым исходным кодом, который защищает хосты от атак методом перебора. Это достигается за счет мониторинга и агрегирования системных журналов, обнаружения атак и блокировки злоумышленников с помощью одного из серверов брандмауэра Linux: iptables, FirewallD, pf. > и ipfw.

Первоначально разработанный для обеспечения дополнительного уровня защиты службы OpenSSH, SSHGuard также защищает широкий спектр служб, таких как Vsftpd и Postfix. Он распознает несколько форматов журналов, включая Syslog, Syslog-ng и необработанные файлы журналов.

SSHGuard очень похож на Fail2ban, только он написан на C (Fail2ban написан на Python), легче и предоставляет меньше функций.

В этом руководстве мы покажем, как вы можете установить и настроить SSHGuard для блокировки атак методом перебора SSH на вашем Linux-сервере.

Шаг 1. Установите SSHGuard в Linux

Начнем с установки SSHGuard в Linux.

Установите SSHGuard на Debian/Ubuntu.

Сначала обновите списки пакетов, а затем установите SSHGuard из репозиториев по умолчанию с помощью менеджера пакетов apt.

sudo apt update
sudo apt install sshguard

После установки служба SSHGuard запускается автоматически, и вы можете убедиться в этом с помощью команды:

sudo systemctl status sshguard

Установите SSHGuard в системах RHEL

Для дистрибутивов на основе RHEL, таких как CentOS, Rocky и AlmaLinux, начните с установки репозитория EPEL как представлено в команде ниже.

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo dnf install epel-release

Имея EPEL, установите SSHGuard с помощью менеджера пакетов dnf.

sudo dnf install sshguard 

После установки запустите и настройте SSHGuard на запуск при запуске или перезагрузке системы.

sudo systemctl start sshguard
sudo systemctl enable sshguard

Обязательно убедитесь, что SSHGuard работает должным образом.

sudo systemctl status sshguard

Шаг 2. Настройка SSHGuard в Linux

SSHGuard активно отслеживает журналы /var/log/auth.log, /var/log/secure и syslog-ng. файлы журналов неудачных попыток входа в систему.

За каждую неудачную попытку входа в систему удаленный хост блокируется на ограниченный период времени, который по умолчанию установлен на 120 секунд. После этого время бана увеличивается в 1,5 раза с каждой последующей неудачной попыткой входа в систему.

Время блокировки хостов-нарушителей, помимо других параметров, указывается в файле sshguard.conf. Вы можете получить доступ к файлу конфигурации с помощью редактора vim, как показано.

sudo vim /etc/sshguard/sshguard.conf

В дистрибутивах на основе RHEL файл конфигурации находится по следующему пути.

sudo vim /etc/sshguard.conf

Вот образец файла конфигурации при просмотре из Ubuntu/Debian.

Остановимся на основном варианте.

  • Директива BACKEND указывает полный путь к исполняемому файлу серверной части. В этом примере мы видим, что IPtables установлен в качестве серверной части брандмауэра по умолчанию.
  • Директива THRESHOLD блокирует злоумышленников, когда их показатель атаки превышает указанное значение.
  • Параметр BLOCK_TIME — это количество секунд, в течение которых злоумышленник блокируется после каждой успешной неудачной попытки входа в систему. По умолчанию после первой попытки установлено значение 120. Это значение увеличивается с каждой последующей неудачной попыткой входа в систему.
  • Параметр DETECTION_TIME указывает время в секундах, в течение которого злоумышленник регистрируется или запоминается системой, прежде чем его оценка будет сброшена.
  • Опция WHITELIST_file указывает полный путь к файлу белого списка, который содержит хосты, которые не должны быть занесены в черный список./li>

Шаг 3. Настройте SSHGuard для блокировки атак грубой силы SSH

Чтобы предотвратить атаки грубой силы, вам необходимо настроить следующие брандмауэры для работы с sshguard.

Блокируйте SSH-атаки с помощью UFW

Если у вас установлен и включен UFW в вашей системе Ubuntu/Debian, измените файл /etc/ufw/before.rules.

sudo vim etc/ufw/before.rules

Добавьте следующие строки сразу после раздела allow all on loopback.

allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

Сохраните файл и перезапустите UFW.

sudo systemctl restart ufw

Теперь попытайтесь войти на сервер из другой системы с неправильными учетными данными и обратите внимание, что вы будете заблокированы на 120 секунд после первой неудачной попытки входа.

Вы можете убедиться в этом, проверив файл журнала auth.log.

sudo tail -f  /var/log/auth.log

После следующей неудачной попытки входа в систему время блокировки увеличивается до 240 секунд, затем 480 секунд, затем 960 секунд и т. д.

Блокируйте SSH-атаки с помощью Firewalld

Если вы используете firewalld, убедитесь, что он настроен и включен. Затем выполните следующую команду, чтобы включить sshguard в предпочитаемой вами зоне.

sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

Чтобы применить изменения, перезагрузите Firewalld и sshguard.

sudo firewall-cmd --reload
sudo systemctl restart sshguard

Затем проверьте правило следующим образом:

sudo firewall-cmd —-info-ipset=sshguard4

Блокируйте SSH-атаки с помощью Iptables

Если вы все еще используете Iptables, сначала создайте новое правило цепочки для sshguard в Iptables, чтобы начать блокировать злоумышленников.

iptables -N sshguard

Затем обновите цепочку INPUT, чтобы направить трафик на sshguard и заблокировать весь трафик от недобросовестных сторон.

iptables -A INPUT -j sshguard

Чтобы заблокировать определенные порты, такие как SSH, POP и IMAP, от злоумышленников, выполните команду:

iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard

И, наконец, сохраните правило, чтобы изменения вступили в силу.

iptables-save > /etc/iptables/iptables.rules

Шаг 4. Как внести в белый список заблокированные по SSH хосты

Чтобы внести в белый список заблокированный хост, просто укажите его имя хоста или IP-адрес в файле белого списка, который находится по адресу:

/etc/sshguard/whitelist - Ubuntu/Debian 
/etc/sshguard.whitelist - RHEL-based distros

После этого обязательно перезапустите демон sshguard и серверную часть брандмауэра, чтобы изменения вступили в силу.

В этом руководстве мы продемонстрировали, как можно блокировать атаки грубой силы SSH с помощью демона SSHGuard на серверах Linux. Ваши отзывы приветствуются.