Найти в Дзене
Imho Life

Denyhosts на Ubuntu. Один из методов блокировки атак на SSH-сервер.

В последнее время, благодаря карантину, количество несанкционированных попыток подключений к серверам выросло на порядок. Очень много "хакеров" отправили из школ, университетов и других учебных заведений учиться домой. И делать дома им особо не чего. Чтобы убедиться в этом достаточно просто посмотреть логи сервера. И сегодня мы поговорим об очень простом скрипте, который поможет в борьбе с не званными гостями, под названием Denyhosts - это скрипт защищающий ssh от взлома. Он анализирует количество неудачных попыток подключения к серверу с последующей блокировкой. Блокировка происходит путем внесения IP в hosts.deny и добавления правила для iptables. Он ни в коем случае не является последней инстанцией, нерушимой опорой и бронёй как у танка. Это дополнительное средство защиты. Но если его использовать в купе, например, с fail2ban, то получится достаточно крепкое и устойчивое противоядие. Почему современные админы так редко его используют или вовсе проходят стороной для меня оста
Оглавление

В последнее время, благодаря карантину, количество несанкционированных попыток подключений к серверам выросло на порядок. Очень много "хакеров" отправили из школ, университетов и других учебных заведений учиться домой. И делать дома им особо не чего. Чтобы убедиться в этом достаточно просто посмотреть логи сервера.

-2

И сегодня мы поговорим об очень простом скрипте, который поможет в борьбе с не званными гостями, под названием Denyhosts - это скрипт защищающий ssh от взлома. Он анализирует количество неудачных попыток подключения к серверу с последующей блокировкой. Блокировка происходит путем внесения IP в hosts.deny и добавления правила для iptables.

Он ни в коем случае не является последней инстанцией, нерушимой опорой и бронёй как у танка. Это дополнительное средство защиты.

Но если его использовать в купе, например, с fail2ban, то получится достаточно крепкое и устойчивое противоядие. Почему современные админы так редко его используют или вовсе проходят стороной для меня остаётся загадкой. Ведь, как говорится, в бою все средства хороши. А запретить всё и вся не всегда возможно и не совсем правильно.

1. Установка denyhosts.

В Ubuntu версии 18 установка проста и тривиальна.

$ sudo apt-get install denyhosts

Если вдруг попытка установки посыпала ошибками, не нужно расстраиваться и опускать руки. Linux в 2020 году так и не избавилась от иногда странных и не чем не обоснованных ошибок.

-3

Об этом моменте люди уже позаботились и в установочный пакет включили скрипт установки, который нам достаточно скачать.

Переходим в папку временных файлов.

$ cd /tmp/

Скачиваем сам установочный пакет denyhosts.

$ wget http://downloads.sourceforge.net/project/denyhost/denyhost-3.0/denyhosts-3.0.tar.gz

Распаковываем и устанавливаем.

$ tar xzf denyhosts*.tar.gz
$ cd DenyHosts*
$ sudo python setup.py install

После выполнения приведенных выше команд denyhosts будет установлен на сервере, но для запуска пока не готов.

Скопируем файл демона в каталог /etc/init.d/.

$ sudo cp /usr/local/bin/daemon-control-dist /etc/init.d/denyhosts

Затем нужно открыть скрипт

$ sudo nano /etc/init.d/denyhosts

и привести перечисленные ниже пункты к соответствующему виду

DENYHOSTS_BIN = “/usr/local/bin/denyhosts.py”
DENYHOSTS_LOCK = “/run/denyhosts.pid”
DENYHOSTS_CFG = “/etc/denyhosts.conf”
PYTHON_BIN = “/usr/bin/env python”

С установкой закончили. Танцев с бубном было не много.

2. Добавляем наши IP в исключение Denyhosts.

После установки denyhosts нужно первым делом и в обязательном порядке внести свой IP в список исключений. Это нужно для того чтобы если вы забыли переключить раскладку или капслок светит в глаз, но вы его упорно игнорируете, ну или вдруг накрыл кратковременный склероз, denyhosts вас узнает и как говорится поймет и простит. Для этого откройте файл /etc/hosts.allow.

$ nano /etc/hosts.allow

И добавляем свой ip или диапазон.

-4

Сохраняем изменения, используя комбинацию клавиш Ctrl + O и выходим из редактора, используя Ctrl + X.

Не все знают или не видят или не особо смотрят логи, но есть ещё один файл куда нужно прописать исключения. Это файл Allowed-warned-hosts.

Переходим в нужную директорию

$ cd /var/lib/denyhosts

Смотрим есть ли там нужный файл

$ ls -la

-5

Если файла allowed-warned-hosts нет, то создаем его командой

$ touch allowed-warned-hosts

Открываем в редакторе и заносим туда свои IP, но уже без названия службы. Просто ip-адрес или диапазон адресов.

$ nano allowed-warned-hosts

-6

Сохраняем изменения, используя комбинацию клавиш Ctrl + O и выходим из редактора, используя Ctrl + X.

Вот теперь можно переходить к другим пунктам настройки.

3. Настройка denyhosts

Чтобы denyhosts знал, где лежит лог со списком злоумышленников, знал сколько попыток им давать и высылать или нет вам письмо с информацией о посланных полями и лесами нарушителями, нам нужно отредактировать файл denyhosts.conf.

$ sudo nano /etc/denyhosts.conf

И правим перечисленные пункты под свои нужды

SECURE_LOG = /var/log/auth.log Путь к логам сервера

PURGE_DENY = Время, по истечении которого забаненные IP удаляются. Смысла в этом не вижу, но такой пункт есть.

DENY_THRESHOLD_INVALID = 2 Неудачных попыток входа c несуществующим логином до бана.

DENY_THRESHOLD_VALID = 3 Число попыток входа с существующим логином, но неверным паролем до бана.

DENY_THRESHOLD_ROOT = 2 Число неудачных попыток входа до бана для пользователя root.

IPTABLES = /sbin/iptables блокировать подключения с использованием IPTABLES.

DAEMON_SLEEP = 20s Период активации демона, ну или время проверки лога доступа.

Если нам нужно чтобы denyhosts высылал вам отчеты о проделанной работе, то нужно подправить следующие пункты. Комментировать я думаю смысла нет.

ADMIN_EMAIL = admin@bestmail.ru

SMTP_HOST = localhost

SMTP_PORT = 25

SMTP_FROM = DenyHosts <bestmail@bestmail.ru>

SMTP_SUBJECT = DenyHosts Daily Report</h6>

Если всё устраивает, то сохраняем изменения, используя комбинацию клавиш Ctrl + O и выходим из редактора, используя Ctrl + X.

4. Запуск службы denyhosts и добавление в автозагрузку

Для того чтобы внесенные в конфигурационный файл изменения были учтены, нужно перезапустить denyhosts

$ sudo service denyhosts restart

Для более старых версий Ubuntu/Debian Linux или систем не на основе systemd, введите:

$ sudo /etc/init.d/denyhosts restart

Включение службы denyhosts на Ubuntu Linux 16.04 LTS во время загрузки

$ sudo systemctl enable denyhosts.service

На этом установка и настройка denyhosts закончена. В логах с мстительной улыбкой можно наблюдать посланных и отвергнутых))).

5. Удалить заблокированный IP-адрес из DenyHosts


Если вдруг так случилось что важный ip был заблокирован, то для начала нужно остановить службу
denyhosts

$ sudo /etc/init.d/denyhosts stop

Чтобы удалить заблокированный IP-адрес полностью, нам нужно отредактировать следующие файлы, удалив оттуда IP-адрес.

# nano /etc/hosts.deny

# nano /var/lib/denyhosts/hosts

# nano /var/lib/denyhosts/hosts-restricted

# nano /var/lib/denyhosts/hosts-root

# nano /var/lib/denyhosts/hosts-valid

# nano /var/lib/denyhosts/users-hosts

Заблокированный адрес будет добавлен во все файлы в каталоге /var/lib/denyhosts/, но и не стоит забывать о /etc/hosts.deny. И если с фалом /etc/denyhost все просто, то с папкой /var/lib/denyhosts/ будет проблематичней.

Один из лучших способов найти в какой файл внесен заблокированный адрес это команда grep. Т.е. чтобы найти заблокированный адрес 8.8.8.8 выполните команду:

$ cd /var/lib/denyhosts

$ grep 8.8.8.8 *

Команда покажет в каких файлах есть этот адрес. Удаляем и запускаем denyhosts.

$ sudo /etc/init.d/denyhosts start

И еще вариант, взятый с англоязычного сайта. С какого уже не помню, но способ проверен и полностью рабочий.

Вы можете сделать это в 4 командах. python script автоматизирует процесс удаления:

$ sudo /etc/init.d/denyhosts stop

$ git clone https://github.com/rsprabery/unblock.git

$ sudo python unblock/unblock.py <IP_ADDRESS>

$ sudo /etc/init.d/denyhosts start

Теперь расскажу что да как. Сначала останавливаем denyhosts. Скачиваем скрипт который найдет и удалит заблокированный адрес. Запускаем скрипт заменив IP_ADDRESS на нужный ip. Запускаем denyhosts.

Скрипт работает на всех версиях Ubuntu. Работает быстро, четко, без редактирования каких либо файлов.

6. Итог

Denyhosts простой как палка. Отрабатывает на 100% все попытки постучать вашему серверу ssh по кумполу. Не висит постоянно в памяти и использует простые средства блокировки.

Но есть два момента которые я не использую:

1) В моих конфигурациях я не использую блокировку подключения с использованием IPTABLES, т.к. этим у меня занимается fail2ban о котором я расскажу в следующей статье.

2) Так же не использую синхронизацию черных списков с серверами denyhosts. Мой опыт использования коллективных черных списков такой себе... Потому как регулярный поиск и вычленение хороших адресов из этих списков утомляет. А это будет происходить регулярно. Что одному хорошо, то не факт что другому тоже))).

P.S. Всем кто дочитал до конца спасибо! Буду рад если поможет в работе.

Всё что понаписано выше проверено на Ubuntu Server 18.04 и работает по сей день.