Administrator
发布于 2025-03-18 / 10 阅读
0
0

linux防火墙-iptables

一、基本概念

iptables 是 Linux 系统中基于内核态 Netfilter 框架的防火墙工具,用于管理网络数据包的过滤、地址转换(NAT)、端口转发等。它通过用户空间的命令行工具操作内核模块(如 xtables),实现对数据包的处理和转发控制。默认处理 IPv4 数据包,IPv6 需使用 ip6tables

二、核心架构:四表五链

iptables 的核心结构由 ​表(Tables)​ 和 ​链(Chains)​ 组成,不同表处理不同类型的数据包操作,链则定义了数据包的流向规则。

  1. 四表

    • filter 表​(默认表):负责数据包过滤,控制流入流出主机的流量。内置链:

      • INPUT:处理目标为本机的数据包。

      • OUTPUT:处理本机发出的数据包。

      • FORWARD:处理需转发的数据包。

    • nat 表:实现网络地址转换(NAT),用于共享上网或端口映射。内置链:

      • PREROUTING:修改目的地址(DNAT)。

      • POSTROUTING:修改源地址(SNAT)。

      • OUTPUT:处理本机生成的 NAT 数据包。

    • mangle 表:修改数据包头部信息(如 TTL、优先级)。支持所有内置链(如 PREROUTINGINPUT 等)。

    • raw 表:用于异常处理或连接跟踪前的操作,支持 PREROUTINGOUTPUT 链。

  2. 五链

    • PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING。数据包按此顺序流经各表对应的链。

三、常见命令与配置

  1. 基本操作

    • 查看规则:iptables -L -n(列出 filter 表规则)

      iptables -L -n --line-number (查询详细规则序号)

    • 清空规则:iptables -F(临时生效,重启后恢复)

      sudo iptables -D <chain_name> <rule_number> (将 <chain_name> 替换为规则所在的链(如 INPUT、OUTPUT、FORWARD 等),将 <rule_number> 替换为要删除的规则的编号。)

    sudo iptables -D <chain_name> -m <match_criteria> -j <target> (将 <chain_name> 替换为规则所在的链,<match_criteria> 替换为匹配条件,<target> 替换为目标动作。)

    • 保存规则:service iptables save(保存至 /etc/sysconfig/iptables

    sudo iptables-save > /etc/iptables/rules.v4 (这将 iptables 规则保存到 /etc/iptables/rules.v4 文件中,保存ipv6使用ip6tables-save。)

    • 恢复规则 :sudo iptables-restore < /etc/iptables/rules.v4 (这将加载之前保存的 IPv4 规则。)

  2. 规则管理

添加规则

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT  # 允许指定网段 SSH 访问
iptables -A INPUT -p tcp --dport 80 -j DROP                      # 拒绝 HTTP 访问

插入/删除规则

iptables -I INPUT 1 -s 10.0.0.5 -j DROP      # 在第一条插入规则
iptables -A INPUT 1 -s 10.0.0.5 -j DROP      # 在最后一条插入规则
iptables -D INPUT 2                          # 删除 INPUT 链第二条规则

默认策略

iptables -P INPUT DROP    # 默认拒绝所有入站流量(需谨慎配置)


评论