摘要:網絡安全技術是一門涉及計算機科學、網絡技術、通信技術、密碼技術、信息安全技術、應用數學、數論、信息論等多學科的綜合性學科。解決網絡安全問題的重要手段就是防火墻技術。該文針對校園網在運行中所遇到的實際問題,針對包過濾(packet filtering)型和代理服務(Proxy service)型兩種防火墻的不同應用,詳細論述了在Linux下建立一個高效、通用、安全的網絡系統的防火墻解決方案。
關鍵詞:網絡安全;校園網;防火墻;代理服務器
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2009)27-7640-03
Configuration of Firewall in Linux
YANG Yun1, ZHANG Hui2
(1.Jinan Railway Polytechnic, Ji'nan 250013, China; 2.Jinan Huangtai School, Ji'nan 250013, China)
Abstract: The article discusses the practical problem in operating campus network, and how to build a high efficient、universal and safe resolution of firewall in Linux at different applications forpacket and Proxy service.
Key words: network safe; campus network; firewall; Proxy server
Internet的迅速發展在提高了工作效率的同時,也帶來了一個日益嚴峻的問題-網絡安全。很多企業為了保障自身服務器或數據安全都采用了防火墻。
防火墻是指設置在不同網絡(如可信任的企業內部網和不可信的公共網)或網絡安全域之間的一系列部件的組合。它是不同網絡或網絡安全域之間信息的唯一出入口,能根據企業的安全政策控制(允許、拒絕、監測)出入網絡的信息流,且本身具有較強的抗攻擊能力。它是提供信息安全服務,實現網絡和信息安全的基礎設施。 在邏輯上,防火墻是一個分離器,一個限制器,也是一個分析器,有效地監控了內部網和Internet之間的任何活動,保證了內部網絡的安全。為防止Internet上的不安全因素蔓延到局域網內部,使用防火墻是一種行之有效的解決方法。下面結合我校情況介紹一下在Linux下配置防火墻的解決方案。
1 幾種主要的防火墻技術
防火墻從原理上可以分為兩大類:包過濾(packet filtering)型和代理服務(Proxy service)型。下面是幾種不同的防火墻配置方案。
1.1 建立包過濾防火墻
利用Linux核心中的IP鏈(IP Chains)規則建立包過濾防火墻,規則具體如下:
#先用 -F 選項清除掉所有規則
/sbin/ipchains -F
#假設服務器內網IP為192.168.0.22,公有IP為210.77.217.82
#將服務器在內網的地址除開放DNS、POP3、Route、FTP、Telnet、Web、SMTP外其他服務全部封死
/sbin/ipchains -A input -p UDP -d 192.168.0.22 53 -j ACCEPT
/sbin/ipchains -A input -p UDP -d 192.168.0.22 110 -j ACCEPT
/sbin/ipchains -A input -p UDP -d 192.168.0.22 520 -j ACCEPT
/sbin/ipchains -A input -p UDP -d 192.168.0.22 1:1024 -j DENY
/sbin/ipchains -A input -p TCP -d 192.168.0.22 20 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 21 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 23 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 25 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 53 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 80 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 110 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 192.168.0.22 1:1024 -j DENY
#服務器對外僅提供POP3、FTP、Web、SMTP服務
/sbin/ipchains -A input -p UDP -d 210.77.217.82 110 -j ACCEPT
/sbin/ipchains -A input -p UDP -d 210.77.217.82 1:1024 -j DENY
/sbin/ipchains -A input -p TCP -d 210.77.217.82 20 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 210.77.217.82 21 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 210.77.217.82 25 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 210.77.217.82 80 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 210.77.217.82 110 -j ACCEPT
/sbin/ipchains -A input -p TCP -d 210.77.217.82 1:1024 -j DENY
使用IP鏈規則建立防火墻的主要原因并不是應為它是免費軟件,而是因為IP鏈規則是一套直接編譯在Linux核心中的防火墻,其運行效率是其他外掛在操作系統上的軟件防火墻所無法比擬的,因此假若希望在流量較大網絡接口安設防火墻,而又不想購買昂貴的硬件防火墻時,采用IP鏈規則建立包過濾防火墻是一個不錯的選擇。
1.2 實現內網微機透明訪問Internet
利用IP偽裝(IP Masquerade)實現內網微機透明訪問Internet。
IP偽裝是NAT(Network Address Translation網絡地址轉換)的一種方式,即當內網的機器需要訪問Internet時,具有IP偽裝功能的服務器會將內部網絡使用的非公有IP偽裝成同一個公有IP訪問Internet,這就可以使內網用戶可以透明地訪問Internet而不用安裝任何客戶端軟件,減少了許多不必要的麻煩,使用該方式可使大部分軟件能直接訪問Internet,例如使用SMTP、IMAP、POP協議的郵件客戶端軟件、使用UDP協議的ICQ、OICQ、Real Player、Windows Media Player軟件等,而且用戶使用內網任何一臺微機都可以直接Ping通Internet上的地址。測試網絡連接十分方便。IP偽裝是Linux的一項網絡功能,在IP 鏈規則中的具體實現方法如下:
#啟用 IP 轉發
/sbin/ipchains -P forward REJECT
#建立 NAT 規則,令局域網中地址為 192.168.*.* 且其目標地址不在 192.168.*.* 范圍內的機器偽裝為本機 Internet 有效 IP地址后進行轉遞
/sbin/ipchains -A forward -j MASQ -s 192.168.0.0/16 -d ! 192.168.0.0/16
但該方式并不一定可以使所有連接Internet的軟件成功使用,TCP/IP協議的天生缺陷使得極少部分軟件無法使用該方式訪問Internet,例如當內部網絡中某臺微機希望連接Internet上的一臺FTP服務器,而對方的FTP服務器禁用了或根本不支持被動方式連接,那么連接后就無法上傳或下載傳送任何數據。此時則需要使用其他方式連接了。例如后面提到的Socks代理。
1.3 構筑透明代理
利用Squid代理服務與防火墻規則結合構筑透明代理。
使用IP鏈規則可以使內網的主機不需要做任何設置就可以訪問Web,但其缺點就是當內網數臺主機先后訪問Internet上某一站點時,第一臺主機將該站點的主頁以及頁面中的圖像從Internet下載到本機,而其它幾臺主機訪問時也要重復相同的操作,即從Internet下載了同樣的內容,這樣的重復勞動自然會浪費相當多的帶寬,而使用具有Web緩存(Web Cache)的代理服務器時便可解決此問題,在第一臺主機訪問該站點時代理服務軟件將此網頁的內容緩存到本地硬盤,而后其他主機再次訪問該站時,代理服務器只是檢測該網頁是否有更新,若無更新便直接將本機的緩存傳送過去,這樣既可以節省帶寬又有效地提高了上網速度。例如Linux上的Squid代理服務就是一套高效快速的代理服務軟件。但麻煩的就是必須在每臺機器上設置Web 代理服務器,此時可以簡單地使用IP鏈規則來省略這一操作,即在規則中加入一條轉遞規則,將訪問任何地址80(HTTP)端口的封裝包都強制轉發到Linux服務器上安裝的代理服務器偵聽端口。即:
#假設Squid代理服務的偵聽端口為3128
/sbin/ipchains -A input -i eth0 -d 0/0 80 -p TCP -j REDIRECT 3128
/sbin/ipchains -A input -i eth0 -d 0/0 3128 -p tcp -j REDIRECT
這樣使內網任何用戶訪問Internet前都令其穿過代理服務器后再訪問,不光有效地加快了上網速度,又可以利用Squid代理服務過濾掉內網無效訪問和攻擊,實現了透明代理。
1.4 采用Socks代理服務
對于無法使用IP偽裝方式訪問Internet的特殊協議與軟件采用Socks代理服務。
Socks是一組客戶端/服務器端結構的Proxy協議。Socks的軟件組成包含Socks服務器程序及Socks客戶端應用程序庫。用戶的應用程序只要有支持Socks協議就能通過Socks代理服務器連接到防火墻外的網絡。
2 一個安全的防火墻系統實例
結合上面方案的分析,下面我就用一個實際例子講解建立安全防火墻系統的過程。
2.1 網絡情況
校園網有多個子網,所有的內部網絡用戶通過路由器連接防火墻,防火墻作為校園網絡的唯一出口連接到Internet。為了研究的方便,假如內部網絡只有兩個網段:192.168.1.0 /24和192.168.2.0/24。
2.2 用戶需求
用戶的需求如下:
1) 保障內部網絡安全,禁止外部用戶連接到內部網絡。
2) 保護作為防火墻的主機安全,禁止外部用戶使用防火墻的主機Telnet、FTP等項基本服務,同時要保證處于內部網絡的管理員可以使用Telnet管理防火墻。
3) 隱蔽內部網絡結構,保證內部用戶可以通過僅有的一個合法IP地址202.102.184.1連接Internet。同時要求許可內部用戶使用包括E-Mail、WWW瀏覽、News、FTP等所有Internet上的服務。
4) 要求對可以訪問Internet的用戶進行限制,僅允許特定用戶的IP地址可以訪問外部網絡。
5) 要求具備防止IP地址盜用功能,保證特權用戶的IP不受侵害。
6) 要求具備防IP地址欺騙能力。
2.3 解決方案
1) 安裝一臺Linux服務器,配置雙網卡,兩端地址分別為192.168.0.22 /255.255.255.252(內部端口ETH 0)和210.77.217.82/255.255.255.248(外部端口ETH 1)。在IPChains中去除諸如 HTTP、DNS、DHCP、NFS、SendMail之類所有不需要的服務,僅保留Telnet和FTP服務,以保證系統運行穩定,提高網絡安全性。
2) 啟動IPChains后,為保證安全性,首先將Forward Chains的策略設置為DENY,禁止所有的未許可包轉發,保障內部網安全性,以滿足需求1。命令為: ipchains -P forward DENY
3) 為滿足需求2,必須禁止所有來自外部網段對防火墻發起的低于1024端口號的連接請求。在此,做如下設定來阻止對ETH1端口請求連接小于1024端口號的TCP協議的數據報(請求連接數據報帶有SYN標記,IPChains中使用參數-y表示)。命令如下:ipchains -A input -p tcp -d210.77.217.82:1024 –y -i eth1 -j DENY。
需要說明一點,之所以不是簡單地拒絕所有小于1024端口號的數據報,在于某些情況下服務器會回復一個小于1024接口的數據報。比如某些搜索引擎就可能在回復查詢中使用一個不常用的小于1024的端口號。此外,當使用DNS查詢域名時,如果服務器回復的數據超過512字節,客戶機將使用TCP連接從53號端口獲得數據。
4) 為滿足需求3,必須使用IP地址翻譯功能。來自內部保留地址的用戶數據包在經過防火墻時被重寫,使包看起來象防火墻自身發出的。然后防火墻重寫返回的包,使它們看起來象發往原來的申請者。采用這種方法,用戶就可以透明地使用因特網上的各種服務,同時又不會泄露自身的網絡情況。注意,對于FTP服務,需要加載FTP偽裝模塊。命令如下:insmod ip_masq_ftp
5) 為滿足需求4,可以在已經設置為DENY的Forward Chains中添加許可用戶。因為許可這部分用戶使用所有的服務,訪問所有的地址,所以不用再指定目標地址和端口號。假定許可IP地址為192.168.1.100,配置命令如下:ipchains -A forward -s 192.168.1.100 -j MASQ。
同時,必須啟動系統的IP包轉發功能。出于安全的考慮,建議在設置了Forward Chains的策略為DENY,禁止所有的未許可包轉發后再開啟轉發功能。配置命令如下:#echo 1> /proc/sys/net/ipv4/ip_forward。
6) 關于防止IP地址盜用問題,由于所有用戶都是通過路由器連接到防火墻,所以只需要在路由器中建立授權IP地址到MAC地址的靜態映射表即可。如果有客戶機直接連接到防火墻主機,就需要使用ARP命令在防火墻主機中建立IP地址到MAC地址的靜態映射表。
7) 對于需求6,只要在進入端口中設定IP地址確認,丟棄不可能來自端口的數據包就可以了。配置命令如下:ipchains -A input -i eth1 –s 192.168.0.0/255.255.0.0 -j DENY。
至此,就算基本建立起來一個較為安全的防火墻了,再針對運行中出現的問題進行修改,調試無誤后就可以用ipchains -save命令將配置保存起來。需要再次使用時,用命令 ipchains -restore即可。
3 結束語
從上面的例子我們可以看出,建立一個安全的防火墻關鍵在于對實際情況的了解,對用戶需求的掌握和對工具的熟練運用與正確實施上,而靈活使用尤其重要,比如對于“沖擊波”病毒,我們就通過在Linux服務器上對TCP/UDP的139、445、69、4444端口等的設置阻斷了“沖擊波”病毒在各個內部子網的傳播,從而取得了較好的經濟效益。當然,網絡安全是一個系統工程,僅僅依靠防火墻等單個的系統是不行的。在具體的網絡實踐中,還要仔細考慮系統的各種安全需求,并將各種安全技術,如密碼技術等,結合在一起,使之生成一個高效、通用、安全的網絡系統。