Установка и настройка denyhosts
1. Устанавливаем denyhosts
2. Заносим собственный IP адрес в «белый список»
3. Настройка denyhosts с помощью /etc/denyhosts.conf
4. Перезапустите службу denyhosts и добавление в автозагрузку
5. Удалить заблокированный IP-адрес из DenyHosts
Denyhosts - это скрипт для защиты ssh от взлома брутфорсом. Он анализирует число неудачных попыток коннекта к серверу и после определённого их количества блокирует ip с которого пытаются приконектится. Блокирует путём добавления ip в /etc/hosts.deny и добавления правила для iptables.
1. Устанавливаем denyhosts
$ sudo apt-get install denyhosts
или
$ sudo apt install denyhosts
Если вы видите такую ошибку
------------------------------------------
apt-get install denyhosts
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package denyhosts
------------------------------------------
не спешите расстраиваться, все решаемо.
Скачиваем установочный пакет
$ cd /tmp/ && 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
Для автозапуска копируем демона в каталог /etc/init.d/
$ sudo cp /usr/local/bin/daemon-control-dist /etc/init.d/denyhosts
Дальше нужно отредактировать sudo vi /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 адрес в «белый список»
Белых списка два. И в оба нужно занести нужные адреса.
2.1 Отредактируйте /etc/hosts.allow файл, и добавьте IP-адрес вашего клиента. Это гарантирует то, что вы случайно не будете заблокированы:
$ sudo nano /etc/hosts.allow
Синтаксис выглядит следующим образом:
sshd: whitelist-ip1, whitelist-ip2, ...., whitelist-ipN
Например, занесите в «белый список» 202.54.1.1 и 203.54.2.3, для этого введите:
sshd: 202.54.1.1 , 203.54.2.3
Или просто
sshd: 172.145.33.45
Сохраните изменения и выйдете из файла.
2.2 Не все знают или не видят или не особо смотрят логи, но есть ещё один файл куда нужно прописать исключения. Это файл Allowed-warned-hosts.
Переходим в нужную директорию
$ cd /var/lib/denyhosts
Смотрим есть ли там нужный файл Allowed-warned-hosts
$ ls -la
Если файла allowed-warned-hosts нет, то создаем его командой
$ touch allowed-warned-hosts
Открываем в редакторе и заносим туда свои IP, но уже без названия службы. Просто ip-адрес или диапазон адресов.
$ nano allowed-warned-hosts
И добавьте каждый IP-адрес в отдельной строке.
# We mustn't block localhost
127.0.0.1
172.16.25.125
172.16.25.126
172.16.25.127
Сохраняем изменения, используя комбинацию клавиш Ctrl + O и выходим из редактора, используя Ctrl + X.
3. Настройка denyhosts с помощью /etc/denyhosts.conf
В системе на базе Debian или Ubuntu Linux режим работы по умолчанию – это режим демона (daemon), а файл конфигурации – /etc/denyhosts.conf:
$ sudo nano /etc/denyhosts.conf
Обязательно убедитесь, что SECURE_LOG настроен следующим образом:
SECURE_LOG = /var/log/auth.log
HOSTS_DENY необходимо настроить следующим образом:
HOSTS_DENY = /etc/hosts.deny #Список забаненых ip
BLOCK_SERVICE = sshd #Сервисы с которыми работает denyhosts
Установить пороговый лимит отказа для попыток входа в систему:
PURGE_DENY = # Время, по истечении которого забаненные IP удаляются. Смысла нет.
DENY_THRESHOLD_INVALID = 5 #Число неудачных попыток входа c несуществующим логином до бана
DENY_THRESHOLD_VALID = 10 #Число попыток входа с существующим логином, но неверным паролем до бана
DENY_THRESHOLD_ROOT = 1 #Число неудачных попыток входа до бана для пользователя root
DENY_THRESHOLD_RESTRICTED = 1
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 и добавление в автозагрузку
Введите следующую команду на Ubuntu Linux 16.04 LTS или более новой версии:
$ sudo systemctl restart denyhosts.service
Для более старых версий Ubuntu/Debian Linux или систем не на основе systemd, введите:
$ sudo /etc/init.d/denyhosts restart
Включение службы denyhosts на Ubuntu Linux 16.04 LTS во время загрузки
$ sudo systemctl enable denyhosts.service
Примеры возможных выводов данных:
Synchronizing state of denyhosts.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable 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. Работает быстро, четко, без редактирования каких либо файлов.