SSHGuard
Установка security/sshguard
SSHGuard - инструмент для защиты хостов от атак на SSH и другие сервисы.
SSHGuard проверяет сообщения журналов приложений, на основании которых определяет возможные атаки на сетевые службы. Затем блокирует IP-адреса тех, кто пытался злоупотреблять. Через некоторое время, определённое в файле настроек, он снимает блокировку, если попыток атак больше не обнаружено. Или может заблокировать IP-адрес злоумышленника навсегда.
Подробная информация на сайте https://www.sshguard.net/
Установка из пакета (предварительная установка менеджера пакетов PKG не требуется, дополнительная информация о котором в статье PKG):
# pkg install sshguard
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
sshguard: 2.4.3_3,1
Number of packages to be installed: 1
The process will require 4 MiB more space.
529 KiB to be downloaded.
Proceed with this action? [y/N]: y
[1/1] Fetching sshguard-2.4.3_3,1.pkg: 100% 529 KiB 541.4kB/s 00:01
Checking integrity... done (0 conflicting)
[1/1] Installing sshguard-2.4.3_3,1...
[1/1] Extracting sshguard-2.4.3_3,1: 100%
=====
Message from sshguard-2.4.3_3,1:
--
To enable SSHGuard at startup, add the following line to your 'rc.conf':
sshguard_enable="YES"
Starting SSHGuard through syslogd(8) is discouraged and not supported.
Configure SSHGuard by editing BACKEND in '/usr/local/etc/sshguard.conf'. See
sshguard-setup(7) for instructions on setting up your firewall.
Please note that a few rc script parameters have been renamed to
better reflect the documentation:
sshguard_safety_thresh -> sshguard_danger_thresh
sshguard_pardon_min_interval -> sshguard_release_interval
sshguard_prescribe_interval -> sshguard_reset_interval
Менеджер пакетов предложит установить пакет sshguard. Примерный вывод выполнения команды после согласия на установку представлен выше.
Проверка установки SSHGuard:
# pkg version -v | grep sshguard sshguard-2.4.3_3,1 = up-to-date with remote
Контроль доступа с помощью IPFW
Настройки пакета sshguard находятся в файле /usr/local/etc/sshguard.conf.
Включение автозапуска IPFW в /etc/rc.conf:
# sysrc firewall_enable="YES" firewall_enable: NO -> YES # sysrc firewall_type="open" firewall_type: UNKNOWN -> open # sysrc firewall_logging="YES" firewall_logging: NO -> YES
Запуск IPFW:
# service ipfw start &
Символ "&" в данном случае необходим. Без него будет добавлено единственное правило IPFW, запрещающее весь трафик, и дальнейшее выполнение скрипта запуска IPFW будет прекращено (в случае удалённого управления, например по SSH).
Проверка на консоли:
# ipfw show 65535 4 400 deny ip from any to any
Правильный запуск прервёт текущий сеанс SSH, но выполнение запуска IPFW будет продолжено:
# ipfw show 00100 0 0 allow ip from any to any via lo0 00200 0 0 deny ip from any to 127.0.0.0/8 00300 0 0 deny ip from 127.0.0.0/8 to any 00400 0 0 deny ip from any to ::1 00500 0 0 deny ip from ::1 to any 00600 0 0 allow ipv6-icmp from :: to ff02::/16 00700 0 0 allow ipv6-icmp from fe80::/10 to fe80::/10 00800 0 0 allow ipv6-icmp from fe80::/10 to ff02::/16 00900 0 0 allow ipv6-icmp from any to any icmp6types 1 01000 0 0 allow ipv6-icmp from any to any icmp6types 2,135,136 65000 142 19406 allow ip from any to any 65535 4 400 deny ip from any to any
Установка автозапуска sshguard в /etc/rc.conf:
# sysrc sshguard_enable="YES" sshguard_enable: -> YES
Установка способа ограничения доступа к сетевым сервисам с помощью IPFW в файле настройки /usr/local/etc/sshguard.conf:
BACKEND="/usr/local/libexec/sshg-fw-ipfw"
Выбор файла, содержащего чёрный список, в файле настройки /usr/local/etc/sshguard.conf:
BLACKLIST_FILE=120:/var/db/sshguard/blacklist.db
Создание папки для чёрного списка (сам файл будет создан автоматически при старте SSHGuard):
# mkdir /var/db/sshguard
Выбор файла, содержащего белый список, в файле настройки /usr/local/etc/sshguard.conf:
WHITELIST_FILE=/usr/local/etc/sshguard.whitelist
Создание файла белого списка с добавлением доверенных адресов (в данном примере указан адрес 10.10.10.10):
# echo '10.10.10.10' >> /usr/local/etc/sshguard.whitelist
Запуск SSHGuard:
# service sshguard start
При запуске SSHGuard создаётся таблица "22" (пока она пуста):
# ipfw table 22 list
Добавление запрещающего правила на основе таблицы "22" IPFW в автозапуск с помощью /etc/rc.local:
#!/bin/sh ipfw add 5000 deny ip from table\(22\) to any
SSHGuard, установленный из пакета проверяет два файла:
# grep FILES /usr/local/etc/sshguard.conf FILES="/var/log/auth.log /var/log/maillog"
SSHGuard в соответствии с данной строкой настройки обнаруживает неудачные попытки аутентификации по SSH, зафиксированные в файле журнала /var/log/auth.log. И разбирает обращения к почтовому сервису в основной ОС, записанные в файле журнала /var/log/maillog
Пример работы SSHGuard. Он проверяет содержимое файла /var/log/auth.log:
Apr 13 13:48:00 main sshd[1093]: error: maximum authentication attempts exceeded for root from 151.177.150.97 port 44990 ssh2 [preauth] Apr 13 13:48:00 main sshd[1093]: Disconnecting authenticating user root 151.177.150.97 port 44990: Too many authentication failures [preauth] Apr 13 13:48:02 main sshd[1095]: error: maximum authentication attempts exceeded for root from 151.177.150.97 port 45172 ssh2 [preauth] Apr 13 13:48:02 main sshguard[800]: Attack from "151.177.150.97" on service SSH with danger 10. Apr 13 13:48:02 main sshd[1095]: Disconnecting authenticating user root 151.177.150.97 port 45172: Too many authentication failures [preauth] Apr 13 13:48:03 main sshd[1097]: error: maximum authentication attempts exceeded for root from 151.177.150.97 port 45402 ssh2 [preauth] Apr 13 13:48:03 main sshguard[800]: Attack from "151.177.150.97" on service SSH with danger 10. Apr 13 13:48:03 main sshd[1097]: Disconnecting authenticating user root 151.177.150.97 port 45402: Too many authentication failures [preauth] Apr 13 13:48:04 main sshd[1099]: Received disconnect from 151.177.150.97 port 45540:11: disconnected by user [preauth] Apr 13 13:48:04 main sshd[1099]: Disconnected from authenticating user root 151.177.150.97 port 45540 [preauth] Apr 13 13:48:04 main sshguard[800]: Attack from "151.177.150.97" on service SSH with danger 10. Apr 13 13:48:04 main sshguard[800]: Blocking "151.177.150.97/32" for 120 secs (3 attacks in 2 secs, after 1 abuses over 2 secs.) Apr 13 13:49:53 main sshd[1102]: Invalid user admin from 45.135.193.100 port 40608 Apr 13 13:49:53 main sshguard[800]: Attack from "45.135.193.100" on service SSH with danger 10. Apr 13 13:49:53 main sshd[1102]: Connection closed by invalid user admin 45.135.193.100 port 40608 [preauth] Apr 13 13:49:53 main sshguard[800]: Attack from "45.135.193.100" on service SSH with danger 2. Apr 13 13:50:30 main sshguard[800]: 151.177.150.97: unblocking after 146 secs
После достижения определённого количества атак IP-адрес блокируется на 120 секунд (настраивается в файле /usr/local/etc/sshguard.conf):
# less auth.log | grep Blocking Apr 13 13:48:04 main sshguard[800]: Blocking "151.177.150.97/32" for 120 secs (3 attacks in 2 secs, after 1 abuses over 2 secs.)
Реабилитация и разблокировка удалённого пользователя через определённый промежуток времени, если он случайно неправильно вводил неправильные учётные данные:
# less auth.log | grep unblocking Apr 13 13:50:30 main sshguard[800]: 151.177.150.97: unblocking after 146 secs
Дальнейшая логика SSHGuard состоит в блокировке очередного IP-адреса на 120, 240 и 480 секунд:
# less auth.log | grep Blocking Apr 13 13:48:04 main sshguard[800]: Blocking "151.177.150.97/32" for 120 secs (3 attacks in 2 secs, after 1 abuses over 2 secs.) Apr 13 14:07:14 main sshguard[800]: Blocking "81.17.25.50/32" for 120 secs (3 attacks in 1 secs, after 1 abuses over 1 secs.) Apr 13 14:10:02 main sshguard[800]: Blocking "81.17.25.50/32" for 240 secs (3 attacks in 2 secs, after 2 abuses over 169 secs.) Apr 13 14:14:35 main sshguard[800]: Blocking "81.17.25.50/32" for 480 secs (3 attacks in 1 secs, after 3 abuses over 442 secs.)