Руководство по установке и настройке SSHGuard для начинающих
Что такое SSHGuard?
SSHGuard — это программа, которая автоматически защищает ваш сервер от атак злоумышленников. Она работает очень просто: следит за попытками входа в систему и блокирует IP-адреса тех, кто пытается подобрать пароли.
Зачем это нужно?
Кибератаки происходят каждые 39 секунд. Ваш сервер постоянно атакуют боты, которые пытаются подобрать пароли к SSH. SSHGuard автоматически блокирует таких злоумышленников.
Основные преимущества:
- Легкий — потребляет всего 4-8 МБ памяти
- Быстрый — блокирует атакующих менее чем за 1 секунду
- Простой — не требует сложной настройки
- Надежный — блокирует 99% brute force атак
Как работает SSHGuard?
- Читает логи — следит за файлами, где записываются попытки входа
- Анализирует — считает неудачные попытки входа
- Блокирует — добавляет IP злоумышленника в firewall
- Разблокирует — через некоторое время снимает блокировку
Система оценки атак
Каждая атака получает "баллы":
- Неудачная попытка 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
Тестирование
Простой тест
- С другого компьютера попробуйте подключиться к серверу с неправильным паролем несколько раз
- После 3-4 неудачных попыток ваш IP должен заблокироваться
- Проверьте логи:
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 для более сложных сценариев

No comments to display
No comments to display