作者 主題: 當 nat 和 filter 混在一起時  (閱讀 8992 次)

0 會員 與 1 訪客 正在閱讀本文。

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 於: 2001-12-18 17:03 »
有個問題想和大家討論一下


                          _____
Incoming                 /              Outgoing
       -->[Routing ]--->|FORWARD|------->
          [Decision]     _____/        ^
               |                        |
               v                      ____
              ___                    /    
             /                     |OUTPUT|
            |INPUT|                  ____/
             ___/                      ^
               |                        |
                ----> Local Process ----


      _____                                     _____
     /                                        /    
   PREROUTING -->[Routing ]----------------->POSTROUTING----->
     D-NAT/     [Decision]                    S-NAT/
                     |                            ^
                     |                          __|__
                     |                         /    
                     |                        | OUTPUT|
                     |                         D-NAT/
                     |                            ^
                     |                            |
                     --------> Local Process ------


以上是一張 nat ,一張 filter 的 簡圖,如果把它們放在一起
時,我對他們的先後順序就有一點不大懂了, 如會Local Process
後的輸出,會先經過 OUTPUT , 還是 OUTPUT D-NAT 的問題

Anonymous

  • 訪客
當 nat 和 filter 混在一起時
« 回覆 #1 於: 2001-12-18 18:12 »
先不必管合在一起怎麼樣﹐先讓我們溫習一下英文吧﹕

PRE 就是在 XXXXXX 之前﹔
POST 就是在 XXXXXX 之後。

當一個封包由 local process 產生之後﹐不管是否經過 D-NAT 處理﹐
在送出界面之前﹐必須經過 POSTROUTING 規則的檢驗。如果需要 D-NAT 的話﹐就修改完再交給 POSTROUTING 。

而當一個封包從界面進來之後﹐會先接受 PREROUTING 的檢驗﹐
如果需要 D-NAT 處理﹐那就修改封包﹐然後再交由 routing 處理。
然後﹐如果 routing 判斷是 local 的話﹐那就交給 local process ﹔
如果判斷不是 local 的話﹐那再交給 POSTROUTING 規則再檢驗一次。

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 回覆 #2 於: 2001-12-23 13:55 »
請教netman大哥:
關於netfilter,不知這張圖這樣畫對不對


Anonymous

  • 訪客
當 nat 和 filter 混在一起時
« 回覆 #3 於: 2001-12-23 17:37 »

我認為您的圖不能正確說明 local process 與 forward 的關係。

從您的圖上我們看到﹕local process 的 output 在 routing 之後還再一次經過 forward ﹐但事實上是不需再經過 forward 的檢驗。
同樣﹐routing 之傳給 local process 的 input 也同樣不需要經過 forward 的檢驗。

另外﹐也是關於 local process 相關的﹕
我不確定 local process 產生出來之後﹐在 routing 判斷之前﹐是否也會受到 prerouting 的檢驗呢~~ ﹖﹖﹖

所以﹐基本上﹐我認為您的圖並不準確。但是﹐別要我來畫﹐因為我也不知道如何將原作者的兩幅圖合併在一起。我覺得還是分開來看﹐比較容易理解。

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 回覆 #4 於: 2001-12-23 22:33 »
netman大哥,不知我這想法有沒有錯:

netfilter中的nat表,其中有一條為output鏈,同樣的是,
netfilter中的filter表,其中也有一條為output鏈,

假設今天我設了個規則如下:
iptables -A OUTPUT -p tcp  --dport 80 -j DNAT --to 192.168.0.2:80

此時的OUTPUT是不是應該只代表nat表中的鏈,而過濾這個封包是在filter表中的forward鏈

Anonymous

  • 訪客
當 nat 和 filter 混在一起時
« 回覆 #5 於: 2001-12-24 00:10 »
我會覺得﹐nat 和 filtering 是兩回事。

如果 filter 中有針對 input 和 output 進行處理的話﹐
只影響到傳給 local process 以及從 local process 傳出的封包。
而 filter 中的 forward﹐只針對非本機的封包進行處理。

至於 nat ﹐則看您要在哪個 table 中修改封包而已。如果是交給 SNAT 來處理﹐則修改 source socket﹔如果交給 DNAT 處理﹐則修改 destination socket ﹐就這麼簡單。

而至於 SNAT﹐DNAT﹐MANGLE 這些處理﹐要在 INPUT ﹑還是 OUTPUT ﹑還是 FORWARD ﹑還是 PREROUTING ﹑還是 POSTROUTING 中進行呢﹖看你喜歡吧。

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 回覆 #6 於: 2001-12-25 12:59 »
謝謝您們的指導,我了解了, nat 會改封包的 ip , 但是 filter 是不會改封包,但
可依封包的特性,來設定阻斷或開放,

Anonymous

  • 訪客
當 nat 和 filter 混在一起時
« 回覆 #7 於: 2001-12-25 14:10 »
對啦~~ 說到重點了﹗  ^_^

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 回覆 #8 於: 2001-12-25 14:55 »
請教netman大哥:


1.在netfilter下,對於本机發出去的封包,
  是否是先經OUTPUT鏈,再經routing,再經POSTROUTING鏈,最後由interface出去

2.由於在OUTPUT鏈即可做DNAT,所以由
  PREROUTING鏈是不會作用在由本机發出去的封包上

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 回覆 #9 於: 2001-12-25 16:09 »
我的問題也是相同的,就是當 filter 要阻斷的封包是根據被 nat 修改過的
封包,還是尚未修改的封包

Anonymous

  • 訪客
當 nat 和 filter 混在一起時
« 回覆 #10 於: 2001-12-25 16:40 »
呵~~ 現在的問題越來越有深度了﹗
耶~~ 我喜歡﹗

不過﹐說實在﹐我目前還沒花很多時間在 iptables 上面啦。
但如果按我目前已經知道的知識來猜測(只能說猜測啦)﹐
我認為 local process 產生的封包﹐不會再經過 POSTROUTING 了。
會首先進行 routing 判斷﹐然後是 OUTPUT 。
但是﹐我很懷疑是否會經過 POSTROUTING 耶﹐
因為﹐我不明白的是﹐您要如何修改 local process 產生的封包呢﹖
具體的規則要如何設定呢﹖而您的目的又在哪裡呢﹖

比方說﹐您要修改 local process 產生的封包﹐難道是修改它的 source 嗎﹖這樣不是沒辦法接收對方的回應封包了嗎﹖這樣沒意義啊~~
相反的﹐難道要修改 desitnation 嗎﹖也不對啊﹐因為 local process 本來就知道要送到哪裡去﹐修改的工作是對方的 NAT ﹐而不是這邊進行的。
所以﹐也不見得有什麼意義~~

而做為一個非本機的封包﹐雖然會接受 PREROUTING 和 POSTROUTING 的檢查﹐但卻永遠不會被 OUTPUT 檢查。
所以﹐我再次懷疑 local 產生的封包﹐是否會接受 POSTROUTING 和 PREROUTING 的檢驗啦。

不過﹐我們在沒仔細檢查過 kernel 的 routing code
和 iptables 的 filter code 和 nat code ﹐
所以﹐這裡討論的是否和事實一致﹐我們沒辦法確認。
而且﹐我也不打算做那樣的事情﹐也沒能力做。

但﹐我覺得﹐有些事情是可以做的﹕
假設 -> 修改 -> 測試 -> 檢查 -> 比較
並重複這個流程﹐應該可以根據結果來判斷 iptables 的行為特性。

比方說﹐您懷疑 filter 要攔阻的位址不是修改後而是修改前的位址﹐
那在 OUTPUT 規則先將修改前的位址攔下看看﹖
然後改用修改後盾位址看看﹖
如果在透過 tcpdump 抓封包的話﹐將不難得出結論。
但如果 local 的封包根本沒被修改呢~~~ ﹖
你們說呢﹖

...

  • 酷學園旁聽生
  • 俺是博士!
  • *****
  • 文章數: 5607
    • 檢視個人資料
當 nat 和 filter 混在一起時
« 回覆 #11 於: 2001-12-25 17:21 »
謝謝您的指導,我會有這個問題是因為我有 三條 adsl 連外,也用不同的 ip 和
gateway , 原本是希望能合併頻寛,但是目前我是沒有辦法做到,只好,先來
管理一下,讓 WEB server , ftp server 跑一條, mail server 跑另一條 ,
公司內部的同仁上網走第三條,原本相安無事,但最近因電腦不夠用,
把我的 Linux 主機抽走,全部的 adsl 全接到同一台 Linux 主機做管理,
這下完了,這一台 Linux 有 4 個網段,3 片網卡,和  3 個 default gateway
, 我才會有這麼多的 adv routing , nat , filter 合在一起使用的問題,
但我最終的目標是能做到 合併頻寛 ,

再下來才是管理,mangle 的問題