This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Sshguard
sshguard — это система предотвращения вторжений, которая разбирает логи сервера, определяет подозрительную активность и затем использует системный межсетевой экран, чтобы блокировать IP-адреса злонамеренных подключений. sshguard написан на C, поэтому он не нагружает систему.
Как это работает
sshguard является простой службой, которая постоянно отслеживает изменения в одном или нескольких файлах лога. Она разбирает события, которые демоны посылают в случае неудавшихся попыток входа в систему, а затем, с помощью обновлений правил межсетевого экрана, блокирует любые дальнейшие попытки от данных подключений.
Несмотря на название, sshguard разбирает не только логи SSH. Он также поддерживает многие почтовые системы, а также некоторые системы FTP. Полный список поддерживаемых устройств можно найти на сайте программы.
Установка
Emerge
Установите app-admin/sshguard:
root #
emerge --ask app-admin/sshguard
Также удостоверьтесь, что пакет net-firewall/iptables установлен и используется в качестве системного межсетевого экрана. Во время написания данной статьи, sshguard еще не поддерживал net-firewall/nftables.
root #
emerge --ask net-firewall/iptables
Более детальная информация по использованию и настройке IPtable может быть найдена в соответствующей статье.
Конфигурация
Подготовка межсетевого экрана
Когда sshguard блокирует какого-либо злонамеренного пользователя (блокируя его IP-адрес), он будет использовать цепочку sshguard.
Подготовьте цепочку и удостоверьтесь, что она вызывается при обнаружении новых входящих соединений:
root #
iptables -N sshguard
root #
iptables -A INPUT -j sshguard
Просмотр лог-файлов
Основная идея sshguard в том, что администратор указывает приложению отслеживаемые файлы логов через параметры командной строки. Как такового файла конфигурации для sshguard не существует.
В Gentoo параметры лучше всего определять в файле /etc/conf.d/sshguard:
/etc/conf.d/sshguard
Настраиваем sshguard на чтение /var/log/messagesPARDONTIME="3600" # Блокировать на 1 час (3600 секунд) WATCHTIME="360" # Отслеживать IP-адрес в течение 5 минут (360 секунд) THRESHOLD="10" # Сколько нужно неудачных попыток для срабатывания блокировки LOGFILES="-l /var/log/messages" # Следить за этим файлом... LOGFILES="${LOGFILES} -l /var/log/auth.log" # И за этим тоже SSHGUARD_OPTS="-p ${PARDONTIME} -s ${WATCHTIME} -a ${THRESHOLD} ${LOGFILES}"
- Space-separated list of log files to monitor. (optional, no default)
FILES="/var/log/messages /var/log/auth.log"
- How many problematic attempts trigger a block
THRESHOLD=10
- Blocks last at least 24 hours (60480 seconds)
BLOCKTIME=60480
- Track IP addresses for 24 hours (60480 seconds)
DETECTION_TIME=60480
- IPv6 subnet size to block. Defaults to a single address, CIDR notation. (optional, default to 128)
IPV6_SUBNET=64
- IPv4 subnet size to block. Defaults to a single address, CIDR notation. (optional, default to 32)
IPV4_SUBNET=24
- Full path to PID file (optional, no default)
PID_FILE=/run/sshguard.pid }}
Убедитесь в том, что файлы логов доступны пользователю, от имени которого работает sshguard.
Сервисы
OpenRC
Чтобы sshguard запускался при старте системы, добавьте его в уровень запуска default, после чего запустите его:
root #
rc-update add sshguard default
root #
rc-service sshguard start
Занесение хостов в черный список (blacklist)
Когда используется черный список, после серии неудачных попыток IP-адрес атакующего будет заблокирован перманентно. Черный список подгружается после каждой загрузки, а также будет расширятся новыми записями в процессе работы. sshguard добавляет туда новые адреса, после превышения порога "злоупотребления".
Адреса из черного списка никогда не выходят из него (не разрешаются) снова.
Чтобы задействовать черный список, создайте соответствующий каталог и файл:
root #
mkdir -p /var/db/sshguard
root #
touch /var/db/sshguard/blacklist.db
While defining a blacklist it is important to exclude trusted IP networks and hosts in a whitelist.
To enable whitelisting, create an appropriate directory and file:
root #
mkdir -p /etc/sshguard
root #
touch /etc/sshguard/whitelist
The whitelist has to include the loopback interface, and should have at least 1 IP trusted network f.e. 192.0.2.0/24.
/etc/sshguard/whitelist
Whitelisting trusted networks127.0.0.0/8 ::1/128 192.0.2.0/24
The 192.0.2.0/24 entry has to be adjusted to fit the own needs.
Добавьте файл blacklist в конфигурацию и измените переменную SSHGUARD_OPTS:
/etc/conf.d/sshguard
Настраиваем sshguard для использования blacklistPARDONTIME="3600" # Блокировать на 1 час (3600 секунд) WATCHTIME="360" # Отслеживать IP-адрес в течение 5 минут (360 секунд) THRESHOLD="10" # Сколько нужно неудачных попыток для срабатывания блокировки BLACKLIST="/var/db/sshguard/blacklist.db" # Заблокированные адреса попадают в этот файл LOGFILES="-l /var/log/messages" # Следить за этим файлом... LOGFILES="${LOGFILES} -l /var/log/auth.log" # И за этим тоже SSHGUARD_OPTS="-b 50:${BLACKLIST} -p ${PARDONTIME} -s ${WATCHTIME} -a ${THRESHOLD} ${LOGFILES}"
THRESHOLD=10 BLOCK_TIME=43200 DETECTION_TIME=604800
IPV4_SUBNET=24 IPV6_SUBNET=64
PID_FILE=/run/sshguard.pid
- Add following lines
BLACKLIST_FILE=10:/var/lib/sshguard/blacklist.db WHITELIST_FILE=/etc/sshguard/whitelist }}
Перезапустите sshguard, чтобы изменения вступили в силу:
root #
/etc/init.d/sshguard restart
Устранение проблем
File '/var/log/auth.log' vanished while adding!
При запуске, sshguard показывает следующую ошибку:
Sep 23 03:39:11 foo.bar.com sshguard[64933]: File '/var/log/auth.log' vanished while adding!
Такая ошибка (путь до файл может быть различным) происходит, когда целевой файл не доступен в системе. Убедитесь, что он создан, или измените конфигурацию sshguard так, чтобы не следить за этим файлом.
На системах с OpenRC и syslog-ng, следующего дополнения к syslog-ng.conf может хватить:
/etc/syslog-ng/syslog-ng.conf
создание файла auth.loglog { source(src); destination(messages); }; log { source(src); destination(console_all); }; destination authlog {file("/var/log/auth.log"); }; filter f_auth { facility(auth); }; filter f_authpriv { facility(auth, authpriv); }; log { source(src); filter(f_authpriv); destination(authlog); };
Перезагрузите конфигурацию, чтобы изменения вступили в силу:
root #
rc-service syslog-ng reload
Смотрите также
- Iptables, информация по установке и настройке iptables в Gentoo
Внешние ресурсы
Документация по sshguard дает всю необходимую информацию для дальнейшей настройки приложения.