SSHGuard: различия между версиями
Igor (обсуждение | вклад) Новая страница: «== Установка security/sshguard == SSHGuard - инструмент для защиты хостов от атак на SSH и другие сервисы. SSHGuard проверяет сообщения журналов приложений, на основании которых определяет возможные атаки на сетевые службы. Затем блокирует IP-адреса тех, кто пытался злоуп...» |
Igor (обсуждение | вклад) |
||
| (не показано 10 промежуточных версий этого же участника) | |||
| Строка 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 | ipfw add 5000 deny log all from table\(22\) to any | ||
SSHGuard, установленный из пакета проверяет два файла: | SSHGuard, установленный из пакета проверяет два файла: | ||
| Строка 122: | Строка 124: | ||
SSHGuard в соответствии с данной строкой настройки обнаруживает неудачные попытки аутентификации по SSH, зафиксированные в файле журнала /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 | |||
Текущая версия от 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