netfilter的笔记3--那些内置的表
通过netfilter的笔记2的例子,我们知道了怎么使用netfilter的框架,对于内核的设计原则来说,策略和机制分离,所以提供了iptables来供用户配置防火墙策略。
那么,怎么使用iptables呢?由于iptables的资料很多,本文将汇集一些,作为自己的学习过程记录。
netfiler内置了一些表,来管理iptables工具下发的规则,规则的保存是这样的:
可以这么说,Netfilter管理多张表,表管理多条链,链管理规则。简单地讲, tables 由 chains 组成,而 chains 又由 rules 组成。 iptables 默认有四个表 Filter, NAT, Mangle, Raw 。
这里只描述ipv4的,v6的和其他协议的类似,在配置中搜索的话,可以看到其他tables:
[root@Discovery ~]# grep CONFIG_NF_TABLES /boot/config-3.10.0-862.* /boot/config-3.10.0-862.6.3.el7.x86_64:CONFIG_NF_TABLES=m /boot/config-3.10.0-862.6.3.el7.x86_64:CONFIG_NF_TABLES_INET=m /boot/config-3.10.0-862.6.3.el7.x86_64:CONFIG_NF_TABLES_IPV4=m /boot/config-3.10.0-862.6.3.el7.x86_64:CONFIG_NF_TABLES_ARP=m /boot/config-3.10.0-862.6.3.el7.x86_64:CONFIG_NF_TABLES_IPV6=m /boot/config-3.10.0-862.6.3.el7.x86_64:CONFIG_NF_TABLES_BRIDGE=m
需要注意的是,在支持net的命名空间之后,所有的描述都是针对某一个net来说的。
描述table的数据结构是:
/* Furniture shopping... */ struct xt_table {struct list_head list;/* What hooks you will enter on */unsigned int valid_hooks;/* Man behind the curtain... */struct xt_table_info *private;/* Set this to THIS_MODULE if you are a module, otherwise NULL */struct module *me;u_int8_t af; /* address/protocol family */int priority; /* hook order *//* A unique name... */const char name[XT_TABLE_MAXNAMELEN]; };
filter表:定义在iptable_filter文件中,
#define FILTER_VALID_HOOKS ((1 << NF_INET_LOCAL_IN) | \(1 << NF_INET_FORWARD) | \(1 << NF_INET_LOCAL_OUT))static const struct xt_table packet_filter = {.name = "filter",.valid_hooks = FILTER_VALID_HOOKS,.me = THIS_MODULE,.af = NFPROTO_IPV4,------------------v4的.priority = NF_IP_PRI_FILTER, };
NAT表,定义在iptable_nat.c文件。
static const struct xt_table nf_nat_ipv4_table = {.name = "nat",.valid_hooks = (1 << NF_INET_PRE_ROUTING) |(1 << NF_INET_POST_ROUTING) |(1 << NF_INET_LOCAL_OUT) |(1 << NF_INET_LOCAL_IN),.me = THIS_MODULE,.af = NFPROTO_IPV4,-------------v4的 };
mangle表:定义在iptables_mangle.c文件中。
#define MANGLE_VALID_HOOKS ((1 << NF_INET_PRE_ROUTING) | \(1 << NF_INET_LOCAL_IN) | \(1 << NF_INET_FORWARD) | \(1 << NF_INET_LOCAL_OUT) | \(1 << NF_INET_POST_ROUTING))static const struct xt_table packet_mangler = { .name = "mangle", .valid_hooks = MANGLE_VALID_HOOKS, .me = THIS_MODULE, .af = NFPROTO_IPV4,-------------针对ipv4的 .priority = NF_IP_PRI_MANGLE, };
raw表,定义在iptable_raw.c文件中:
#define RAW_VALID_HOOKS ((1 << NF_INET_PRE_ROUTING) | (1 << NF_INET_LOCAL_OUT))static const struct xt_table packet_raw = {.name = "raw",.valid_hooks = RAW_VALID_HOOKS,.me = THIS_MODULE,.af = NFPROTO_IPV4,-----------------v4.priority = NF_IP_PRI_RAW, };
可以看出,这些表的优先级是不一样的,:
enum nf_ip_hook_priorities {NF_IP_PRI_FIRST = INT_MIN,NF_IP_PRI_CONNTRACK_DEFRAG = -400,NF_IP_PRI_RAW = -300,NF_IP_PRI_SELINUX_FIRST = -225,NF_IP_PRI_CONNTRACK = -200,NF_IP_PRI_MANGLE = -150,NF_IP_PRI_NAT_DST = -100,NF_IP_PRI_FILTER = 0,NF_IP_PRI_SECURITY = 50,NF_IP_PRI_NAT_SRC = 100,NF_IP_PRI_SELINUX_LAST = 225,NF_IP_PRI_CONNTRACK_HELPER = 300,NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,NF_IP_PRI_LAST = INT_MAX, };
总体上看,优先级顺序是:raw —> mangle —> nat —> filter。值越小优先级越大,也就是说在某一个链上有多张表,从chain的角度来说,相同的chain决定了hooknum是一样的,然后和pf一起决定了nf_hooks[reg->pf][reg->hooknum]中的位置,所以看出,表只是容器,起作用的还是chain,那么chain中的rule是如何生效的呢?
转载于:https://www.cnblogs.com/10087622blog/p/10456565.html
netfilter的笔记3--那些内置的表相关推荐
- XSL学习笔记6 XSLT内置模板规则
XSL学习笔记6 XSLT内置模板规则 定义正确的模板规则来匹配XML树中的节点是XSLT应用的关键.为了让源文档树的节点在没有明确匹配规则的情况下,能够被递归处理,XSLT定义了几个内置的模板规则, ...
- 03pe修改计算机名称,[U盘PE教程]玩转PE内置注册表(基于NT6.0)
玩转PE内置注册表(基于NT6.0) 1.让文件夹显示中等图标 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\_default\So ...
- go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!...
内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...
- MySQL学习笔记_7_MySQL常用内置函数
MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...
- [云炬python学习笔记]Numpy中内置函数min(),max(),sum()与Python中内置函数min(),max(),sum()性能对比分析
众所周知,Python有许多内置函数(例如min(),max(),sum()),Numpy也有自己的内置函数(np.min(),np.max(),np.sum()).由于Numpy的函数是在编译码中执 ...
- python笔记——常用的内置函数
官方说明文档:https://docs.python.org/3/library/functions.html 内置函数 abs() 函数返回(数字)的绝对值 all() 如果()里的所有元素不为0. ...
- Python学习笔记3.2-python内置函数大全
学习python不可避免的首先要了解python的内置函数,熟悉了这些以后可以给编程带来很大的方便. 1.数学运算类 函数名 函数功能 备注 abs(x) 求绝对值 1.参数可以是整型,也可以是复数2 ...
- angularjs读书笔记:angularjs内置过滤器总结——摘自《Angularjs权威教程》
过滤器用来格式化需要展示给用户的数据.AngularJS有很多实用的内置过滤器,同时也提 供了方便的途径可以自己创建过滤器. 在HTML中的模板绑定符号{{ }}内通过|符号来调用过滤器.例如,假设我 ...
- Qt学习笔记之--Qt内置图标一览表
Qt内置了一批图标,一共有70个(Qt 5.9.5),不同的平台图标有差异.由于官方文档中只有描述没有图示,所以写个Demo把这些图标全部显示出来.下面展示了windows.Linux.android ...
最新文章
- 威纶通宏开机后使用初始化宏指令_【操作系统】我们按下电脑开机键的背后发生了什么?...
- Vmware Tools安装之Ubuntu7.10问题解决--持续更新中
- BZOJ3823 : 定情信物
- Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
- excel如何把顺序倒过来_Excel 中的计算运算符和优先顺序级别
- classloader
- 22)PHP,数组排序函数
- mvc路由 html,asp.net-mvc – ASP.NET MVC路由从html页面开始
- POJ 2184 Cow Exhibition
- 【译】Part 1: 介绍和安装
- EasyMock的原理及使用方法
- 通向财务自由之路05_选择一个有效的理念
- alsa buffer原理_alsa音频开发全攻略
- FudanNLP 复旦分词系统 小试一把
- IntelliJ IDEA 2020 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
- WinPE安装64位Win7的方法
- RAR压缩包密码如何解密
- 好强的谷歌插件,不用写代码就能爬虫!
- TiDB 实战优化之 SQL 常见问题与优化案例
- 分别解释final,finally,finalize是什么?
热门文章
- 联想筹资13.5亿美元 支付收购摩托罗拉移动剩余款
- AngularJS之动态菜单操作指令
- HDU 3157 Crazy Circuits(有源汇上下界最小流)
- [导入]我翻译的JavaScript文章
- flex布局的盒子模型
- 从Java到Kotlin(三)
- MySQL:Can't connect to mysql server 10038
- 新概念英语(1-47)A cup of coffee
- 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
- Unity 跑酷Demo难题总结