Установка denyhosts в ОС FreeBSD 11.2

Задача:
---------------------------------------------------------------Установить и настроить защиту сервера от подбора паролей при помощи denyhosts
Устанавливаем при помощи pkg
pkg install denyhosts
или собираем из портов
cd /usr/ports/security/denyhosts && make install clean BATCH=yes
добавляем службу в автозагрузку
echo 'syslogd_flags="-c"' >> /etc/rc.conf echo 'denyhosts_enable="YES"' >> /etc/rc.conf
Правим конфиг /usr/local/etc/denyhosts.conf. Приведу только содержимое моего конфига, статей с описание параметров и так много.
root@ws1:/ # cat /usr/local/etc/denyhosts.conf | grep -v '^#' | sed '/^$/d' SECURE_LOG = /var/log/auth.log HOSTS_DENY = /etc/hosts.deniedssh PURGE_DENY = 2y BLOCK_SERVICE = sshd DENY_THRESHOLD_INVALID = 5 DENY_THRESHOLD_VALID = 7 DENY_THRESHOLD_ROOT = 1 DENY_THRESHOLD_RESTRICTED = 1 WORK_DIR = /usr/local/share/denyhosts/data SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES HOSTNAME_LOOKUP=NO LOCK_FILE = /var/run/denyhosts.pid ADMIN_EMAIL = admin@admin.admin SMTP_HOST = localhost SMTP_PORT = 25 SMTP_FROM = DenyHosts <nobody@localhost> SMTP_SUBJECT = DenyHosts Report ALLOWED_HOSTS_HOSTNAME_LOOKUP = YES AGE_RESET_VALID=5d AGE_RESET_ROOT=25d AGE_RESET_RESTRICTED=25d AGE_RESET_INVALID=10d USERDEF_FAILED_ENTRY_REGEX=[a|A]uthentication error for (?P<invalid>invalid user |illegal user )?(?P<user>.*?) from (::ffff:)?(?P<host>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) USERDEF_FAILED_ENTRY_REGEX=[a|A]uthentication error for (?P<invalid>invalid user |illegal user )?(?P<user>.*?) from (?P<host>.*) DAEMON_LOG = /var/log/denyhosts DAEMON_SLEEP = 30s DAEMON_PURGE = 1h root@ws1:/ #
Создадим файл в который denyhosts будет записывать заблокированные хосты. При установке этот файл не создаётся, поэтому придётся самому
touch /etc/hosts.deniedssh
Редактируем /etc/hosts.allow
vi /etc/hosts.allow
строка sshd : /etc/hosts.deniedssh : deny должна быть выше ALL : ALL : allow . Вот пример моего конфига без комментариев:
oot@ws1:/ # cat /etc/hosts.allow | grep -v '^#' | sed '/^$/d' sshd : /etc/hosts.deniedssh : deny ALL : ALL : allow ALL : PARANOID : RFC931 20 : deny ALL : localhost 127.0.0.1 : allow ALL : [::1] : allow sendmail : localhost : allow sendmail : ALL : allow exim : localhost : allow exim : ALL : allow rpcbind : ALL : deny ypserv : localhost : allow ypserv : ALL : deny ftpd : localhost : allow ftpd : ALL : allow fingerd : ALL \ : spawn (echo Finger. | \ /usr/bin/mail -s "tcpd\: %u@%h[%a] fingered me!" root) & \ : deny ALL : ALL \ : severity auth.info \ : twist /bin/echo "You are not welcome to use %d from %h." root@ws1:/ #
Запускаем denyhosts
root@ws1:/ # service denyhosts start Starting denyhosts. root@ws1:/ #
Если необходимо удалить заблокированный IP-адрес из DenyHosts, то первым делом останавливаем сервис:
root@ws1:/ # sh /usr/local/etc/rc.d/denyhosts stop Stopping denyhosts. root@ws1:/ #
необходимо из файла /etc/hosts.deniedssh удалить заблокированный адрес (на примере: 92.246.76.85). Командой grep можно проверить наличие IP-адреса в файле:
root@ws1:/ # grep 92.246.76.85 /etc/hosts.deniedssh # DenyHosts: Thu Feb 5 15:06:22 2019 | sshd: 92.246.76.85 : deny sshd: 92.246.76.85 : deny root@ws1:/ #
Также необходимо подправить файлы в директории /usr/local/share/denyhosts/data/
- /usr/local/share/denyhosts/data/hosts
- /usr/local/share/denyhosts/data/hosts-restricted
- /usr/local/share/denyhosts/data/hosts-root
- /usr/local/share/denyhosts/data/hosts-valid
- /usr/local/share/denyhosts/data/user-hosts
Для поиска, также можно воспользоваться grep
root@ws1:/ # grep 92.246.76.85 /usr/local/share/denyhosts/data/* /usr/local/share/denyhosts/data/hosts:92.246.76.85:5:Sun Feb 10 01:34:27 2019 /usr/local/share/denyhosts/data/hosts-restricted:92.246.76.85:0:Tue Feb 5 15:06:22 2019 /usr/local/share/denyhosts/data/hosts-root:92.246.76.85:0:Tue Feb 5 15:06:22 2019 /usr/local/share/denyhosts/data/hosts-valid:92.246.76.85:0:Tue Feb 5 15:06:22 2019 root@ws1:/ #
Если это статический адрес и вы ему доверяете, то лучше его добавить в исключения
echo "92.246.76.85" >> /usr/local/share/denyhosts/data/allowed-hosts
и на последок запускаем denyhosts
root@ws1:/ # sh /usr/local/etc/rc.d/denyhosts start Starting denyhosts. root@ws1:/ #
Если вы хотите полностью очистить denyhosts от забаненных адресов. Достаточно очистить файл hosts.deniedssh и удалить все файлы из рабочей директории /usr/local/share/denyhosts/data/ кроме allowed-hosts. Ну и конечно в начале остановить и после запустить сервис.
service denyhosts stop cp /dev/null /etc/hosts.deniedssh find /usr/local/share/denyhosts/data/ -type f ! -iname "allowed-hosts" -delete service denyhosts start
Если данный метод не сработал, и ваш адрес блокируется, тогда необходимо ещё очистить /var/log/auth.log. Приведу несколько известных мне вариантов очистки файла
Командой truncate мы указываем размер файла
truncate -s0 /var/log/auth.log
По факту мы копируем “пустое устройство” в файл, в действительности просто очищаем файл
cp /dev/null /var/log/auth.log
Аналогичное действие, только теперь с командой cat
cat /dev/null > /var/log/auth.log
Используем перенаправление вывода с помощью утилиты echo. Параметр -n
запрещает перевод строки (символ новой строки):
echo -n > /var/log/auth.log
На последок в качестве бонуса, описание наиболее важных параметров конфига
# Анализируем логи SECURE_LOG = /var/log/auth.log #Забаненные IP HOSTS_DENY = /etc/hosts.deniedssh # Время, по истечении которого забаненные IP удаляются PURGE_DENY = 1w # максимальное колво удалений ip, перед тем как навсегда PURGE_THRESHOLD = 2 # Блокируемый сервис BLOCK_SERVICE = ALL # Кол-во попыток с несуществующим логином DENY_THRESHOLD_INVALID = 2 # Кол-во попыток с неправильным паролем DENY_THRESHOLD_VALID = 3 # Кол-во попыток зарегестрироваться от root DENY_THRESHOLD_ROOT = 1 # число неудачных попыток входа хоста превысило это значение. DENY_THRESHOLD_RESTRICTED = 1 # директория для хранения данных WORK_DIR = /usr/local/share/denyhosts/data # Сообщать о неудачных логинах с разрешённых хостов SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES # По возможности сопоставлять IP и hostname HOSTNAME_LOOKUP=NO # Файл блокировки процесса LOCK_FILE = /var/run/denyhosts.pid
Свежие комментарии