Linux系統安全防火牆篇之 IPTABLES

防火牆的定義

防火牆技術是通過有機結合各類用於安全管理與篩選的軟件和硬件設備,幫助計算機網絡於其內、外網之間構建一道相對隔絕的保護屏障,以保護用戶資料與信息安全性的一種技術。防火牆技術的功能主要在於及時發現並處理計算機網絡運行時可能存在的安全風險、數據傳輸等問題,其中處理措施包括隔離與保護,同時可對計算機網絡安全當中的各項操作實施記錄與檢測,以確保計算機網絡運行的安全性,保障用戶資料與信息的完整性,爲用戶提供更好、更安全的計算機網絡使用體驗。

所謂“防火牆”是指一種將內部網和公衆訪問網(如Internet)分開的方法,它實際上是一種建立在現代通信網絡技術和信息安全技術基礎上的應用性安全技術,隔離技術。越來越多地應用於專用網絡與公用網絡的互聯環境之中,尤其以接入Internet網絡爲最甚。

防火牆代主要是藉助硬件和軟件的作用於內部和外部網絡的環境間產生一種保護的屏障,從而實現對計算機不安全網絡因素的阻斷。只有在防火牆同意情況下,用戶才能夠進入計算機內,如果不同意就會被阻擋於外,防火牆技術的警報功能十分強大,在外部的用戶要進入到計算機內時,防火牆就會迅速的發出相應的警報,並提醒用戶的行爲,並進行自我的判斷來決定是否允許外部的用戶進入到內部,只要是在網絡環境內的用戶,這種防火牆都能夠進行有效的查詢,同時把查到信息朝用戶進行顯示,然後用戶需要按照自身需要對防火牆實施相應設置,對不允許的用戶行爲進行阻斷。通過防火牆還能夠對信息數據的流量實施有效查看,並且還能夠對數據信息的上傳和下載速度進行掌握,便於用戶對計算機使用的情況具有良好的控制判斷,計算機的內部情況也可以通過這種防火牆進行查看,還具有啓動與關閉程序的功能,而計算機系統的內部中具有的日誌功能,其實也是防火牆對計算機的內部系統實時安全情況與每日流量情況進行的總結和整理。 

防火牆是在兩個網絡通訊時執行的一種訪問控制尺度,能最大限度阻止網絡中的黑客訪問你的網絡。是指設置在不同網絡(如可信任的企業內部網和不可信的公共網)或網絡安全域之間的一系列部件的組合。它是不同網絡或網絡安全域之間信息的唯一出入口,能根據企業的安全政策控制(允許、拒絕、監測)出入網絡的信息流,且本身具有較強的抗攻擊能力。它是提供信息安全服務,實現網絡和信息安全的基礎設施。在邏輯上,防火牆是一個分離器,一個限制器,也是一個分析器,有效地監控了內部網和Internet之間的任何活動,保證了內部網絡的安全。

防火牆的功能

1、入侵檢測功能

網絡防火牆技術的主要功能之一就是入侵檢測功能,主要有反端口掃描、檢測拒絕服務工具、檢測CGI/IIS服務器入侵、檢測木馬或者網絡蠕蟲攻擊、檢測緩衝區溢出攻擊等功能,可以極大程度上減少網絡威脅因素的入侵,有效阻擋大多數網絡安全攻擊。 [3] 

2、網絡地址轉換功能

利用防火牆技術可以有效實現內部網絡或者外部網絡的IP地址轉換,可以分爲源地址轉換和目的地址轉換,即SNAT和NAT。SNAT主要用於隱藏內部網絡結構,避免受到來自外部網絡的非法訪問和惡意攻擊,有效緩解地址空間的短缺問題,而DNAT主要用於外網主機訪問內網主機,以此避免內部網絡被攻擊。

3、網絡操作的審計監控功能

通過此功能可以有效對系統管理的所有操作以及安全信息進行記錄,提供有關網絡使用情況的統計數據,方便計算機網絡管理以進行信息追蹤。

4、強化網絡安全服務

防火牆技術管理可以實現集中化的安全管理,將安全系統裝配在防火牆上,在信息訪問的途徑中就可以實現對網絡信息安全的監管。 

IPTABLES

Iptables 是用來設置、維護和檢查Linux內核的IP包過濾規則的。

如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。防火牆在做數據包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的數據包過濾表中,而這些表集成在 Linux 內核中。在數據包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 數據包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。雖然 netfilter/iptables IP 信息包過濾系統被稱爲單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。netfilter 組件也稱爲內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。iptables 組件是一種工具,也稱爲用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載該工具並安裝使用它。

可以定義不同的表,每個表都包含幾個內部的鏈,也能包含用戶定義的鏈。每個鏈都是一個規則列表,對對應的包進行匹配:每條規則指定應當如何處理與之相匹配的包。這被稱作'target'(目標),也可以跳向同一個表內的用戶定義的鏈。

TARGETS

防火牆的規則指定所檢查包的特徵,和目標。如果包不匹配,將送往該鏈中下一條規則檢查;如果匹配,那麼下一條規則由目標值確定.該目標值可以是用戶定義的鏈名,或是某個專用值,如ACCEPT[通過],DROP[刪除],QUEUE[排隊],或者 RETURN[返回]。

ACCEPT 表示讓這個包通過。DROP表示將這個包丟棄。QUEUE表示把這個包傳遞到用戶空間RETURN表示停止這條鏈的匹配,到前一個鏈的規則重新開始。如果到達了一個內建的鏈(的末端),或者遇到內建鏈的規則是RETURN,包的命運將由鏈準則指定的目標決定。

TABLES

當前有三個表(哪個表是當前表取決於內核配置選項和當前模塊)。

-t table

這個選項指定命令要操作的匹配包的表。如果內核被配置爲自動加載模塊,這時若模塊沒有加載,(系統)將嘗試(爲該表)加載適合的模塊。這些表如下:filter,這是默認的表,包含了內建的鏈INPUT(處理進入的包)、FORWARD(處理通過的包)和OUTPUT(處理本地生成的包)。nat,這個表被查詢時表示遇到了產生新的連接的包,由三個內建的鏈構成:PREROUTING (修改到來的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改準備出去的包)。mangle 這個表用來對指定的包進行修改。它有兩個內建規則:PREROUTING(修改路由之前進入的包)和OUTPUT(修改路由IPTABLES之前本地的包)。

OPTIONS

這些可被iptables識別的選項可以區分不同的種類。

COMMANDS

這些選項指定執行明確的動作:若指令行下沒有其他規定,該行只能指定一個選項.對於長格式的命令和選項名,所用字母長度只要保證iptables能從其他選項中區分出該指令就行了。

-A -append

在所選擇的鏈末添加一條或更多規則。當源(地址)或者/與 目的(地址)轉換爲多個地址時,這條規則會加到所有可能的地址(組合)後面。

-D -delete

從所選鏈中刪除一條或更多規則。這條命令可以有兩種方法:可以把被刪除規則指定爲鏈中的序號(第一條序號爲1),或者指定爲要匹配的規則。

-R -replace

從選中的鏈中取代一條規則。如果源(地址)或者/與 目的(地址)被轉換爲多地址,該命令會失敗。規則序號從1開始。

-I -insert

根據給出的規則序號向所選鏈中插入一條或更多規則。所以,如果規則序號爲1,規則會被插入鏈的頭部。這也是不指定規則序號時的默認方式。

-L -list

顯示所選鏈的所有規則。如果沒有選擇鏈,所有鏈將被顯示。也可以和z選項一起使用,這時鏈會被自動列出和歸零。精確輸出受其它所給參數影響。

-F -flush

清空所選鏈。這等於把所有規則一個個的刪除。

--Z -zero

把所有鏈的包及字節的計數器清空。它可以和 -L配合使用,在清空前察看計數器,請參見前文。

-N -new-chain

根據給出的名稱建立一個新的用戶定義鏈。這必須保證沒有同名的鏈存在。

-X -delete-chain

刪除指定的用戶自定義鏈。這個鏈必須沒有被引用,如果被引用,在刪除之前你必須刪除或者替換與之有關的規則。如果沒有給出參數,這條命令將試着刪除每個非內建的鏈。

-P -policy

設置鏈的目標規則。

-E -rename-chain

根據用戶給出的名字對指定鏈進行重命名,這僅僅是修飾,對整個表的結構沒有影響。TARGETS參數給出一個合法的目標。只有非用戶自定義鏈可以使用規則,而且內建鏈和用戶自定義鏈都不能是規則的目標。

-h Help.

幫助。給出當前命令語法非常簡短的說明。

PARAMETERS

參數

以下參數構成規則詳述,如用於add、delete、replace、append 和 check命令。

-p -protocal [!]protocol

規則或者包檢查(待檢查包)的協議。指定協議可以是tcp、udp、icmp中的一個或者全部,也可以是數值,代表這些協議中的某一個。當然也可以使用在/etc/protocols中定義的協議名。在協議名前加上"!"表示相反的規則。數字0相當於所有all。Protocol all會匹配所有協議,而且這是缺省時的選項。在和check命令結合時,all可以不被使用。

-s -source [!] address[/mask]

指定源地址,可以是主機名、網絡名和清楚的IP地址。mask說明可以是網絡掩碼或清楚的數字,在網絡掩碼的左邊指定網絡掩碼左邊"1"的個數,因此,mask值爲24等於255.255.255.0。在指定地址前加上"!"說明指定了相反的地址段。標誌 --src 是這個選項的簡寫。

-d --destination [!] address[/mask]

指定目標地址,要獲取詳細說明請參見 -s標誌的說明。標誌 --dst 是這個選項的簡寫。

-j --jump target

-j 目標跳轉

指定規則的目標;也就是說,如果包匹配應當做什麼。目標可以是用戶自定義鏈(不是這條規則所在的),某個會立即決定包的命運的專用內建目標,或者一個擴展(參見下面的EXTENSIONS)。如果規則的這個選項被忽略,那麼匹配的過程不會對包產生影響,不過規則的計數器會增加。

-i -in-interface [!] [name]

i -進入的(網絡)接口 [!][名稱]

這是包經由該接口接收的可選的入口名稱,包通過該接口接收(在鏈INPUT、FORWORD和PREROUTING中進入的包)。當在接口名前使用"!"說明後,指的是相反的名稱。如果接口名後面加上"+",則所有以此接口名開頭的接口都會被匹配。如果這個選項被忽略,會假設爲"+",那麼將匹配任意接口。

-o --out-interface [!][name]

-o --輸出接口[名稱]

這是包經由該接口送出的可選的出口名稱,包通過該口輸出(在鏈FORWARD、OUTPUT和POSTROUTING中送出的包)那麼將匹配所有任意接口。

[!] -f,--fragment

[!] -f --分片

這意味着在分片的包中,規則只詢問第二及以後的片。自那以後由於無法判斷這種把包的源端口或目標端口(或者是ICMP類型的),這類包將不能匹配任何指定對他們進行匹配的規則。如果"!"說明用在了"-f"標誌之前,表示相反的意思。

OTHER OPTIONS

其他選項

還可以指定下列附加選項:

-v --verbose

-v --詳細

詳細輸出。這個選項讓list命令顯示接口地址、規則選項(如果有)和TOS(Type of Service)掩碼。包和字節計數器也將被顯示,分別用K、M、G(前綴)表示1000、1,000,000和1,000,000,000倍(不過請參看-x標誌改變它),對於添加,插入,刪除和替換命令,這會使一個或多個規則的相關詳細信息被打印。

-n --numeric

-n --數字

數字輸出。IP地址和端口會以數字的形式打印。默認情況下,程序試顯示主機名、網絡名或者服務(只要可用)。

-x -exact

-x -精確

擴展數字。顯示包和字節計數器的精確值,代替用K,M,G表示的約數。這個選項僅能用於 -L 命令。

--line-numbers

當列表顯示規則時,在每個規則的前面加上行號,與該規則在鏈中的位置相對應。

MATCH EXTENSIONS

對應的擴展

iptables能夠使用一些與模塊匹配的擴展包。以下就是含於基本包內的擴展包,而且他們大多數都可以通過在前面加上!來表示相反的意思。

tcp

當 --protocol tcp 被指定,且其他匹配的擴展未被指定時,這些擴展被裝載。它提供以下選項:

--source-port [!] [port[:port]]

源端口或端口範圍指定。這可以是服務名或端口號。使用格式端口:端口也可以指定包含的(端口)範圍。如果首端口號被忽略,默認是"0",如果末端口號被忽略,默認是"65535",如果第二個端口號大於第一個,那麼它們會被交換。這個選項可以使用 --sport的別名。

--destionation-port [!] [port:[port]]

目標端口或端口範圍指定。這個選項可以使用 --dport別名來代替。

--tcp-flags [!] mask comp

匹配指定的TCP標記。第一個參數是我們要檢查的標記,一個用逗號分開的列表,第二個參數是用逗號分開的標記表,是必須被設置的。標記如下:SYN ACK FIN RST URG PSH ALL NONE。因此這條命令:iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN只匹配那些SYN標記被設置而ACK、FIN和RST標記沒有設置的包。

[!] --syn

只匹配那些設置了SYN位而清除了ACK和FIN位的TCP包。這些包用於TCP連接初始化時發出請求;例如,大量的這種包進入一個接口發生堵塞時會阻止進入的TCP連接,而出去的TCP連接不會受到影響。這等於 --tcp-flags SYN,RST,ACK SYN。如果"--syn"前面有"!"標記,表示相反的意思。

--tcp-option [!] number

匹配設置了TCP選項的。

udp

當protocol udp 被指定,且其他匹配的擴展未被指定時,這些擴展被裝載,它提供以下選項:

--source-port [!] [port:[port]]

源端口或端口範圍指定。詳見 TCP擴展的--source-port選項說明。

--destination-port [!] [port:[port]]

目標端口或端口範圍指定。詳見 TCP擴展的--destination-port選項說明。

icmp

當protocol icmp被指定,且其他匹配的擴展未被指定時,該擴展被裝載。它提供以下選項:

--icmp-type [!] typename

這個選項允許指定ICMP類型,可以是一個數值型的ICMP類型,或者是某個由命令iptables -p icmp -h所顯示的ICMP類型名。

mac

--mac-source [!] address

匹配物理地址。必須是XX:XX:XX:XX:XX:XX這樣的格式。注意它只對來自以太設備並進入PREROUTING、FORWARD和INPUT鏈的包有效。

--to-destiontion [-][:port-port]

MASQUERADE

只用於nat表的POSTROUTING鏈。只能用於動態獲取IP(撥號)連接:如果你擁有靜態IP地址,你要用SNAT。僞裝相當於給包發出時所經過接口的IP地址設置一個映像,當接口關閉連接會終止。這是因爲當下一次撥號時未必是相同的接口地址(以後所有建立的連接都將關閉)。它有一個選項:

--to-ports [-port>]

指定使用的源端口範圍,覆蓋默認的SNAT源地址選擇(見上面)。這個選項只適用於指定了-p tcp或者-p udp的規則。

REDIRECT

只適用於nat表的PREROUTING和OUTPUT鏈,和只調用它們的用戶自定義鏈。它修改包的目標IP地址來發送包到機器自身(本地生成的包被安置爲地址127.0.0.1)。它包含一個選項:

--to-ports []

指定使用的目的端口或端口範圍:不指定的話,目標端口不會被修改。只能用於指定了-p tcp 或 -p udp的規則。

DIAGNOSTICS

診斷

不同的錯誤信息會打印成標準錯誤:退出代碼0表示正確。類似於不對的或者濫用的命令行參數錯誤會返回錯誤代碼2,其他錯誤返回代碼爲1。

BUGS

臭蟲

Check is not implemented (yet).

檢查還未完成。

COMPATIBILITY WITH IPCHAINS

與ipchains的兼容性

iptables和Rusty Russell的ipchains非常相似。主要區別是INPUT 鏈只用於進入本地主機的包,而OUTPUT只用於自本地主機生成的包。因此每個包只經過三個鏈的一個;以前轉發的包會經過所有三個鏈。其他主要區別是 -i 引用進入接口;-o引用輸出接口,兩者都適用於進入FORWARD鏈的包。當和可選擴展模塊一起使用默認過濾器表時,iptables是一個純粹的包過濾器。這能大大減少以前對IP僞裝和包過濾結合使用的混淆,所以以下選項作了不同的處理:

-j MASQ

-M -S

-M -L

在iptables中有幾個不同的鏈。

limit

這個模塊匹配標誌用一個標記桶過濾器一一定速度進行匹配,它和LOG目標結合使用來給出有限的登陸數.當達到這個極限值時,使用這個擴展包的規則將進行匹配.(除非使用了"!"標記)

--limit rate

最大平均匹配速率:可賦的值有'/second','/minute','/hour',or '/day'這樣的單位,默認是3/hour。

--limit-burst number

待匹配包初始個數的最大值:若前面指定的極限還沒達到這個數值,則概數字加1.默認值爲5

multiport

這個模塊匹配一組源端口或目標端口,最多可以指定15個端口。只能和-p tcp 或者 -p udp 連着使用。

--source-port [port[,port]]

如果源端口是其中一個給定端口則匹配

--destination-port [port[,port]]

如果目標端口是其中一個給定端口則匹配

--port [port[,port]]

若源端口和目的端口相等並與某個給定端口相等,則匹配。

mark

這個模塊和與netfilter過濾器標記字段匹配(就可以在下面設置爲使用MARK標記)。

--mark value [/mask]

匹配那些無符號標記值的包(如果指定mask,在比較之前會給掩碼加上邏輯的標記)。

owner

此模塊試爲本地生成包匹配包創建者的不同特徵。只能用於OUTPUT鏈,而且即使這樣一些包(如ICMP ping應答)還可能沒有所有者,因此永遠不會匹配。

--uid-owner userid

如果給出有效的user id,那麼匹配它的進程產生的包。

--gid-owner groupid

如果給出有效的group id,那麼匹配它的進程產生的包。

--sid-owner seessionid

根據給出的會話組匹配該進程產生的包。

state

此模塊,當與連接跟蹤結合使用時,允許訪問包的連接跟蹤狀態。

--state state

這裏state是一個逗號分割的匹配連接狀態列表。可能的狀態是:INVALID表示包是未知連接,ESTABLISHED表示是雙向傳送的連接,NEW表示包爲新的連接,否則是非雙向傳送的,而RELATED表示包由新連接開始,但是和一個已存在的連接在一起,如FTP數據傳送,或者一個ICMP錯誤。

unclean

此模塊沒有可選項,不過它試着匹配那些奇怪的、不常見的包。處在實驗中。

tos

此模塊匹配IP包首部的8位tos(服務類型)字段(也就是說,包含在優先位中)。

--tos tos

這個參數可以是一個標準名稱,(用iptables -m tos -h 察看該列表),或者數值。

TARGET EXTENSIONS

iptables可以使用擴展目標模塊:以下都包含在標準版中。

LOG

爲匹配的包開啓內核記錄。當在規則中設置了這一選項後,linux內核會通過printk()打印一些關於全部匹配包的信息(諸如IP包頭字段等)。

--log-level level

記錄級別(數字或參看 syslog.conf⑸)。

--log-prefix prefix

在紀錄信息前加上特定的前綴:最多14個字母長,用來和記錄中其他信息區別。

--log-tcp-sequence

記錄TCP序列號。如果記錄能被用戶讀取那麼這將存在安全隱患。

--log-tcp-options

記錄來自TCP包頭部的選項。

--log-ip-options

記錄來自IP包頭部的選項。

MARK

用來設置包的netfilter標記值。只適用於mangle表。

--set-mark mark

REJECT

作爲對匹配的包的響應,返回一個錯誤的包:其他情況下和DROP相同。

此目標只適用於INPUT、FORWARD和OUTPUT鏈,和調用這些鏈的用戶自定義鏈。這幾個選項控制返回的錯誤包的特性:

--reject-with type

Type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port-nreachable、icmp-proto-unreachable、 icmp-net-prohibited 或者 icmp-host-prohibited,該類型會返回相應的ICMP錯誤信息(默認是port-unreachable)。選項 echo-reply也是允許的;它只能用於指定ICMP ping包的規則中,生成ping的迴應。最後,選項tcp-reset可以用於在INPUT鏈中,或自INPUT鏈調用的規則,只匹配TCP協議:將回應一個TCP RST包。

TOS

用來設置IP包的首部八位tos。只能用於mangle表。

--set-tos tos

你可以使用一個數值型的TOS 值,或者用iptables -j TOS -h 來查看有效TOS名列表。

MIRROR

這是一個試驗示範目標,可用於轉換IP首部字段中的源地址和目標地址,再傳送該包,並只適用於INPUT、FORWARD和OUTPUT鏈,以及只調用它們的用戶自定義鏈。

SNAT

這個目標只適用於nat表的POSTROUTING鏈。它規定修改包的源地址(此連接以後所有的包都會被影響),停止對規則的檢查,它包含選項:

--to-source [-][:port-port]

源端口中512以下的(端口)會被安置爲其他的512以下的端口;512到1024之間的端口會被安置爲1024以下的,其他端口會被安置爲1024或以上。如果可能,端口不會被修改。

 

測試及應用

iptables命令選項輸入順序:

iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作

表名包括:

  • raw:高級功能,如:網址過濾。
  • mangle:數據包修改(QOS),用於實現服務質量。
  • net:地址轉換,用於網關路由器。
  • filter:包過濾,用於防火牆規則。

規則鏈名包括:

  • INPUT鏈:處理輸入數據包。
  • OUTPUT鏈:處理輸出數據包。
  • PORWARD鏈:處理轉發數據包。
  • PREROUTING鏈:用於目標地址轉換(DNAT)。
  • POSTOUTING鏈:用於源地址轉換(SNAT)。

動作包括:

  • accept:接收數據包。
  • DROP:丟棄數據包。
  • REDIRECT:重定向、映射、透明代理。
  • SNAT:源地址轉換。
  • DNAT:目標地址轉換。
  • MASQUERADE:IP僞裝(NAT),用於ADSL。
  • LOG:日誌記錄。

查看當前系統iptables運行狀態:

也可以使用 iptables -L -n 來查看

指定查看默認表格 filter

清空所有iptables規則 使用 iptables --flush 或者 iptables -F 這兩條命令是等效的。

設置永久生效

當你刪除、添加規則後,這些更改並不能永久生效,這些規則很有可能在系統重啓後恢復原樣。

保存iptables規則 

追加一條規則:僅允許SSH服務

拒絕所有其他數據包:

編輯 /etc/sysconfig/iptables 更改設置,首先默認拒絕所有鏈接,開放需要的鏈接:

重啓 iptables 服務查看列表信息:

!注意:不要嘗試在.bashrc或者.profile中執行以上命令,因爲用戶通常不是root,而且這隻能在登錄時加載iptables規則。

設置僅允許某一IP訪問:

刪除某一條規則,使用 --line-number 顯示編號:

保存重啓服務:

更改物理機IP地址爲 192.168.10.254

無法登陸 10.4 

其他機器登錄正常

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章