服务器防火墙拦截恶意扫描:新手配置实操指南

开头:恶意扫描不是小事,学会防火墙拦截是关键

如果你的服务器突然变慢、日志里出现大量重复IP尝试登录SSH,或者被安全厂商告知“存在被扫描风险”,那你需要立刻配置服务器防火墙拦截恶意扫描
本文分三套方案(iptables、fail2ban、宝塔面板),从零开始,让你亲手关上门。

准备条件:开始前先确认三件事

  • 你有服务器的 root 权限 或能使用 sudo
  • 系统为 Linux(以 CentOS 7/8、Ubuntu 20.04 为例)。
  • 如果你用宝塔面板,确保已安装 Nginx 或 Apache(防火墙功能需面板支持)。

方案一:用 iptables 手动封 IP(适合临时且精准)

iptables 是 Linux 自带防火墙,直接操作内核过滤包。
以下命令需谨慎,建议先备份当前规则:

# 保存现有规则(CentOS)
iptables-save > /root/iptables.rules.bak
# Ubuntu 使用 iptables-persistent 或 netfilter-persistent

1. 查看当前有哪些恶意 IP

先通过 lastbjournalctl 筛选出尝试登录失败的 IP:

lastb | awk '{print $3}' | sort | uniq -c | sort -rn | head -10

把排名靠前且不认识的 IP 记下来。

2. 用 iptables 阻止单个 IP

iptables -A INPUT -s 192.168.1.100 -j DROP

替换 192.168.1.100 为实际恶意 IP。
这条规则会丢弃来自该 IP 的所有数据包。

3. 限制对 SSH 端口的尝试频率(防暴力扫描)

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

效果:同一 IP 在 60 秒内建立超过 4 次 SSH 新连接,后续连接会被丢弃。

4. 保存规则使其重启生效

CentOS 7:service iptables save(需安装 iptables-services)
Ubuntu:iptables-save > /etc/iptables/rules.v4

方案二:fail2ban——自动拦截、省心省力

fail2ban 会扫描日志文件,把尝试多次失败的 IP 自动加入防火墙黑名单。

安装与配置

# CentOS
yum install epel-release -y && yum install fail2ban -y
# Ubuntu
apt update && apt install fail2ban -y

创建本地配置文件 /etc/fail2ban/jail.local

[DEFAULT]
bantime  = 3600         # 封禁1小时
findtime  = 600         # 检测10分钟内的失败次数
maxretry = 3            # 超过3次就封

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s

启动并验证

systemctl enable fail2ban --now
fail2ban-client status sshd

你会看到被封的 IP 列表。
如果想手动解封某个 IP:fail2ban-client set sshd unbanip 192.168.1.100

方案三:宝塔面板防火墙(适合不会命令行的用户)

登录宝塔后台 -> 点击左侧“安全” -> 在“防火墙”标签下:

  • 放行端口:确保 80、443 等业务端口已放行。
  • 屏蔽 IP:点击“添加规则”,选择“屏蔽”,填入恶意 IP。
  • 使用“CC防御”:可在“网站” -> 对应站点 -> “高级设置”中开启防 CC,限制单 IP 连接数。

宝塔面板会帮你自动调用 iptables,无需手动输入命令。

避坑指南:新手最容易翻车的三个地方

  1. 把自己封在外面:操作 iptables 前,先用 iptables -P INPUT ACCEPT 设默认允许,配置完成后再改回 DROP。更安全:先开一个 SSH 会话做探测,不要关闭当前连接。
  2. fail2ban 没有生效:检查日志路径是否正确(用 fail2ban-client status sshdCurrently failed 数量是否为 0),如果系统使用 Journald 日志,需按官方文档调整 logpath
  3. 宝塔防火墙规则和系统 iptables 冲突:宝塔会覆盖自定义 iptables 规则,建议统一在面板中管理;如果手动添加规则后重启面板,可能丢失,需在面板“安全”里添加。

效果验证:怎么知道拦截成功?

  • 执行 iptables -L -n,查看是否有 DROP 条目。
  • fail2ban-client status sshd 能看到 banned IP list。
  • 在宝塔面板“安全 -> 防火墙”中查看已屏蔽 IP。
  • 更直观:从另一台机器用被屏蔽的 IP 尝试 SSH,应直接超时或拒绝连接。

常见问题解答

Q:我不想封整个 IP,能只限制端口扫描吗?
A:可以用 hashlimit 模块限制每分钟新建连接数,如:iptables -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-name http --hashlimit-above 30/minute --hashlimit-burst 60 -j DROP

Q:我的服务器被 DDoS 攻击,这些方法够用吗?
A:针对应用层 CC 攻击,fail2ban 和 iptables 有一定效果;但大流量 DDoS 需要云厂商的清洗服务(如阿里云高防、Cloudflare)。

Q:重启后规则全丢了怎么办?
A:确保保存了规则(service iptables save)并启用 iptables-services 服务;fail2ban 会自动恢复,宝塔面板每次启动也会重新加载。

结语

配置服务器防火墙拦截恶意扫描并不难,关键在于选对方案并做好持久化。
建议零基础用户先用宝塔面板 + fail2ban 组合,业务稳定后再深入 iptables 自定义规则。
如果你在操作过程中遇到“规则没生效”或“把自己封禁”,请回头检查避坑部分,多半能解决。

分享到:
上一篇
服务器硬件选购住宅家用机型:家用服务器硬件选购指南
下一篇
服务器后门进程隐藏检测方法,新手也能看懂的操作指南
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意