Linux iptables 防火牆 新增刪除 埠
一.Linux 防火牆的啟動和關閉
1.1 啟動命令
[root@singledb ~]# service iptables stop
Flushing firewall rules:[OK]
Setting chains to policy ACCEPT: filter nat[OK]
Unloading iptables modules:[OK]
[root@singledb ~]# service iptables start
Applying iptables firewall rules:[OK]
Loading additional iptables modules: ip_conntrack_netbios_n[OK]
1.2 設定開機自啟動
[root@singledb ~]# chkconfig iptables off
[root@singledb ~]# chkconfig --list iptables
iptables0:off1:off2:off3:off4:off5:off6:off
[root@singledb ~]# chkconfig iptables on
[root@singledb ~]# chkconfig --list iptables
iptables0:off1:off2:on3:on4:on5:on6:off
[root@singledb ~]#
在chkconfig --list 命令,列出了0到6個數字的狀態。 Linux 啟動有7種模式。 這些資料分別代表這幾種模式下,iptables的狀態。 3 是命令列模式,5 是有介面的。
關於這幾種模式,具體參考我的BLog:
Linux 開機引導與關機過程
5.1 init 和執行級
傳統的init 定義了7個執行級(run level),每一個級別都代表系統應該補充執行的某些特定服務:
(1)0級是完全關閉系統的級別
(2)1級或者S級代表單使用者模式
(3)2-5 級 是多使用者級別
(4)6級 是 重新引導的級別
二. Iptables
Iptalbes 是用來設定、維護和檢查Linux核心的IP包過濾規則的。可以定義不同的表,每個表都包含幾個內部的鏈,也能包含使用者定義的鏈。每個鏈都是一個規則列表,對對應的包進行匹配:每條規則指定應當如何處理與之相匹配的包。這被稱作'target'(目標),也可以跳向同一個表內的使用者定義的鏈。
[root@singledb ~]# iptables --help
iptables v1.3.5
Usage: iptables -[AD] chain rule-specification [options]
iptables -[RI] chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LFZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
Commands:
Either long or short options are allowed.
--append-A chain Append to chain
--delete-D chain Delete matching rule from chain
--delete-D chain rulenum
Delete rule rulenum (1 = first) from chain
--insert-I chain [rulenum]
Insert in chain as rulenum (default 1=first)
--replace -R chain rulenum
Replace rule rulenum (1 = first) in chain
--list-L [chain] List the rules in a chain or all chains
--flush-F [chain] Delete all rules inchain or all chains
--zero-Z [chain] Zero counters in chain or all chains
--new-N chain Create a new user-defined chain
--delete-chain
-X [chain]Delete a user-defined chain
--policy-P chain target
Change policy on chain to target
--rename-chain
-E old-chain new-chain
Change chain name, (moving any references)
Options:
--proto-p [!] proto protocol: by number or name, eg. `tcp'
--source-s [!] address[/mask]
source specification
--destination -d [!] address[/mask]
destination specification
--in-interface -i [!] input name[+]
network interface name ([+] for wildcard)
--jump-j target
target for rule (may load target extension)
--goto-g chain
jump to chain with no return
--match-m match
extended match (may load extension)
--numeric-n numeric output of addresses and ports
--out-interface -o [!] output name[+]
network interface name ([+] for wildcard)
--table-t table table to manipulate (default: `filter')
--verbose-v verbose mode
--line-numbersprint line numbers when listing
--exact-x expand numbers (display exact values)
[!] --fragment-fmatch second or further fragments only
--modprobe=<command>try to insert modules using this command
--set-counters PKTS BYTESset the counter during insert/append
[!] --version-Vprint package version.
[root@singledb ~]#
2.1TARGETS
防火牆的規則指定所檢查包的特徵和目標。如果包不匹配,將送往該鏈中下一條規則檢查;如果匹配,那麼下一條規則由目標值確定.該目標值可以是使用者定義的鏈名,或是某個專用值,如ACCEPT[通過], DROP[刪除], QUEUE[排隊], 或者 RETURN[返回]。
ACCEPT 表示讓這個包通過。DROP表示將這個包丟棄。QUEUE表示把這個包傳遞到使用者空間。RETURN表示停止這條鏈的匹配,到前一個鏈的規則重新開始。如果到達了一個內建的鏈(的末端),或者遇到內建鏈的規則是RETURN,包的命運將由鏈準則指定的目標決定。
2.2TABLES
當前有三個表(哪個表是當前表取決於核心配置選項和當前模組)。
-t table 這個選項指定命令要操作的匹配包的表。如果核心被配置為自動載入模組,這時若模組沒有載入,(系統)將嘗試(為該表)載入適合的模組。這些表如下:
(1)filter 表:這是預設的表,包含了內建的鏈INPUT(處理進入的包)、FORWORD(處理通過的包)和OUTPUT(處理本地生成的包)。
(2)nat 表: 這個表被查詢時表示遇到了產生新的連線的包,由三個內建的鏈構成:PREROUTING (修改到來的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改準備出去的包)。
(3)mangle表: 這個表用來對指定的包進行修改。它有兩個內建規則:PREROUTING(修改路由之前進入的包)和OUTPUT(修改路由之前本地的包)。
2.3OPTIONS :
這些可被iptables識別的選項可以區分不同的種類。
2.4COMMANDS
這些選項指定執行明確的動作:若指令行下沒有其他規定,該行只能指定一個選項.對於長格式的命令和選項名,所用字母長度只要保證iptables能從其他選項中區分出該指令就行了。
(1)-A -append
在所選擇的鏈末新增一條或更多規則。當源(地址)或者/與 目的(地址)轉換為多個地址時,這條規則會加到所有可能的地址(組合)後面。
(2)-D -delete
從所選鏈中刪除一條或更多規則。這條命令可以有兩種方法:可以把被刪除規則指定為鏈中的序號(第一條序號為1),或者指定為要匹配的規則。
(3)-R -replace
從選中的鏈中取代一條規則。如果源(地址)或者/與 目的(地址)被轉換為多地址,該命令會失敗。規則序號從1開始。
(4)-I -insert
根據給出的規則序號向所選鏈中插入一條或更多規則。所以,如果規則序號為1,規則會被插入鏈的頭部。這也是不指定規則序號時的預設方式。
(5)-L -list
顯示所選鏈的所有規則。如果沒有選擇鏈,所有鏈將被顯示。也可以和z選項一起使用,這時鏈會被自動列出和歸零。精確輸出受其它所給引數影響。
(6)-F -flush
清空所選鏈。這等於把所有規則一個個的刪除。
(7)--Z -zero
把所有鏈的包及位元組的計數器清空。它可以和 -L配合使用,在清空前察看計數器,請參見前文。
(8)-N -new-chain
根據給出的名稱建立一個新的使用者定義鏈。這必須保證沒有同名的鏈存在。
(9)-X -delete-chain
刪除指定的使用者自定義鏈。這個鏈必須沒有被引用,如果被引用,在刪除之前你必須刪除或者替換與之有關的規則。如果沒有給出引數,這條命令將試著刪除每個非內建的鏈。
(10)-P -policy
設定鏈的目標規則。
(11)-E -rename-chain
根據使用者給出的名字對指定鏈進行重新命名,這僅僅是修飾,對整個表的結構沒有影響。TARGETS引數給出一個合法的目標。只有非使用者自定義鏈可以使用規則,而且內建鏈和使用者自定義鏈都不能是規則的目標。
(12)-h Help.
幫助。給出當前命令語法非常簡短的說明。
2.5PARAMETERS
以下引數構成規則詳述,如用於add、delete、replace、append 和 check命令。(1)-p -protocal [!]protocol
規則或者包檢查(待檢查包)的協議。指定協議可以是tcp、udp、icmp中的一個或者全部,也可以是數值,代表這些協議中的某一個。當然也可以使用在 /etc/protocols中定義的協議名。在協議名前加上"!"表示相反的規則。數字0相當於所有all。Protocol all會匹配所有協議,而且這是預設時的選項。在和check命令結合時,all可以不被使用。
(2)-s -source [!] address[/mask]
指定源地址,可以是主機名、網路名和清楚的IP地址。mask說明可以是網路掩碼或清楚的數字,在網路掩碼的左邊指定網路掩碼左邊"1"的個數,因此, mask值為24等於255.255.255.0。在指定地址前加上"!"說明指定了相反的地址段。標誌 --src 是這個選項的簡寫。
(3)-d --destination [!] address[/mask]
指定目標地址,要獲取詳細說明請參見 -s標誌的說明。標誌 --dst 是這個選項的簡寫。
(4)-j --jump target
-j 目標跳轉,指定規則的目標;也就是說,如果包匹配應當做什麼。目標可以是使用者自定義鏈(不是這條規則所在的),某個會立即決定包的命運的專用內建目標,或者一個擴充套件(參見下面的EXTENSIONS)。如果規則的這個選項被忽略,那麼匹配的過程不會對包產生影響,不過規則的計數器會增加。
(5)-i -in-interface [!] [name]
i -進入的(網路)介面 [!][名稱] ,這是包經由該介面接收的可選的入口名稱,包通過該介面接收(在鏈INPUT、FORWORD和PREROUTING中進入的包)。當在介面名前使用"!" 說明後,指的是相反的名稱。如果介面名後面加上"+",則所有以此介面名開頭的介面都會被匹配。如果這個選項被忽略,會假設為"+",那麼將匹配任意介面。
(6)-o --out-interface [!][name]
-o --輸出介面[名稱] ,這是包經由該介面送出的可選的出口名稱,包通過該口輸出(在鏈FORWARD、OUTPUT和POSTROUTING中送出的包)。當在介面名前使用"! "說明後,指的是相反的名稱。如果介面名後面加上"+",則所有以此介面名開頭的介面都會被匹配。如果這個選項被忽略,會假設為"+",那麼將匹配所有任意介面。
(7)[!] -f, --fragment
[!] -f --分片,這意味著在分片的包中,規則只詢問第二及以後的片。自那以後由於無法判斷這種把包的源埠或目標埠(或者是ICMP型別的),這類包將不能匹配任何指定對他們進行匹配的規則。如果"!"說明用在了"-f"標誌之前,表示相反的意思。
2.6OTHER OPTIONS
還可以指定下列附加選項:
(1)-v --verbose
-v --詳細,詳細輸出。這個選項讓list命令顯示介面地址、規則選項(如果有)和TOS(Type of Service)掩碼。包和位元組計數器也將被顯示,分別用K、M、G(字首)表示1000、1,000,000和1,000,000,000倍(不過請參看-x標誌改變它),對於新增,插入,刪除和替換命令,這會使一個或多個規則的相關詳細資訊被列印。
(2)-n --numeric
-n --數字,數字輸出。IP地址和埠會以數字的形式列印。預設情況下,程式試顯示主機名、網路名或者服務(只要可用)。
(3)-x -exact
-x -精確,擴充套件數字。顯示包和位元組計數器的精確值,代替用K,M,G表示的約數。這個選項僅能用於 -L 命令。
(4)--line-numbers
當列表顯示規則時,在每個規則的前面加上行號,與該規則在鏈中的位置相對應。
2.7MATCH EXTENSIONS
iptables能夠使用一些與模組匹配的擴充套件包。以下就是含於基本包內的擴充套件包,而且他們大多數都可以通過在前面加上!來表示相反的意思。
2.7.1 tcp
當 --protocol tcp 被指定,且其他匹配的擴充套件未被指定時,這些擴充套件被裝載。它提供以下選項:
(1)--source-port [!] [port[ort]
源埠或埠範圍指定。這可以是服務名或埠號。使用格式埠:埠也可以指定包含的(埠)範圍。如果首埠號被忽略,預設是"0",如果末埠號被忽略,預設是"65535",如果第二個埠號大於第一個,那麼它們會被交換。這個選項可以使用 --sport的別名。
(2)--destionation-port [!] [port:[port]
目標埠或埠範圍指定。這個選項可以使用 --dport別名來代替。
(3)--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標記沒有設定的包。
(4)[!] --syn
只匹配那些設定了SYN位而清除了ACK和FIN位的TCP包。這些包用於TCP連線初始化時發出請求;例如,大量的這種包進入一個介面發生堵塞時會阻止進入的TCP連線,而出去的TCP連線不會受到影響。這等於 --tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"標記,表示相反的意思。
(5)--tcp-option [!] number
匹配設定了TCP選項的。
2.7.2udp
當protocol udp 被指定,且其他匹配的擴充套件未被指定時,這些擴充套件被裝載,它提供以下選項:
(1)--source-port [!] [port:[port]
源埠或埠範圍指定。詳見 TCP擴充套件的--source-port選項說明。(2)--destination-port [!] [port:[port]
目標埠或埠範圍指定。詳見 TCP擴充套件的--destination-port選項說明。
2.7.3icmp
當protocol icmp被指定,且其他匹配的擴充套件未被指定時,該擴充套件被裝載。它提供以下選項:
(1)--icmp-type [!] typename
這個選項允許指定ICMP型別,可以是一個數值型的ICMP型別,或者是某個由命令iptables -p icmp -h所顯示的ICMP型別名。
2.7.4mac
--mac-source [!] address
匹配實體地址。必須是XX:XX:XX:XX:XX這樣的格式。注意它只對來自以太裝置並進入PREROUTING、FORWORD和INPUT鏈的包有效。
2.7.5 limit
這個模組匹配標誌用一個標記桶過濾器一一定速度進行匹配,它和LOG目標結合使用來給出有限的登陸數.當達到這個極限值時,使用這個擴充套件包的規則將進行匹配.(除非使用了"!"標記)
(1)--limit rate
最大平均匹配速率:可賦的值有'/second', '/minute', '/hour', or '/day'這樣的單位,預設是3/hour。
(2)--limit-burst number
待匹配包初始個數的最大值:若前面指定的極限還沒達到這個數值,則概數字加1.預設值為5
2.7.6 multiport
這個模組匹配一組源埠或目標埠,最多可以指定15個埠。只能和-p tcp 或者 -p udp 連著使用。
(1)--source-port
[port[, port] 如果源埠是其中一個給定埠則匹配(2