小州 <kenduest.bbs@bbs.cynix.com.tw> wrote in message news:3gGgL2$74H@bbs.cynix.com.tw... > ※ 引述《shrink.bbs@bbs.cis.nctu.edu.tw (Le Petit Prince)》之銘言: > > 首先謝謝小州回答我的問題 > > 另外在問一個ipchains的問題 > > 請問一下在ipchains有三個chain rules(input ,output,forward) > > 那假設在相同的source and destination位址 > > 但加在不同的chain上,有什麼不同呢? 一直搞不懂ㄋㄟ > > 那你列出 input chains 與 output chains 的 ipchains 指令設定, > 讓大家來比較討論一下 > 不好意思﹐幫小州回答一下﹕ 搞不懂為什麼會有“相同的source and destination位址”呢﹖ 如果您是指在同一個封包上﹐那其實沒什麼意義﹐因為根本不會送到 FW 上面。 如果指 ipchains 的規則的話﹐則可以這樣理解﹕ -s ﹕來自 source 的封包 -d ﹕送到 distinatiion 的封包。 然後﹐ 在 ipchains 規則裡面﹕ -s 1.2.3.4 是指來自 1.2.3.4 的封包﹐ -d 1.2.3.4 是指送給 1.2.3.4 的封包。 假設﹕ 您有一個內部 IP 是 10.3.2.1 經過 FW 的 eth0 傳入﹐ 再經過 eth1 傳出給外部的 202.2.3.4 ﹐如圖﹕ 10.3.2.1------> eth0 F/W eth1 -------> 202.2.3.4 那麼﹕ input -i eth0 -s 10.3.2.1 -d 202.2.3.4 是指來自 10.3.2.1﹐ 從 eth0 進來﹐要送給 202.2.3.4 的封包。 如果您不指定 -i 是哪個界面﹐這樣的封包﹐只能出現在 eth0 上面。 但如果您將 eth0 換成 eth1 的話: input -i eth1 -s 10.3.2.1 -d 202.2.3.4 這樣的封包永遠是抓不到的﹐因為來自 10.3.2.1 的封包不可能從 eth1 進來。 同樣﹕ output -i eth1 -s 10.3.2.1 -d 202.2.3.4 是指來自 10.3.2.1﹐ 從 eth1 出去﹐要送給 202.2.3.4 的封包。 如果您不指定 -i 是哪個界面﹐這樣的封包﹐只能出現在 eth1 上面。 但如果您將 eth1 換成 eth0 的話: output -i eth0 -s 10.3.2.1 -d 202.2.3.4 這樣的封包永遠是抓不到的﹐因為要送給 202.2.3.4 的封包不可能從 eth0 出去。 歸納﹕ 如果指定界面﹐下面的封包是抓不到的﹕ input -i eth0 -s 202.2.3.4 input -i eth0 -d 10.3.2.1 input -i eth1 -s 10.3.2.1 input -i eth1 -d 202.2.3.4 output -i eth0 -d 202.2.3.4 output -i eth0 -s 10.3.2.1 output -i eth1 -s 202.2.3.4 output -i eth1 -d 202.2.3.4 所以﹕ 為了避免混亂和更好理解﹐ 在 iptables 上面﹐將傳出界面和傳入界面分開了﹕ 傳入界面﹕-i 傳出界面﹕-o 這樣的話﹐ 在 output 的規則上﹐是不存在 -i 界面的﹔ 在 input 的規則上﹐是不存在 -o 界面的。 例如﹕ input -i eth0 -s 10.3.2.1 -d 202.2.3.4 output -o eth0 -s 202.2.3.4 -d 10.3.2.1 input -i eth1 -s 202.2.3.4 -d 10.3.2.1 output -o eth1 -s 10.3.2.1 -d 202.2.3.4 這樣﹐只要將 -i 和 -s 以及 -o 和 -d 聯繫起來﹐ 再判斷其可能性﹐ 就會清晰多了﹐您不覺得嗎﹖ 關於 ipchains 的一些說明﹐可以到如下網頁看看﹕ http://www.study-area.net/linux/linux_nat.htm --
<Joestar.bbs@bbs.cis.nctu.edu.tw>
wrote in message news:3gH4Kj$GjV@bbs.cis.nctu.edu.tw...
> ==> 在 shrink@cis_nctu (Le Petit Prince) 的文章中提到:> > ==> 在 kenduest.bbs@bbs.cynix.com.tw (小州) 的文章中提到: > > > 那你列出 input chains 與 output chains 的 ipchains 指令設定, > > > 讓大家來比較討論一下 > > 比如說我要檔掉從外部來的xxx.xxx.xxx.xxx的位址,且假設本地的位址 > > 為yyy.yyy.yyy.yyy > > 那應該下 > > ipchains -A input -s xxx.xxx.xxx.xxx -d yyy.yyy.yyy.yyy -j DENY > > 那麼下ipchains -A ouput -s xxx.xxx.xxx.xxx -d yyy.yyy.yyy.yyy -j DENY > > 也是可以吧 > > 那這樣的話這樣種有什麼不同呢?如果想同那就不要弄得那麼複雜阿 > > 那如果是下ipchains -A forward -s xxx.xxx.xxx.xxx -d yyy.yyy.yyy.yyy -j DENY > > 呢? > > 請指教 > > 在ipchains 裡,input/forward/output chain的定義如下 > input chain: 只要是封包流入網路介面,或者是給local process的都會受到 input > chain的檢查 > forward chain: 只要收到的封包不是給local process, 須經過routing decision > 的,會受到forward chain的檢查 > output chain: 只要封包流出網卡,或者是本機要送給 local process的都會受到 > output chain的影響 > > [a] --- [b] ---[c] > > > 封包流向: (telnet 為例) 在 b 上所受到chain影響順序 > 去 a --> c ,回 c --> a input->forward->output, input->forward->output > 去 a --> b ,回 b --> a input, output > 去 b --> b ,回 b --> b output->input, output->input > > 因為許多人對input跟output的不了解,所以在iptables 對 input, output就重新做定義 > > INPUT chain: 只要封包是給本機上的local process的都會受到 INPUT chain的檢查 > FORWARD chain: 只要收到的封包不是給local process, 須經過routing decision > 的,會受到FORWARD chain的檢查 > OUTPUT chain: 只是本機 local process 要送出的都會受到 OUTPUT chain的影響 > > [a] --- [b] ---[c] > > 封包流向: (telnet 為例) 在 b 上所受到chain影響順序 > 去 a --> c ,回 c --> a forward, forward > 去 a --> b ,回 b --> a input, output > 去 b --> b ,回 b --> b output->input, output->input > > 對於網路介面的設定也從原本的 單獨指定網路介面(-i) 變成要指定 進/出 的網路介面 > > ipchains -A input -i eth0 -j RETURN == iptables -A INPUT -i eth0 -j RETURN > 而 iptables -A INPUT -o eth1 -j RETURN 是不合法的 > > ipchains -A ouput -i eth0 -j RETURN == iptables -A OUTPUT -o eth0 -j RETURN > 而 iptables -A OUTPUT -i eth1 -j RETURN 是不合法的 > > 這樣的分法不但是更清楚,且在 FORWARD chain更能指定封包流向 > 如 主機 B有三張網路卡,定義如下 > eth0 為 Internet > eth1 為 DMZ 140.113.0.0/24 > eth2 為 Intranet, 可連到 192.168.1.0/24,192.168.2.0/24,172.13.12.5/24 > > 任何主機從 Intranet 網路介面都可連到 DMZ, 而Internet 皆不行 > 你當然可以 以 網路介面所接的IP 子網路當作是rule的條件,若eth2 可連到各個內部的 > 網域,單靠IP子網路可能要設很多條. 我們可以這樣設 > iptables -A FORWARD -i eth0 -o eth1 -j DROP > iptables -A FORWARD -i eth2 -o eth2 -j ACCEPT > 這是ipchains 所做不到了. 如果配合 "state"(connection tracking) 新功能, > 你更可以為每個網路介面設安全優先值,只有在修先權高的網路介面主機可以連 > 往優先權低的網路 > 如 > > eth0, Internet, 0 > eth1, DMZ, 5 > eth2, Intranet, 10 > > eth0 -> eth1 ==> DROP > eth1 -> eth0 ==> ACCEPT > eth0 -> eth2 ==> DROP > eth2 -> eth0 ==> ACCEPT > eth1 -> eth2 ==> DROP > eth2 -> eth1 ==> ACCEPT > > -- >
WAN網 <12tw@ctw.tw> wrote in
message news:9d8fij$1lcla$1@news.ht.net.tw...
----- Original Message -----
From: Tony <kaola7@ms32.hinet.net>
To: netman <netman@study-area.net>
Sent: Wednesday, May 09, 2001 4:16 PM
Subject: 想請教一些ipchains的觀念
netman大人你好,最近看到BBS上再討論ipchains
覺得你對這方面十分有研究,希望你能幫幫我釐清 一些ipchains的觀念。 eth1 eth0 192.168.0.1/24 aaa.bbb.ccc.ddd/32
請注意﹕在封包過濾中﹐要是指單一
IP 的話﹐不能用 24 bit﹐只能用 32bit﹐除非您改成﹕192.168.0.0/24
來指一個 IP 範圍。
請問一下我現在想要設定內部網路,只可使用telnet,ftp,email,www,dns,ssh這幾個服務,本機中無任何服務 還有一些特定的windows程式,會經由win98的port10000連結到對方主機7000,我是不是可以如下設定 ☆設定一:拒絕所有類型封包 ipchains -P input DENY ipchains -P output DENY ipchains -P forward DENY ☆設定二:啟動封包轉送 之前看了BBS上討論Ipchians的文章時,有討論到input及output, 我也有相同的困擾,就是在TCP 3way shaking時不是先從本地隨機選一個port(2000) 和對方特定的port(如http80)連結,如果這個隨機的port沒被佔用,就開始 用這個port(2000)傳遞資料。在設定ipchains的時候,我有看到兩種設定法 其一,ipchains -A forward -p tcp -s 192.168.0.0/24 -d 0.0.0.0 80 -J MASQ ipchains -A forward -p tcp -s 192.168.0.0/24 -d 0.0.0.0 25 -J MASQ ipchains -A forward -p tcp -s 192.168.0.0/24 -d 0.0.0.0 21 -J MASQ ipchains -A forward -p tcp -s 192.168.0.0/24 -d 0.0.0.0 53 -J MASQ ipchains -A forward -p udp -s 192.168.0.0/24 -d 0.0.0.0 53 -J MASQ ipchains -A forward -p tcp -s 192.168.0.0/24 10000 -d 0.0.0.0 7000 -J MASQ (如果有多人要用,port10000不就被佔掉,還是沒關係??)
這個我也不確定﹐不知道機制是如何建立的。通常使用固定
port 的都屬於 service﹐或是需要從對方建立回來的連線。
想問一下,是不是這樣的寫法,就代表我上述講的讓特定服務用>1024的port溝通 所以也不必設定input及output DENY,只要在input設定檔一些icmp等封包就可以 這樣的設定是否較為有效率?因為若不設定轉送救無法讓封包通過?感覺起來好像 比較接近iptable的觀念?可以幫我解釋一下嗎?
如果按您上面那樣將 input 和
output 都 DENY 掉了﹐雖然在 forward 裡面已經使用了 MASQ﹐但如果沒有其它
input 和 output 的 ACCEPT﹐封包還是沒辦法通過。請參考我們在
BBS 上的討論文章。要記住一點﹐如果 default policies
都設為 DENY﹐在 ipcchains
中﹐符合規則的封包必須同時獲得 input﹐output 的 ACCEPT
以及 forward 的 ACCEPT 或 MASQ ﹐才能通過 firewall 。如果在
iptables﹐則非本機的封包﹐只需被 forward 規則 ACCEPT 或
MASQUERADE 就可以了。
另外想問一下請問這樣的封包轉送是雙向的嗎?也就是說由內到外及由外到內都可以嗎?
一個封包的傳送是單向的﹐但一個連線卻是雙向的。連線是否能建立﹐先要看封包是否能成功路由﹐再看封包是否能穿越防火牆﹔封包是否能穿越您的防火牆﹐則看您的
firewall 怎麼設定。但如果內部用私有 IP
的話﹐從外面連進來的機會不大﹐因為外面無法路由﹐除非對方有辦法將路由一直指到您的
gateway 上。
還是只能從由內到外呢?如果是雙向的,那不就很危險,因為若區域網路有服務,只要他 知道IP,不就慘了,還是說這可以用防止IP詐騙檔掉?
所謂的 IP 詐騙﹐是指對方修改了封包的
source 或 destination
位址﹐讓封包能穿過防火牆的規則。等我們談到下面的
three-way handshack 再回來討論。
但如果只能從由內到外,那封包傳
回時若沒有設定不就不能通過?
對啊﹐準確的說﹐是對方傳回來的封包﹐而不是原來的那個封包傳回來。
那要如何傳回Client呢?還是說這就是ipchain的機制,
會記錄來源ip:port,等回來時再傳回?那這和socks的防火牆不就相同了嗎?
是否和 socks 一樣﹐我不清楚﹐但 MASQ
是會建立記錄來記下封包的來源 socket
﹐然後將之改寫﹐換成 firewall 自己的 socket
再送﹐請參考後面的敘述。
如proxy先由
3128出去,待取回時再還給特定的ip??
不對﹐proxy 服務和封包改寫不同。proxy
會針對服務進行處理﹐例如 HTTP 和 FTP 等。 client
送來的請求到達 port 23128 之後﹐proxy 會根據目的 socket
建立自己的連線請求﹐然後將回應結果處理後再送回
client。但在封包改寫機制裡面﹐NAT 不管您用什麼 service﹐單純的修改
socket 就好了﹐處理的僅是封包。所以﹐理論上可以讓
client
獲得完全的連線能力。但對於一下特殊的服務﹐例如
ftp ﹐需要再從外面建立連線請求回來的﹐就要用 passive
或模組來處理了。(這部份﹐請您再仔細看看我的網頁“架設
NAT”)
像這樣的機制中,看到你的版上有貼限制syn封包
進入,也就是說只有syn+ack的封包才能進入,我是不是可以用下列規則檔掉 ipchains -A input -p TCP -i eth0 ! -y -s 0.0.0.0 -j ACCEPT
這裡不能說要擋掉帶 syn
的封包﹐而是說﹕只允許不帶 syn 的封包通過而已哦。如果您將規則改為﹕
ipchains -A input -p TCP -i eth0 -y -s 0/0 -j DENY
那才是擋掉帶 syn 的封包。
仔細想想看﹐兩者有什麼不同﹖不過要小心使用
DENY﹐因為﹐或許別的連線還需要 ACCEPT 帶 syn
的連線﹐而不小心寫在這行之後﹐則會造成失敗。
再仔細看您規則﹐您一定要確定 eth0
是連接外部網路的界面﹐才能過濾掉來自外面的封包。
好了﹐這時候再看看前面談到的 IP
詐騙﹐如果對方直接偽造一個 socket
試圖連進內部的網路(前提是路由允許的)﹐假如用上面的兩條規則之一﹐還是可以攔下來(只要不在更前面的規則
ACCEPT 進來的話)。但﹐如果對方能夠完全的偽造一個已經
established 的外部連線的 socket
﹐也就是說﹐連線是從內部建立﹐而且對方的 port
就算隨機產生的也能準確的偽造。能否通過過呢﹖
答案還是不肯定的﹐因為在 TCP
封包裡面﹐還需要 sequence number 和 acknowledgement number
﹐還有封包的其它序號和除錯機制﹐來檢測連線的狀況﹐還有資料封包本身需要攜帶程式所需要的正確資料(因為這不是一個初始連線)﹐如果偽造封包不能正確的偽造下一個
expected 封包所有元素﹐就算能通過 firewall
還是沒辦法和裡面的機器連接得上(某些防火牆軟體還能針對這些元素來進行封包過濾)。
其二,讓所有封包都可轉送再限制input, output
不對﹐在 ipchains 裡面﹐就算允許了 forward﹐在
input 和 output
上是要得到允許才能通過﹐不管您如何限制其規則。
ipchains -A forward -p all -s 192.168.0.0/24 -d 0.0.0.0/0 -j MASQ ipchains -A input -i lo -j ACCEPT ipchains -A output -i lo -j ACCEPT #讓內部(eth1)封包通過 ipchains -A input -i eth1 -j ACCEPT ipchains -A output -i eth1 -j ACCEPT #防止外部IP(eth0)詐騙 ipchains -A input -i eth0 -s 192.168.0.0/24 -j DENY ipchains -A input -i eth0 -s 127.0.0.1/32 -j DENY #開啟提供連線服務 #讓SSH Client可以連出去 eth1 eth0 遠端 192.168.0.1/24 aaa.bbb.ccc.ddd/24 port:22 port:1500/2000 這裡有點搞不太清楚,就是有關3way shaking,因為開的port不固定,所已有可能是 port1500或2000想請問一下,這裡該如何設定呢?我是不是只要設定destination port 就可以了,如 ipchains -A input -i eth1 -p TCP -s 192.168.0.0/24 1024:65535 -d 0.0.0.0 22 -j ACCEPT ipchains -A output -i eth0 -p TCP -s aaa.bbb.ccc.ddd/32 1024:65535 -d 0.0.0.0 22 -j ACCEPT
怎麼到了 output 的時候又變成 aaa.bbb.ccc.ddd/32
了﹖只有一個可能﹕
您的 forward 規則是這樣寫的﹕
ipchains -A forward -p TCP -s 192.168.0.0/24 1024:65535 -d 0/0 22 -j MASQ 那回來的封包怎麼辦?是向下面這樣嗎?覺得有點不太清楚ipchains的運作,看過你網站上的資料 及書籍介紹,都滿片段的,希望你能為我解說一下,謝謝!
或許﹐您可以到如下聯結看看﹐然後選擇上面的‘N
’﹐關於 NAT 的一些討論(雖然其中或有錯誤﹐小心就是了)。
ipchains -A input -i eth0 -p TCP -s 0.0.0.0/0 1024:65535 -d aaa.bbb.ccc.ddd/32 1024:65535 -j ACCEPT
應改成﹕
ipchains -A input -i eth0 -p TCP -s 0/0 22 -d aaa.bbb.ccc.ddd/32 1024:65535 -j ACCEPT ipchains -A output -i eth1 -p TCP -s aaa.bbb.ccc.ddd/32 1024:65535 -d 192.168.0.0/24 1024:65535 -j ACCEPT
應改成﹕
ipchains -A input -i eth0 -p TCP -s 0/0 22 -d 192.168.0.0/24 1024:65535 -j ACCEPT
嗯﹐看來您還不是很明白 MASQ
的運作細節﹐或許可以參考這樣的例子﹕
1) 一個封包從內部 sokcet﹕1.2.3.4:1025
到遠端 socket﹕4.3.2.1:22 ﹔
2) 被送到NAT 進行 MASQ
處理之後﹐將來源端 socket 換成其自己的外部 socket ﹕4.3.2.254:2001﹐然後將這個動作記錄起來﹕
1.2.3.4:1024 vs 4.3.2.254:2001
3) 但遠端 socket
則沒改變﹐這樣當遠端收到這個封包的時候﹐會發現來源
socket 為﹕4.3.2.254:2001﹐
然後﹐處理完送出回應封包﹐會將來源
socket 和目的地 socket 掉換一個位置﹕
來源 socket 為 4.3.2.1:22 ﹔目的
socket 為 4.3.2.254:2001
4) 當封包抵達 NAT 的時候﹐NAT
會檢查其 MASQ 記錄﹐發現 4.3.2.254:2001 原來是從
1.2.3.4:1025 改來的﹐
於是進行 DEMASQ
﹐再將這個封包的目的 socket 換回 1.2.3.4:1025 。
5)
當封包到達內部主機的時候﹐它根本就不知道 NAT
做了什麼手腳。
好了﹐請想想為什麼我將您上面那兩行改了﹖
感謝你看完這封信,期待你能幫我解決心中的疑問。
不客氣﹗我希望這些說明對您的理解有幫助。
----- Original Message -----
From: Tony <kaola7@ms32.hinet.net>
To: Netman <netman@study-area.net>
Sent: Thursday, May 10, 2001 7:52 PM
Subject: Re: 想請教一些ipchains的觀念
Dear NETMAN大大:
非常謝謝您的回答,我去翻了一下TCP/IP及防火牆的書,整理了一下,用一個實例來和您請教, 分為兩大部分,第一部份就防火牆規劃,第二部分就防禦攻擊來和您討論 第一部份: Telnet服務連結外部主機 1 2 3 內部 eth1 eth0 外部 192.168.0.0/24 192.168.0.254 aaa.bbb.ccc.ddd/32 6 5 4 一個完整的連結封包應該總共會走這六個地方 服務方向 來源 目的 來源阜 目的阜 規則 封包1 出去 192.168.0.1 192.168.0.254 1025 23 INPUT 封包2 改寫封包 將192.168.0.1:1025改寫為aaa.bbb.ccc.ddd:2000 FORWARD 封包3 出去 aaa.bbb.ccc.ddd 外部 2000 23 OUTPUT 封包4 進入 外部 aaa.bbb.ccc.ddd 23 2000 INPUT 封包5 改寫封包 將aaa.bbb.ccc.ddd:2000改寫為192.168.0.1:1025 FORWARD
封包6
進入
192.168.0.254 192.168.0.1
23
1025
OUTPUT
我首先想問一下,在BBS上看到有些INPUT或OUTPUT並未指定網路裝置,這樣ipchains怎會知道封包是從eth0還是 eth1進出,設定上應該比較容易搞混吧!至於FORWARD看到您在BBS上的留言,似乎是不管封包2或封包5皆須設定 但看您回我的信裡,感覺起來IPCHAINS本身就有這機制,只要設定封包2的規則就好,不知這樣說對嗎?
唉﹐我真沒話可說了﹐我明明在 “架設
NAT”的文章是這樣說的﹕
**********
如果指定界面 (-i )﹐所謂 input
就是從該界面傳入主機的封包﹐所謂 output
就是從該界面傳出去的封包。如果沒有指定界面﹐則泛指從所有界面
傳入(input) 或 傳出(output) 的封包。
**********
這篇文章不知道您看得太快還是根本沒看呢﹖我很建議您仔細看看啦。
☆設定一:拒絕所有類型封包 ipchains -P input DENY ipchains -P output DENY ipchains -P forward DENY #我會想這樣設定是因為我要檔木馬程式及一些我不想讓區域網路使用的特定服務
非常正確﹗設定防火牆本應該要有這樣的危機意識﹐只不過這要求您對所有規則﹐以及它們的處理順序瞭如指掌才行﹐難道當然更高。
接下來,我想就個別封包來討論,首先應該先讓lo封包通過對嗎?
ipchains -A input -i lo -j ACCEPT ipchains -A output -i lo -j ACCEPT 封包1,資料從區域網路流至eth1所以應該設定 ipchains -A input -i eth1 -p TCP -s 192.168.0.0/24 1024:65535 -d 0/0 23 -J ACCEPT
注意 -J
是小寫﹐如下同。
封包2,進行FORWARD ipchains -A forward -p TCP -s 192.168.0.0/24 1024:65535 -d 0/0 23 -J MASQ 封包3,資料從eth0 流出INTERNET ipchains -A output -i eth0 -p TCP -s aaa.bbb.ccc.ddd/32 1024:65536 -d 0/0 23 -J ACCEPT 這裡就有點不太明白source要如何設定了,還是不用設定呢?此外,關於您所回答我的答案 是不是就是這這個意思呢?還有別種寫法嗎?
你設的沒錯﹐因為在forward
的時候已經改為 aaa.bbb.ccc.ddd 的位址了﹐如果繼續使用
192.168.0.0/24 就不行。
封包4,資料從INTERNET留回eth0 ipchains -A input -i eth0 -p TCP -s 0/0 23 -d aaa.bbb.ccc.ddd/32 1024 1024:65535 -J ACCEPT
第一個 1024 不必了吧﹖
封包5,回復原來封包 是不是不用設定??
不用﹐NAT
有自己的記錄﹐如果設了您就糟糕了﹐別人可以從外面的
port 23 連進來(如果 input 和 output 沒限制的話)﹗
封包6,資料留回區域網路 ipchains -A output -i eth1 -p TCP -s 0/0 1024:65536 -d 192.168.0.0/24 1024:65536 -J ACCEPT 不對﹗應該是 -s 0/0 23 ﹐因為回來的改寫是改寫回應封包的 destination socket ﹐而回應封包的 source socket 沒變啊。還好您的 input 和 forward 有限制﹐要不等對外面開發所有的 hi port 了﹗ 不曉得上述的規則有無錯誤,敬請指教。還是我觀念有錯誤,或設定得太複雜?? 第二部份 至於SYN封包的阻擋,在3way handshake的過程中,要建立連結時,會帶只有SYN的封包, 而回復此封包時,會帶SYN+ACK1的封包,往後都會帶ACK封包,因此我想要確定此封包是由 內部主動連結的,而不是外部丟過來的,最簡單的方法,應是檢查ACK,看是否為1,順便提
對﹐理論如此﹐我也不知道為什麼
ipchains 沒設 ack bit﹐不過 iptables 有改進過來啦。
一下您回答我的問題,就算對方偽造一個socket,試圖穿越防火牆(這就是IP詐騙的意義?)
對啊﹐要不你是怎麼理解的﹖
連結進來,其實這樣的封包是無效的,因為本機會檢查sequence number,就會發現找不到 sequence為0的封包而丟棄此封包,不曉得您的意思是不是這樣??
所以我有辦法直接對封包 檢查ACK嗎?因為如果檔SYN,第二個封包會收不到,要如何才能確定呢?
升級到 iptables 吧。
另外關於封包詐騙,因該是說1.宣稱為內部封包192.168.0.0/24或2.試圖穿越防火牆規則, 這兩個其實也是一樣道理,就是要進入內部網路,可是我有個疑問,如果向我上述那樣設定, 需要設定ipchains檔掉這類的攻擊嗎?因為預設是DENY,不符規則的就檔掉,還是也要設定 ipchains規則於eth0上,防止他宣稱為內部網路???
如果您沒對 sync
限制呢﹖外面不是可以建立連線了嗎﹖要從通盤的規則來考慮﹐相信您應該有體會才對。
但你不能在 eth0 的 output 上擋掉 -s 192.168.0.0/24
的封包﹐因為那樣連 NAT
自己進來的封包都無法通過。但根據 first match
原則﹐您一定要 DENY
的話﹐那就在這行規則之前執行﹕
ipchains -A ouput -i eth0 -s 192.168.0.254 -d 192.168.0.0/24 -j ACCEPT。
不過﹐我認為沒必要這樣龜毛﹐只要其它界面的 input
和 forward 做好就沒問題。
PS,謝謝您看完我的文章,也請您回答我的問題,若不嫌棄,在和您討論完相關問題時, 可否請您收於您的網站,嘉惠後者??因為感覺這類的文章不太多。謝謝!至於上次 所提的一些其他觀念,還在研究中,待研究出來在與您討論。
嗯﹐我正有整理之意﹐連同上次在
bbs
上的討論。其它的﹐希望您能好好消化一下﹐也希望能仔細閱讀和思考。
祝學習愉快﹗
|