祝 虹,吉承平
(揚州職業大學 江蘇 揚州 225009)
隨著因特網的快速發展,IP地址的匱乏及網絡安全等問題日益突出。NAT技術提供了一種解決網絡內多臺計算機共享一個公共IP地址,就能與 Internet互聯的問題,緩解了IP地址資源匱乏,節省了公網 IP地址;同時,NAT還具有防火墻的功能,通過NAT設置,可以對外部網絡隱藏內部的網絡結構,限制從外網到內網的非授權訪問,維持了局域網的私密性,增加網絡的安全性,減少非法用戶通過Internet入侵內部網絡的機會[1-5]。
文中在Linux系統下,詳細闡述了如何設置基于NAT的防火墻,從準備工作開始,逐步定義規則,到提供有狀態服務,編輯及運行Shell腳本,最后進行檢驗NAT防火墻的作用和效果。
所謂NAT技術就是網絡地址轉換[6],這種轉換通常發生在內部網絡的自定義IP地址(不需要經過申請)即假的IP地址的電腦和外部通訊時,通過網絡中的NAT網關,把內部IP地址翻譯成外部合法地址后傳送到外部網絡。同樣,由外部網絡進入內部網絡時,也經過相同的過程。
NAT技術的基本原理就是通過一個外部地址或幾個外部地址轉換成局域網的內部地址來實現內部的所有主機訪問Internet[7-8]。NAT技術是把TCP和UDP以及ICMP等的一部分信息通過透明中繼,而TCP/IP在NAT網關上運行的軟件與其他的普通網關軟件不一樣,一般來講,普通的路由器是根據IP包中的目的地址和路由表將IP數據包從一個網絡發送到另一個網絡,而NAT技術的IP數據包傳送并非憑借目的IP地址,它的NAT網關是內網與外網Internet之間一種幀中繼IP數據包轉換,并且它的中繼是面向連接的,如圖1所示。
從NAT改變封包的地址類型來看,NAT可以分為兩種:Source NAT (SNAT)與 Destination NAT (DNAT)。 NAT 規則的表格含有3個列表叫做 ‘chains’:每一條規則都按順序檢查﹐直到找到一個相符的比對。具體流程如圖2所示。
NAT作為防火墻具有以下優勢:
1)NAT可以作為過濾器,限制內網與外網的連接。當端口地址在NAT內動態分配時,NAT域中特定主機被外網攻擊比較困難。

圖1 NAT在內部網絡LAN和外部網絡WAN之間中繼IP數據報的連接Fig.1 NAT between the internal network LAN and external networks WAN connection of the relay IP datagrams

圖2 NAT通信過程Fig.2 NAT communciationn process
2)將NAT設備和應用網關結合起來,NAT可以具有透明路由的功能。這樣可以對應用層中含有IP地址的信息進行翻譯,確保數據報中不出現私有地址的信息。
3)NAT設備是作為因特網主機存在的,容易受到外來攻擊,如Ping Flood、SYN Flood。在Linux系統下打造NAT防火墻,可以對NAT設備進行保護。
4)當NAT設備處于不安全域中時,應用級的負載可以實現端對端的加密,這樣負載中就不會包含運輸層的端口信息、IP地址信息,提高網絡安全性。
1)基本思路 首先需要在Linux系統中創建基于NAT防火墻,它必須能夠在服務器或路由器上運行,其功能就是只允許某些類型的通訊數據流通過,在配置防火墻時,為增強其安全性,必須設置能刪除或者拒絕對安全性有威脅的通訊數據流。
2)Linux系統內核配置 安裝之后,“iptables”命令便可使用進入 /usr/src/linux,輸入 “make menuconfig”或“make xconfig”;并啟用一些內核的網絡功能。
3)配置鏈策略 “iptables-P”命令用于設置鏈的缺省目標和包過濾規則策略,INPUT是一個內置鏈,iptables-P I NPUT DROP命令將INPUT鏈的缺省目標指定為DROP,告訴內核應刪除或丟棄所有與INPUT規則鏈中都不匹配的信息包。規則是先拒絕所有信息包,然后再允許所需要的信息包。
由于該項目為滁河兩側堤頂路周邊的景觀設計,因此其防浪墻成為該項目出現頻率最多的一個元素,作為左岸項目的一大亮點,為了對與六合老城區以及河對岸的景觀帶形成對比,此次防浪墻采用異型混凝土塑形,每一段的造型都經過二次深化設計,各不相同。
同時,要為有兩個網絡接口 eth0和eth1的機器設計防火墻。eth0連接到內部網絡,使用私有地址192.168.1.0/16。而eth1連接到通過局域網與因特網進行連接。添加以下命令:
iptables-P INPUT DROP
iptables-A INPUT-i!eth1-j ACCEPT
這行附加的 "iptables-A"將一個新的包過濾規則添加到 INPUT鏈的末端。添加此規則之后,INPUT鏈就包含了一個規則和缺省刪除策略。現在,讓我們看一下當前防火墻有什么功能。
與其在基于靜態協議特征的防火墻上開一個洞,還不如使用Linux新的連接跟蹤功能來使防火墻根據包的動態連接狀態做出判定。conntrack通過將每個包與一個獨立的雙向通信信道或連接相關聯來進行判定。
第一種連接狀態叫作NEW。
第二種連接狀態是:ESTABLISHED狀態 就是指建立連接,表示正在通訊。
最后的狀態是:INVALID狀態。INVALID包是指不屬于ESTABLISHED、NEW、RELATED 3種類別,通常將其視為惡意的數據包而丟棄。但它不會被自動丟棄;需要插入適當的規則,并設置鏈策略,以便正確處理這些數據包。
明確關閉ECN:前面提到過應當關閉 ECN(明確擁塞通知),以便因特網通信可以正確工作。但由于種種原因,有可能會啟用了 ECN。由于這些原因,最好使用 /proc接口來明確禁用 ECN,處理拒絕。
目前,已經刪除了所有來自因特網的未經請求的通信流。這樣可以阻止討厭的網絡活動,但是它有一些缺點。這種方法最大的問題是闖入者很容易就可以檢測到我們正在使用防火墻,因為我們的機器沒有應答標準 TCP復位和 ICMP端口不可到達響應,因為向一般機器發送會響應,用于表示對不存在服務的連接失敗。
雖然我們要接受一些進入連接,但我們可能并不想接受所有進入連接。最好從“缺省拒絕”策略開始(就象我們現在使用的策略),逐漸開放對那些希望人們可以連接的服務的訪問,如 HTTP,SSH,FTP 等。
以上詳細介紹了防火墻的整個配置過程,如果要停止防火墻,使用“iptables-FINPUT”將清除 INPUT 鏈,然后使用“iptables-P INPUT ACCEPT”命令使缺省 INPUT策略切換回 ACCEPT;用“iptables-t nat-F POSTROUTING”命令清除NAT規則。
如果使用這個腳本,先修改腳本的權限,輸入”chmod 777 firewall”命令使之具有可執行權限,然后可以通過輸入“/bin/firewall stop”來停止防火墻,通過輸入 "/bin/firewall start"再啟動它。
編輯完防火墻腳本后,我們將分別檢驗防火墻及NAT是否生效。
啟動防火墻前,通過IP地址為202.194.68.55的主機可以“ping”到我們的機器,同時,我們也可以“ping”到對方。當啟動防火墻后,輸入“iptables-L”命令,可以看到我們想要的防火墻規則均已顯示出來了;輸入“iptables-L-t nat”命令,可以顯示出我們的 NAT配置。此時,對方已經無法“ping”到我們的主機,而我們可以“ping”到對方,這說明防火墻已經生效。
在以上的設計中,我們是通過對Linux操作系統下iptables命令的操作來完成NAT防火墻設置的。但由于iptables有許多表和鏈,在大多數報文經過這些表和鏈的規則時,則會明顯的降低防火墻的響應速度,使得防火墻的吞吐能力打大折扣,因此,在實踐中需要通過與代理服務防火墻結合使用來提高其安全性能,當然如在本系統之前使用硬件防火墻與之配合,就能有效防止DDOS攻擊和端口映射,加上Linux的NAT防火墻在對報文的處理時,盡可能減少報文平均經過規則的數量的方法來優化防火墻的性能,這樣就能建立起一套相對完整的防火墻系統,以實現對系統的全方位的防護。
Linux操作系統下的iptables可以編寫功能強大的防火墻,能按照系統設定的安全策略對防火墻進行過濾,具有配置方便、運行速度快、系統功能強大等優點,但也存在一些缺點,需進一步完善其功能和優化,最好采用混合防火墻來保證內部網絡安全。