DenyHosts – это программное обеспечение с открытым исходным кодом, разработанное на языке Python Филом Шварцем.
Он в основном предназначен для мониторинга и анализа журналов сервера SSH на недопустимые попытки входа в систему, атак на основе словаря и принудительных атак путем блокировки исходящих IP-адресов путем добавления их в файл /etc/hosts.deny на сервере и, тем самым, предотвращения IP-адресов от дальнейших попыток входа в систему.
Благодаря своей простоте и возможности вручную настраивать правила, он широко используется в качестве альтернативы Fail2ban, который немного сложнее в использовании и настройке.
В этом уроке я покажу вам, как устанавливать и настраивать DenyHosts на вашем сервере CentOS 7 различными способами.
Предпосылки
Прежде чем приступить к установке, мы должны убедиться, что наша система отвечает всем требованиям программного обеспечения для компиляции и установки приложения.
А также, он должен быть настроен со статическим IP-адресом.
Программное обеспечение DenyHosts зависит от модуля «ipaddr» Python.
На первом этапе обновите системные репозитории и программные пакеты, включая модуль python, выполнив следующие команды:
# yum update # yum install python-ipaddr -y
1. Установка DenyHosts из репозитория Epel
Нам нужно установить этот пакет с помощью репозитория Epel, для его установки используйте следующую команду:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm # yum install denyhosts -y
Настройка Denyhosts
После установки Denyhosts вам необходимо добавить свой IP-адрес в список разрешенных IP-адресов, чтобы убедиться, что ваш собственный IP-адрес включен в белый список, поэтому вы никогда не получите блокировку.
# cat /etc/hosts.allow # # hosts.allow This file contains access rules which are used to # allow or deny connections to network services that # either use the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # sshd: 37.217.142.41 sshd: 37.217.142.42 sshd: 37.217.142.43 sshd: 37.217.142.44
Затем вам необходимо занести в черный список все требуемые IP-адреса, которые вы хотите заблокировать.
Мы можем убедиться, что наш IP-адрес также не входит в черный список.
# cat /etc/hosts.deny # # hosts.deny This file contains access rules which are used to # deny connections to network services that either use # the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # The rules in this file can also be set up in # /etc/hosts.allow with a 'deny' option instead. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # sshd: 78.189.206.37 sshd: 121.14.27.58 sshd: 1.246.228.161 sshd: 103.89.89.47 sshd: 116.29.148.2 # DenyHosts: Tue Jan 9 10:16:15 2018 | sshd: 222.186.174.81 sshd: 222.186.174.81 # DenyHosts: Tue Jan 9 10:40:46 2018 | sshd: 217.61.20.181 sshd: 217.61.20.181 # DenyHosts: Tue Jan 9 13:15:53 2018 | sshd: 112.86.117.182 sshd: 112.86.117.182
Включение службы DenyHosts
После его настройки по мере необходимости мы можем включить и запустить нашу службу DenyHosts с помощью следующих команд:
# systemctl enable denyhosts # systemctl start denyhosts # systemctl status denyhosts ● denyhosts.service - SYSV: Activates/Deactivates the Loaded: loaded (/etc/rc.d/init.d/denyhosts; bad; vendor preset: disabled) Active: active (running) since Wed 2018-01-10 06:47:54 UTC; 3h 57min ago Docs: man:systemd-sysv-generator(8) Process: 30660 ExecStart=/etc/rc.d/init.d/denyhosts start (code=exited, status=0/SUCCESS) CGroup: /system.slice/denyhosts.service └─30665 python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf Jan 10 06:47:54 li226-12.members.linode.com systemd[1]: Starting SYSV: Activates/Deactivates the... Jan 10 06:47:54 li226-12.members.linode.com denyhosts[30660]: starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf Jan 10 06:47:54 li226-12.members.linode.com systemd[1]: Started SYSV: Activates/Deactivates the.
Настройка оповещений по электронной почте в DenyHosts
Мы можем установить оповещения по электронной почте о подозрительных входах и ограниченных узлах, внося изменения в файл конфигурации DenyHosts.
Вы можете добавить свой адрес электронной почты в переменную ADMIN_EMAIL в файле конфигурации /etc/denyhosts.conf, чтобы получать оповещения по электронной почте о подозрительных входах.
Вы можете добавить любое количество адресов электронной почты в переменную, просто не забудьте отделить ее запятыми.
Здесь я добавил свой адрес электронной почты cryptoparty@itsecforu.ru чтобы предупредить себя о любых атаках.
После внесения любых изменений в файлы конфигурации вам необходимо перезапустить службу DenyHosts.
Удаление запрещенных IP-адресов
Вы можете отслеживать журналы denyhosts ssh, чтобы узнать, сколько злоумышленников и хакеров пытаются получить доступ к вашему серверу.
Вы можете использовать следующую команду для просмотра журналов реального времени:
# tail -f /var/log/secure Jan 10 10:56:43 li226-12 sshd[2096]: refused connect from 222.186.43.6 (222.186.43.6) Jan 10 10:57:08 li226-12 sshd[2102]: refused connect from 222.186.43.6 (222.186.43.6) Jan 10 10:57:43 li226-12 sshd[2113]: refused connect from 222.186.43.6 (222.186.43.6) Jan 10 10:59:17 li226-12 sshd[2133]: refused connect from 222.186.43.6 (222.186.43.6)
Очевидно, что наш сервер пытается отказаться от соединения с IP 222.186.43.6 из этих журналов.
Давайте посмотрим, как удалить этот IP-адрес из черного списка.
Нам нужно проверить эту запись IP-файла в файле /etc/hosts.deny и все эти пользовательские файлы deny, созданные с помощью denyhosts.
Мы можем удалить запись 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
Я мог заметить эту запись в файле hosts.deny.
# DenyHosts: Wed Jan 10 03:40:07 2018 | sshd: 222.186.43.6 sshd: 222.186.43.6
Я удалил эту запись и перезапустил службу denyhosts, чтобы изменения вступили в силу.
2. Установка из репозитория Github
Мы можем либо загрузить репозиторий Github, либо загрузить последний дистрибутив DenyHosts и скомпилировать его из этих исходных пакетов.
Давайте посмотрим, как установить denyhosts из Github Repo.
# yum install git # git clone https://github.com/denyhosts/denyhosts Cloning into 'denyhosts'... remote: Counting objects: 1353, done. remote: Total 1353 (delta 0), reused 0 (delta 0), pack-reused 1353 Receiving objects: 100% (1353/1353), 263.93 KiB | 0 bytes/s, done. Resolving deltas: 100% (899/899), done.
После загрузки файлов из Github нам нужно установить его.
Вы можете установить его, выполнив эту команду из папки denyhosts, как показано ниже:
#cd denyhosts #python setup.py install
Это действие установит модули DenyHosts в каталог сайтов-пакетов python.
Аналогично, из исходного дистрибутива вы можете загрузить последний Denyhosts и установить его, как описано выше.
Остальные этапы настройки одинаковы в обоих случаях.
Настройка Denyhosts
После установки вы можете скопировать образец файла конфигурации denyhosts.conf, созданный в папке установки, которая содержит большинство возможных настроек в /etc.
Файл конфигурации содержит различные настройки вместе с их описанием, которые должны помочь вам быстро настроить DenyHosts.
После того как вы отредактировали файл конфигурации, сохраните его.
# cp -rp denyhosts.conf /etc/
Затем нам нужно скопировать пример скрипта daemon-control.dist для управления демоном и изменить рекомендуемый раздел в соответствии с вашим расположением файла конфигурации.
# cp daemon-control-dist daemon-control # chmod 700 daemon-control
Теперь мы можем отредактировать файл управления демонами.
Вам нужно только отредактировать этот раздел в верхней части экрана, как показано ниже.
############################################### ############################################### #### Edit these to suit your configuration #### ############################################### DENYHOSTS_BIN = "/usr/bin/denyhosts.py" DENYHOSTS_LOCK = "/var/run/denyhosts.pid" DENYHOSTS_CFG = "/etc/denyhosts.conf" PYTHON_BIN = "/usr/bin/env python" #########################################
Эти значения по умолчанию должны быть разумными для многих систем.
Но я рекомендую вам настроить эти параметры в соответствии с вашей конкретной системой.
После того как вы отредактировали файлы управления конфигурацией и демонами, обязательно ограничьте выполнение сценария управления демонами root.
Запуск DenyHosts вручную
После настройки Denyhosts для запуска в качестве демона с помощью нашего скрипта управления демонами вы можете запустить его вручную, просто выполнив эту команду из установочной папки:
# ./daemon-control start starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf
Вы можете обратиться к журналу демона (/var/log/denyhosts), чтобы убедиться, что DenyHosts работает успешно.
Кроме того, вы можете запустить DenyHosts вручную, чтобы запустить его из командной строки с помощью Python, точно так же укажите путь к конфигам.
# python /usr/bin/denyhosts.py --config /etc/denyhosts.conf --daemon # ps aux | grep denyhosts root 25650 0.0 1.0 216116 10740 ? S 09:44 0:00 python /usr/bin/denyhosts.py --config /etc/denyhosts.conf --daemon root 25656 0.0 0.2 112668 2200 pts/0 S+ 09:44 0:00 grep --color=auto denyhosts
Вышеупомянутая команда запускает DenyHosts в фоновом режиме.
Запуск Denyhosts автоматически
Мы можем установить cronjobs для запуска Denyhosts автоматически при старте системы.
Или мы можем создать символическую ссылку из /etc/init.d, как показано ниже:
# cd /etc/init.d # ln -s /root/denyhosts/daemon-control denyhosts # ll | grep denyhosts lrwxrwxrwx 1 root root 30 Jan 10 04:48 denyhosts -> /root/denyhosts/daemon-control
Теперь мы можем управлять этим сервисом из обычной команды systemctl.
# systemctl enable denyhosts denyhosts.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig denyhosts on # systemctl start denyhosts # systemctl status denyhosts ● denyhosts.service - SYSV: Activates/Deactivates the Loaded: loaded (/etc/rc.d/init.d/denyhosts; bad; vendor preset: disabled) Active: active (exited) since Thu 2018-01-11 09:57:53 UTC; 2s ago Docs: man:systemd-sysv-generator(8) Process: 25876 ExecStart=/etc/rc.d/init.d/denyhosts start (code=exited, status=0/SUCCESS)
Заключение
В этой статье мы обсудили, как установить и настроить DenyHosts на нашем сервере CentOS 7.
Этот инструмент можно легко настроить, а также поддерживать уведомления по электронной почте, SMTP и syslog.
Это приложение является отличным решением для защиты атак SSH-сервера, таких как атаки на основе словарей и атаки брутфорс.