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

Print Friendly, PDF & Email

Задача:

Установить и настроить защиту сервера от подбора паролей при помощи 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
Помогла статья? Есть возможность отблагодарить автора

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *