DenyHosts 阻止SSH暴力攻击


默认配置文件路径:/etc/denyhosts/denyhosts.cfg

配置文件内容详细说明:

       ############ THESE SETTINGS ARE REQUIRED ############
# 系统安全日志文件,主要获取ssh信息
SECURE_LOG = /var/log/secure

# 拒绝写入IP文件 hosts.deny
HOSTS_DENY = /etc/hosts.deny

# #过多久后清除已经禁止的,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟
PURGE_DENY = 4w

# denyhosts所要阻止的服务名称
BLOCK_SERVICE  = sshd

# 允许无效用户登录失败的次数
DENY_THRESHOLD_INVALID = 3

# 允许普通用户登录失败的次数
DENY_THRESHOLD_VALID = 10

# 允许ROOT用户登录失败的次数
DENY_THRESHOLD_ROOT = 6

# 设定 deny host 写入到该资料夹
DENY_THRESHOLD_RESTRICTED = 1

# 将deny的host或ip纪录到Work_dir中 
WORK_DIR = /var/lib/denyhosts

SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES

# 是否做域名反解
HOSTNAME_LOOKUP=YES

# 将DenyHOts启动的pid纪录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务
LOCK_FILE = /var/lock/subsys/denyhosts

       ############ THESE SETTINGS ARE OPTIONAL ############
# 管理员Mail地址
ADMIN_EMAIL = root
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts 
SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]

# 有效用户登录失败计数归零的时间
AGE_RESET_VALID=5d

# ROOT用户登录失败计数归零的时间
AGE_RESET_ROOT=25d

# 用户的失败登录计数重置为0的时间(/usr/share/denyhosts/restricted-usernames)
AGE_RESET_RESTRICTED=25d

# 无效用户登录失败计数归零的时间
AGE_RESET_INVALID=10d

   ######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE  ##########
# denyhosts log文件
DAEMON_LOG = /var/log/denyhosts

DAEMON_SLEEP = 30s

# 该项与PURGE_DENY 设置成一样,也是清除hosts.deniedssh 用户的时间
DAEMON_PURGE = 1h

启动的时候查看日志获取到的加载的配置文件内容:

2022-04-16 16:11:09,631 - prefs       : INFO     DenyHosts configuration settings:
2022-04-16 16:11:09,631 - prefs       : INFO        ADMIN_EMAIL: [None]
2022-04-16 16:11:09,631 - prefs       : INFO        AGE_RESET_INVALID: [864000]
2022-04-16 16:11:09,631 - prefs       : INFO        AGE_RESET_RESTRICTED: [2160000]
2022-04-16 16:11:09,631 - prefs       : INFO        AGE_RESET_ROOT: [2160000]
2022-04-16 16:11:09,631 - prefs       : INFO        AGE_RESET_VALID: [432000]
2022-04-16 16:11:09,631 - prefs       : INFO        ALLOWED_HOSTS_HOSTNAME_LOOKUP: [no]
2022-04-16 16:11:09,631 - prefs       : INFO        BLOCK_SERVICE: [sshd]
2022-04-16 16:11:09,631 - prefs       : INFO        DAEMON_LOG: [/var/log/denyhosts]
2022-04-16 16:11:09,631 - prefs       : INFO        DAEMON_LOG_MESSAGE_FORMAT: [%(asctime)s - %(name)-12s: %(levelname)-8s %(message)s]
2022-04-16 16:11:09,631 - prefs       : INFO        DAEMON_LOG_TIME_FORMAT: [None]
2022-04-16 16:11:09,631 - prefs       : INFO        DAEMON_PURGE: [3600]
2022-04-16 16:11:09,631 - prefs       : INFO        DAEMON_SLEEP: [30]
2022-04-16 16:11:09,631 - prefs       : INFO        DENY_THRESHOLD_INVALID: [5]
2022-04-16 16:11:09,631 - prefs       : INFO        DENY_THRESHOLD_RESTRICTED: [1]
2022-04-16 16:11:09,631 - prefs       : INFO        DENY_THRESHOLD_ROOT: [1]
2022-04-16 16:11:09,631 - prefs       : INFO        DENY_THRESHOLD_VALID: [10]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX2: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX3: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX4: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX5: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX6: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        FAILED_ENTRY_REGEX7: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        HOSTNAME_LOOKUP: [YES]
2022-04-16 16:11:09,632 - prefs       : INFO        HOSTS_DENY: [/etc/hosts.deny]
2022-04-16 16:11:09,632 - prefs       : INFO        LOCK_FILE: [/var/lock/subsys/denyhosts]
2022-04-16 16:11:09,632 - prefs       : INFO        PLUGIN_DENY: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        PLUGIN_PURGE: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        PURGE_DENY: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        PURGE_THRESHOLD: [0]
2022-04-16 16:11:09,632 - prefs       : INFO        RESET_ON_SUCCESS: [no]
2022-04-16 16:11:09,632 - prefs       : INFO        SECURE_LOG: [/var/log/secure]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_DATE_FORMAT: [%a, %d %b %Y %H:%M:%S %z]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_FROM: [DenyHosts ]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_HOST: [localhost]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_PASSWORD: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_PORT: [25]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_SUBJECT: [DenyHosts Report]
2022-04-16 16:11:09,632 - prefs       : INFO        SMTP_USERNAME: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        SSHD_FORMAT_REGEX: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        SUCCESSFUL_ENTRY_REGEX: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS: [YES]
2022-04-16 16:11:09,632 - prefs       : INFO        SYNC_DOWNLOAD: [yes]
2022-04-16 16:11:09,632 - prefs       : INFO        SYNC_DOWNLOAD_RESILIENCY: [18000]
2022-04-16 16:11:09,632 - prefs       : INFO        SYNC_DOWNLOAD_THRESHOLD: [3]
2022-04-16 16:11:09,632 - prefs       : INFO        SYNC_INTERVAL: [3600]
2022-04-16 16:11:09,632 - prefs       : INFO        SYNC_SERVER: [None]
2022-04-16 16:11:09,632 - prefs       : INFO        SYNC_UPLOAD: [yes]
2022-04-16 16:11:09,632 - prefs       : INFO        SYSLOG_REPORT: [no]
2022-04-16 16:11:09,632 - prefs       : INFO        WORK_DIR: [/usr/share/denyhosts/data]
rpm -ivh http://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/denyhosts-2.6-5.el7.rf.noarch.rpm

# http://mirror.neu.edu.cn/fedora-epel/7/x86_64/d/denyhosts-2.9-4.el7.noarch.rpm
# rpm -ivh https://test.jdd966.cn/denyhosts-2.6-5.el7.rf.noarch.rpm

mv /etc/denyhosts/denyhosts.cfg /etc/denyhosts/denyhosts.cfg.bak


# 配置文件中的xxx根据实际情况修改

cat >> /etc/denyhosts/denyhosts.cfg << "EOF"

SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 5m
BLOCK_SERVICE  = sshd
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 5
DENY_THRESHOLD_ROOT = 5
DENY_THRESHOLD_RESTRICTED = 5
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=NO
LOCK_FILE = /var/lock/subsys/denyhosts
ADMIN_EMAIL = xxxxxxx
SMTP_HOST = xxxxxxxx
SMTP_PORT = 25
SMTP_FROM = DenyHosts 
SMTP_USERNAME = xxxxx@126.com
SMTP_PASSWORD = xxxxxxxxx
SMTP_SUBJECT = DenyHosts Report from $[HOSTNAME]
ALLOWED_HOSTS_HOSTNAME_LOOKUP = NO
AGE_RESET_VALID = 3m
AGE_RESET_ROOT = 3m
AGE_RESET_RESTRICTED = 3m
AGE_RESET_INVALID = 3m
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 5m
SYNC_UPLOAD = no
SYNC_DOWNLOAD = no

EOF


systemctl enable denyhosts && systemctl start denyhosts && systemctl status denyhosts

安装脚本

#!/bin/bash

echo "在线安装denyhosts"
# rpm -ivh https://test.jdd966.cn/denyhosts-2.6-5.el7.rf.noarch.rpm
rpm -ivh http://rpmfind.net/linux/dag/redhat/el7/en/x86_64/dag/RPMS/denyhosts-2.6-5.el7.rf.noarch.rpm

echo "启动服务,停止服务,备份配置文件"
systemctl start denyhosts && systemctl stop denyhosts && mv /etc/denyhosts/denyhosts.cfg /etc/denyhosts/denyhosts.cfg.bak

echo "新添加配置文件内容"
cat >> /etc/denyhosts/denyhosts.cfg << "EOF"
SECURE_LOG = /var/log/secure
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY = 5m
BLOCK_SERVICE  = sshd
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 5
DENY_THRESHOLD_ROOT = 5
DENY_THRESHOLD_RESTRICTED = 5
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=NO
LOCK_FILE = /var/lock/subsys/denyhosts
ADMIN_EMAIL = xxxxx
SMTP_HOST = smtp.qiye.aliyun.com
SMTP_PORT = 25
SMTP_FROM = DenyHosts 
SMTP_USERNAME = xxxxx
SMTP_PASSWORD = xxxxx
SMTP_SUBJECT = DenyHosts Report
ALLOWED_HOSTS_HOSTNAME_LOOKUP = NO
AGE_RESET_VALID = 3m
AGE_RESET_ROOT = 3m
AGE_RESET_RESTRICTED = 3m
AGE_RESET_INVALID = 3m
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 5m
SYNC_UPLOAD = no
SYNC_DOWNLOAD = no
EOF

echo "开机启动,启动服务,查看状态"
systemctl enable denyhosts && systemctl start denyhosts && systemctl status denyhosts