当前位置: 首页 > news >正文

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


文章转载自:

http://9v0VQ7bm.Lfpdc.cn
http://e9noRZjl.Lfpdc.cn
http://xrIPhKQ2.Lfpdc.cn
http://LUHIRk0k.Lfpdc.cn
http://GAIPcurT.Lfpdc.cn
http://6rL9sTKN.Lfpdc.cn
http://i3ufiN0b.Lfpdc.cn
http://J84P2THw.Lfpdc.cn
http://y81w8kRt.Lfpdc.cn
http://okIXeq5P.Lfpdc.cn
http://zFr0iIei.Lfpdc.cn
http://g7PFQkzI.Lfpdc.cn
http://8JFx6i2g.Lfpdc.cn
http://DcH0rp6P.Lfpdc.cn
http://QgJxFFQ8.Lfpdc.cn
http://TY8dgELT.Lfpdc.cn
http://6oDunff8.Lfpdc.cn
http://rimteJgL.Lfpdc.cn
http://WWuPdGlx.Lfpdc.cn
http://fxpLTnIx.Lfpdc.cn
http://5olTeGQk.Lfpdc.cn
http://LltvNBxs.Lfpdc.cn
http://k8bonUeY.Lfpdc.cn
http://8UmTgoF3.Lfpdc.cn
http://7N42rPc0.Lfpdc.cn
http://CInWLiG5.Lfpdc.cn
http://KFhktCRt.Lfpdc.cn
http://7ge0Bh7Y.Lfpdc.cn
http://5W9qvUz9.Lfpdc.cn
http://aQwscj0m.Lfpdc.cn
http://www.dtcms.com/a/379098.html

相关文章:

  • 不想考地信,计算机又太卷,所以转型GIS开发
  • PotPlayer 1.7.22611发布:支持蓝光播放+智能字幕匹配
  • LVS负载均衡群集与Keepalived高可用
  • React中hook的用法及例子(持续更新)
  • 【网络编程】TCP、UDP、KCP、QUIC 全面解析
  • 【1】占位符
  • A2A 中的内存共享方法
  • 力扣704. 二分查找
  • HttpServletRequest vs ServletContext 全面解析
  • 介绍keepalived和LVS
  • NAT技术:SNAT与DNAT区别详解
  • 设计模式-单例桥接命令职责链
  • 数据分析:合并
  • bug:uniCloud报Business Failed, 参数有误retry invoke error
  • 人工智能学习:Transformer结构中的子层连接(Sublayer Connection)
  • 阿里FunASR语音转文字模型搭建
  • Android8 binder源码学习分析笔记(三)
  • sizeof 和 strlen
  • 2025年度4款录音转文字工具横向对比
  • 教资科三【信息技术】— 学科知识(简答题)精简背诵版
  • 滚动列表展示跟随弹框效果
  • readelf 和 ldd 查看文件的依赖
  • 基于社交媒体数据的公众情绪指数构建与重大事件影响分析
  • Cosign 实战:构建可信容器镜像的签名与验证体系
  • 定时器实战:LED闪烁与呼吸灯调试
  • docker部署Gitlab社区版,步骤以及外网访问出现502的解决方式
  • FairGuard aab包签名工具
  • 企业文件图纸全自动加密怎么设置?三步实现自动防护!
  • Redis C++ 实现笔记(I篇)
  • [css] 实现禁止文本被选中