Linux 防火墙 Iptables

一、Iptables 概述

  1. 高效稳定:基于内核工作,数据包过滤效率高,能稳定应对高并发网络场景。
  2. 灵活可扩展:通过 "表 - 链 - 规则" 的结构,可适配不同网络环境(如局域网共享上网、服务器发布),且支持丰富的扩展模块。
  3. 易上手:相较于其他防火墙工具,命令逻辑清晰,学习成本较低,同时具备强大的定制能力。

二、Iptables 核心组成

Iptables 的核心是 "表(Table)- 链(Chain)- 规则(Rule)" 的三层结构,理解三者关系是配置的基础。

1. 表(Table):规则的分类集合

表用于归类不同功能的规则,共 5 种常用表,优先级从高到低为:raw > mangle > nat > filter,各表功能与包含的链如下:

表名 核心功能 包含的链
raw 确定是否对数据包进行状态跟踪 OUTPUT、PREROUTING
mangle 修改数据包内容(如打标记)、流量整形 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
nat 网络地址转换(修改源 / 目标 IP / 端口) OUTPUT、PREROUTING、POSTROUTING
filter 数据包过滤(决定放行 / 丢弃) INPUT、OUTPUT、FORWARD

2. 链(Chain):规则的执行序列

链是规则的有序集合,对应数据包在防火墙中的不同处理阶段,共 5 种核心链:

链名 触发场景 作用
PREROUTING 数据包进入防火墙,路由选择前 修改目标地址(如 DNAT)
INPUT 数据包目标为防火墙本机(入站) 过滤入站到本机的数据包
FORWARD 数据包需转发到其他主机(转发) 过滤转发的数据包
OUTPUT 防火墙本机向外发送数据包(出站) 过滤本机出站的数据包
POSTROUTING 数据包路由选择后,即将出站 修改源地址(如 SNAT)

3. 规则(Rule):数据包的处理逻辑

规则是链中的具体指令,每条规则包含 "匹配条件" 和 "控制类型":

  • 匹配条件:如协议(TCP/UDP/ICMP)、源 / 目标 IP、端口、网卡等。
  • 控制类型:如允许(ACCEPT)、丢弃(DROP)、拒绝(REJECT)、地址转换(SNAT/DNAT)等。

规则匹配策略 :数据包按链中规则的顺序自上而下匹配,匹配到即停止后续检查,未匹配任何规则时,执行链的 "默认策略"(如默认 DROP 丢弃所有数据包)。

三、数据包过滤流程

数据包在防火墙中的处理路径分为三类场景,需结合表的优先级和链的顺序理解:

1. 入站数据包(目标为防火墙本机)

路径:PREROUTING(raw→mangle→nat) → 路由选择(判断目标为本机) → INPUT(mangle→filter) → 本机应用程序。

2. 转发数据包(目标为其他主机)

路径:PREROUTING(raw→mangle→nat) → 路由选择(判断需转发) → FORWARD(mangle→filter)POSTROUTING(mangle→nat) → 出站到目标主机。

3. 出站数据包(本机向外发送)

路径:本机应用程序 → 路由选择 → OUTPUT(raw→mangle→nat→filter)POSTROUTING(mangle→nat) → 出站。

四、Iptables 规则配置

Iptables 命令的基本语法为:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]

(注:链名、控制类型需大写,默认表为 filter)

1. 常用管理选项与控制类型

(1)管理选项:规则的增删改查
选项 作用 示例
-A 在链末尾追加规则 iptables -A INPUT -p tcp --dport 22 -j ACCEPT(允许 SSH 入站)
-I 在链开头 / 指定位置插入规则 iptables -I INPUT 2 -p icmp -j DROP(在 INPUT 链第 2 位插入丢弃 ICMP 规则)
-D 删除规则(按序号 / 内容) iptables -D INPUT 3(删除 INPUT 链第 3 条规则)
-F 清空链中所有规则 iptables -F FORWARD(清空 FORWARD 链规则)
-L 列出规则 iptables -t nat -nvL(查看 nat 表规则,数字显示 IP,显示详细统计)
-P 设置链的默认策略 iptables -P INPUT DROP(INPUT 链默认丢弃所有数据包)
-R 修改规则 iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT(修改 INPUT 链第 1 条规则为允许 80 端口)
(2)控制类型:数据包的处理动作
控制类型 作用 适用场景
ACCEPT 允许数据包通过 放行合法流量(如 SSH、HTTP)
DROP 丢弃数据包,不回应 隐藏主机存在(如拒绝恶意 IP 访问)
REJECT 拒绝数据包,返回回应 明确告知对方 "连接被拒绝"
SNAT 修改数据包源地址 局域网共享公网 IP 上网(内→外)
DNAT 修改数据包目标地址 公网访问内网服务器(外→内)
MASQUERADE 动态 SNAT(适配非固定公网 IP) 拨号上网场景(如家庭宽带)
LOG 记录日志到/var/log/messages 流量审计(不影响数据包转发)

2. 匹配条件:精准筛选数据包

匹配条件分为三类,可组合使用实现精准过滤:

(1)通用匹配:无需依赖扩展模块

直接匹配协议、IP、网卡等,示例:

  • 拒绝来自192.168.116.20的所有数据包:iptables -A INPUT -s 192.168.116.20 -j DROP
  • 允许非 ICMP 协议的数据包入站:iptables -A INPUT ! -p icmp -j ACCEPT!表示取反)
(2)隐含匹配:依赖特定协议

需配合-p指定协议(如 TCP/UDP/ICMP),示例:

  • 允许 FTP 端口(20-21)入站:iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT--dport指定目标端口)
  • 禁止别人 ping 本机(丢弃 ICMP 请求包):iptables -A INPUT -p icmp --icmp-type 8 -j DROP--icmp-type 8为 ping 请求)
(3)显式匹配:需指定扩展模块(-m)

需用-m指定模块,支持多端口、IP 范围、连接状态等,示例:

  • 允许 TCP 的 22、80、443 端口入站:iptables -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPTmultiport模块支持多端口)
  • 允许已建立连接的数据包入站:iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPTstate模块匹配连接状态)

五、NAT 地址转换

NAT 是 Iptables 的核心功能之一,用于解决内网 IP 不能直接访问公网、公网不能访问内网服务器的问题,分为 SNAT 和 DNAT 两种场景。

1. SNAT:内网共享公网 IP 上网(内→外)

应用场景

局域网内多台主机通过网关服务器的公网 IP 访问互联网(如公司内网共享一个公网 IP)。

实验环境准备
  • 私网客户端:IP 192.168.1.1/24,网关 192.168.1.254(网关服务器内网网卡)。
  • 网关服务器:双网卡(内网192.168.1.254/24,公网10.0.0.100/8),开启路由转发(echo 1 > /proc/sys/net/ipv4/ip_forward)。
  • 外网 Web 服务器:IP 10.0.0.1/8,开启 HTTP 服务(httpd)。
配置命令
  • 固定公网 IP :将内网192.168.1.0/24的数据包源地址改为公网10.0.0.100
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens33(公网网卡) -j SNAT --to 10.0.0.100
  • 动态公网 IP (如拨号上网):自动使用公网网卡的 IP 伪装:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

2. DNAT:公网访问内网服务器(外→内)

应用场景

将内网服务器(如 Web 服务器)通过网关的公网 IP 发布到互联网,供公网用户访问。

配置命令

假设网关公网 IP 为10.0.0.100,内网 Web 服务器 IP 为192.168.1.2:80,将公网访问10.0.0.100:80的请求转发到内网服务器:
iptables -t nat -A PREROUTING -i ens33(公网网卡) -d 10.0.0.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80

相关推荐
@CLoudbays_Martin112 小时前
CDN是否能有效检测并且同时防御Ddos 和 CC 攻击?
java·服务器·网络·数据库·git·数据库开发·时序数据库
河南博为智能科技有限公司2 小时前
单串口服务器-工业级串口联网解决方案
运维·服务器·物联网·边缘计算
爱喝水的鱼丶2 小时前
SAP-MM:SAP采购组织全面学习指南:从概念到实战配置图解
运维·开发语言·数据库·学习·sap·mm模块·采购组织
Rum_0M2 小时前
服务器内部信息获取
运维·服务器·web安全·网络安全·信息安全·职业技能大赛
Wy_编程2 小时前
高并发服务器-多路IO转接-select
服务器·select·高并发
口嗨农民工3 小时前
linux 时间相关的命令
linux·运维·服务器
三不原则3 小时前
企业级CI/CD全流程实战指南
运维·ci/cd
阿加犀智能3 小时前
使用Langchain生成本地rag知识库并搭载大模型
服务器·python·langchain
楠枬3 小时前
DNS 域名解析
服务器·网络·网络协议