防止SSH被暴力破解软件-DenyHosts


原理:
1. 对/var/log/secure日志文件进行分析,查找所有的登录尝试,并且过滤出失败和成功的尝试。
2.记录下所有失败的登录尝试的用户名和主机,如果超过阀值,则记录主机。
3.保持对每一个登录失败的用户(存在系统中或不存在系统中的用户)的跟踪
4.对每一个可疑的登录进行跟踪。(虽然登录成功,但是有很多次登录失败的记录)
5.将可疑地址的主机加入到/etc/hosts.deny文件中。

DenyHosts是一个Python脚本程序,它会监控并分析服务器(Linux系统)sshd的日志文件(/var/log/secure), 当发现重复的攻击时就会记录IP到指定的/etc/hosts.deny文件中,从而达到自动屏蔽IP的功能,阻止该IP继续攻击我们的服务器。

比如我们在使用云服务器的时候,一开始登陆后就会提示有多少次尝试登陆你服务器的统计,往往这个数很大的时候就说明你的服务器被人关注了:

登陆成功的ip及登陆次数列表
grep "Accepted" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr  


登陆失败的ip及登陆次数列表
grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr  


下载软件:

wget https://github.com/denyhosts/denyhosts/archive/v2.6.tar.gz

#tar xf v2.6.tar.gz
#cd denyhosts-2.6
# python setup.py install

进入默认安装路径:
[root@node250 denyhosts-2.6]# cd /usr/share/denyhosts/
[root@node250 denyhosts]# ls
CHANGELOG.txt  daemon-control-dist  denyhosts.cfg      LICENSE.txt  README.txt  setup.py
daemon-control  data                denyhosts.cfg-dist  plugins      scripts
[root@node250 denyhosts]# pwd
/usr/share/denyhosts

配置文件:
#cp denyhosts.cfg-dist denyhosts.cfg
启动程序:
#cp daemon-control-dist  daemon-control
添加权限:
chown root.root daemon-control
chmod 700 daemon-control

启动denyhosts
#/usr/share/denyhosts/daemon-control start

加入系统启动服务:
# mv /usr/share/denyhosts/daemon-control denyhosts
# mv denyhosts /etc/init.d/
#chkconfig denyhosts on


配置参数详解:
cat /var/share/denyhosts/denyhosts.cfg

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参数

配置通过邮箱自动报警:
cat /var/share/denyhosts/denyhosts.cfg
ADMIN_EMAIL = ruanshengchang@hexincorp.cn
SMTP_HOST = mail.hexincorp.cn
SMTP_PORT = 25
SMTP_USERNAME=ruanshengchang
SMTP_PASSWORD=1
SMTP_FROM = ruanshengchang@hexincorp.cn
SMTP_SUBJECT = DenyHosts Report


报警邮箱如下:




测试:
在node250上配置denyhosts,在node230上模拟登录到node250
Connecting to 172.16.1.230:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Tue Nov 17 16:52:09 2020 from 172.16.1.1
[root@node230 ~]# ssh root@172.16.1.250
root@172.16.1.250's password:
Last login: Tue Nov 17 09:20:19 2020 from 172.16.1.1        #正常连接
[root@node250 ~]# exit
登出
Connection to 172.16.1.250 closed.
[root@node230 ~]# ssh root@172.16.1.250
root@172.16.1.250's password:                        #密码输入错误 
Permission denied, please try again.        
root@172.16.1.250's password:                        #密码输入错误 
Permission denied, please try again.        
root@172.16.1.250's password:                        #密码输入错误 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).


再次连接已经无法连接了,防疫成功:
[root@node230 ~]# ssh root@172.16.1.250
ssh_exchange_identification: Connection closed by remote host


在node250上查看:
[root@node250 data]#cat  /etc/hosts.deny
#                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: 172.16.1.230        #已加入到hosts.deny文件中


以后可以直接查看hosts.deny文件就能找到攻击ip的记录
# cat  /etc/hosts.deny


注意:
denyhosts工作目录保存着从/var/log/secure中解析的IP地址,如果/etc/hosts.deny中删除了条目,但\denyhosts工作数据目录中没有删除旧的数据,则会自动再加到/etc/hosts.deny文件中
WORK_DIR = /var/lib/denyhosts  # denyhosts工作数据目录


参考:https://www.cnblogs.com/Crixus3714/p/10219321.html

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS