通过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--那些内置的表相关推荐

  1. XSL学习笔记6 XSLT内置模板规则

    XSL学习笔记6 XSLT内置模板规则 定义正确的模板规则来匹配XML树中的节点是XSLT应用的关键.为了让源文档树的节点在没有明确匹配规则的情况下,能够被递归处理,XSLT定义了几个内置的模板规则, ...

  2. 03pe修改计算机名称,[U盘PE教程]玩转PE内置注册表(基于NT6.0)

    玩转PE内置注册表(基于NT6.0) 1.让文件夹显示中等图标 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\_default\So ...

  3. go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!...

    内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...

  4. MySQL学习笔记_7_MySQL常用内置函数

    MySQL常用内置函数 说明: 1)可以用在SELECT/UPDATE/DELETE中,及where,orderby,having中 2)在函数里将字段名作为参数,变量的值就是字段所对应的每一行的值. ...

  5. [云炬python学习笔记]Numpy中内置函数min(),max(),sum()与Python中内置函数min(),max(),sum()性能对比分析

    众所周知,Python有许多内置函数(例如min(),max(),sum()),Numpy也有自己的内置函数(np.min(),np.max(),np.sum()).由于Numpy的函数是在编译码中执 ...

  6. python笔记——常用的内置函数

    官方说明文档:https://docs.python.org/3/library/functions.html 内置函数 abs() 函数返回(数字)的绝对值 all() 如果()里的所有元素不为0. ...

  7. Python学习笔记3.2-python内置函数大全

    学习python不可避免的首先要了解python的内置函数,熟悉了这些以后可以给编程带来很大的方便. 1.数学运算类 函数名 函数功能 备注 abs(x) 求绝对值 1.参数可以是整型,也可以是复数2 ...

  8. angularjs读书笔记:angularjs内置过滤器总结——摘自《Angularjs权威教程》

    过滤器用来格式化需要展示给用户的数据.AngularJS有很多实用的内置过滤器,同时也提 供了方便的途径可以自己创建过滤器. 在HTML中的模板绑定符号{{ }}内通过|符号来调用过滤器.例如,假设我 ...

  9. Qt学习笔记之--Qt内置图标一览表

    Qt内置了一批图标,一共有70个(Qt 5.9.5),不同的平台图标有差异.由于官方文档中只有描述没有图示,所以写个Demo把这些图标全部显示出来.下面展示了windows.Linux.android ...

最新文章

  1. 威纶通宏开机后使用初始化宏指令_【操作系统】我们按下电脑开机键的背后发生了什么?...
  2. Vmware Tools安装之Ubuntu7.10问题解决--持续更新中
  3. BZOJ3823 : 定情信物
  4. Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
  5. excel如何把顺序倒过来_Excel 中的计算运算符和优先顺序级别
  6. classloader
  7. 22)PHP,数组排序函数
  8. mvc路由 html,asp.net-mvc – ASP.NET MVC路由从html页面开始
  9. POJ 2184 Cow Exhibition
  10. 【译】Part 1: 介绍和安装
  11. EasyMock的原理及使用方法
  12. 通向财务自由之路05_选择一个有效的理念
  13. alsa buffer原理_alsa音频开发全攻略
  14. FudanNLP 复旦分词系统 小试一把
  15. IntelliJ IDEA 2020 提示“Unmapped Spring configuration files found.Please configure Spring facet.”解决办法
  16. WinPE安装64位Win7的方法
  17. RAR压缩包密码如何解密
  18. 好强的谷歌插件,不用写代码就能爬虫!
  19. TiDB 实战优化之 SQL 常见问题与优化案例
  20. 分别解释final,finally,finalize是什么?

热门文章

  1. 联想筹资13.5亿美元 支付收购摩托罗拉移动剩余款
  2. AngularJS之动态菜单操作指令
  3. HDU 3157 Crazy Circuits(有源汇上下界最小流)
  4. [导入]我翻译的JavaScript文章
  5. flex布局的盒子模型
  6. 从Java到Kotlin(三)
  7. MySQL:Can't connect to mysql server 10038
  8. 新概念英语(1-47)A cup of coffee
  9. 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
  10. Unity 跑酷Demo难题总结