Loading

DenyHosts 简单使用

零、前言

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 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
    chmod 700 daemon-control

启动denyhosts

daemon-control start

查看denyhosts是否运行

    方法一:daemon-control status
    方法二:ps -ef | grep deny

停止denyhosts

daemon-control stop
posted @ 2020-05-24 19:05  MrSu  阅读(2356)  评论(3编辑  收藏  举报