SSHGuard + Port Knocking: двойная защита SSH от брутфорса
Защита SSH от брутфорс-атак — критична для целостности сервера. Две связки инструментов — SSHGuard и Port Knocking — резко снижают число попыток несанкционированного доступа и дают многослойную защиту. Разберём настройку обоих на Ubuntu.
Зачем сочетать SSHGuard и Port Knocking
SSHGuard — как охранник у двери: замечает подозрительные попытки входа и банит нарушителей. Port Knocking — как секретное рукопожатие: сервер открывает дверь только при правильной последовательности «стуков».
Вместе они дают:
- Защиту от брутфорса в реальном времени.
- Скрытую точку входа — лишний слой скрытности.
- Автоматическую блокировку вредоносных IP.
- Гибкую интеграцию с фаерволом (UFW или iptables).
Настройка SSHGuard
SSHGuard следит за логами на предмет повторных неудачных попыток входа и автоматически банит IP-нарушителей.
1. Установка
sudo apt install sshguard
2. Включение и запуск сервиса
sudo systemctl enable --now sshguard.service
3. Конфигурация
Открой конфиг:
sudo nano /etc/sshguard/sshguard.conf
Ключевые параметры:
BACKEND— бэкенд фаервола (sshg-fw-nft-setsдля nftables,sshg-fw-iptablesдля iptables).LOGREADER— способ обработки логов.THRESHOLD— число неудачных попыток до блокировки IP.BLOCK_TIME— длительность блокировки (в секундах).DETECTION_TIME— окно отслеживания неудачных попыток.WHITELIST_FILE— путь к списку доверенных IP, которые никогда не блокируются.
После изменений перезапусти сервис:
sudo systemctl restart sshguard
Интеграция SSHGuard с фаерволом
Вариант 1 — SSHGuard + UFW
Укажи бэкенд:
/usr/libexec/sshguard/sshg-fw-nft-sets
Отредактируй правила UFW:
sudo nano /etc/ufw/before.rules
Добавь:
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD
Перезапусти UFW:
sudo systemctl restart ufw
Вариант 2 — SSHGuard + iptables
Создай цепочку:
sudo iptables -N sshguard
Перенаправь SSH-трафик в неё:
sudo iptables -A INPUT -p tcp --dport 22 -j sshguard
Сохрани правила:
sudo apt install iptables-persistent
sudo iptables-save -f /etc/iptables/rules.v4
Посмотреть заблокированные IP:
sudo iptables -L sshguard -n
Белый список доверенных IP
Добавь безопасные адреса в:
/etc/sshguard/whitelist
Пример содержимого:
192.168.0.34
192.168.0.0/24
myhost.domain.com
Перезапусти SSHGuard:
sudo systemctl restart sshguard
Настройка Port Knocking
Port Knocking добавляет слой защиты — SSH-порт остаётся закрытым, пока не придёт строго определённая последовательность «стуков» по портам.
1. Установка knockd
sudo apt install knock-server
2. Управление сервисом
sudo systemctl start knockd
sudo systemctl enable knockd
3. Подготовка правил фаервола
Разреши уже установленные соединения:
iptables -A INPUT -i <interface> -m state --state ESTABLISHED,RELATED -j ACCEPT
Заблокируй новые по умолчанию:
iptables -A INPUT -j DROP
4. Конфигурация knockd
Открой конфиг:
sudo nano /etc/knockd.conf
Пример:
[options]
logfile = /var/log/knockd.log
interface = eth0
[openSSH]
sequence = 661,671,681
seq_timeout = 5
tcpflags = syn
cmd_timeout = 30
start_command = /sbin/iptables -I INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
stop_command = /sbin/iptables -D INPUT -i eth0 -s %IP% -p tcp --dport 22 -j ACCEPT
Перезапусти knockd:
sudo systemctl restart knockd
Подключение через Port Knocking
С клиента:
knock target.host 661 671 681
ssh [email protected]
Если последовательность совпала — SSH-порт временно откроется.
Итог
Связка SSHGuard + Port Knocking даёт многослойную защиту:
- Брутфорс не пройдёт — за повторные неудачи IP сразу банится.
- Атакующий даже не увидит открытый SSH-порт, пока не знает правильную последовательность стуков.
Совет по безопасности: обязательно дополни эти инструменты SSH-ключами, отключённым root-логином и актуальными правилами фаервола.
Начни с SSHGuard, добавь Port Knocking — и спи спокойно, зная, что двери сервера действительно под охраной.
Если хочешь обсудить похожую задачу — пиши на [email protected] или заходи на 1it.pro.