歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux iptables 防火牆

1、防火牆(Firewall)   1.1防火牆定義 所謂防火牆指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的界面上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間建立起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所連接的網絡之間的軟件或硬件。該計算機流入流出的所有網絡通信和數據包均要經過此防火牆。   在網絡中,所謂“防火牆”,是指一種將內部網和公眾訪問網(如Internet)分開的方法,它實際上是一種隔離技術。防火牆是在兩個網絡通訊時執行的一種訪問控制尺度,它能允許你“同意”的人和數據進入你的網絡,同時將你“不同意”的人和數據拒之門外,最大限度地阻止網絡中的黑客來訪問你的網絡。換句話說,如果不通過防火牆,公司內部的人就無法訪問Internet,Internet上的人也無法和公司內部的人進行通信。   1.2防火牆分類   1)網絡防火牆   網絡層防火牆可視為一種 IP 封包過濾器,運作在底層的TCP/IP協議堆棧上。我們可以以枚舉的方式,只允許符合特定規則的封包通過,其余的一概禁止穿越防火牆(病毒除外,防火牆不能防止病毒侵入)。這些規則通常可以經由管理員定義或修改,不過某些防火牆設備可能只能套用內置的規則。   我們也能以另一種較寬松的角度來制定防火牆規則,只要封包不符合任何一項“否定規則”就予以放行。操作系統及網絡設備大多已內置防火牆功能   2)應用防火牆   應用層防火牆是在 TCP/IP 堆棧的“應用層”上運作,您使用浏覽器時所產生的數據流或是使用 FTP 時的數據流都是屬於這一層。應用層防火牆可以攔截進出某應用程序的所有封包,並且封鎖其他的封包(通常是直接將封包丟棄)。理論上,這一類的防火牆可以完全阻絕外部的數據流進到受保護的機器裡。   防火牆借由監測所有的封包並找出不符規則的內容,可以防范電腦蠕蟲或是木馬程序的快速蔓延。不過就實現而言,這個方法既煩且雜(軟件有千千百百種啊),所以大部分的防火牆都不會考慮以這種方法設計。   XML 防火牆是一種新型態的應用層防火牆。   根據側重不同,可分為:包過濾型防火牆、應用層網關型防火牆、服務器型防火牆。   3)數據庫防火牆   數據庫防火牆是一款基於數據庫協議分析與控制技術的數據庫安全防護系統。基於主動防御機制,實現數據庫的訪問行為控制、危險操作阻斷、可疑行為審計。   數據庫防火牆通過SQL協議分析,根據預定義的禁止和許可策略讓合法的SQL操作通過,阻斷非法違規操作,形成數據庫的外圍防御圈,實現SQL危險操作的主動預防、實時審計。   數據庫防火牆面對來自於外部的入侵行為,提供SQL注入禁止和數據庫虛擬補丁包功能。   2、netfilter/iptables   在Linux系統中,提供了一個叫做netfilter的框架,用於對數據管理。   Netfilter官方網站:http://www.netfilter.org。   1)Netfilter的設計架構   在NetFilter的處理中,提供了一系列的鉤子函數。 圖中1、2、3、4、5就是鉤子函數的位置。分為3條路徑:   1、2:代表了到本機的封包。   5、4:代表了由本機發出的封包。   1、3、4:代表了需要轉發的封包。   2)iptables   Iptables就是在netfilter框架基礎上,實現相關鉤子函數,從而提供了防火牆(packet filter)、網絡地址轉換(NAT)、封包修改(package mangle)等功能: 圖中涉及的功能有:Filter、Connection Track、NAT、Mangle,其實還有兩個:raw、Security。   Connection Track其實是NAT的一部分。   從上圖,也能看出有3條數據流向,分別對應了:目的為本機的報文、由本機發出的報文、轉發的報文。   Iptables實現了netfilter的鉤子函數從而提供這些功能。在鉤子的實現過程中,利用了一系列的規則鏈(rule chain),封包就是要在相應的規則鏈上進行檢查,檢查通過後才會到達最終目的地。   功能與規則鏈對照表  

功能(表)

Filter

INPUT、FORWARD、OUTPUT

Nat

PREROUTING、OUTPUT、POSTROUTING

Mangle

PREROUTING、INPUT、OUTPUT、POSTROUTING

raw

PREROUTING、OUTPUT

Security

INPUT、FORWARD、OUTPUT

  從該表也可以看出,規則鏈也正好與所處的鉤子函數的位置是一一對應的。   如果系統中使用了多個功能,也就是配置了多個規則鏈是如何結合工作的呢? 上圖就是封包在這些規則鏈的處理流程。   3、iptables命令詳解   在終端使用man iptables就可以看到這個命令的說明。也可以在線查看:http://ipset.netfilter.org/iptables.man.html 。   3.1命令的語法 iptables [-t table] {-A|-C|-D} chain rule-specification   iptables [-t table] -I chain [rulenum] rule-specification   iptables [-t table] -R chain rulenum rule-specification   iptables [-t table] -D chain rulenum   iptables [-t table] -S [chain [rulenum]]   iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]   iptables [-t table] -N chain   iptables [-t table] -X [chain]   iptables [-t table] -P chain target   iptables [-t table] -E old-chain-name new-chain-name   rule-specification = [matches...] [target]   match = -m matchname [per-match-options]   target = -j targetname [per-target-options]     其中最常用的規則是:   iptables –t command match_parameters –j target   下面使用一個例子來說明參數:   例子:允許以SSH方式連接到本機:   Iptables –t filter -A INPUT –p tcp –m tcp -–dport 22 –j ACCEPT   1)table 參數   -t :表名。Iptables提供了多種功能。table參數其實就是功能的名稱。   上面例子中,使用了防火牆功能(filter),所以參數-t的值就是filter。table的可選值參見:功能與規則鏈對照表。   該參數默認值就是filter,所以配置防火牆時,可以不設置表名。   2)command 參數   command參數是對規則鏈進行操作,例如添加一條規則。Iptables提供了下面這些command。   -A,--append chain rule-specification追加一個規則。   -C,--check chain rule-specification檢查你輸入的規則在規則鏈中是否已存在。   -D,--delete(chain rule-specification | chain rulenum)刪除指定規則鏈中的指定的規則。   -I, --insert chain [rulenum] rule-specification在指定規則鏈中插入規則。   -L,--list [chain]列出所有指定規則鏈中所有的規則。   -R,--replace chain rulenum rule-specification替換規則。   -S,--list-rules [chain]打出指定鏈中的所有規則。   -N,--new-chain chain自定義一條規則鏈。   -X,--delete-chain [chain]刪除指定的用戶自定義的規則鏈。   -P,--policy chain target 設置指定鏈的target參數的默認值。   -E,--rename-chain old-chain new-chain 對規則鏈重命名。   -F,清除規則。   -h 查看幫助。   4) match paramtes   [!] –p,--protocol protocol協議   用於判斷一個packet是否采用了指定的協議。   參數值可以是:tcp、udp、udplit、icmp、esp、sh、sctp,或者是all(所有協議),或者是數字。數字0等價於all。   如果參數值前面有!,則是做相反的判斷。即判斷packet沒有采用指定的協議。   [!] –s,--source address[/mask][,….]   用於匹配封包的來源,即判斷一個封包的是否來自於指定的地址。   該參數值可以是網絡名,主機名,IP地址(可以帶有子網掩碼)。如果參數值前面有!,則是做相反的判斷。   [!] –d, --destination address[/mask][,…]   用於匹配封包的目的地址,即判斷一個封包的是否要到達指定的地址。   參數值與-s類似。   -m,--match expression擴展匹配   -j,--jump target 這個參數的作用是在封包匹配上述規則的情況下,接下來要執行的規則。而接下來要執行的規則,則是由target參數指定的。   [!] –i,--in-interface name 指定接收時采用的網絡接口   當一個packet進入了INPUT、FORWARD、PREROUTING鏈時,判斷這個packet是否是指定的這個網絡接口(interface)接收的。   如果參數值前面有!,則是做相反的判斷。   如果參數值以+結尾,則是指所有的開始於指定的接口的那些網絡接口都會被匹配到。   [!]-o ,--out-interface name 指定發送時采用的網絡接口。   這與--in-interface是一樣的。   -g,--goto chain   packet繼續被指定的chain處理。   4)target 規則名稱          防火牆規則中不單單會對packet進行匹配限定,也會對target進行限定。如果packet 與指定的規則不匹配,就會執行下一條規則。如果匹配,執行target所代表的下一條規則。          也就是說target是接下來要執行的規則的名稱。此外,也提供了幾個特定的值。   ACCEPT:接收該包,讓該包通過。   DROP:在底層丟掉這個包。就是將該包廢棄了。   QUEUE:傳遞該包到用戶空間。   RETURN:停止在改chain上傳輸,繼續執行前一條chain上的下一個規則。   5) match extension 匹配的擴展   在匹配參數中,只能針對協議、源地址、目標地址、網絡接口等進行匹配。對於需要更細致的匹配(例如對目標端口的匹配),則無能為力。匹配參數中,有一個-m,這個可以提供更細致的匹配。   例如,要使接受SSH發的packet,則需要使用tcp的擴展,可以指定Packet的目標地址:   使用-m tcp –dport 就可以了。   Iptables –t filter -A INPUT –p tcp –m tcp –dport 22 –j ACCEPT   如果想要一次指定多個端口,可以使用multiport的擴展:   Iptables –t filter -A INPUT –p tcp –m tcp -–dport 22,21,8080,1900 –j ACCEPT   具體有哪些擴展匹配,可以參考:   http://ipset.netfilter.org/iptables-extensions.man.html   3.2、示例   網上有很多示例,可以參考:   http://www.cnblogs.com/argb/p/3535179.html   4、防火牆管理   service iptables {start|restart|stop|condrestart|status|panic|save} start:啟動   stop:停止   restart:重啟   status:查看狀態   save:保存到配置文件中   在配置防火牆時,通常會:   1、servic iptables start   2、使用iptables命令來配置規則   3、service iptables save,將配置保存到配置文件中 如果是遠程進行防火牆配置時, 記得要將22(SSH)端口配置進去,不然自個不能登錄操作了。
Copyright © Linux教程網 All Rights Reserved