Linux iptables 防火牆

來源:互聯網
上載者:User

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)連接埠配置進去,不然自個不能登入操作了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.