当你的 Linux 服务器暴露在互联网之中,该服务器将会遭到互联网上的扫描软件进行扫描,并试图猜测SSH登录口令。你会发现,每天会有多条SSH登录失败纪录。那些扫描工具将对你的服务器构成威胁,你必须设置复杂登录口令,并将尝试多次登录失败的IP给阻止掉,让其在一段时间内不能访问该服务器。
¶1. denyhosts介绍
denyhosts
是Python
语言写的一个程序,它会分析sshd
的日志文件(/var/log/secure
),当发现重 复的攻击时就会记录IP
到/etc/hosts.deny
文件,从而达到自动屏IP
的功能。
¶2. 下载和安装
1 | wget https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz #下载 |
¶3. 配置
此配置为可选项,因为原本就已经有默认的配置了。
1 | 3.编辑配置文件denyhosts.cfg |
更多配置说明:
1 | ########### THESE SETTINGS ARE REQUIRED ############ |
¶4.启动denyhosts
1 | ./daemon-control start |
可以使用命令ps -ef | grep denyhosts
查看是否运行成功。如下结果表示运行成功。
1 | [root@host denyhosts]# ps -ef | grep denyhosts |
¶5.设置开机自动启动
让denyhosts
每次重启后自动启动。设置自动启动可以通过两种方法进行。
第一种是将denyhosts
作为守护进程服务运行,这种方法可以通过/etc/init.d/denyhosts
命令来控制其状态。方法如下:
1 | cd /etc/init.d |
或者用以下命令通过chkconfig
工具来管理更方便。
1 | cd /etc/init.d |
第二种是将denyhosts
直接加入rc.local
中自动启动(类似于Windows
中的“启动文件夹”):
1 | echo '/usr/share/denyhosts/daemon-control start' >> /etc/rc.local |
如果想查看已经被阻止的IP
,查看/etc/hosts.deny
文件即可。如下:
1 | [root@host ~]# cat /etc/hosts.deny |
¶6. 解禁ip
编辑/etc/hosts.deny
。然后删除或者注释掉对应的sshd
即可。如以下用注释的方式解禁:
1 | [root@host ~]# vim /etc/hosts.deny |
如果想删除一个已经禁止的主机IP,只在/etc/hosts.deny
删除是没用的。需要进入/usr/share/denyhosts/data/
目录对以下文件一个个删除你想取消的主机IP才行。
/usr/share/denyhosts/data/hosts
/usr/share/denyhosts/data/hosts-restricted
/usr/share/denyhosts/data/hosts-root
/usr/share/denyhosts/data/hosts-valid
/usr/share/denyhosts/data/users-hosts
你可以执行命令sudo grep 120.35.33.27 /usr/share/denyhosts/data/*
查看具体文件ip为“120.35.33.27”的具体位置
但如果这样一个有个操作确实很麻烦,不过机智的我在网上找了一个脚本(denyhosts_removeip.sh
),这个脚本可以快速的解决这个问题。其内容如下:
1 | !/bin/bash |
执行脚本清除denyhosts某个IP的命令如下:
1 | bash denyhosts_removeip.sh 10.10.10.10 |
参考教程: