SSHGuard

Материал из BSD Howto
Перейти к навигации Перейти к поиску

Установка 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 без "&". Добавлено одно запрещающее правило:

# ipfw show
65535   4   400 deny ip from any to any

Правильный запуск прервёт текущий сеанс SSH, но выполнение запуска IPFW будет продолжено. Перед запрещающим весь трафик правилом добавлено разрешающее правило с номером "65000" и несколько других правил:

# 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 секунд (время блокировок настраивается в файле /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.)
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.)

Т.к. с этого адреса прекратились атаки, он так-же пока разблокирован:

# less auth.log | grep unblocking
Apr 13 13:50:30 main sshguard[800]: 151.177.150.97: unblocking after 146 secs
Apr 13 14:09:55 main sshguard[800]: 81.17.25.50: unblocking after 161 secs
Apr 13 14:14:32 main sshguard[800]: 81.17.25.50: unblocking after 270 secs
Apr 13 14:22:54 main sshguard[800]: 81.17.25.50: unblocking after 499 secs