歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> iptables配置conntrack的NOTRACK和TRACK

iptables配置conntrack的NOTRACK和TRACK

日期:2017/2/28 14:23:47   编辑:Linux教程

iptables本身沒有TRACK target,以至於你不能指定需要被conntrack模塊處理的數據包白名單,比如我想實現:除了來源IP是192.168.10.0/16網段的需要被track之外,其它的都不要track。

當然,你可以通過下面的配置實現我的需求:

iptables -t raw -A PREROUTING ! -s 192.168.10.0/16 -j NOTRACK

...反向NOTRACK類似,-s換-d

如果更復雜一點呢?比如除了來源IP限制之外,還有協議,端口等。

熟悉訪問控制列表設計的都知道,ACL的“與”操作可以在單條規則中實現,而“或”操作則由多條規則實現,因此應用於上述隨便復雜的需求,都是可以完成的,甚至拋開“單條與/多條或”原則,僅僅是擴充ipset也可以很好配置出來任意復雜的規則滿足任意復雜的需求。

但是有沒有一個更簡單的辦法?當然有,實現一個和NOTRACK對立的target,即TRACK target即可。它的實現就是清除已經附著在skb上的untracked conn。這樣當我需要添加track白名單時,我可以這麼做:

iptables -t raw -A PREROUTING -j NOTRACK

iptables -t raw -A PREROUTING $mt1 $mt2 ... -j TRACK # 單條的matches AND操作

...# 多條的 matches OR操作

iptables -t raw -A PREROUTING $mt''1 $mt''2 ... -j TRACK

OK,就這樣,很簡單。

不過iptables沒有內置OR操作是完全符合ACL理念的,該理念中,如果想實現或,就配置多條規則,事實上大多數的鑒權系統都是如此的理念。看看C語言的邏輯判斷會發現同樣的理念,如果是AND操作,逐條語句便和順序無關,因為最終必須將每個語句全部計算一遍,如果是OR操作,計算效率就和順序有關了,只要到達“真”值,計算就可以結束了,當然內部細節還是和實現相關的。所以,對於AND操作,由於它是閉合的,一條語句就可以囊括進去,但是OR卻是不閉合的,你不知道計算將在哪裡結束。

--------------------------------------分割線 --------------------------------------

iptables使用范例詳解 http://www.linuxidc.com/Linux/2014-03/99159.htm

iptables—包過濾(網絡層)防火牆 http://www.linuxidc.com/Linux/2013-08/88423.htm

Linux防火牆iptables詳細教程 http://www.linuxidc.com/Linux/2013-07/87045.htm

iptables+L7+Squid實現完善的軟件防火牆 http://www.linuxidc.com/Linux/2013-05/84802.htm

iptables的備份、恢復及防火牆腳本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm

Linux下防火牆iptables用法規則詳解 http://www.linuxidc.com/Linux/2012-08/67952.htm

--------------------------------------分割線 --------------------------------------

Copyright © Linux教程網 All Rights Reserved