当你的linux服务器暴露在互联网之中,将会遭到互联网上的扫描软件进行扫描,并试图破解SSH登录口令,这将对你的服务器构成威胁。 DenyHosts可以阻止试图破解SSH登录口令,它会分析/var/log/secure等日志文件,当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到 自动屏蔽 该IP的目的。 一、实验环境 3 台Centos 7.4 Server ,1台为被攻击Server,另2 台为 攻击Server Centos 7.4 系统,自行安装。 软件:DenyHosts-2.6.tar.gz 下载地址:https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz 二、IP 地址规划: 被攻击Server:192.168.189.236 hostname:zab02 攻击Server01:192.168.189.5 hostname:attack01 攻击Server02:192.168.189.253 hostname:attack02 三、安装DenyHosts-2.6.tar.gz 下载DenyHosts-2.6.tar.gz cd /opt wget https://nchc.dl.sourceforge.net/project/denyhosts/denyhosts/2.6/DenyHosts-2.6.tar.gz tar zxvf DenyHosts-2.6.tar.gz cd /opt/DenyHosts-2.6/ python setup.py install cd /usr/share/denyhosts/ cp daemon-control-dist daemon-control cp denyhosts.cfg-dist denyhosts.cfg 默认的denyhosts.cfg 是简化版,没有注释 denyhosts.cfg-dist 是详细版。 四、修改denyhosts 配置文件 vim /usr/share/denyhosts/denyhosts.cfg![]()
![]()
![]()
![]()
![]()
![]()
配置文件其他地方,可以不用修改。 启动服务: /usr/share/denyhosts/daemon-control start & systemctl restart rsyslog.service 查看状态:
进程查看:
五、攻击测试: 在 attack01 attack02 上面操作: attack01:用root 帐户测试
![]()
![]()
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 如果觉得 ssh 连接,尝试密码次数太多,vim /etc/ssh/sshd_config
最后要记得重启sshd 服务。 systemctl restart sshd ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 次过后,再登录:被拒绝
被攻击Server zab02 查看hosts.deny
cat /var/log/secure 被攻击Server zab02 查看安全日志
+++++++++++++++++++++++++++++++++++++++ attack02:用无效用户测试
![]()
连接被拒绝:
被攻击Server zab02 查看hosts.deny
被攻击Server zab02 查看安全日志
六、解封IP 当一个IP 被denyhosts 拒绝后,不止会把这个IP添加到 /etc/hosts.deny这个文件中,还会把它写到 denyhosts的工作目录下面的相应文件里面:
直接从/etc/hosts.deny删除是不行的,还需要从其他文件里面清除。 手工删除太慢,使用脚本解封IP,更快。 脚本文件: cd /opt && vim auto_jf.sh #!/bin/bash #2019-01-20 19:15 #DenyHosts 2.6 auto remove deny ip #by xucong ################################ DENY_DIR="/usr/share/denyhosts/data" DENY_IP=$1 if [ $# -eq 0 ];then echo -e "\033[32m--------------------------\033[0m" echo -e "\033[32mUsage:{/bin/bash $0 1.1.1.1|192.168.1.1.100|help}\033[0m" exit 0 fi if [ $1 == "help" ] ;then echo -e "\033m[32m--------------------------\033[0m" echo -e "\033[32mUsage:{/bin/bash $0 1.1.1.1|192.168.1.1.100|help}\033[0m" exit 1 fi for i in `ls $DENY_DIR/` do sed -i "/$DENY_IP/d" $DENY_DIR/$i done sed -i "/$DENY_IP/d" /etc/hosts.deny echo "$DENY_IP" >>$DENY_DIR/allowed-hosts echo -e "\033[32m----------------------\033[0m" sleep 1 echo -e "\033[32m The Deny IP removed Success.\033[0m" /usr/share/denyhosts/daemon-control restart 解封 IP (192.168.189.5) 测试:在 被攻击Server zab02 上执行 解封前:(在attack01 上面操作)
运行脚本:(在zab02上面执行) cd /opt ./auto_jf.sh 192.168.189.5 ###(脚本后面,跟要解封的IP)
在attack01 上面,重新登录 服务器(zab02)
++++++++++++++++++++++++++ END ++++++++++++++++++++++++
配置文件其他地方,可以不用修改。
启动服务:
/usr/share/denyhosts/daemon-control start &
systemctl restart rsyslog.service
查看状态:
进程查看:
五、攻击测试:
在 attack01 attack02 上面操作:
attack01:用root 帐户测试
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如果觉得 ssh 连接,尝试密码次数太多,vim /etc/ssh/sshd_config
最后要记得重启sshd 服务。
systemctl restart sshd
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 次过后,再登录:被拒绝
被攻击Server zab02 查看hosts.deny
cat /var/log/secure 被攻击Server zab02 查看安全日志
+++++++++++++++++++++++++++++++++++++++
连接被拒绝:
被攻击Server zab02 查看hosts.deny
被攻击Server zab02 查看安全日志
六、解封IP
当一个IP 被denyhosts 拒绝后,不止会把这个IP添加到 /etc/hosts.deny这个文件中,还会把它写到 denyhosts的工作目录下面的相应文件里面:
直接从/etc/hosts.deny删除是不行的,还需要从其他文件里面清除。
手工删除太慢,使用脚本解封IP,更快。
脚本文件:
cd /opt && vim auto_jf.sh
#!/bin/bash
#2019-01-20 19:15
#DenyHosts 2.6 auto remove deny ip
#by xucong
################################
DENY_DIR="/usr/share/denyhosts/data"
DENY_IP=$1
if [ $# -eq 0 ];then
echo -e "\033[32m--------------------------\033[0m"
echo -e "\033[32mUsage:{/bin/bash $0 1.1.1.1|192.168.1.1.100|help}\033[0m"
exit 0
fi
if [ $1 == "help" ] ;then
echo -e "\033m[32m--------------------------\033[0m"
echo -e "\033[32mUsage:{/bin/bash $0 1.1.1.1|192.168.1.1.100|help}\033[0m"
exit 1
fi
for i in `ls $DENY_DIR/`
do
sed -i "/$DENY_IP/d" $DENY_DIR/$i
done
sed -i "/$DENY_IP/d" /etc/hosts.deny
echo "$DENY_IP" >>$DENY_DIR/allowed-hosts
echo -e "\033[32m----------------------\033[0m"
sleep 1
echo -e "\033[32m The Deny IP removed Success.\033[0m"
/usr/share/denyhosts/daemon-control restart
解封 IP (192.168.189.5) 测试:在 被攻击Server zab02 上执行
解封前:(在attack01 上面操作)
运行脚本:(在zab02上面执行)
cd /opt
./auto_jf.sh 192.168.189.5 ###(脚本后面,跟要解封的IP)
在attack01 上面,重新登录 服务器(zab02)
++++++++++++++++++++++++++ END ++++++++++++++++++++++++