Skip to main content

Руководство по установке и настройке SSHGuard для начинающих

image.png

Что такое SSHGuard?

SSHGuard — это программа, которая автоматически защищает ваш сервер от атак злоумышленников. Она работает очень просто: следит за попытками входа в систему и блокирует IP-адреса тех, кто пытается подобрать пароли.

Зачем это нужно?

Кибератаки происходят каждые 39 секунд. Ваш сервер постоянно атакуют боты, которые пытаются подобрать пароли к SSH. SSHGuard автоматически блокирует таких злоумышленников.

Основные преимущества:

  • Легкий — потребляет всего 4-8 МБ памяти
  • Быстрый — блокирует атакующих менее чем за 1 секунду
  • Простой — не требует сложной настройки
  • Надежный — блокирует 99% brute force атак

Как работает SSHGuard?

  1. Читает логи — следит за файлами, где записываются попытки входа
  2. Анализирует — считает неудачные попытки входа
  3. Блокирует — добавляет IP злоумышленника в firewall
  4. Разблокирует — через некоторое время снимает блокировку

Система оценки атак

Каждая атака получает "баллы":

  • Неудачная попытка SSH = 10 баллов
  • При достижении 30 баллов = блокировка на 2 минуты
  • Повторная атака = блокировка на 3 минуты, потом на 4.5 минуты и так далее

Установка SSHGuard

Шаг 1: Обновление системы

Сначала обновите систему:

# Для Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

# Для CentOS/RHEL/Fedora
sudo dnf update -y

Шаг 2: Установка SSHGuard

# Для Ubuntu/Debian
sudo apt install sshguard -y

# Для CentOS/RHEL/Fedora
sudo dnf install epel-release -y
sudo dnf install sshguard -y

Шаг 3: Проверка установки

# Проверяем версию
sshguard -v

# Должно показать что-то вроде: sshguard 2.5.0

Базовая настройка

Создание конфигурационного файла

Откройте файл настроек:

sudo nano /etc/sshguard.conf

Вставьте базовую конфигурацию:

# === Откуда читать логи ===
LOGREADER="LANG=C /bin/journalctl -afb -p info -n1 -o cat SYSLOG_FACILITY=4 SYSLOG_FACILITY=10"

# === Какой firewall использовать ===
BACKEND="/usr/lib/x86_64-linux-gnu/sshg-fw-iptables"

# === Настройки блокировки ===
THRESHOLD=30          # Сколько баллов нужно для блокировки
BLOCK_TIME=120       # На сколько секунд блокировать (2 минуты)
DETECTION_TIME=1800  # Через сколько "забыть" атакующего (30 минут)

# === Белый список ===
WHITELIST_FILE=/etc/sshguard/whitelist

Создание белого списка

Создайте папку и файл для белого списка:

sudo mkdir -p /etc/sshguard
sudo nano /etc/sshguard/whitelist

Добавьте адреса, которые никогда не должны блокироваться:

# Локальные адреса
127.0.0.1
::1

# Ваш домашний IP (узнайте на whatismyip.com)
203.0.113.50

# Офисная сеть
192.168.1.0/24

# Доверенные серверы
backup.example.com
admin.example.com

Настройка Firewall

Для систем с iptables (большинство серверов)

# Создаем цепочку для SSHGuard
sudo iptables -N sshguard

# Подключаем к основной цепочке
sudo iptables -I INPUT -j sshguard

# Сохраняем правила
# Для Ubuntu/Debian:
sudo iptables-save > /etc/iptables/rules.v4

# Для CentOS/RHEL:
sudo service iptables save

Для систем с UFW (Ubuntu Desktop)

# Редактируем правила UFW
sudo nano /etc/ufw/before.rules

Найдите секцию с loopback и добавьте ПОСЛЕ НЕЕ:

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# SSHGuard integration (ДОБАВИТЬ ЭТИ СТРОКИ)
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

Затем перезапустите UFW:

sudo ufw reload

Для систем с firewalld (CentOS/RHEL/Fedora)

# Создаем правило для блокировки
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

# Применяем изменения
sudo firewall-cmd --reload

Запуск и проверка

Запуск SSHGuard

# Запускаем сервис
sudo systemctl start sshguard

# Включаем автозапуск
sudo systemctl enable sshguard

# Проверяем статус
sudo systemctl status sshguard

Вы должны увидеть что-то вроде:

● sshguard.service - SSHGuard
   Loaded: loaded (/lib/systemd/system/sshguard.service; enabled)
   Active: active (running) since Tue 2025-07-01 10:00:00 UTC; 5min ago

Проверка работы

# Смотрим логи SSHGuard
sudo journalctl -u sshguard -f

# Проверяем заблокированные IP
sudo iptables -L sshguard -n -v

Тестирование

Простой тест

  1. С другого компьютера попробуйте подключиться к серверу с неправильным паролем несколько раз
  2. После 3-4 неудачных попыток ваш IP должен заблокироваться
  3. Проверьте логи:
sudo journalctl -u sshguard | grep "Blocking"

Вы должны увидеть что-то вроде:

Jul 01 10:05:30 server sshguard[1234]: Blocking "192.168.1.100/32" for 120 secs

Мониторинг и обслуживание

Полезные команды для мониторинга

# Посмотреть все заблокированные IP
sudo iptables -L sshguard -n | grep DROP

# Посмотреть статистику за последний час
sudo journalctl -u sshguard --since "1 hour ago" | grep -c "Blocking"

# Посмотреть последние атаки
sudo journalctl -u sshguard | tail -20 | grep "Attack"

Разблокировка IP вручную

Если случайно заблокировали нужный IP:

# Найдите правило
sudo iptables -L sshguard -n --line-numbers

# Удалите правило (замените X на номер строки)
sudo iptables -D sshguard X

# Или добавьте IP в белый список и перезапустите sshguard
echo "192.168.1.100" | sudo tee -a /etc/sshguard/whitelist
sudo systemctl restart sshguard

Настройка для разных сценариев

Для домашнего сервера (мягкие настройки)

# В файле /etc/sshguard.conf
THRESHOLD=50         # Больше попыток до блокировки
BLOCK_TIME=60       # Короткая блокировка (1 минута)
DETECTION_TIME=600  # Быстро "забываем" (10 минут)

Для production сервера (жесткие настройки)

# В файле /etc/sshguard.conf
THRESHOLD=20         # Мало попыток до блокировки
BLOCK_TIME=300      # Долгая блокировка (5 минут)
DETECTION_TIME=3600 # Долго "помним" (1 час)

Для сервера разработки

# Добавьте в whitelist всех разработчиков
# /etc/sshguard/whitelist
192.168.1.0/24      # Вся офисная сеть
10.0.0.0/8          # VPN сеть
developer1.com
developer2.com

Устранение проблем

SSHGuard не запускается

# Проверьте синтаксис конфигурации
sudo sshguard -t

# Проверьте логи ошибок
sudo journalctl -u sshguard | grep -i error

# Проверьте права доступа
ls -la /etc/sshguard/

Не блокирует атакующих

# Убедитесь, что firewall правила созданы
sudo iptables -L sshguard

# Проверьте, читает ли логи
sudo journalctl -u sshguard | grep -i "reading"

# Проверьте, видит ли атаки
sudo journalctl -u sshguard | grep -i "attack"

Заблокировал себя

# Если есть физический доступ к серверу:
sudo iptables -F sshguard
sudo systemctl restart sshguard

# Добавьте свой IP в whitelist:
echo "ВАШ_IP" | sudo tee -a /etc/sshguard/whitelist
sudo systemctl restart sshguard

Интеграция с веб-серверами

Защита Apache/Nginx

Если на сервере работает веб-сервер, можно защитить и его:

# Добавьте в LOGREADER (в /etc/sshguard.conf)
LOGREADER="LANG=C /bin/journalctl -afb -p info -n1 -o cat SYSLOG_FACILITY=4 SYSLOG_FACILITY=10; tail -f /var/log/apache2/access.log /var/log/nginx/access.log"

SSHGuard будет блокировать IP, которые:

  • Атакуют SSH
  • Атакуют wp-login.php (WordPress)
  • Атакуют phpMyAdmin
  • Проводят сканирование портов

Автоматизация и скрипты

Скрипт проверки статуса

Создайте файл check_sshguard.sh:

#!/bin/bash
echo "=== SSHGuard Status Report ==="
echo "Service Status: $(systemctl is-active sshguard)"
echo "Version: $(sshguard -v 2>/dev/null || echo 'Unknown')"
echo "Blocked IPs: $(iptables -L sshguard -n 2>/dev/null | grep -c DROP || echo '0')"
echo "Attacks today: $(journalctl -u sshguard --since today | grep -c 'Attack' || echo '0')"
echo "Blocks today: $(journalctl -u sshguard --since today | grep -c 'Blocking' || echo '0')"

Сделайте исполняемым и запускайте:

chmod +x check_sshguard.sh
./check_sshguard.sh

Еженедельная очистка старых блокировок

Создайте cron задачу:

# Редактируем crontab
sudo crontab -e

# Добавляем строку (очистка каждое воскресенье в 3:00)
0 3 * * 0 /usr/sbin/iptables -F sshguard && /bin/systemctl restart sshguard

Заключение

SSHGuard — это простой и эффективный способ защитить ваш сервер от атак. После установки он работает автоматически и не требует постоянного внимания.

Что вы получили:

  • Автоматическую защиту от brute force атак
  • Блокировку подозрительных IP адресов
  • Логирование всех атак
  • Минимальную нагрузку на сервер

Не забывайте:

  • Регулярно проверять логи
  • Обновлять белый список при изменении инфраструктуры
  • Делать резервные копии конфигурации
  • Мониторить работу системы

Следующие шаги:

  • Настройте мониторинг через email уведомления
  • Интегрируйте с системой централизованного логирования
  • Рассмотрите возможность использования Fail2Ban для более сложных сценариев