Linux防火墙规则如何编写_从基础到进阶全流程讲透【教学】

11次阅读

Linux 防火墙规则核心在于理清数据包流向、匹配条件与动作逻辑,需先明确放行 / 拒绝策略及处理环节;iptables 由 filter、nat、mangle 三表及五链构成,链内规则顺序匹配且命中即止,未匹配时依默认策略处理;配置前须查规则、备份、设超时回滚。

Linux 防火墙规则如何编写_从基础到进阶全流程讲透【教学】

Linux防火墙 规则的核心是理解数据包流向、匹配条件和动作逻辑,不是死记命令。真正写好规则,关键在“想清楚要放行什么、拒绝什么、在哪一环处理”。下面从基础概念到实际配置,一步步讲透。

iptables 基础结构:三张表 + 五条链

iptables 不是单一 工具,而是由表(table)和链(chain)组成的规则容器:

  • filter 表:最常用,负责过滤(ACCEPT/DROP/REJECT),含 INPUT、OUTPUT、FORWARD 链
  • nat 表 :做地址转换(SNAT/DNAT/ 端口 映射),主要用 PREROUTING、POSTROUTING、OUTPUT 链
  • mangle 表:改写数据包头(如 TTL、QoS 标记),较少日常使用

每条链按顺序逐条匹配,一旦命中即执行动作并停止后续匹配(除非用 - j 跳转)。默认策略(policy)决定未匹配时的行为,比如 iptables -P INPUT DROP 表示 INPUT 链默认丢弃所有包——这很安全,但必须先放通 SSH 等必要流量,否则可能锁死远程连接。

写规则前必做的三件事

别急着敲命令,先确认环境、理清需求、留好退路:

  • 查当前规则 iptables -L -n -v(- n 禁 DNS 解析,- v 看包 / 字节 计数);更清晰用iptables-save
  • 备份现有规则iptables-save > /root/iptables-backup-$(date +%F).rules
  • 设置超时自动回滚(防误锁):(sleep 300; iptables-restore,5 分钟后若没手动确认,自动恢复

典型场景规则写法(附说明)

以下规则均基于 filter 表,假设你已设iptables -P INPUT DROP,需显式放行:

  • 允许本地回环通信iptables -A INPUT -i lo -j ACCEPT(- i 指定入接口,lo 是 loopback)
  • 允许已建立的连接返 回流 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT(现代内核推荐用 -m conntrack --ctstate 替代 state 模块)
  • 开放 SSH(仅限某 IP 段)iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT(- s 指定源 IP,–dport 目标端口)
  • 限制 SSH 暴力尝试iptables -A INPUT -p tcp --dport 22 -m recent --name ssh --rcheck --seconds 60 --hitcount 4 -j REJECT,再加一行-A INPUT -p tcp --dport 22 -m recent --name ssh --set -j ACCEPT(首次访问记录,1 分钟内超 3 次就拒绝)
  • 拒绝特定 IP 扫描行为iptables -A INPUT -s 203.0.113.45 -j DROP(DROP 静默丢弃,REJECT 会发 RST/ICMP 提示)

进阶技巧:持久化、日志与调试

重启后规则消失?被拒绝却不知原因?这些是真实运维痛点:

  • 保存规则到文件并开机加载 :Debian/Ubuntu 用iptables-persistent,运行netfilter-persistent save;CentOS/RHEL 7+ 用service iptables save 或直接写入/etc/sysconfig/iptables
  • 给规则加日志便于排查 iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP-DENIED: ",日志出现在/var/log/messagesjournalctl -k | grep HTTP-DENIED
  • 用 tcpdump 辅助验证 :比如tcpdump -i eth0 port 22 看 SSH 包是否真被拦截,再对比 iptables 计数器变化(- v 输出里的 pkts 字段)
  • 注意规则顺序!:- A 是追加到末尾,- I 是插入开头。想让某规则优先生效,用 iptables -I INPUT 1 …… 插到第 1 位

基本上就这些。规则不在多,在准;不求炫技,但求可读、可维护、可回滚。真正上线前,在测试机上模拟攻击(如用 nmap 扫端口、hydra 试爆 SSH)、关掉再开网络服务验证连通性,比背一百条命令都管用。

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-17发表,共计1853字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources