SSHGuard: различия между версиями

Материал из BSD Howto
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 9 промежуточных версий этого же участника)
Строка 69: Строка 69:
Символ "&" в данном случае необходим. Без него будет добавлено единственное правило IPFW, запрещающее весь трафик, и дальнейшее выполнение скрипта запуска IPFW будет прекращено (в случае удалённого управления, например по SSH).
Символ "&" в данном случае необходим. Без него будет добавлено единственное правило IPFW, запрещающее весь трафик, и дальнейшее выполнение скрипта запуска IPFW будет прекращено (в случае удалённого управления, например по SSH).


Проверка на консоли:
Проверка на консоли результата запуска IPFW без "&". Добавлено одно запрещающее правило:
  # ipfw show
  # ipfw show
  65535  4  400 deny ip from any to any
  65535  4  400 deny ip from any to any


Правильный запуск прервёт текущий сеанс SSH, но выполнение запуска IPFW будет продолжено:
Правильный запуск прервёт текущий сеанс SSH, но выполнение запуска IPFW будет продолжено. Перед запрещающим весь трафик правилом добавлено разрешающее правило с номером "65000" и несколько других правил:
  # ipfw show
  # ipfw show
  00100  0    0 allow ip from any to any via lo0
  00100  0    0 allow ip from any to any via lo0
Строка 91: Строка 91:
  # sysrc sshguard_enable="YES"
  # sysrc sshguard_enable="YES"
  sshguard_enable:  -> YES
  sshguard_enable:  -> YES
== Пример настройки SSHGuard для IPFW ==


Установка способа ограничения доступа к сетевым сервисам с помощью IPFW в файле настройки /usr/local/etc/sshguard.conf:
Установка способа ограничения доступа к сетевым сервисам с помощью IPFW в файле настройки /usr/local/etc/sshguard.conf:
Строка 115: Строка 117:
Добавление запрещающего правила на основе таблицы "22" IPFW в автозапуск с помощью /etc/rc.local:
Добавление запрещающего правила на основе таблицы "22" IPFW в автозапуск с помощью /etc/rc.local:
  #!/bin/sh
  #!/bin/sh
  ipfw add 5000 deny ip from table\(22\) to any
  ipfw add 5000 deny log all from table\(22\) to any


SSHGuard, установленный из пакета проверяет два файла:
SSHGuard, установленный из пакета проверяет два файла:
Строка 123: Строка 125:
SSHGuard в соответствии с данной строкой настройки обнаруживает неудачные попытки аутентификации по SSH, зафиксированные в файле журнала /var/log/auth.log. И разбирает обращения к почтовому сервису в основной ОС, записанные в файле журнала /var/log/maillog
SSHGuard в соответствии с данной строкой настройки обнаруживает неудачные попытки аутентификации по SSH, зафиксированные в файле журнала /var/log/auth.log. И разбирает обращения к почтовому сервису в основной ОС, записанные в файле журнала /var/log/maillog


Пример работы SSHGuard. Он проверяет содержимое файла /var/log/auth.log:
== Пример работы SSHGuard ==
  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]
SSHGuard проверяет содержимое файла /var/log/auth.log:
  Apr 13 13:48:02 main sshd[1095]: error: maximum authentication attempts exceeded for root from 151.177.150.97 port 45172 ssh2 [preauth]
  Jul  6 18:48:20 main sshd[18686]: Invalid user admin from 78.128.112.74 port 34208
  Apr 13 13:48:02 main sshguard[800]: Attack from "151.177.150.97" on service SSH with danger 10.
  Jul  6 18:48:20 main sshguard[5287]: Attack from "78.128.112.74" 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]
  Jul  6 18:48:20 main sshd[18686]: Connection closed by invalid user admin 78.128.112.74 port 34208 [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]
  Jul  6 18:48:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 2.
  Apr 13 13:48:03 main sshguard[800]: Attack from "151.177.150.97" on service SSH with danger 10.
  Jul  6 20:57:25 main sshd[19310]: reverse mapping checking getaddrinfo for ip-112-74.4vendeta.com [78.128.112.74] failed.
  Apr 13 13:48:03 main sshd[1097]: Disconnecting authenticating user root 151.177.150.97 port 45402: Too many authentication failures [preauth]
  Jul  6 20:57:26 main sshd[19310]: Invalid user admin from 78.128.112.74 port 36742
  Apr 13 13:48:04 main sshd[1099]: Received disconnect from 151.177.150.97 port 45540:11: disconnected by user [preauth]
  Jul  6 20:57:26 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
  Apr 13 13:48:04 main sshd[1099]: Disconnected from authenticating user root 151.177.150.97 port 45540 [preauth]
  Jul  6 20:57:26 main sshguard[5287]: Blocking "78.128.112.74/32" for 960 secs (3 attacks in 7746 secs, after 5 abuses over 69267 secs.)
  Apr 13 13:48:04 main sshguard[800]: Attack from "151.177.150.97" on service SSH with danger 10.
Jul  6 21:13:27 main sshguard[5287]: 78.128.112.74: unblocking after 961 secs
  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
Из файла журнала видно, что SSHGuard считает количество зафиксированных опасностей (danger 10+2+10=22). И при превышении порогового значения, указанного в параметре THRESHOLD файла настройки /usr/local/etc/sshguard.conf, вносит IP злодея в таблицу "22", после чего он блокируется IPFW. В данном случае был THRESHOLD=20. По умолчанию - THRESHOLD=30. Т.к. порог количества блокировок не был достигнут, то блокировка временная. В данном случае на 960 секунд. Начальное время блокировки устанавливается параметром BLOCK_TIME файла настройки /usr/local/etc/sshguard.conf. Время каждой последующей блокировки увеличивается. По прошествии времени IP разблокируется.
  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]
  Jul  6 23:05:20 main sshd[22673]: reverse mapping checking getaddrinfo for ip-112-74.4vendeta.com [78.128.112.74] failed.
  Apr 13 13:49:53 main sshguard[800]: Attack from "45.135.193.100" on service SSH with danger 2.
  Jul  6 23:05:20 main sshd[22673]: Invalid user admin from 78.128.112.74 port 58474
  Apr 13 13:50:30 main sshguard[800]: 151.177.150.97: unblocking after 146 secs
  Jul  6 23:05:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
  Jul 6 23:05:20 main sshd[22673]: Connection closed by invalid user admin 78.128.112.74 port 58474 [preauth]
  Jul  6 23:05:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 2.
Jul  7 01:12:20 main sshd[23322]: reverse mapping checking getaddrinfo for ip-112-74.4vendeta.com [78.128.112.74] failed.
  Jul  7 01:12:20 main sshd[23322]: Invalid user admin from 78.128.112.74 port 32880
  Jul  7 01:12:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
  Jul  7 01:12:20 main sshguard[5287]: Blocking "78.128.112.74/32" forever (3 attacks in 7620 secs, after 6 abuses over 84561 secs.)
 
В данном случае после достижения порога количества блокировок SSHGuard блокирует IP навсегда (forever).
 
Проверить это можно так:
# less /var/db/sshguard/blacklist.db
1751839940|100|4|78.128.112.74
 
Теперь после каждого старта SSHGuard будет добавлять IP из данного чёрного списка в таблицу "22", не дожидаясь атак:
# ipfw table 22 list
78.128.112.74/32 0
 
IPFW будет сообщать об атаках в файле /var/log/security:
Jul  7 11:54:32 main kernel: ipfw: 5000 Deny TCP 78.128.112.74:44818 <my IP> in via re0

Текущая версия от 12:01, 7 июля 2025

Установка 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

Пример настройки SSHGuard для IPFW

Установка способа ограничения доступа к сетевым сервисам с помощью 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 log all 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

SSHGuard проверяет содержимое файла /var/log/auth.log:

Jul  6 18:48:20 main sshd[18686]: Invalid user admin from 78.128.112.74 port 34208
Jul  6 18:48:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
Jul  6 18:48:20 main sshd[18686]: Connection closed by invalid user admin 78.128.112.74 port 34208 [preauth]
Jul  6 18:48:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 2.
Jul  6 20:57:25 main sshd[19310]: reverse mapping checking getaddrinfo for ip-112-74.4vendeta.com [78.128.112.74] failed.
Jul  6 20:57:26 main sshd[19310]: Invalid user admin from 78.128.112.74 port 36742
Jul  6 20:57:26 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
Jul  6 20:57:26 main sshguard[5287]: Blocking "78.128.112.74/32" for 960 secs (3 attacks in 7746 secs, after 5 abuses over 69267 secs.)
Jul  6 21:13:27 main sshguard[5287]: 78.128.112.74: unblocking after 961 secs

Из файла журнала видно, что SSHGuard считает количество зафиксированных опасностей (danger 10+2+10=22). И при превышении порогового значения, указанного в параметре THRESHOLD файла настройки /usr/local/etc/sshguard.conf, вносит IP злодея в таблицу "22", после чего он блокируется IPFW. В данном случае был THRESHOLD=20. По умолчанию - THRESHOLD=30. Т.к. порог количества блокировок не был достигнут, то блокировка временная. В данном случае на 960 секунд. Начальное время блокировки устанавливается параметром BLOCK_TIME файла настройки /usr/local/etc/sshguard.conf. Время каждой последующей блокировки увеличивается. По прошествии времени IP разблокируется.

Jul  6 23:05:20 main sshd[22673]: reverse mapping checking getaddrinfo for ip-112-74.4vendeta.com [78.128.112.74] failed.
Jul  6 23:05:20 main sshd[22673]: Invalid user admin from 78.128.112.74 port 58474
Jul  6 23:05:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
Jul  6 23:05:20 main sshd[22673]: Connection closed by invalid user admin 78.128.112.74 port 58474 [preauth]
Jul  6 23:05:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 2.
Jul  7 01:12:20 main sshd[23322]: reverse mapping checking getaddrinfo for ip-112-74.4vendeta.com [78.128.112.74] failed.
Jul  7 01:12:20 main sshd[23322]: Invalid user admin from 78.128.112.74 port 32880
Jul  7 01:12:20 main sshguard[5287]: Attack from "78.128.112.74" on service SSH with danger 10.
Jul  7 01:12:20 main sshguard[5287]: Blocking "78.128.112.74/32" forever (3 attacks in 7620 secs, after 6 abuses over 84561 secs.)

В данном случае после достижения порога количества блокировок SSHGuard блокирует IP навсегда (forever).

Проверить это можно так:

# less /var/db/sshguard/blacklist.db
1751839940|100|4|78.128.112.74

Теперь после каждого старта SSHGuard будет добавлять IP из данного чёрного списка в таблицу "22", не дожидаясь атак:

# ipfw table 22 list
78.128.112.74/32 0

IPFW будет сообщать об атаках в файле /var/log/security:

Jul  7 11:54:32 main kernel: ipfw: 5000 Deny TCP 78.128.112.74:44818 <my IP> in via re0