期刊VIP學術指導 符合學術規范和道德
保障品質 保證專業,沒有后顧之憂
摘要:防火墻(Firewall),也稱防護墻,是由Check Point創立者Gil Shwed于1993年發明并引入國際互聯網(US5606668(A)1993-12-15)。它是一種位于內部網絡與外部網絡之間的網絡安全系統。一項信息安全的防護系統,依照特定的規則,允許或是限制傳輸的數據通過。
關鍵詞:防火墻,應用軟件,信息安全與技術
信息安全與技術雜志中說到:所謂防火墻指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間建立起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火墻主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火墻就是一個位于計算機和它所連接的網絡之間的軟件或硬件。該計算機流入流出的所有網絡通信和數據包均要經過此防火墻。
《信息安全與技術》雜志經國家新聞出版總署批準,由工業和信息化部主管、中國電子信息產業發展研究院主辦,是我國信息安全和信息技術領域集學術性與專業性為一體的月刊。它將為應用第一線的IT類工程技術人員提供一個工作肯定和技術交流的平臺,以期提高我國信息安全和信息技術的突破,對各項工程類的工作做出結論性的評價,為各類工程技術人員和管理人員的工作做出實踐性的總結。
在網絡中,所謂“防火墻”,是指一種將內部網和公眾訪問網(如Internet)分開的方法,它實際上是一種隔離技術。防火墻是在兩個網絡通訊時執行的一種訪問控制尺度,它能允許你“同意”的人和數據進入你的網絡,同時將你“不同意”的人和數據拒之門外,最大限度地阻止網絡中的黑客來訪問你的網絡。換句話說,如果不通過防火墻,公司內部的人就無法訪問Internet,Internet上的人也無法和公司內部的人進行通信。
一 前言:
Linux 為增加系統安全性提供了防火墻保護。防火墻存在于你的計算機和網絡之間,用來判定網絡中的遠程用戶有權訪問你的計算機上的哪些資源。一個正確配置的防火墻可以極大地增加你的系統安全性。防火墻作為網絡安全措施中的一個重要組成部分,一直受到人們的普遍關注。LINUX是這幾年一款異軍突起的操作系統,以其公開的源代碼、強大穩定的網絡功能和大量的免費資源受到業界的普遍贊揚。LINUX防火墻其實是操作系統本身所自帶的一個功能模塊。通過安裝特定的防火墻內核,LINUX操作系統會對接收到的數據包按一定的策略進行處理。而用戶所要做的,就是使用特定的配置軟件(如iptables)去定制適合自己的“數據包處理策略”。
二 防火墻 包過濾:對數據包進行過濾可以說是任何防火墻所具備的最基本的功能,而LINUX防火墻本身從某個角度也可以說是一種“包過濾防火墻”。在LINUX防火墻中,操作系統內核對到來的每一個數據包進行檢查,從它們的包頭中提取出所需要的信息,如源IP地址、目的IP地址、源端口號、目的端口號等,再與已建立的防火規則逐條進行比較,并執行所匹配規則的策略,或執行默認策略。 值得注意的是,在制定防火墻過濾規則時通常有兩個基本的策略方法可供選擇:一個是默認允許一切,即在接受所有數據包的基礎上明確地禁止那些特殊的、不希望收到的數據包;還有一個策略就是默認禁止一切,即首先禁止所有的數據包通過,然后再根據所希望提供的服務去一項項允許需要的數據包通過。一般說來,前者使啟動和運行防火墻變得更加容易,但卻更容易為自己留下安全隱患。通過在防火墻外部接口處對進來的數據包進行過濾,可以有效地阻止絕大多數有意或無意地網絡攻擊,同時,對發出的數據包進行限制,可以明確地指定內部網中哪些主機可以訪問互聯網,哪些主機只能享用哪些服務或登陸哪些站點,從而實現對內部主機的管理。可以說,在對一些小型內部局域網進行安全保護和網絡管理時,包過濾確實是一種簡單而有效的手段。
代理:LINUX防火墻的代理功能是通過安裝相應的代理軟件實現的。它使那些不具備公共IP的內部主機也能訪問互聯網,并且很好地屏蔽了內部網,從而有效保障了內部主機的安全。
IP偽裝:IP偽裝(IP Masquerade)是LINUX操作系統自帶的又一個重要功能。通過在系統內核增添相應的偽裝模塊,內核可以自動地對經過的數據包進行“偽裝”,即修改包頭中的源目的IP信息,以使外部主機誤認為該包是由防火墻主機發出來的。這樣做,可以有效解決使用內部保留IP的主機不能訪問互聯網的問題,同時屏蔽了內部局域網。
Linux下的包過濾防火墻管理工具:
在2.0的內核中,采用ipfwadm來操作內核包過濾規則。
在2.2的內核中,采用ipchains來控制內核包過濾規則。
在2.4的內核中,采用一個全新的內核包過濾管理工具——iptables。
包過濾防火墻的工作原理:
使用過濾器。數據包過濾用在內部主機和外部主機之間,過濾系統是一臺路由器或是一臺主機。過濾系統根據過濾規則原則來決定是否讓數據包通過。
過濾的實現。數據包過濾一般使用過濾路由器來實現,這種路由器與普通的路由器有所不同。
包過濾防火墻的工作層次:
應用層 應用層
傳輸層 傳輸層
網絡層 數據 路由器 數據 網絡層
數據鏈路層 數據鏈路層 數據鏈路層
物理層 物理層 物理層
包過濾器操作的基本過程:
包過濾技術的優缺點
優點:
對于一個小型的、不太復雜的站點,包過濾比較容易實現。
因為過濾路由器工作在IP層和TCP層,所以處理包的速度比代理服務器快。
過濾路由器為用戶提供了一種透明的服務,用戶不需要改變客戶端的任何應用程序,也不需要用戶學習任何新的東西。
過濾路由器在價格上一般比代理服務器便宜。
缺點:
一些包過濾網關不支持有效的用戶認證。
規則表很快會變得很大而且復雜,規則很難測試。隨著表的增大和復雜性的增加,規則結構出現漏洞的可能性也會增加。
這種防火墻最大的缺陷是它依賴一個單一的部件來保護系統。
在一般情況下,如果外部用戶被允許訪問內部主機,則他就可以訪問內部網上的任何主機。
包過濾防火墻只能阻止一種類型的IP欺騙,即外部主機偽裝內部主機的IP,對于外部主機偽裝外部主機的IP欺騙卻不可能被阻止,而且它不能防止DNS欺騙。
在Linux系統上,支持包過濾的核心中有三個規則列表,這些列表稱為防火墻鏈。三個鏈分別稱為輸入鏈、輸出鏈和轉發鏈。當一個包通過以太網卡進來后,核心使用輸入鏈決定該包的取舍。如果該包沒有被丟棄,則核心要決定下面將向哪里發送包,稱為包的路由。如果要發給另一個機器,核心通過轉發鏈來決定。最后,在包要被發出之前,核心通過輸出鏈來做決定。一個鏈是一些規則的列表。每個規則規定:如果包的包頭與規則相匹配,那么對包進行相應的處理。如果該規則與包不匹配,則引入鏈中的下一個規則。最后,如果沒有要引入的規則,核心根據內置鏈策略決定如何做。在一個有安全意識的系統中,該規則通常告訴核心將包拒絕或丟棄。
在這先介紹Ipchains,之后再介紹Iptables。
Ipchains:
Ipchains 經常使用的命令行格式如下:Ipchains –A chain [–i interface] [–p protocol] [[!] -y][–s source-ip [port]] [-d destination-ip [port]] –j policy [-l]對各選項的說明如下表:-A 添加一規則到鏈尾。chain可為input、output、forward。-i 指定本規則適用的網絡接口。通常有eth0、eth1、lo等。-p 指定本規則適用的IP協議,如tcp、udp、icmp等。[!] –y -y表明tcp握手中的連接請求標志位SYN; ! –y 表示對該請求的響應。-s src-ip [port] 指明數據包的源IP地址,port表示本規則適用的端口號。-d dst-ip [port] 指明數據包的目的IP地址及端口號。-j policy 指定本規則對匹配數據包的處理策略:ACCEPT、DENY或REJECT。-l 在系統日志/var/log/messages中記錄與該規則匹配的數據包。
#ipchains –A input –s 201.202.203.58/32 www –p tcp –j DENY地址201.202.203.58送到www(HTTP)端口的任何TCP包都將被屏蔽。先創建一個名為check的新鏈,然后再把所有發送到輸入鏈的包送到check鏈:#ipchains –N check#ipchains –A check –s 201.202.203.0/24 –j ACCEPT#ipchains –A check –s !201.202.203.0/24 –j DENY#ipchains –A input –j check系統會接受(只會接受)從201.202.203.0發送的所有軟件包,式中感嘆號(!)代表的意思是“非”,匹配“非201.202.203.0端口”。禁止telnet(端口23)連接:#ipchains –I forward –s 0.0.0.0 23 –j DENY
Iptables的規則要素:
指定表(table)
指定操作命令(command)
指定鏈(chains)
指定規則匹配器(matcher)
指定目標動作(target)
表。Iptables從其使用的3個表而得名,分別是filter、nat和mangle。對于包過濾防火墻只使用filter表。表filter是默認的表。
操作命令。包括添加、刪除、更新等。
鏈。對于包過濾防火墻可操作filter表中的INPUT鏈、OUTPUT鏈和FORWARD鏈。也可以操作由用戶自己定義的自定義鏈。
規則匹配器。可以指定各種規則匹配,如IP地址、端口、包類型等。
目標動作。當規則匹配一個包時,真正要執行的任務用目標標識。最常用的內置目標分別是:
ACCEPT表示允許包通過。
DROP表示被丟棄。
REJECT表示拒絕包,丟棄包的同時給發送者發送沒有接受的通知。
LOG表示包的有關信息被記錄入日志。
TOS表示改寫包的ToS的值。
Iptables的語法通常可以簡化為:iptables[-t table]CMD[chain][rule-matcher][-j target]其中:table為表名,CMD為操作命令,chain為鏈名,rule-matcher為規則匹配器,target為目標動作。
操作命令:
-A 或—append 在所選鏈的鏈尾加入一條或多條規則-D 或—delete 從所選鏈中刪除一條或多條匹配的規則-R 或—replace 在所選鏈中替換一條匹配的規則-I 或—insert 以給出的規則號在所選鏈中插入一條或多條規則。如果規則號是1,插入的規則在鏈的頭部-L 或—list 列出指定鏈的所有規則。如果沒有指定鏈,將列出所有鏈中的所有規則-F 或—flush 清除指定鏈和表中的所有規則。假如不指定鏈,那么所有鏈都將被清空-N 或—new-chain 以給定的名字創建一條新的用戶自定義鏈。不能與已有的鏈同名-X 或—delete-chain 刪除指定的用戶定義鏈,必須保證鏈中的規則都不在使用時才能刪除鏈。若沒有指定鏈,則刪除所有的用戶鏈-P 或—policy 為永遠鏈指定默認規則(內置鏈策略)。用戶定義鏈沒有缺省規則也是規則鏈中的最后一條規則,用-L命令顯時它在第一行顯示-C 或—check 檢查給定的包是否與指定鏈的規則相匹配-Z 或—zero 將指定鏈中所有的包字節記數器清零
規則匹配器:
-P,[!]protocol 指定要匹配的協議,可以是tcp、udp、icmp、all。協議名前綴“!”為邏輯非,表示除去該協議之外的所有協議。-s[!]address[/mask] 根據源地址或地址范圍確定是否允許或拒絕數據包通過過濾器--sport[!]port[:port] 指定匹配規則的源端口或端口范圍。可以用端口好,也可以用/etc/services文件中的文字-d[!]address[/mask] 根據目的地址或地址范圍確定是否允許或拒絕數據包通過過濾器--dport[!]port[:port] 指定匹配規則的目的端口或端口范圍。可以用端口號,也可以用/etc/services文件中的名字--icmp-type[1]typename 指定匹配規則的ICMP信息類型(可以使用iptables –p icmp –h 查看有效的icmp類型名)
Iptables軟件包提供了兩個命令分別用于保存和恢復規則集。可以使用命令轉儲在內存中的內核規則集。其中/etc/sysconfig/iptables是iptables守護進程調用的默認規則集文件:#/sbin/iptables-save>/etc/sysconfig/iptables要恢復原來的規則庫,需使用命令:#/sbin/iptables-restore
使用iptables得啟動腳本實現。Iptables的啟動腳本/etc/rc.d/init.d/iptables每次啟動時都使用/etc/sysconfig/iptables所提供的規則進行規則恢復,并可以使用命令保存規則:#service iptables save
在自定義腳本中用iptables命令直接創建規則集。可以直接用iptables命令編寫一個規則腳本,并在啟動時執行這個腳本。若規則腳本的文件名為/etc/fw/rules,則可以在啟動腳本/etc/rc.d/rc.local中加入的代碼:if[-x /etc/fw/rules];then /etc/fw/rules;fi;如果使用此種方式,建議使用ntsysv命令關閉系統的iptables守護進程。
建立包過濾防火墻
這個網絡結構假設內部網有有效的Internet地址。為了將內部網段198.168.80.0/24與Internet隔離,在內部網絡和 Internet之間使用了包過濾防火墻。防火墻的網接口是eth1(198.168.80.254),防火墻的Internet接口是eth0 (198.199.37.254)。加外,內網中有3臺服務器對外提供服務。分別為:
WWW服務器:IP地址為198.168.80.251
FTP服務器:IP地址為198.168.80.252
E-mail服務器:IP地址為198.168.80.253
防火墻的建立過程
#!/sbin/bash在屏幕上顯示信息:echo "Starting iptables rules..."#開啟內核轉發功能echo "1">;/proc/sys/net/ipv4/ip_forward#定義變量IPT=/sbin/iptablesWWW-SERVER=198.168.80.251FTP-SERVER=198.168.80.252EMAIL-SERVER=198.168.80.253IP_RANGE="198.168.80.0/24"#刷新所有的鏈的規則$IPT –F#首先禁止轉發任何包,然后再一步步設置允許通過的包#所以首先設置防火墻FORWARD鏈的策略為DROP$IPT -P FORWARD DROP#下面設置關于服務器的包過濾規則#由于服務器/客戶機交互是雙向的,所以不僅僅要設置數據包#出去的規則,還要設置數據包返回的規則
(1)WWW服務服務端口為80,采用tcp或udp協議規則為eth0=>;允許目的為內部網WWW服務器的包$IPT -A FORWARD -p tcp -d $WWW-SERVER-dport www -i eth0 -j ACCEPT(2)FTP服務服務端口為21,數據端口20FTP的傳輸模式有主動和被動之分,FTP服務采用tcp協議規則為:eth0=>;僅允許目的為內部網ftp服務器的包$IPT -A FORWARD -p tcp -d $FTP-SERVER -dport ftp -i eth0 -j ACCEPT(3)EMAIL服務包含兩個協議,一個是smtp,另一個是pop3出于安全性考慮,通常只提供對內的pop3服務所以在這里我們只考慮對smtp的安全性問題smtp端口為25,采用tcp協議規則為etho=>;僅允許目的為E-mail服務器的smtp請求$IPT -A FORWARD -p tcp -d $EMAIL-SERVER-dport smtp -i eth0 -j ACCEPT
下面設置針對Internet客戶的過濾規則:
本例中防火墻位于網關的位置,所以主要是防止來自Internet的攻擊不能防止來自Intranet的攻擊假如網絡中的服務器都是基于Linux的,也可以在每一部服務器上設置相關的過濾規則來防止來自Internet的攻擊
對于Internet對Intranet客戶的返回包,定義如下規則:(1)允許Intranet客戶采用被動模式訪問Internet的FTP服務器$IPT -A FORWARD -p tcp -s 0/0 --sport ftp-data -d $IP_RANGE -i eth0 -j ACCEPT(2)接收來自Internet的非連接請求tcp包$IPT -A FORWARD -p tcp -d 198.168.80.0/24 ! --syn -i eth0 -j ACCEPT(3)接收所有udp包,主要是針對oicq等使用udp的服務$IPT -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
然后接受來自整個Intranet的數據包過濾,我們定義如下規則$IPT -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT處理ip碎片接受所有的ip碎片,但采用limit匹配擴展對其單位時間可以通過的ip碎片數量進行限制,以防止ip碎片攻擊$IPT -A FORWARD -f -m limit-limit 100/s-limit-burst 100 -j ACCEPT說明:對不管來自哪里的ip碎片都進行限制,允許每秒通過100個ip碎片該限制觸發的條件是100個ip碎片設置icmp包過濾ipmp包通常用于網絡測試等,故允許所有的icmp包通過但是黑客常常采用icmp進行攻擊,如ping of death等所以我們采用limit匹配擴展加以限制$IPT -A FORWARD -p icmp -m limit-limit 1/s-limit-burst 10 -j ACCEPT說明:對不管來自哪里的icmp包都進行限制,允許每秒通過一個包該限制觸發的條件是10個包
三 結束語:
對防火墻的不當配置可能造成安全漏洞。如處理TCP分段時,Ipchains需要查看包頭中的源端口、目的端口、ICMP代碼或“TCP SYN”標志等信息,而這些信息只能在TCP分段的第一個IP包中才有。于是從第二個分段開始都不能匹配過濾規則。某些管理者將防火墻配置為僅對第一個分段進行處理。通常,一個TCP連接的第一個TCP分段被防火墻阻擋后,其他的TCP分段被認為不會產生安全性問題,因為在目的主機上由于缺少第一個分段而無法重新組裝報文。然而,由于系統缺陷等原因,發送的分段可能使機器癱瘓,甚至人為精心設計的IP包可借此缺陷繞過防火墻。因此配置防火墻需要仔細分析過濾規則如何處理各種類型的分組。對分段的處理最好將系統內核編譯為重新組裝所有通過的分段,或在應用層另設安全機制。
對基于包過濾防火墻更常見的攻擊是利用IP欺騙的方法。IP欺騙是指主機發送自稱是另一個主機發送的包。防止IP欺騙的方法是使用源地址確認,它通過配置路由器識別路由代碼實現,而不是防火墻。防火墻結合源地址確認能較好地增強系統的安全性。