Linux下的NAT及防火牆的混合應用

來源:互聯網
上載者:User

【引言】
LINUX憑藉其穩定性、安全性和代碼開放在這幾年中,風靡全球;作為一種類UNIX系統,Linux正在互連網的各個層面得到應用,從科學計算到銀行取款機,從網路web服務到高層的Oracle 資料庫應用。都可以看到linux的影子。而由於Linux遵循於GPL協議(公用軟體許可證),任何人可以得到並且修改它的原始碼,所以他的安全性相較於其他的非開源系統來說要高的多;並且它可以從網路中免費下載。從這2點來說他非常適合用於網路資訊閘(軟路由或網關)和自製防火牆(事實上國內的硬體防火牆廠商都是用工業X86硬體和linux來做他們的產品,雖然那不是真正意義上的硬體防火牆)。現在學校過於注重對windows及其windows平台上的軟體、開發工具的學習。但是學生們沒有意識到,真正撐起這個互連網的正是UNIX系統;就從我對Linux的見解為大家展示UNIX系統的一角吧。
什麼是NAT?
NAT英文全稱是Network Address Translation,稱是網路位址轉譯,它是一個IETF標準,允許一個機構(包括多個網路節點)以一個地址出現在Internet上。NAT將每個區域網路節點的地址轉換成一個IP地址,反之亦然。它也可以應用到防火牆技術裡,把個別IP地址隱藏起來不被外界發現,使外界無法直接存取內部網路裝置,同時,它還協助網路可以超越地址的限制,合理地安排網路中的公有網際網路位址和私人IP地址 的使用。
為什麼要進行NAT
假設校園網提供園區Internet接入服務,為了方便管理,校園網路中心分配給園區使用者的IP地址都是偽IP(內部ip),但是部分使用者要求建立自己的WWW伺服器對外發布資訊,這時候我們就可以通過NAT來提供這種服務了。我們可以在防火牆的外部網卡上綁定多個合法IP地址或連接埠,然後通過NAT技術使發給其中某一個IP地址的包轉寄至內部某一使用者的WWW伺服器上,然後再將該內部WWW伺服器響應包偽裝成該合法IP發出的包。

實驗環境介紹
本文所有到的實驗環境如下:
LINUX系統主機一台(服務端):雙網卡 REDHAT 9.0 主機名稱:host
WINDOWS 98 系統主機一台(用戶端):單網卡     主機名稱:test    
聯想D-link 8口 10M/100M交換器一個

【本文】
一、 RED HAT 9.0安裝和注意點
Linux是一個獨立的作業系統,所以不能在其他動作系統下進行安裝,他有自己的啟動方式,可以採用以下兩種方法進行安裝。
● 從CD-ROM進行安裝
● 從FTP伺服器進行安裝
由於Linux系統安裝(第一種方法),有隨機參考手冊,難度不大,所以我們著重介紹從ftp安裝。
在安裝之前製作啟動盤:
1. 在windows作業系統下將安裝盤放入光碟機;
2. 運行 e:/dosutils/rawrite.exe(e盤為光碟機)
3. 在運行後的介面中輸入e:\images\bootnet.img
4. 指定目標盤,輸入使用者磁碟片盤符:a
這樣一張安裝程式的啟動盤就建好了。
 
用磁碟片引導電腦,進入藍色介面後,輸入FTP伺服器位址和ftp上的使用者名稱及口令就可以下在安裝了。
RED HAT 9.0安裝介面為中文,安裝中文說明基本可以完成系統定製,在此要強調的是,分區的時候,/swap(交換分區)大小要是記憶體大小的2倍;既然是作NAT網關,要把/var(日誌分區)單分出來,並且不要少於500M,有充裕的空間儲存日誌,也為將來將來系統故障或受到攻擊做到有據可查。
二.LINUX的網路設定和NAT原理
2.1網路設定
我們把Linux系統安裝完後,整個設定平台算是搭建完畢,但是還要設定網路;設定網路之前,或者說讓linux上網前,應該把和這台伺服器應該起到作用的無關服務關掉。
可以在命令列下敲入setup斷行符號,會出現一個文本菜單,裡面有“系統服務”一項,直接用空格鍵取消服務前面的勾然後重新啟動系統就行了。
假如是UNIX的熟練使用者,可以在取消服務後,不用重新啟動,在命令列俠打入
  ps aux    

會顯示現在在後台啟動並執行所有服務,看到要殺死的進程後,打入
kill -9 <pid>
(-9代表強制殺掉進程)殺死進程。
然後進入/etc/sysconfig/network-scripts/目錄
vi ifcfg-eth0會出現以下內容
device=eth0
onboot=yes
bootproto=none
IPADDR=192.168.0.1 #(內網網卡iP)
netmask=255.255.255.0
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=192.168.0.0(網路號)
Broadcast=192.168.0.255(廣播號)
上面的設定的意思是:eth0對內的內網網卡,ip地址為192.168.0.1,子網路遮罩為:255.255.255.0;

vi ifcfg-eth1會出現以下內容
device=eth1
onboot=yes
bootproto=none
IPADDR=202.204.208.5 #(外網網卡iP)
netmask=255.255.255.128
TYPE=ETHERNET
USERCTL=NO
PEERDNS=NO
NETWORK=202.204.208.0(網路號)
Broadcast=202.204.208.127(廣播號)
上面的設定的意思是:eth1是對外的外網網卡,ip地址為202.204.208.5。
網卡的設定就完成了

加入nat用戶端ip和名稱
vi /etc/hosts
格式為:
ip地址 主機名稱
127.0.0.1 host

指定內網網關
vi /etc/sysconfig/network
gateway=202.204.208.7 #(網關地址,假如服務端的外網為撥號,就不要指定)

設定DNS伺服器
vi /etc/resolv.conf
格式為
nameserver ip地址
nameserver 202.106.196.115
都設定好後,從新啟動系統,在命令列下打入
route -a #察看路由表,看一下預設閘道是否為202.204.208.7
假如是的話,服務端的網路設定就已經全部完成。

下面是用戶端的網路設定
因為是win 98系統,所以只給出配置參數,配置方法略
ip地址為192.168.0.2
子網路遮罩:255.255.255.0
網域名稱伺服器:202.106.196.115
網關:192.168.0.1
全部網路設定完成

2.2 NAT原理
2.2.1在進入NAT設定之前,我們要先討論一下NAT的工作原理
在引言部分,我們已經提到了一個NAT應用執行個體,從這個執行個體中可以看出NAT和防火牆是一體的,換句話說,NAT就是防火牆。NAT對防火牆來說是子集的關係。
在本節,我們會深入討論NAT的原理部分,為了更清晰的認識NAT,我們借用INTERNET標準化組織發布的RFC3022文檔的部分內容。
NAT有三種類型:靜態NAT(Static NAT)、網路地址連接埠轉換DNAT(destination- NAT)、動態地址NAT(Pooled NAT)。我們主要討論前面2種NAT.
靜態nat解決問題的辦法是:在內部網路中使用內部地址,通過NAT把內部地址翻譯成合法的IP地址在Internet上使用,其具體的做法是把IP包內的地址域用合法的IP地址來替換。NAT裝置維護一個狀態表(路由表,所以也稱NAT為軟路由),用來把非法的IP地址映射到合法的IP地址上去。每個包在NAT裝置中都被翻譯成正確的IP地址,發往下一級,這意味著給處理器帶來了一定的負擔。但對於一般的網路來說,這種負擔是微不足道的。
網路地址連接埠轉換NAT,也叫做反向NAT,他解決問題的方法是:在內部網路中,使用內部地址的電腦開設了網路服務(80,21等),當外部ip想訪問這些服務時,NAT Gateway把外部存取ip翻譯成內部ip,也就是說,把內部開設的服務,映射到一個合法的ip和連接埠上,已供外部存取。
假如想進一步瞭解他的工作原理,NAT其實就是一種IP包欺詐,也可以說是對IP前序的修改,請看下錶
4位版本
4位首部長度
8位服務類型
16位總長度(位元組數)
16位標識
3位標誌
13位片位移
8位存留時間(ttl)
8位協議
16位首部校正和
32位源ip地址
32位目的ip地址
其他選項
攜帶資料
IP資料包格式和前序中的各欄位
NAT Gateway(外202.204.208.5;內192.168.0.1)收到本地區域網路內的客戶機(192.168.0.2),發來的ip資料,先判斷是否是本地子網中發來的,假如通過,則按照她的目的ip地址尋找本地路由表進行轉寄,NAT在包被繼續向前送出之前轉換32位源地址192.168.0.1成202.204.208.5。相應的,IP包往回傳時依據相同的地址進行轉換。
2.2.2 NAT設定
我們知道了NAT的原理,就可以進行NAT的配置了,我們前面說過了NAT就是防火牆,在RED HAT 9.0下內建防火牆 IPTABLES
我們在做好網路設定後,假如要實現用戶端(win98)通過服務端上網(靜態NAT),可以在命令列下直接打入
iptables -t nat -A POSTROUTING -o eth1 -j SNAT - to 202.204.208.5
說明:
   -t nat : 調用NAT表,調用這個表說明遇到了產生新的串連的包。
   -A :該命令將一條規則附加到鏈的末尾。
  POSTROUTING:指定正當資訊包打算離開防火牆時改變它們的規則。
  -o eth1:輸出介面為eth1
  -j SNAT:跳轉,也叫觸發條件,當滿足SNAT規則是便發生跳轉
  整條語句的意思為: 當防火牆遇到產生新的串連的包,則在他要離開防火牆時改變他的源ip為202.204.208.5並且從eth1出口送出。

    nat的規則指定完成後,還要開啟ip轉寄功能:
         echo 1 > /proc/sys/net/ipv4/ip_forward
這樣,用戶端就可以通過208.5上網了。

假如208.5的用戶端192.168.0.2開設了80連接埠的web服務,如何讓外部存取到這個區域網路內部的服務呢?
這就用到了Dnat(也叫反向NAT,連接埠跳轉),在命令列下打入:
iptables -t nat -A PREROUTING -i eth1 -d 202.204.208.5 -p tcp -dport 80 -j DNAT -to-destination 192.168.0.2:80
語句說明:當有通過eth1介面的tcp協議訪問202.204.208.5的80連接埠的時候,則觸發跳轉,跳轉至區域網路的192.168.0.2的80連接埠。
但是這同時也出現一個問題,在同一區域網路內的機器,無法訪問202.204.208.5的80連接埠。以下是原因:
假設192.168.0.3不通過http://192.168.0.2:80這種方式進行瀏...蟯遊侍餑兀?/a>
在命令列下打入:
iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 -d 192.168.0.2/32 -j SNAT -to 192.168.0.1
語句解釋:當192.168.0.1-255這個範圍的ip訪問192.168.0.2這個ip的時候,當資料包離開的時候修改源ip地址為192.168.0.1,這相當於在區域網路內部,又作了一次NAT轉換。區域網路內部通過192.168.0.1作為轉寄,而不是直接進行通訊,這就避免了無法訪問區域網路內部ip的情況。

目前,nat的功能就已經實現,但是並沒有對包進行過濾。

三.網路攻擊和防火牆
3.1什麼事網路攻擊
當混亂的Internet和你良好的、有序的Linux伺服器網路之間進行串連時,你最好能知道哪些東西可以進入你的大門。這就需要制定包過濾策略,既然是包過濾,肯定是要過濾掉那些對網路有害的或者是無用的包,但哪些包是有害的呢?我們既然是在防守,不妨聽聽敵人的想法。
作為一個老練的入侵者,他並不會盲目的展開攻擊和入侵,他首先會確定自己的目標,當然,確定目標的方法有2種,一是根據個人的好惡或審美觀點確定目標,二是根據廣義掃描器(反饋結果簡單,但是速度很快的掃描器)的反饋結果,選擇整體安全性不高的網路作為攻擊目標。
接下來要做的就是瞭解這個網路伺服器,就象和人交往一樣,你對那個人越瞭解,就越清楚那個人的弱點,從而你對它的傷害就越致命。對人的瞭解通過交談,對伺服器的瞭解要通過掃描;首先要確定的是這台伺服器都開有什麼服務,這很簡單,通過tcp協議的3次握手:
1. 當請求端對要掃描的伺服器連接埠送一個包含SYN標誌的TCP報文,這個報文指明用戶端使用的連接埠以及TCP串連的初始連接埠。
2.伺服器在接受到用戶端的SYN包問候,假如用戶端請求串連的連接埠存在,則返回一個SYN+ACK的報文,表示用戶端的請求被接受。同時TCP序號被加一。那麼掃描器接受到SYN+ACK報文後,會向入侵者報告,掃描的這個連接埠是開啟的,從而使入侵者判斷這是什麼服務。
3. 用戶端也返回一個確認報文ACK給伺服器端,同樣TCP序號被加一,到此一個TCP串連完成。
4. 假如伺服器的這個連接埠不存在,或者沒有返回SYN+ACK報文,則掃描端發出一個FIN標誌報文,撤銷這個TCP串連。

當確定了伺服器開設了什麼連接埠以後,有經驗的入侵者可以從連接埠判斷出這台伺服器開設的具體服務,然後就是按照不同的服務進行漏洞攻擊或入侵了。

從以上攻擊步驟看出,不要讓伺服器完全暴露在網路中,是非常重要的,也就是首先對連接埠進行過濾,只允許指定的服務通過制定的連接埠穿越防火牆。這也就引出了RFC2979規定的互連網防火牆規則配置的基本準則之一:
一切未被允許的就是禁止的。
基於該準則,防火牆應該封鎖所有的資訊流,然後對希望提供的服務逐項開放。這是一種非常實用的方法,可以造成一種十分安全的環境,因為只有經過仔細挑選的服務才被允許實用。

3.2如何防禦網路攻擊
從我們上例來看,我們只開設了web服務使用標準的80連接埠。
那我們要在防火牆中進行如下設定:
iptables -P INPUT -j DROP #我們用-P來攔截主機上所有通訊
iptables -A INPUT -p tcp -dport 80 -j ACCEPT #開啟80連接埠的tcp協議
假如我們在將來還要還要添加適當連接埠,可以用上句的格式逐一添加

這樣我們就實現了對網路伺服器主機的連接埠過濾功能,這種方法也只是降低受到攻擊的怕剩蛭械墓セ韃⒉灰覽滌詼絲諢蛘嚦梢遠砸丫碩栽市碸諾畝絲誚泄セ鰨攵雜謖?種攻擊,還要分別制定防火牆策略。
1. 死亡之ping (ping of death)
ping,這個軟體是測試網路間是否暢通用的,他應用於icmp協議,但並不依賴於哪個連接埠,由於在早期的階段,路由器對包的最大尺寸都有限制,許多作業系統對TCP/IP棧的實現在ICMP包上都是規定64KB,並且在對包的標題頭進行讀取之後,要根據該標題頭裡包含的資訊來為有效載荷產生緩衝區,當產生畸形的,聲稱自己的尺寸超過ICMP上限的包也就是載入的尺寸超過64K上限時,就會出現記憶體配置錯誤,導致TCP/IP堆棧崩潰,致使接受方當機。
為瞭解決這個問題,我們可以在防火牆中加入以下內容
iptables -A INPUT -p icmp -icmp-type echo-request -i eth1 -j DROP
這句話的意思是,從介面eth1進入的icmp協議的請求全部丟棄。

2. SYN Flood (拒絕服務的攻擊)
SYN Flood 是目前最流行的拒絕服務的攻擊與分散式阻斷服務攻擊的方式之一,這是一種利用TCP協議缺陷,發送大量偽造的TCP串連請求,從而使得被攻擊方資源耗盡的攻擊方式。
前面已經提過TCP的三向交握,問題就出在TCP串連的三向交握中,假設一個使用者向伺服器發送了SYN報文後突然死機或掉線,那麼伺服器在發出SYN+ACK應答報文後是無法收到用戶端的ACK報文的(第三向交握無法完成),這種情況下伺服器一般會重試(再次發送SKY+ACK給用戶端)並等待一段是句丟棄這個未完成的串連,這段時間的長度我們稱為(SYN Timeout),一般來說這個時間是分鐘為單位(半分鐘-2分鐘);一個使用者出現異常導致伺服器的一個線程等待1分鐘並不是什麼很大的問題,但如果有一個惡意的攻擊者大量類比這種情況,伺服器端將為了維護一個非常大的半串連列表而消耗非常多的資源----數以萬計的半串連,即使是簡單的儲存並遍曆也會消耗很多的CPU資源與時間,何況還要不斷對這個列表中的IP進行SYN+ACK的重試。實際上如果伺服器的TCP/IP棧不夠強大,最後的結果往往是堆疊溢位崩潰---即使伺服器端的系統足夠強大,伺服器端也將忙於處理攻擊者偽造的TCP串連請求而無暇理睬合法請求(用戶端的正常請求相較於非法請求來說非常小),此時從正常串連的角度來說,伺服器失去了響應,這種情況我們稱為伺服器收到了洪水攻擊。
從防禦角度來說,可以縮短SYN-Timeout時間,由於SYN FLOOD攻擊效果取決於伺服器上保持的SYN半串連數,這個值等於SYN攻擊的頻度* SYN Timeout,所以通過縮短從接受到SYN報文到區定這個報文物校並丟棄串連的時間,,可以降低伺服器的負荷。
我們可以在用IPTABLES執行如下語句:
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

在所有的IPTABLES規則制定完後,可以用$ iptables-save > iptables-script把寫入的全部的規則寫入到檔案,然後 在 /etc/rc.d/rc.local
加入:iptables-restore iptables-script
這樣每次重新啟動系統將自動載入iptables設定好的規則。

【結論】
本設計實現了Linux伺服器在區域網路內的代理上網應用和網路防火牆應用,大量使用了Linux下的防火牆iptables。並且對tcp/ip協議作了透徹的講解,對網路的典型攻擊方式進行了明確的闡述。證明Linux在作為網路閘道伺服器有充分的方式,不僅系統強壯,並且配置性很強。希望給廣大喜歡網路及網路管理的同學提供了新的思路。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.