Linux 之 iptables 原理分析
问题
K8s中 Service 是怎么将Pod服务的端口?
# iptables 的四表五链
# 四表
iptables 的四个表 iptable_filter,iptable_mangle,iptable_nat,iptable_raw,默认表filter(没有指定表的时候就是filter表)。
- filter 表:
- 用来对数据包进行过滤,具体的规则要求决定如何处理一个数据包。
- 对应的内核模块为:
iptable_filter
,其表内包括三个链:input
、forward
、output
;
- nat 表:
- nat 全称:network address translation 网络地址转换,主要用来修改数据包的 IP 地址、端口号信息。
- 对应的内核模块为:
iptable_nat
,其表内包括三个链:prerouting
、postrouting
、output
;
- mangle 表:
- 主要用来修改数据包的服务类型,生存周期,为数据包设置标记,实现流量整形、策略路由等。
- 对应的内核模块为:
iptable_mangle
,其表内包括五个链:prerouting
、postrouting、
input、
output、
forward`;
- raw 表:
- 主要用来决定是否对数据包进行状态跟踪。
- 对应的内核模块为:
iptable_raw
,其表内包括两个链:output
、prerouting
;
# 五链
iptables 的五个链 PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。
- input 链:当收到访问防火墙本机地址的数据包时,将应用此链中的规则;
- output 链:当防火墙本机向外发送数据包时,将应用此链中的规则;
- forward 链:当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则,注意如果需要实现forward转发需要开启Linux内核中的ip_forward功能;
- prerouting 链:在对数据包做路由选择之前,将应用此链中的规则;
- postrouting 链:在对数据包做路由选择之后,将应用此链中的规则;
# iptables 的工作原理
# iptables 的配置
在了解清楚iptables的工作原理和每个表以及链的作用之后,我们就可以根据其特点进行针对性的配置。
iptables 的基本语法命令格式
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
1
- 表名、链名:指定
iptables
命令所操作的表
和链
,未指定表名时将默认使用filter
表; - 管理选项:表示
iptables
规则的操作方式,比如:插入
、增加
、删除
、查看
等; - 匹配条件:指定要处理的数据包的特征,不符合指定条件的数据包不处理;
- 控制类型:指数据包的处理方式,比如:
允许accept
、拒绝reject
、丢弃drop
、日志LOG
等;
iptables 命令的常用管理选项
-A:在指定链的末尾添加一条新的规则
-D:删除指定链中的某一条规则,可删除指定序号或具体内容
-I:在指定链中插入一条新规则,未指定序号时默认作为第一条规则
-R:修改、替换指定链中的某一条规则,可指定规则序号或具体内容
-L:列出指定链中所有的规则,未指定链名,则列出表中的所有链
-F:清空指定链中所有的规则,未指定链名,则清空表中的所有链
-P:设置指定链的默认策略
-n:使用数字形式显示输出结果
-v:查看规则列表时显示详细的信息
-h:查看命令帮助信息
--line-numbers:查看规则列表时,同时显示规则在链中的顺序号
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 参考资料
https://www.cnblogs.com/zllong/p/7236881.html
https://www.netfilter.org/
http://ipset.netfilter.org/iptables.man.html#index
https://www.thegeekstuff.com/2011/01/iptables-fundamentals/
上次更新: 2024/09/07, 21:54:32