前言
有服务器的朋友多少都知道,黑客真的无处不在,无时无刻都在扫描你的服务器。记得第一次购买服务器的时候,那时安全意识弱什么sshd、mysql都是默认端口,一天下来ssh被黑客爆破上千次。80、443端口服务就更不用说了每天都有异常请求。那么如何防御这些黑客的攻击呢?
发现黑客攻击行为
ssh爆破行为检查,使用root用户输入lastb命令可以查看登陆失败的用户
nginx代理的http、https服务检查,可以查看nginx服务日志,会发现有很多异常的请求如下图
使用fail2ban防御
fail2ban介绍
fail2ban通过监控日志文件来自动检测和禁止恶意IP地址,从而保护服务器免受暴力破解等攻击。常见应用场景:ssh防爆破、web服务SQL注入、跨站攻击、邮件服务器暴力破解等。
fail2ban安装使用
这里我以centos7系统、iptables防火墙,配置fail2ban防止ssh爆破为例
# 安装
sudo yum install epel-release
sudo yum install fail2ban
# 复制默认配置并修改sshd部分,主要是日志路径和端口
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
[sshd]
port = 11223 #sshd端口
logpath = /var/log/secure #监测的日志路径
backend = %(sshd_backend)s
enabled = true #是否启用
# 启动
systemctl restart fail2ban
# 检查服务状态
fail2ban-client status sshd
#删除被ban IP
fail2ban-client set sshd unbanip 192.168.1.11
#查看iptables策略
iptables -vnL
测试验证
使用ssh命令模拟多次登录,在4次输入错误密码后,服务器已无响应。再次连接提示失败。fail2ban已经正常工作,通过服务器ipables策略可以看到已经增加了一条禁止策略。
异常排查
- fail2ban-client status sshd 命令提示“‘sshd’ does not exist”。1)请检查sshd配置中日志文件/etc/log/secure是否存在 2)请复制默认jail.conf在修改
- 操作前备份iptables配置/etc/sysconfig/iptables,我在操作过程中iptables配置莫名丢失
结论
这里以防御ssh爆破为例简单介绍了下fail2ban的使用,其实还有很多其他实用防御场景。
20250330更新
最近发现有些ip每隔10分钟尝试爆破一次,fail2ban效果不好。所以写个脚步把这些ip手工加入黑名单。重启iptables会失效,需要保存到iptables配置文件中才可以持久化
#!/bin/bash
# 使用iptables禁止ip访问
printUsage()
{
echo "用法:"
echo " $0 ban/unban IP"
exit -1
}
if [ $# -ne 2 ]; then
printUsage
fi
if [ "$1" == "ban" ];then
read -p "确认禁止IP[$2]吗?(y/n):" confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
iptables -I INPUT -p tcp -s $2 -j DROP
else
echo "用户取消,退出...."
exit 1
fi
exit
fi
if [ "$1" == "unban" ];then
read -p "确认解禁IP[$2]吗?(y/n):" confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
iptables -D INPUT -p tcp -s $2 -j DROP
else
echo "用户取消,退出...."
exit 1
fi
exit
fi
printUsage
#查看策略:
#iptables -nvL
#汇总爆破ip:
#lastb | head -n 1000 | awk '{print $3}' | sort | uniq -c
#centos7保存iptables配置
#iptables-save > /etc/sysconfig/iptables