iptables 深度讲解(概念+示例)

1. iptables 核心概念

iptables 是 Linux 内核的防火墙工具,用于管理网络数据包的过滤、网络地址转换(NAT)和流量控制。其核心结构如下:

组件说明
表(Tables)按功能分类的规则集合,默认包含 filternatmangleraw 四种表。
链(Chains)规则执行的路径,如 INPUT(处理入站流量)、OUTPUT(处理出站流量)等。
规则(Rules)定义数据包匹配条件和处理动作(如允许、拒绝、重定向)。

2. 常用表与链的作用
表名用途常用链
filter默认表,用于数据包过滤(允许/拒绝流量)。INPUTFORWARDOUTPUT
nat网络地址转换(如端口转发、共享上网)。PREROUTINGPOSTROUTING
mangle修改数据包内容(如 TTL、QoS 标记)。PREROUTINGPOSTROUTING
raw绕过连接跟踪机制,用于高性能场景。PREROUTINGOUTPUT

3. 核心命令语法
iptables -t <表名> <操作> <链名> [匹配条件] -j <动作>
  • 常用操作

    • -A:追加规则到链末尾。

    • -I:插入规则到链开头(或指定位置)。

    • -D:删除规则。

    • -F:清空链中所有规则。

    • -L:列出规则。

  • 常用动作

    • ACCEPT:允许数据包通过。

    • DROP:静默丢弃数据包。

    • REJECT:拒绝并返回错误(如 ICMP 不可达)。

    • DNAT:目标地址转换(用于端口转发)。

    • SNAT:源地址转换(用于共享上网)。

    • LOG:记录日志(需配合 --log-prefix 使用)。


4. 常用匹配条件
匹配条件说明示例
-p <协议>匹配协议(如 tcpudpicmp)。-p tcp
--dport <端口>匹配目标端口。--dport 80
--sport <端口>匹配源端口。--sport 1024:65535
-s <源地址>匹配源 IP 或网段。-s 192.168.1.0/24
-d <目标地址>匹配目标 IP 或网段。-d 10.0.0.1
-i <网络接口>匹配输入接口(如 eth0)。-i eth0
-o <网络接口>匹配输出接口(如 eth1)。-o eth1
-m <扩展模块>使用扩展模块(如 statemultiport)。-m state --state RELATED,ESTABLISHED

5. 典型示例与场景
示例 1:基本防火墙规则
# 允许已建立的连接和回环接口流量
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# 允许 SSH 访问(端口 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 拒绝所有其他入站流量
iptables -A INPUT -j DROP
  • 作用:仅允许 SSH 和本地回环流量,其他流量全部拒绝。


示例 2:端口转发(DNAT)
# 将公网 80 端口的 HTTP 流量转发到内网服务器 192.168.1.100:80
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:80
# 允许转发流量
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
# 开启 IP 转发(需修改 sysctl.conf 永久生效)
echo 1 > /proc/sys/net/ipv4/ip_forward
  • 场景:将外网 HTTP 请求转发到内网 Web 服务器。


示例 3:共享上网(SNAT)
# 将内网 192.168.1.0/24 的流量通过 eth0 共享公网 IP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 1.2.3.4
  • 场景:内网设备通过网关的公网 IP 访问互联网。


示例 4:限速与流量控制
# 限制单个 IP 对 80 端口的访问速率为 100 包/秒
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/sec -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
  • 作用:防止 DDoS 攻击或滥用。


6. 注意事项
  1. 规则顺序:规则按从上到下匹配,顺序错误可能导致意外结果。

  2. 持久化配置:重启后规则丢失,需通过以下方式保存:

    iptables-save > /etc/iptables/rules.v4  # 保存 IPv4 规则
    iptables-restore < /etc/iptables/rules.v4  # 恢复规则
  3. 日志调试:使用 LOG 动作记录匹配的流量:

    iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH Attempt: "
  4. 兼容性:现代 Linux 系统推荐使用 nftables(iptables 的替代品)。


7. 查看 iptables 表的命令
 查看所有表的规则(默认显示 filter 表)
iptables -L
  • 输出示例

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
    
    Chain FORWARD (policy DROP)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
8. 查看指定表的规则
iptables -t <表名> -L
  • 常用表名

    • filter(默认表,可省略 -t filter

    • nat(网络地址转换)

    • mangle(数据包修改)

    • raw(绕过连接跟踪)

  • 示例

    iptables -t nat -L  # 查看 NAT 表规则
    iptables -t mangle -L  # 查看 mangle 表规则

    9. 显示规则详情(含计数器)

iptables -L -v
  • 参数说明

    • -v:显示详细信息(如数据包计数、字节计数)。

    • -n:禁用 IP 和端口反向解析(加快显示速度)。

    • --line-numbers:显示规则的行号(便于删除或插入规则)。

  • 示例

    iptables -t nat -L -v -n --line-numbers

    输出示例

    Chain PREROUTING (policy ACCEPT 100 packets, 15000 bytes)
    num   pkts bytes target     prot opt in     out     source               destination
    1     10   1500 DNAT       tcp  --  eth0   *       0.0.0.0/0            81.6.63.254         tcp dpt:53 to:192.168.100.100

    10. 查看特定链的规则

iptables -L <链名>
  • 示例

    iptables -L INPUT  # 仅查看 INPUT 链的规则
    iptables -t nat -L PREROUTING  # 查看 NAT 表的 PREROUTING 链

    11. 以规则原始格式显示(适合保存配置)

iptables-save
  • 输出示例

    *nat
    :PREROUTING ACCEPT [100:15000]
    -A PREROUTING -d 81.6.63.254/32 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.100.100
    COMMIT

    用途:此格式可直接用于 iptables-restore 恢复规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值