netfilter与iptables表规则建立
在內(nèi)核的net中,iptable_nat.c iptable_filter.c iptable_mangle.c中,分別建立了3張表,供iptables規(guī)則使用。
其中filter、mangle表的建立,有自己的優(yōu)選級
調(diào)用 ipt_register_table函數(shù)進(jìn)行注冊表; 調(diào)用xt_hook_link注冊到時hook,此表可以掛到5個點(diǎn),那就會注冊到5個hook點(diǎn),優(yōu)先級都是一樣的,如上圖。
那么nat表呢?
它也這個結(jié)構(gòu)體,但在初始化時,僅調(diào)用了ipt_register_table注冊了表,那么通過iptables打入的nat規(guī)則如何生效呢?
它額外注冊了幾個hook點(diǎn)函數(shù),如下:
以NF_INET_PRE_ROUTING為例,nf_nat_ipv4_in-》nf_nat_ipv4_fn-》如果ct狀態(tài)為IP_CT_NEW -》nf_nat_rule_find-》ipt_do_table執(zhí)行iptables nat表中的NF_INET_PRE_ROUTING點(diǎn)上規(guī)則。
?
對于NF_INET_POST_ROUTING也是一樣,nf_nat_ipv4_out-》nf_nat_ipv4_fn-》如果ct狀態(tài)為IP_CT_NEW -》nf_nat_rule_find-》ipt_do_table。
?
也就是說對于nat表中動作,僅會在ct為IP_CT_NEW時,執(zhí)行一次,如果ct的狀態(tài)其它,則不會再執(zhí)行。
返回來的規(guī)則在conntrack中進(jìn)行會進(jìn)行處理(nf_conntrack_l3proto_ipv4.c)。
也就是說,對于iptables規(guī)則,filter和magle表中的規(guī)則對每個數(shù)據(jù)包都會進(jìn)行;而nat表中規(guī)則,只會對數(shù)據(jù)報(bào)文做一次,后續(xù)的就交給ct來做了。
?
根據(jù)優(yōu)先級,如下
則執(zhí)行順序?yàn)?/p>
新的報(bào)文-》ip_recv-》PREROUTING HOOK點(diǎn)
-》優(yōu)先級NF_IP_PRI_CONNTRACK
-》優(yōu)先級NF_IP_PRI_MANGLE -》所有的magle表中規(guī)則都會順序執(zhí)行
-》優(yōu)先級NF_IP_PRI_FILTER-》所有filter表中規(guī)則都會順序執(zhí)行
-》優(yōu)先級NF_IP_PRI_NAT_DST->nf_nat_ipv4_in-》nf_nat_ipv4_fn-》執(zhí)行iptables nat表中的NF_INET_PRE_ROUTING點(diǎn)上規(guī)則。
所有的鉤子函數(shù)執(zhí)行完后
?
ct中已存在鏈接的報(bào)文-》ip_recv-》PREROUTING HOOK點(diǎn)
-》優(yōu)先級NF_IP_PRI_CONNTRACK,更新連接跟蹤
-》優(yōu)先級NF_IP_PRI_MANGLE -》所有的magle表中規(guī)則都會順序執(zhí)行
-》優(yōu)先級NF_IP_PRI_FILTER-》所有filter表中規(guī)則都會順序執(zhí)行
-》優(yōu)先級NF_IP_PRI_NAT_DST->nf_nat_ipv4_in-》nf_nat_ipv4_fn-》nf_nat_packet,完成nat轉(zhuǎn)換(不再執(zhí)行相應(yīng)規(guī)則)
所有的鉤子函數(shù)執(zhí)行完后
總結(jié)
以上是生活随笔為你收集整理的netfilter与iptables表规则建立的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动智能家庭终端技术规范学习总结
- 下一篇: 一次犹豫不决策略选择