您好,登錄后才能下訂單哦!
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卻是
不閉合的,你不知道計算將在哪里結束。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。