iptables防火墙完整安全规则拦截恶意扫描

核心答案:
iptables 是 Linux 自带的包过滤防火墙,通过配置 INPUT、FORWARD、OUTPUT 链的规则,可以精确控制进出服务器的数据包。拦截恶意扫描的核心思路是:限制同源 IP 的连接频率、丢弃非法标志数据包(如 XMAS 扫描、NULL 扫描)、屏蔽常见扫描端口和 ICMP 请求。下文会给出可直接套用的命令集,适用于 CentOS 7+ / Ubuntu 20.04+ 等主流发行版。

准备工作:检查 iptables 是否可用

在开始配置前,先确认你的服务器已安装 iptables。
使用以下命令:

sudo iptables -L -n -v

如果返回规则列表(可能为空),说明 iptables 已存在。
若提示 command not found,则需要安装:

  • CentOS / RHEL:sudo yum install iptables-services -y
  • Ubuntu / Debian:sudo apt install iptables -y

安装后启动并设置开机自启:

sudo systemctl start iptables
sudo systemctl enable iptables

注意:云服务器(如阿里云、腾讯云、泽御云)通常还配有外部防火墙/安全组,建议先开放 SSH 端口(如 22),再配置 iptables,避免“把自己关在外面”。

配置完整拦截规则:按层防守

以下规则按顺序执行,直接在终端粘贴即可。

1. 清除默认规则并设置策略

sudo iptables -F
sudo iptables -X
sudo iptables -Z
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

解释:清空所有规则,将 INPUT 链默认策略改为“丢弃”,只允许明确放行的流量进入。
OUTPUT 保持允许,确保服务器能正常对外通信。

2. 放行必要流量(SSH、回环、已建立连接)

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

若你有 Web 服务,额外加:

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

3. 拦截常见扫描特征

XMAS 扫描(标志位全为 1):

sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

NULL 扫描(标志位全为 0):

sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

SYN Flood 防御(限制每秒新连接数):

sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

ICMP 洪水(Ping 攻击):

sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

4. 限制 IP 连接频率(防端口扫描)

sudo iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 10 -j REJECT
sudo iptables -A INPUT -p tcp --syn -m recent --name portscan --set
sudo iptables -A INPUT -p tcp --syn -m recent --name portscan --rcheck --seconds 60 --hitcount 20 -j DROP

说明:第一个规则限制单个 IP 并发 TCP 连接数不超过 10;
后两个用 recent 模块跟踪新连接,60 秒内超过 20 次则丢弃后续包。

5. 允许特定可信 IP 绕过限制(可选)

sudo iptables -I INPUT 1 -s 你的可信IP -j ACCEPT

避坑指南:别踩这些雷

  • 顺序至关重要:iptables 规则从上到下匹配,-I 插入到链首,-A 追加到链尾。务必先放行 SSH,再执行 DROP 策略,否则自己会断开连接。
  • 临时测试:建议先用 -j LOG --log-prefix "iptables: " 记录被丢弃的包,而不是直接 DROP。观察日志没问题再改成 DROP。
  • 保存规则:CentOS 用 service iptables saveiptables-save > /etc/sysconfig/iptables;Ubuntu 用 netfilter-persistent save(需提前安装 iptables-persistent)。重启后规则不会丢失。
  • 不影响业务端口:若服务器运行数据库(3306)、Redis(6379)等,记得加 -A INPUT -p tcp --dport 相应端口 -j ACCEPT

效果验证:检查是否生效

用扫描工具或命令自检:

# 查看当前规则
sudo iptables -L -n -v --line-numbers

# 模拟端口扫描(从另一台机器执行)
nmap -sS 你的服务器IP

如果规则生效,扫描结果会显示大量端口 filtered,且未放行的端口不会返回任何信息。
你也可以检查 /var/log/messages/var/log/syslog 中的 iptables 日志。

常见问题解答

Q1: iptables 配置后 SSH 连不上了怎么办?

答:
立即登录云服务器控制台(VNC 或 Web Shell),
执行 sudo iptables -P INPUT ACCEPT 临时放行所有流量,
然后检查 SSH 端口规则是否写错了。

Q2: 规则太多,重启后失效了?

答:确认已按“避坑指南”第3点保存规则。
另外,某些系统(如 Ubuntu)默认不自动加载,需要安装 iptables-persistent 或编写 systemd 服务。

Q3: 如何临时关闭所有 iptables 规则?

答:sudo iptables -P INPUT ACCEPT && sudo iptables -F 将默认策略改为接受并清空规则。
恢复时重新执行配置步骤即可。

Q4: 这些规则能拦截所有恶意流量吗?

答:不能。
它们主要针对常见的端口扫描、SYN Flood、ICMP 洪水等。
更高级的攻击(如应用层 DDoS)需要结合 fail2ban、web 应用防火墙(WAF)或云高防服务。
建议将 iptables 作为第一道防线,配合专业安全工具使用。

分享到:
上一篇
Shell脚本批量运维多台住宅Linux服务器
下一篇
关闭SELinux适配宝塔建站环境配置方案
1
系统公告

机房迁移升级通知

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