四表五链
四表:filter , nat, manager, raw
五链: 五个HOOK点的链接,pre_rout, foward, post_rout, in ,out
iptables 命令查看命令,默认显示的是filter表的配置,如果要显示其他表的情况,使用-t参数,插入删除的操作亦然。
各个表的作用于功能
1. filter表
2. mangle表
mangle表的作用,主要是根据规则修改包的一些标志位,其他程序和规则可以利用这些标志位,执行过滤规则和策略路由。
iptable 中配置-j MARK --set-mark 用于给匹配规则的数据包,打上标签。-m mark 用于匹配规则。
使用iptables -j mark --help 命令查看,设置规则:
使用iptables -m mark --help 查看匹配规则:
设置mask掩码,用于设置相应的标志位。
上面的规则,标示匹配mark为0x2掩码为0x3的标记。在匹配规则的时候,先用skb的mark和mask取与,然后和掩码匹配。
参见内核code:
修改的标志位,主要有:
3. nat 表
4. raw表
内核模块
问题:
内核如何匹配,内核使能
iptable 命令转换,和内核交互
libiptc库和内核交互
最终是转换到hook点的处理函数上来.
match模块被添加到系统的链表中
当iptables 调用命令,会把这个过滤规则添加到过滤表中.
在每个HOOK点用操作表组成了操作链,分别调用表中的匹配和过滤函数.
内和match注册:
xt_register_match
filter表分析
match 模块查找
do_command4
command_match
xtables_find_match
表的插入
insert_entry
iptc_insert_entry <libiptc.h>
libiptc和内核交互
http://blog.chinaunix.net/uid-29732842-id-4975834.html
get_socket
set_socket
网络命名空间相关
struct netns_ipv4
#ifdef CONFIG_NETFILTER
struct xt_table *iptable_filter;
struct xt_table *iptable_mangle;
struct xt_table *iptable_raw;
struct xt_table *arptable_filter;
#ifdef CONFIG_SECURITY
struct xt_table *iptable_security;
#endif
struct xt_table *nat_table;
#endif
问题1
mangle表在添加的时候