sshguard
sshguard — это система предотвращения вторжений, которая разбирает логи сервера, определяет подозрительную активность и затем использует системный межсетевой экран, чтобы блокировать IP-адреса злонамеренных подключений. sshguard написан на C, поэтому он не нагружает систему.
Как это работает
sshguard является простой службой, которая постоянно отслеживает изменения в одном или нескольких файлах лога. Она разбирает события, которые демоны посылают в случае неудавшихся попыток входа в систему, а затем, с помощью обновлений правил межсетевого экрана, блокирует любые дальнейшие попытки от данных подключений.
Несмотря на название, sshguard разбирает не только логи SSH. Он также поддерживает многие почтовые системы, а также некоторые системы FTP. Полный список поддерживаемых устройств можно найти на сайте программы.
Установка
Emerge
Установите app-admin/sshguard:
root #
emerge --ask app-admin/sshguard
Additional software
Depending on the init system and the desired firewall backend to be used by sshguard, additional software may be required to be emerged in order for sshguard to block malicious actors.
More information on various supported backends can be found by reading the setup manpage:
root #
man 7 sshguard-setup
iptables
Также удостоверьтесь, что пакет net-firewall/iptables установлен и используется в качестве системного межсетевого экрана. Во время написания данной статьи, sshguard еще не поддерживал net-firewall/nftables.
root #
emerge --ask net-firewall/iptables
Более детальная информация по использованию и настройке IPtable может быть найдена в соответствующей статье.
nftables
When nftables are being used as the system firewall:
root #
emerge --ask net-firewall/nftables
Конфигурация
iptables backend
Подготовка межсетевого экрана
Когда sshguard блокирует какого-либо злонамеренного пользователя (блокируя его IP-адрес), он будет использовать цепочку sshguard.
Подготовьте цепочку и удостоверьтесь, что она вызывается при обнаружении новых входящих соединений:
root #
iptables -N sshguard
root #
iptables -A INPUT -j sshguard
Then verify that the appropriate path to the iptables backend library is set in /etc/sshguard.conf:
# Full path to backend executable (required, no default)
BACKEND="/usr/libexec/sshg-fw-iptables"
Просмотр лог-файлов
Основная идея sshguard в том, что администратор указывает приложению отслеживаемые файлы логов через параметры командной строки. Как такового файла конфигурации для sshguard не существует.
В Gentoo параметры лучше всего определять в файле /etc/sshguard.conf:
PARDONTIME="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}"
Убедитесь в том, что файлы логов доступны пользователю, от имени которого работает sshguard.
Сервисы
OpenRC
Чтобы sshguard запускался при старте системы, добавьте его в уровень запуска default, после чего запустите его:
root #
rc-update add sshguard default
root #
rc-service sshguard start
systemd
Use systemd's conventional way to enable it, and then start it:
root #
systemctl enable sshguard
root #
systemctl restart sshguard
Занесение хостов в черный список (blacklist)
Когда используется черный список, после серии неудачных попыток IP-адрес атакующего будет заблокирован перманентно. Черный список подгружается после каждой загрузки, а также будет расширятся новыми записями в процессе работы. sshguard добавляет туда новые адреса, после превышения порога "злоупотребления".
Адреса из черного списка никогда не выходят из него (не разрешаются) снова.
Чтобы задействовать черный список, создайте соответствующий каталог и файл:
root #
mkdir -p /var/lib/sshguard
root #
touch /var/lib/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.
127.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:
PARDONTIME="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}"
Перезапустите 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 может хватить:
log { 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
Смотрите также
Внешние ресурсы
Документация по sshguard дает всю необходимую информацию для дальнейшей настройки приложения.