验(一):阻止远程IP进行ssh登录密码猜解
#实验概述:
UPWEN公司的Web服务器最近经常受到外部的渗透测试,系统日志log里记录了大量的远程IP尝试密码猜解的方式频繁ssh登录Web服务器;由于Web服务器的重要性,需要通过防御手段来阻止、减少密码频繁猜解的动作。
UPWEN公司的UP楠哥编写一个脚本/tmp/checkip.sh,实现每5分钟检查一次,如果发现通过ssh登录失败次数超过10次,自动将此远程IP放入tcp_Wrapper的黑名单中予以禁止防问,这样可以有效的减少频繁密码猜解。
接下来,我们查看如何具体实现。
#环境描述:
操作系统:Centos7.x、RHEL8.x。
#具体实现:
vim /tmp/checkip.sh
#!/bin/bash
#定义休眠时间
sleeptime=300
#定义通过ssh登录失败次数
num=10
#定义黑名单文件
file=/etc/hosts.deny
#无限循环
while true;do
#将失败登录的记录逐行读入变量
lastb | grep ssh|awk -F "[ ]+" '{print $3}'|uniq -c | while read conn ip;do
#判断失败次数
if [ "$conn" -ge "$num" ];then
#判断记录的IP是否存在
egrep -q ^sshd.*$ip $file
#如果不存在记录,将追加记录至指定黑名单文件
[ $? -ne 0 ] && echo "sshd:$ip" >> $file
fi
done
sleep $sleeptime
done
#结果:
通过终端工具进行通过ssh登录失败次数10次以上,达到频繁的交互式登录的效果。
此时,UP楠哥所写的shell脚本监控到非法登录到10次以上,会把此远程IP送到/etc/hosts.deny中,触发了tcp_tcp_wrappers,实现无法基于ssh进行远程登录。
#知识点:
tcp_wrappers机制;
shell脚本中的while循环;
shell脚本中的if判断语句;
awk 文本处理工具。