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