Linux防火墙规则如何编写_关键技巧整理帮助提高效率【教学】

8次阅读

Linux 防火墙规则编写核心是理解流量流向、精准匹配条件、合理组织策略顺序;需明确链与表职责,坚持“默认拒绝”原则,善用匹配模块提升精度,并及时保存、备份与排错。

Linux 防火墙规则如何编写_关键技巧整理帮助提高效率【教学】

Linux防火墙 规则编写核心在于理解流量流向、精准匹配条件、合理组织策略顺序。用好 iptables 或 nftables,关键不是堆砌规则,而是让每一条都可读、可维护、可验证。

明确链(Chain)和表(Table)的职责

iptables 默认有 filter、nat、mangle 三张表,日常最常用的是 filter 表下的 INPUT、OUTPUT、FORWARD 链:

  • INPUT:处理目标是本机的数据包(如 SSH 连接、Web 服务请求)
  • OUTPUT:处理本机主动发出的数据包(如 curl 访问外网)
  • FORWARD:仅在做 路由/ 网关时启用,处理经过本机转发的流量

写规则前先确认你要控制的是哪类流量,再选对链和表,避免在 OUTPUT 链里拦 HTTP 出站请求这类常见误操作。

从“默认拒绝”开始,逐步放行

安全基线应是“先堵后通”。建议初始化策略为:

iptables -P INPUT DROP<br>iptables -P FORWARD DROP<br>iptables -P OUTPUT ACCEPT

然后按需添加白名单规则,例如:

  • 允许本地回环:iptables -A INPUT -i lo -j ACCEPT
  • 允许已建立连接返回:iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  • 开放 SSH端口(建议改非标端口后使用):iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

注意:-A 是追加,-I 是插入(默认插到第一条),调试阶段常用 -I 临时测试,稳定后再用 -A 固化顺序。

善用匹配模块提升精度

基础协议 + 端口只是起点,真实场景常需更细粒度控制:

  • 限速防爆破:iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
  • 按 IP 段放行内网:iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
  • 封禁恶意 IP:iptables -A INPUT -s 203.0.113.45 -j DROP(推荐用 ipset 管理大量 IP)
  • 匹配字符串(谨慎使用):iptables -A INPUT -p tcp --dport 80 -m string --string "wget" --algo bm -j DROP

模块名(如 limit、string、ipset)需内核支持,执行前可用 lsmod | grep xt_ 检查是否加载。

保存、备份与排错不靠猜

规则重启即失效,务必及时保存:

  • Debian/Ubuntu:iptables-save > /etc/iptables/rules.v4
  • RHEL/CentOS:service iptables save 或用 iptables-save > /etc/sysconfig/iptables
  • nftables 用户:nft list ruleset > /etc/nftables.conf

排错技巧:

  • 加日志:在可疑规则后加 -j LOG --log-prefix "FW_DROP: ",再用 dmesgjournalctl -k | grep FW_DROP 查看
  • 模拟测试:用 tcpdump -i eth0 port 22 观察包是否到达,再结合 iptables -L -v -n 看计数器是否增长
  • 备份旧规则:iptables-save > /root/iptables-backup-$(date +%F)

基本上就这些。规则不在多,在准;配置不在快,在稳。每次改完,用 iptables -L -v -n 扫一眼计数器,比反复重启服务更省时间。

text=ZqhQzanResources