您好,登錄后才能下訂單哦!
iptables本身沒有TRACK target,以至于你不能指定需要被conntrack模塊處理的數(shù)據(jù)包白名單,比如我想實(shí)現(xiàn):除了來源IP是192.168.10.0/16網(wǎng)段的需要被track之外,其它的都不要track。
當(dāng)然,你可以通過下面的配置實(shí)現(xiàn)我的需求:
iptables -t raw -A PREROUTING ! -s 192.168.10.0/16 -j NOTRACK
...反向NOTRACK類似,-s換-d
如果更復(fù)雜一點(diǎn)呢?比如除了來源IP限制之外,還有協(xié)議,端口等。
熟悉訪問控制列表設(shè)計(jì)的都知道,ACL的“與”操作可以在單條規(guī)則中實(shí)現(xiàn),而“或”操作則由多條規(guī)則實(shí)現(xiàn),因此應(yīng)用于上述隨便復(fù)雜的需求,都是可以完成
的,甚至拋開“單條與/多條或”原則,僅僅是擴(kuò)充ipset也可以很好配置出來任意復(fù)雜的規(guī)則滿足任意復(fù)雜的需求。
但是有沒有一個(gè)更簡(jiǎn)單的辦法?當(dāng)然有,實(shí)現(xiàn)一個(gè)和NOTRACK對(duì)立的target,即TRACK target即可。它的實(shí)現(xiàn)就是清除已經(jīng)附著在skb上的untracked conn。這樣當(dāng)我需要添加track白名單時(shí),我可以這么做:
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,就這樣,很簡(jiǎn)單。
不過iptables沒有內(nèi)置OR操作是完全符合ACL理念的,該理念中,如果想實(shí)現(xiàn)或,就配置多條規(guī)則,事實(shí)上大多數(shù)的鑒權(quán)系統(tǒng)都是如此的理念。看看C
語言的邏輯判斷會(huì)發(fā)現(xiàn)同樣的理念,如果是AND操作,逐條語句便和順序無關(guān),因?yàn)樽罱K必須將每個(gè)語句全部計(jì)算一遍,如果是OR操作,計(jì)算效率就和順序有關(guān)
了,只要到達(dá)“真”值,計(jì)算就可以結(jié)束了,當(dāng)然內(nèi)部細(xì)節(jié)還是和實(shí)現(xiàn)相關(guān)的。所以,對(duì)于AND操作,由于它是閉合的,一條語句就可以囊括進(jìn)去,但是OR卻是
不閉合的,你不知道計(jì)算將在哪里結(jié)束。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。