零、前言
DenyHosts是一个Python脚本程序,它会监控并分析服务器(Linux系统)sshd的日志文件(/var/log/secure), 当发现重复的攻击时就会记录IP到指定的/etc/hosts.deny文件中,从而达到自动屏蔽IP的功能,阻止该IP继续攻击我们的服务器。
比如我们在使用云服务器的时候,一开始登陆后就会提示有多少次尝试登陆你服务器的统计,往往这个数很大的时候就说明你的服务器被人关注了:
我们可以使用下面命令(centos7.6):
登陆成功的ip及登陆次数列表
grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
登陆失败的ip及登陆次数列表
grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr | more
一、下载、安装DenyHosts
[DenyHosts官网](http://denyhosts.sourceforge.net/)
[DenyHosts GitHub页面](https://github.com/denyhosts/denyhosts)
使用DenyHosts可以参考GitHub页面的README.md文件进行安装,当前时间最新的稳定版本是3.0,下载denyhosts-3.0.tar.gz文件,并复制到Linux系统中(比如我将它放在/home目录下)
=>解压:
tar zxvf denyhosts-3.0.tar.gz
=>进入源文件目录:
cd denyhosts-3.0
=>使用root用户权限安装:
=>This will install the DenyHosts modules into python's site-packages directory.
python setup.py install
因为网上很多教程都是安装的2.6版本的,所以安装完这一步之后会在/usr/share/下面找到deny-hosts目录,可是我安装3.0版本后却没有,不过没关系,denyhosts用到的文件在/usr/bin下面都有我们切到usr/bin下操作就可以了(cd /usr/bin)
在此我们需要配置denyhosts.conf文件,进行个性化配置:
还是在一开始的目录下(cd /home/denyhosts-3.0)
=> 将denyhosts.conf文件复制到/etc下(上面的install就会将该文件复制过去,这里如果提示是否覆盖的话就说明已经存在,输入no就可以了)
cp denyhosts.conf /etc
=> 使用vim编辑denyhosts.conf文件(官网里面使用的是nano编辑器)
vim /etc/denyhosts.conf
以下是需要配置的地方:本人服务器环境:centos7.6
############ THESE SETTINGS ARE REQUIRED ############
SECURE_LOG = /var/log/secure # 监控的sshd日志文件,系统不同位置不同
HOSTS_DENY = /etc/hosts.deny # 屏蔽IP的记录文件
PURGE_DENY = 7d # IP被屏蔽后,多久清除屏蔽记录(m-minutes,h-hours,d-days,w-weeks,y-years)
# PURGE_DENY = 设置为空代表永远不清除
PURGE_THRESHOLD = 3 # 某个host最多被清除的次数,如果清除次数超过这个值就不会再被清理了
BLOCK_SERVICE = sshd # 阻止的服务名,默认是sshd,也可以设置FTP、SMTP等
DENY_THRESHOLD_INVALID = 3 # 允许无效用户尝试失败次数(过了这个次数还是失败就加入屏蔽)
DENY_THRESHOLD_VALID = 3 # 有效用户(普通用户)尝试失败次数
DENY_THRESHOLD_ROOT = 3 # root用户尝试失败次数
DENY_THRESHOLD_RESTRICTED = 1 # 设定denyhosts将屏蔽host写入到/etc/hsots.deny文件中
WORK_DIR = /var/lib/denyhosts # denyhosts工作数据目录
HOSTNAME_LOOKUP=YES # 是否做域名反解
LOCK_FILE = /var/lock/subsys/denyhosts # 将DenyHost启动的pid记录到LOCK_FILE中,已确保服务正确启动,防止同时启动多个服务
############ THESE SETTINGS ARE OPTIONAL ############
AGE_RESET_VALID=6h # 普通有效用户登陆失败计数清零时间
AGE_RESET_ROOT=6h # root用户登陆失败计数清零时间
AGE_RESET_RESTRICTED=25d # /etc/hosts.deny文件清除数据时间
AGE_RESET_INVALID=1d # 无效用户登陆失败计数清零时间
######### THESE SETTINGS ARE SPECIFIC TO DAEMON MODE ##########
DAEMON_LOG = /var/log/denyhosts # denyhosts日志默认存放路径
DAEMON_SLEEP = 30s # 当以后台方式运行时,每读一次日志文件的时间间隔
DAEMON_PURGE = 1h # 当以后台方式运行时,清除机制在hosts.deny中终止就条目的时间间隔,这个会影响PURGE_DENY参数
=> 查看与配置IP白名单、黑名单(当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准)
vim /etc/hosts.deny # 黑名单无需手动配置,denyhosts会自动检测添加
vim /etc/hosts.allow # 配置规则:sshd:171.113.244.96:allow, 配置多个:171.113.244.96,158.51.96.58:allow
=> 配置、启动、停止、查看denyhosts服务
cd /usr/bin # 切换到/usr/bin目录下(因为该目录下有daemon-control,^-)
cp daemon-control-dist daemon-control
=> 编辑适合自己系统环境的daemon-control文件,以下是我个人环境的相关denyhosts文件目录,这里需要自己去核对
vim daemon-control
###############################################
#### Edit these to suit your configuration ####
###############################################
DENYHOSTS_BIN = "/usr/bin/denyhosts.py"
DENYHOSTS_LOCK = "/var/lock/subsys/denyhosts"
DENYHOSTS_CFG = "/etc/denyhosts.conf"
PYTHON_BIN = "/usr/bin/env python"
注意一点:一般centos默认有python2,这里启动denyhosts会报错,我们需要修改下安装的/DenyHosts/report.py包
vim /usr/lib/python2.7/site-packages/DenyHosts/report.py
将# from types import ListType, TupleType 取消注释:from types import ListType, TupleType
=> 修改权限:
chown root daemon-control
chomod 700 daemon-control
启动denyhosts
daemon-control start
查看denyhosts是否运行
方法一:daemon-control status
方法二:ps -ef | grep deny
停止denyhosts
daemon-control stop