在当今互联网高速发展的时代,服务器安全显得尤为重要。恶意访问、SSH暴力破解等网络安全威胁层出不穷,如何有效地保护我们的服务器免受攻击成为了每个运维人员和网络管理员必须面对的问题。今天,我们就来分享一些实用的脚本,帮助你轻松屏蔽恶意IP,提升服务器的安全性!
一、屏蔽每分钟访问超过200的IP
面对恶意的频繁访问,我们可以采取屏蔽IP的策略。以下是通过分析Nginx访问日志来屏蔽恶意IP的脚本:
DATE=$(date +%d/%b/%Y:%H:%M)
# 通过tail读取最新的5000行Nginx访问日志,筛选出当前时间的记录,并统计每个IP的访问次数
# 若某个IP的访问次数超过100次(可根据实际需求调整),则视为异常IP
ABNORMAL_IP=$(tail -n5000 access.log | grep $DATE | awk '{a[$1]++}END{for(i in a)if(a[i]>100)print i}')
# 遍历异常IP列表,检查iptables规则中是否已存在该IP的屏蔽规则
# 若不存在,则添加屏蔽规则,阻止该IP的访问
for IP in $ABNORMAL_IP; do
if [ $(iptables -vnL | grep -c "$IP") -eq 0 ]; then
iptables -I INPUT -s $IP -j DROP
fi
done
脚本解析:
- 首先,我们通过
date
命令获取当前的日期和时间,以便后续筛选日志。 - 使用
tail
命令读取Nginx访问日志的最新5000行,通过grep
和awk
筛选出当前时间的记录,并统计每个IP的访问次数。若某个IP的访问次数超过设定的阈值(这里为100次),则将其视为异常IP。 - 遍历异常IP列表,检查iptables规则中是否已存在该IP的屏蔽规则。若不存在,则使用
iptables
命令添加屏蔽规则,阻止该IP的访问。
二、屏蔽每分钟SSH尝试登录超过10次的IP
对于SSH暴力破解等恶意登录行为,我们也可以采取类似的策略进行屏蔽。以下是通过分析SSH登录日志来屏蔽恶意IP的脚本:
方法1:通过lastb获取登录状态
由于篇幅限制,这里仅展示部分关键代码。你可以通过lastb
命令获取最近的登录记录,然后筛选出当前时间的记录,并统计每个IP的登录尝试次数。若某个IP的登录尝试次数超过设定的阈值(如10次),则将其视为异常IP,并进行屏蔽。
方法2:通过日志获取登录状态
对于使用OpenSSH的服务器,你可以通过分析/var/log/auth.log
日志来屏蔽恶意IP。以下是相应的脚本示例:
DATE=$(date +"%b %d %H")
# 通过tail读取最新的10000行SSH登录日志,筛选出当前时间的记录,并统计每个IP的登录尝试次数
# 若某个IP的登录尝试次数超过5次(可根据实际需求调整),则视为异常IP
ABNORMAL_IP="$(tail -n10000 /var/log/auth.log | grep "$DATE" | awk '/Failed/{a[$(NF-3)]++}END{for(i in a)if(a[i]>5)print i}')"
# 遍历异常IP列表,检查iptables规则中是否已存在该IP的屏蔽规则
# 若不存在,则添加屏蔽规则,并记录操作日志
for IP in $ABNORMAL_IP; do
if [ $(iptables -vnL | grep -c "$IP") -eq 0 ]; then
iptables -A INPUT -s $IP -j DROP
echo "$(date +"%F %T") - iptables -A INPUT -s $IP -j DROP" >> ~/ssh-login-limit.log
fi
done
脚本解析:
- 与前面类似,我们首先通过
date
命令获取当前的日期和时间。 - 使用
tail
命令读取SSH登录日志的最新10000行,通过grep
和awk
筛选出当前时间的记录,并统计每个IP的登录尝试次数。若某个IP的登录尝试次数超过设定的阈值(这里为5次),则将其视为异常IP。 - 遍历异常IP列表,检查iptables规则中是否已存在该IP的屏蔽规则。若不存在,则使用
iptables
命令添加屏蔽规则,阻止该IP的访问,并将操作记录到日志文件中。
总结:
通过以上两个脚本示例,你可以轻松地屏蔽那些频繁访问或尝试SSH登录的恶意IP地址。这些脚本可以根据你的实际需求进行调整和优化。同时,请注意定期检查和更新你的iptables规则以及相关的日志文件以确保服务器的安全。在网络安全日益重要的今天希望这些实用的小技巧能帮助你更好地保护你的服务器免受攻击!
© 版权声明
文章版权归作者所有,未经允许请勿转载。