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

Linux iptables防火墙基础知识总结

一、基本框架

iptables 是 Linux 系统中常用的防火墙工具,工作在用户空间,用来编写规则,基于内核的 netfilter 框架实现数据包的过滤、转换和修改。其核心框架由 “四表五链” 构成,规则的匹配和执行遵循特定顺序,同时支持自定义链以灵活管理规则。

二、iptables 中的链

“链” 是数据包流转过程中经过的检查点,每条链对应数据包处理的特定阶段,由内核自动创建,即内置链。对应内核中的每一个勾子函数 (INPUT,OUTPUT,FORWARD,PREROUTING,
POSTROUTING)。

除了内置链外,用户还可创建自定义链,用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有钩子函数调用自定义链时,才会生效,即需通过内置链的规则引用自定义链。

1、PREROUTING 链

数据包进入本机后,路由选择之前经过的链。用于提前修改数据包(如 DNAT),或标记数据包。即主机接收到数据是否是给我们的,是否要修改(ip或port),相当于进站安检。

2、INPUT 链

当路由判断数据包的目标地址是本机时,经过此链。用于控制哪些外部数据包可进入本机(如允许 SSH 连接)。即接收到的数据经过路由分析,是本机处理,相当与上车。

3、FORWARD 链

当路由判断数据包需要经过本机转发(本机既非源也非目标)时,经过此链。用于控制转发行为(如网关服务器的转发规则)。即接收到的数据经过路由分析,不是本机处理,本机只做转发,相当于转车。

4、OUTPUT 链

本机产生的数据包(如应用程序发送的请求)在离开本机前经过此链。用于控制本机对外发送的数据包。即本机处理完的数据经过路由分析,直接传输出去,相当于下车。

5、POSTROUTING 链

数据包经过路由选择后,离开本机前的最后一条链。用于修改源地址(如 SNAT,将内网地址转换为外网地址)。即数据传输出去的时候,是否需要修改(ip或port),相当于出站安检。

三、iptables 中的表

iptables 的表用于分类管理不同功能的规则,每个表关联特定的链,主要包括以下四类:filter、nat、mangle、raw。优先级从高到低依次是:raw > mangle > nat > filter。

1、filter 表(过滤规则表)

最常用的表,也是默认表,根据预定义的规则过滤符合条件的数据包,是防火墙的核心功能。仅关联 3 条链:INPUT、OUTPUT、FORWARD。

2、nat 表(地址转换表)

用于实现网络地址转换(NAT),包括源地址转换(SNAT)、目标地址转换(DNAT)等。关联 3 条链:PREROUTING(路由前修改目标地址)、POSTROUTING(路由后修改源地址)、OUTPUT(本机产生的数据包的地址转换)。

3、mangle 表(修改表)

修改数据标记位规则表,修改数据报文(修改数据包的元数据,如 TTL、服务类型、标记等),可辅助路由或过滤。关联所有 5 条链(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)。

4、raw 表(原始表)

用于关闭 nat 表启用的连接跟踪机制,减少性能消耗,加快封包穿越防火墙速度,仅处理不需要追踪的数据包。关联 2 条链:PREROUTING、OUTPUT。

四、链表对应关系

可支持的链
rawPREROUTING, OUTPUT
manglePREROUTING, POSTROUTING, INPUT, OUTPUT, FORWARD
natPREROUTING, POSTROUTING, INPUT, OUTPUT
filterINPUT, FORWARD, OUTPUT

五、数据包流转顺序

  1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要传送出去;

  2. 如果数据包是进入本机的,则会进入INPUT链,然后交由本机的应用程序处理;

  3. 如果数据包是要转发的,且内核允许转发,则数据包在PREROUTING链之后到达FORWARD链,再经由POSTROUTING链输出

  4. 本机的应用程序往外发送数据包,会先进入OUTPUT链,然后到达POSTROUTING链输出

数据包的走向

  • 数据流入,本机接收的数据包(目标是本机):PREROUTING 链(raw→mangle→nat)→ 路由判断(目标是本机)→ INPUT 链(mangle→filter)→ 进入本机应用程序。

  • 数据流出,本机发出的数据包(源是本机):本机应用程序 → OUTPUT 链(raw→mangle→nat→filter)→ 路由选择 → POSTROUTING 链(mangle→nat)→ 离开本机。

  • 数据转发,转发的数据包(经过本机转发):外部数据包 → PREROUTING 链(raw→mangle→nat)→ 路由判断(需要转发)→ FORWARD 链(mangle→filter)→ 路由选择 → POSTROUTING 链(mangle→nat)→ 离开本机。

六、规则匹配顺序

iptables 中,每条链内的规则按从上到下的顺序依次匹配:

  • 当数据包匹配到某条规则时,会执行该规则的 “目标”(如 ACCEPT、DROP、跳转至其他链等),并停止后续规则的匹配(除非目标是 RETURN,会返回原链继续匹配)。

  • 若数据包不匹配链中任何规则,则执行该链的 “默认策略”。

七、策略的设置方式

1、iptables命令组成

iptables 完整命令由以下部份组成:

iptables [-t Table] -子命令 <链> <规则策略> [动作]

即通过 iptables 命令,在某个表的某个链上设置某条过滤规则

字段说明

  • iptables:iptables命令

  • Table:具体要操作的表,用 -t 指定,raw|mangle|nat|filter,默认 filter

  • Chain:具体要操作的链,PREROUTING|INPUT|FORWARD|OUTPUT|POSTROUTING

  • Rule:具体规则,由匹配条件和目标组成,如果满足条件,就执行目标中的规则,目标用 -j 指定

  • 动作:基本动作ACCEPT|DROP|RETURN

2、命令格式

指定表

  • -t|--table table   #指定表 raw|mangle|nat|filter,如果不显式指定,默认是filter

操作链

  • -N|--new-chain chain   #添加自定义新链

  • -X|--delete-chain [chain]   #删除自定义链(要求链中没有规则)

  • -P|--policy chain target   #设置默认策略,对filter表中的链而言,其默认策略有ACCEPT|DROP

  • -E|--rename-chain old-chain new-chain   #重命名自定义链,引用计数不为0的自定义链不能被重命名

  • -L|--list [chain]   #列出链上的所有规则

  • -S|--list-rules [chain]   #列出链上的的有规则

  • -F|--flush [chain]   #清空链上的所有规则,默认是所有链

  • -Z|--zero [chain [rulenum]]   #置0,清空计数器,默认操作所有链上的所有规则

操作具体规则

  • -A|--append chain rule-specification   #往链上追加规则

  • -I|--insert chain [rulenum] rule-specification   #往链上插入规则,可以指定编号,默认插入到最前面

  • -C|--check chain rule-specification   #检查链上的规则是否正确

  • -D|--delete chain rule-specification   #删除链上的规则

  • -D|--delete chain rulenum   #根据编号删除链上的规则

  • -R|--replace chain rulenum rule-specification   #根据链上的规则编号,使用新的规则替换原有规则

其它选项

  • -h|--help   #显示帮助

  • -V|--version   #显示版本

  • -v|--verbose   #显示详细信息

  • -n|--numeric   #以数字形式显示IP和端口,默认显示主机名和协议名,否则容易遭受hosts解析影响

  • --line-numbers   #显示每条规则编号

  • -j|--jump   # 决定了数据包在满足特定条件后的命运。ACCEPT:允许数据包通过。DROP:丢弃数据包,不给出任何回应。等客户端测试多次后,主动放弃。REJECT:直接拒绝数据包,并向发送方发送一个错误响应。

查看规则选项

  • -L   #显示规则条目,后面可以接需要查看的链,不写的话表示所有链。如果规则不为空,单独 -L 选项显示时有可能会很慢,这是因为需要对主机名和服务名进行反解导致的,

  • -n   #选项查看规则的时候 主机名和端口不做解析,介于此,可以实现规避上面的问题。

  • -v   #显示详细信息

  • --line-numbers   #显示规则的标号

  • -S   #打印规则,编写命令给我们打印出来,方便我们去学习

  • -t   #指定查看的表

3、默认策略

默认策略(Policy)是当数据包不匹配链中任何规则时的默认处理行为,仅适用于内置链(自定义链无默认策略)。

设置命令

iptables -P 链名 策略
  • 常用策略:ACCEPT(允许通过)、DROP(直接丢弃,不返回任何信息)、REJECT(拒绝并返回错误信息)。

示例

# 设置 INPUT 链默认拒绝所有未匹配的数据包
iptables -P INPUT DROP

注:默认规则(iptables -P)是 ACCEPT,不建议修改,容易出现 “自杀” 现象。

4、常见策略

 设置命令

# 在第1行插入一条规则
iptables -t 表名 -I 链名 策略# 在原来规则后面去追加
iptables -t 表名 -A 链名 策略
  • 常用策略:ACCEPT(允许通过)、DROP(直接丢弃,不返回任何信息)、REJECT(拒绝并返回错误信息)。

示例

# 在INPUT 链的 filter 表上设置过滤规则,将来自 10.0.0.112 的数据包丢弃掉
iptables -t filter -A INPUT -s 10.0.0.12 -j DROP

八、自定义链配置

​1、创建自定义链

创建命令

iptables -N 自定义链名

示例

# 创建一个名为NGINX_RULES的自定义链
iptables -N NGINX_RULES

2、使用自定义链

需通过内置链的规则引用自定义链(目标为自定义链名),数据包匹配到该规则时会跳转到自定义链处理。

示例

# 示例:在 INPUT 链中添加规则,将所有 TCP 80 端口的数据包跳转至 NGINX_RULES 链处理
iptables -A INPUT -p tcp --dport 80 -j NGINX_RULES

注:自定义链中若规则匹配,按目标处理;若不匹配,会返回原链继续匹配后续规则。

3、删除自定义链

删除前需满足以下两个条件:

  • 自定义链中无任何规则(需先清空);

  • 无其他链的规则引用该自定义链(需先删除引用)。

示例

# 清空自定义链的规则
iptables -F NGINX_RULES # 删除引用该链的规则(如 INPUT 链中指向 NGINX_RULES 的规则)
iptables -D INPUT -p tcp --dport 80 -j NGINX_RULES # 删除自定义链
iptables -X NGINX_RULES 
http://www.dtcms.com/a/566517.html

相关文章:

  • 网站开发微信支付功能网站标题优化工具
  • 怎样做心理咨询网站学网络与新媒体后悔死了
  • 住房城乡建设行业从业人员wordpress 博客优化
  • 太原网站 制作个人网站备案没有座机
  • 温州网站外包网站界面一般用什么软件做
  • 上海 网站建设公司2022年今天新闻联播
  • Doris连接故障一键排查脚本
  • 青岛电商网站制作官方网站的网络营销功能分析
  • 教育网站制作实训报告如何搭建一个网站平台
  • 贵州城乡建设部网站首页什么是自媒体
  • SQLite Distinct 关键字
  • 祝贺公司网站上线做调查赚钱的网站有哪些
  • 网络直播网站开发注册网站好的平台
  • 黑龙江网站备案公司网站未备案
  • ThreadLocal用法及实现原理解析
  • 太原建筑市场网站中国建设银行邢台分行网站
  • 怎样利用关键词来打动读者
  • Deinterleaving of Mixtures of Renewal Processes
  • 设计师网站有哪些wordpress安装多说
  • 哪有网站给光头强做面企业官网小程序源码
  • 大同建设银行保安招聘网站淄博网站制作价格低
  • C#上位机卡顿解决方法1——获取内存占用率
  • 各大搜索引擎网站登录入口网站帮企业做推广价格怎么算
  • 哈尔滨网站建设优化网站页面构成要素
  • OCR图片识别翻译工具功能及源码
  • vue3 抽取el-drawer子组件
  • 杭州专业网站建设佛山cms模板建站
  • TCP可靠传输的秘密:从滑动窗口到拥塞控制
  • 宝塔做网站安全吗做网站龙华
  • safetensors转为gguf,并在ollama中部署