Linux iptables 防火墙相关命令介绍及使用
一.? Linux 防火墻的啟動和關(guān)閉
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 設(shè)置開機(jī)自啟動
[root@singledb ~]# chkconfig iptables off
[root@singledb ~]# chkconfig --list iptables
iptables??????? 0:off?? 1:off?? 2:off?? 3:off?? 4:off?? 5:off?? 6:off
[root@singledb ~]# chkconfig iptables on
[root@singledb ~]# chkconfig --list iptables
iptables??????? 0:off?? 1:off?? 2:on??? 3:on??? 4:on??? 5:on??? 6:off
[root@singledb ~]#
?
?????? 在chkconfig --list 命令,列出了0到6個數(shù)字的狀態(tài)。Linux 啟動有7種模式。 這些數(shù)據(jù)分別代表這幾種模式下,iptables的狀態(tài)。? 3 是命令行模式,5 是有界面的。
?
關(guān)于這幾種模式,具體參考我的BLog:
?????? Linux 開機(jī)引導(dǎo)與關(guān)機(jī)過程 http://www.2cto.com/os/201202/119412.html
?
5.1 init 和運行級
?????? 傳統(tǒng)的init 定義了7個運行級(run level),每一個級別都代表系統(tǒng)應(yīng)該補(bǔ)充運行的某些特定服務(wù):
????????????? (1)0級是完全關(guān)閉系統(tǒng)的級別
????????????? (2)1級或者S級代表單用戶模式
????????????? (3)2-5 級 是多用戶級別
????????????? (4)6級 是 重新引導(dǎo)的級別
?
?
二. Iptables參數(shù)
?????? Iptalbes 是用來設(shè)置、維護(hù)和檢查Linux內(nèi)核的IP包過濾規(guī)則的。可以定義不同的表,每個表都包含幾個內(nèi)部的鏈,也能包含用戶定義的鏈。每個鏈都是一個規(guī)則列 表,對對應(yīng)的包進(jìn)行匹配:每條規(guī)則指定應(yīng)當(dāng)如何處理與之相匹配的包。這被稱作'target'(目標(biāo)),也可以跳向同一個表內(nèi)的用戶定義的鏈。
?
[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 in? chain 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-numbers??????????????? print line numbers when listing
? --exact?????? -x????????????? expand numbers (display exact values)
[!] --fragment? -f????????????? match second or further fragments only
? --modprobe=<command>????????? try to insert modules using this command
? --set-counters PKTS BYTES???? set the counter during insert/append
[!] --version?? -V????????????? print package version.
[root@singledb ~]#
?
2.1? TARGETS www.2cto.com
???? ??防火墻的規(guī)則指定所檢查包的特征和目標(biāo)。如果包不匹配,將送往該鏈中下一條規(guī)則檢查;如果匹配,那么下一條規(guī)則由目標(biāo)值確定.該目標(biāo)值可以是用戶定義 的鏈名,或是某個專用值,如ACCEPT[通過], DROP[刪除], QUEUE[排隊], 或者RETURN[返回]。
?????? ACCEPT 表示讓這個包通過。DROP表示將這個包丟棄。QUEUE表示把這個包傳遞到用戶空間。RETURN表示停止這條鏈的匹配,到前一個鏈的規(guī)則重新開始。如 果到達(dá)了一個內(nèi)建的鏈(的末端),或者遇到內(nèi)建鏈的規(guī)則是RETURN,包的命運將由鏈準(zhǔn)則指定的目標(biāo)決定。
?
2.2? TABLES
?????? 當(dāng)前有三個表(哪個表是當(dāng)前表取決于內(nèi)核配置選項和當(dāng)前模塊)。
-t table 這個選項指定命令要操作的匹配包的表。如果內(nèi)核被配置為自動加載模塊,這時若模塊沒有加載,(系統(tǒng))將嘗試(為該表)加載適合的模塊。這些表如下:
?????? (1)filter 表:這是默認(rèn)的表,包含了內(nèi)建的鏈INPUT(處理進(jìn)入的包)、FORWORD(處理通過的包)和OUTPUT(處理本地生成的包)。
?????? (2)nat 表: 這個表被查詢時表示遇到了產(chǎn)生新的連接的包,由三個內(nèi)建的鏈構(gòu)成:PREROUTING (修改到來的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改準(zhǔn)備出去的包)。
?????? (3)mangle表: 這個表用來對指定的包進(jìn)行修改。它有兩個內(nèi)建規(guī)則:PREROUTING(修改路由之前進(jìn)入的包)和OUTPUT(修改路由之前本地的包)。
?
2.3? OPTIONS :
?????? 這些可被iptables識別的選項可以區(qū)分不同的種類。
?
2.4? COMMANDS
?????? 這些選項指定執(zhí)行明確的動作:若指令行下沒有其他規(guī)定,該行只能指定一個選項.對于長格式的命令和選項名,所用字母長度只要保證iptables能從其他選項中區(qū)分出該指令就行了。
(1)-A -append
?????? 在所選擇的鏈末添加一條或更多規(guī)則。當(dāng)源(地址)或者/與 目的(地址)轉(zhuǎn)換為多個地址時,這條規(guī)則會加到所有可能的地址(組合)后面。
(2)-D -delete
?????? 從所選鏈中刪除一條或更多規(guī)則。這條命令可以有兩種方法:可以把被刪除規(guī)則指定為鏈中的序號(第一條序號為1),或者指定為要匹配的規(guī)則。
(3)-R -replace
?????? 從選中的鏈中取代一條規(guī)則。如果源(地址)或者/與 目的(地址)被轉(zhuǎn)換為多地址,該命令會失敗。規(guī)則序號從1開始。
(4)-I -insert
?????? 根據(jù)給出的規(guī)則序號向所選鏈中插入一條或更多規(guī)則。所以,如果規(guī)則序號為1,規(guī)則會被插入鏈的頭部。這也是不指定規(guī)則序號時的默認(rèn)方式。
(5)-L -list
?????? 顯示所選鏈的所有規(guī)則。如果沒有選擇鏈,所有鏈將被顯示。也可以和z選項一起使用,這時鏈會被自動列出和歸零。精確輸出受其它所給參數(shù)影響。
(6)-F -flush
?????? 清空所選鏈。這等于把所有規(guī)則一個個的刪除。
(7)--Z -zero
?????? 把所有鏈的包及字節(jié)的計數(shù)器清空。它可以和-L配合使用,在清空前察看計數(shù)器,請參見前文。
(8)-N -new-chain
?????? 根據(jù)給出的名稱建立一個新的用戶定義鏈。這必須保證沒有同名的鏈存在。
(9)-X -delete-chain
?????? 刪除指定的用戶自定義鏈。這個鏈必須沒有被引用,如果被引用,在刪除之前你必須刪除或者替換與之有關(guān)的規(guī)則。如果沒有給出參數(shù),這條命令將試著刪除每個非內(nèi)建的鏈。
(10)-P -policy
?????? 設(shè)置鏈的目標(biāo)規(guī)則。
(11)-E -rename-chain
?????? 根據(jù)用戶給出的名字對指定鏈進(jìn)行重命名,這僅僅是修飾,對整個表的結(jié)構(gòu)沒有影響。TARGETS參數(shù)給出一個合法的目標(biāo)。只有非用戶自定義鏈可以使用規(guī)則,而且內(nèi)建鏈和用戶自定義鏈都不能是規(guī)則的目標(biāo)。
(12)-h Help.
? ?????幫助。給出當(dāng)前命令語法非常簡短的說明。
?
2.5? PARAMETERS
以下參數(shù)構(gòu)成規(guī)則詳述,如用于add、delete、replace、append 和check命令。
(1)-p -protocal [!]protocol
?????? 規(guī)則或者包檢查(待檢查包)的協(xié)議。指定協(xié)議可以是tcp、udp、icmp中的一個或者全部,也可以是數(shù)值,代表這些協(xié)議中的某一個。當(dāng)然也可以使用在 /etc/protocols中定義的協(xié)議名。在協(xié)議名前加上"!"表示相反的規(guī)則。數(shù)字0相當(dāng)于所有all。Protocol all會匹配所有協(xié)議,而且這是缺省時的選項。在和check命令結(jié)合時,all可以不被使用。
(2)-s -source [!] address[/mask]
?????? 指定源地址,可以是主機(jī)名、網(wǎng)絡(luò)名和清楚的IP地址。mask說明可以是網(wǎng)絡(luò)掩碼或清楚的數(shù)字,在網(wǎng)絡(luò)掩碼的左邊指定網(wǎng)絡(luò)掩碼左邊"1"的個數(shù),因 此,mask值為24等于255.255.255.0。在指定地址前加上"!"說明指定了相反的地址段。標(biāo)志--src 是這個選項的簡寫。
(3)-d --destination [!] address[/mask]
?????? 指定目標(biāo)地址,要獲取詳細(xì)說明請參見-s標(biāo)志的說明。標(biāo)志--dst 是這個選項的簡寫。
(4)-j --jump target
?????? -j 目標(biāo)跳轉(zhuǎn),指定規(guī)則的目標(biāo);也就是說,如果包匹配應(yīng)當(dāng)做什么。目標(biāo)可以是用戶自定義鏈(不是這條規(guī)則所在的),某個會立即決定包的命運的專用內(nèi)建目標(biāo),或 者一個擴(kuò)展(參見下面的EXTENSIONS)。如果規(guī)則的這個選項被忽略,那么匹配的過程不會對包產(chǎn)生影響,不過規(guī)則的計數(shù)器會增加。
(5)-i -in-interface [!] [name]
?????? i -進(jìn)入的(網(wǎng)絡(luò))接口[!][名稱] ,這是包經(jīng)由該接口接收的可選的入口名稱,包通過該接口接收(在鏈INPUT、FORWORD和PREROUTING中進(jìn)入的包)。當(dāng)在接口名前使 用"!" 說明后,指的是相反的名稱。如果接口名后面加上"+",則所有以此接口名開頭的接口都會被匹配。如果這個選項被忽略,會假設(shè)為"+",那么將匹配任意接 口。
(6)-o --out-interface [!][name]
?????? -o --輸出接口[名稱] ,這是包經(jīng)由該接口送出的可選的出口名稱,包通過該口輸出(在鏈FORWARD、OUTPUT和POSTROUTING中送出的包)。當(dāng)在接口名前使 用"! "說明后,指的是相反的名稱。如果接口名后面加上"+",則所有以此接口名開頭的接口都會被匹配。如果這個選項被忽略,會假設(shè)為"+",那么將匹配所有任 意接口。
(7)[!] -f, --fragment
?????? [!] -f --分片,這意味著在分片的包中,規(guī)則只詢問第二及以后的片。自那以后由于無法判斷這種把包的源端口或目標(biāo)端口(或者是ICMP類型的),這類包將不能匹 配任何指定對他們進(jìn)行匹配的規(guī)則。如果"!"說明用在了"-f"標(biāo)志之前,表示相反的意思。
?
2.6? OTHER OPTIONS
?????? 還可以指定下列附加選項:
(1)-v --verbose
?????? -v --詳細(xì),詳細(xì)輸出。這個選項讓list命令顯示接口地址、規(guī)則選項(如果有)和TOS(Type of Service)掩碼。包和字節(jié)計數(shù)器也將被顯示,分別用K、M、G(前綴)表示1000、1,000,000和1,000,000,000倍(不過請參 看-x標(biāo)志改變它),對于添加,插入,刪除和替換命令,這會使一個或多個規(guī)則的相關(guān)詳細(xì)信息被打印。
(2)-n --numeric
?????? -n --數(shù)字,數(shù)字輸出。IP地址和端口會以數(shù)字的形式打印。默認(rèn)情況下,程序試顯示主機(jī)名、網(wǎng)絡(luò)名或者服務(wù)(只要可用)。
(3)-x -exact
?????? -x -精確,擴(kuò)展數(shù)字。顯示包和字節(jié)計數(shù)器的精確值,代替用K,M,G表示的約數(shù)。這個選項僅能用于-L 命令。
(4)--line-numbers
?????? 當(dāng)列表顯示規(guī)則時,在每個規(guī)則的前面加上行號,與該規(guī)則在鏈中的位置相對應(yīng)。
?
2.7? MATCH EXTENSIONS
?????? iptables能夠使用一些與模塊匹配的擴(kuò)展包。以下就是含于基本包內(nèi)的擴(kuò)展包,而且他們大多數(shù)都可以通過在前面加上!來表示相反的意思。
2.7.1 tcp
?????? 當(dāng)--protocol tcp 被指定,且其他匹配的擴(kuò)展未被指定時,這些擴(kuò)展被裝載。它提供以下選項:
(1)--source-port [!] [port[ort]
?????? 源端口或端口范圍指定。這可以是服務(wù)名或端口號。使用格式端口:端口也可以指定包含的(端口)范圍。如果首端口號被忽略,默認(rèn)是"0",如果末端口號被忽 略,默認(rèn)是"65535",如果第二個端口號大于第一個,那么它們會被交換。這個選項可以使用--sport的別名。
(2)--destionation-port [!] [port:[port]
?????? 目標(biāo)端口或端口范圍指定。這個選項可以使用--dport別名來代替。
(3)--tcp-flags [!] mask comp
?????? 匹配指定的TCP標(biāo)記。第一個參數(shù)是我們要檢查的標(biāo)記,一個用逗號分開的列表,第二個參數(shù)是用逗號分開的標(biāo)記表,是必須被設(shè)置的。標(biāo)記如下:SYN ACK FIN RST URG PSH ALL NONE。因此這條命令:iptables -A FORWARD -p tcp --tcp-flags SYN, ACK, FIN, RST SYN只匹配那些SYN標(biāo)記被設(shè)置而ACK、FIN和RST標(biāo)記沒有設(shè)置的包。
(4)[!] --syn
?????? 只匹配那些設(shè)置了SYN位而清除了ACK和FIN位的TCP包。這些包用于TCP連接初始化時發(fā)出請求;例如,大量的這種包進(jìn)入一個接口發(fā)生堵塞時會阻止 進(jìn)入的TCP連接,而出去的TCP連接不會受到影響。這等于--tcp-flags SYN, RST, ACK SYN。如果"--syn"前面有"!"標(biāo)記,表示相反的意思。
(5)--tcp-option [!] number
?????? 匹配設(shè)置了TCP選項的。
2.7.2? udp
?????? 當(dāng)protocol udp 被指定,且其他匹配的擴(kuò)展未被指定時,這些擴(kuò)展被裝載,它提供以下選項:
(1)--source-port [!] [port:[port]
?????? 源端口或端口范圍指定。詳見TCP擴(kuò)展的--source-port選項說明。
(2)--destination-port [!] [port:[port]
?????? 目標(biāo)端口或端口范圍指定。詳見TCP擴(kuò)展的--destination-port選項說明。
2.7.3? icmp
?????? 當(dāng)protocol icmp被指定,且其他匹配的擴(kuò)展未被指定時,該擴(kuò)展被裝載。它提供以下選項:
(1)--icmp-type [!] typename
?????? 這個選項允許指定ICMP類型,可以是一個數(shù)值型的ICMP類型,或者是某個由命令iptables -p icmp -h所顯示的ICMP類型名。
2.7.4? mac
--mac-source [!] address
?????? 匹配物理地址。必須是XX:XX:XX:XX:XX這樣的格式。注意它只對來自以太設(shè)備并進(jìn)入PREROUTING、FORWORD和INPUT鏈的包有效。
2.7.5 limit
?????? 這個模塊匹配標(biāo)志用一個標(biāo)記桶過濾器一一定速度進(jìn)行匹配,它和LOG目標(biāo)結(jié)合使用來給出有限的登陸數(shù).當(dāng)達(dá)到這個極限值時,使用這個擴(kuò)展包的規(guī)則將進(jìn)行匹配.(除非使用了"!"標(biāo)記)
(1)--limit rate
?????? 最大平均匹配速率:可賦的值有'/second', '/minute', '/hour', or '/day'這樣的單位,默認(rèn)是3/hour。
(2)--limit-burst number
?????? 待匹配包初始個數(shù)的最大值:若前面指定的極限還沒達(dá)到這個數(shù)值,則概數(shù)字加1.默認(rèn)值為5
2.7.6 multiport
?????? 這個模塊匹配一組源端口或目標(biāo)端口,最多可以指定15個端口。只能和-p tcp 或者-p udp 連著使用。
(1)--source-port [port[, port]
?????? 如果源端口是其中一個給定端口則匹配
(2)--destination-port [port[, port]
?????? 如果目標(biāo)端口是其中一個給定端口則匹配
(3)--port [port[, port]
?????? 若源端口和目的端口相等并與某個給定端口相等,則匹配。
2.7.7 mark
?????? 這個模塊和與netfilter過濾器標(biāo)記字段匹配(就可以在下面設(shè)置為使用MARK標(biāo)記)。
--mark value [/mask]
?????? 匹配那些無符號標(biāo)記值的包(如果指定mask,在比較之前會給掩碼加上邏輯的標(biāo)記)。
2.7.8 owner
?????? 此模塊試為本地生成包匹配包創(chuàng)建者的不同特征。只能用于OUTPUT鏈,而且即使這樣一些包(如ICMP ping應(yīng)答)還可能沒有所有者,因此永遠(yuǎn)不會匹配。
(1)--uid-owner userid
?????? 如果給出有效的user id,那么匹配它的進(jìn)程產(chǎn)生的包。
(2)--gid-owner groupid
?????? 如果給出有效的group id,那么匹配它的進(jìn)程產(chǎn)生的包。
(3)--sid-owner seessionid
?????? 根據(jù)給出的會話組匹配該進(jìn)程產(chǎn)生的包。
2.7.9? state
?????? 此模塊,當(dāng)與連接跟蹤結(jié)合使用時,允許訪問包的連接跟蹤狀態(tài)。
--state state
?????? 這里state是一個逗號分割的匹配連接狀態(tài)列表。可能的狀態(tài)是:INVALID表示包是未知連接,ESTABLISHED表示是雙向傳送的連接,NEW 表示包為新的連接,否則是非雙向傳送的,而RELATED表示包由新連接開始,但是和一個已存在的連接在一起,如FTP數(shù)據(jù)傳送,或者一個ICMP錯誤。
2.7.10? unclean
?????? 此模塊沒有可選項,不過它試著匹配那些奇怪的、不常見的包。處在實驗中。
2.7.11? tos
?????? 此模塊匹配IP包首部的8位tos(服務(wù)類型)字段(也就是說,包含在優(yōu)先位中)。
--tos tos
?????? 這個參數(shù)可以是一個標(biāo)準(zhǔn)名稱,(用iptables -m tos -h 察看該列表),或者數(shù)值。
2.8? LOG
?????? 為匹配的包開啟內(nèi)核記錄。當(dāng)在規(guī)則中設(shè)置了這一選項后,linux內(nèi)核會通過printk()打印一些關(guān)于全部匹配包的信息(諸如IP包頭字段等)。
(1)--log-level level
?????? 記錄級別(數(shù)字或參看syslog.conf(5))。
(2)--log-prefix prefix
?????? 在紀(jì)錄信息前加上特定的前綴:最多14個字母長,用來和記錄中其他信息區(qū)別。
(3)--log-tcp-sequence
?????? 記錄TCP序列號。如果記錄能被用戶讀取那么這將存在安全隱患。
(4)--log-tcp-options
?????? 記錄來自TCP包頭部的選項。
(5)--log-ip-options
?????? 記錄來自IP包頭部的選項。
2.9? MARK
?????? 用來設(shè)置包的netfilter標(biāo)記值。只適用于mangle表。
--set-mark mark
?
2.10 REJECT
?????? 作為對匹配的包的響應(yīng),返回一個錯誤的包:其他情況下和DROP相同。 此目標(biāo)只適用于INPUT、FORWARD和OUTPUT鏈,和調(diào)用這些鏈的用戶自定義鏈。這幾個選項控制返回的錯誤包的特性:
--reject-with type
?????? Type可以是icmp-net-unreachable、icmp-host- unreachable、icmp-port-nreachable、icmp-proto-unreachable、icmp-net- prohibited 或者icmp-host-prohibited,該類型會返回相應(yīng)的ICMP錯誤信息(默認(rèn)是port-unreachable)。選項echo- reply也是允許的;它只能用于指定ICMP ping包的規(guī)則中,生成ping的回應(yīng)。最后,選項tcp-reset可以用于在INPUT鏈中,或自INPUT鏈調(diào)用的規(guī)則,只匹配TCP協(xié)議:將回 應(yīng)一個TCP RST包。
?
2.11 MIRROR
???? 這是一個試驗示范目標(biāo),可用于轉(zhuǎn)換IP首部字段中的源地址和目標(biāo)地址,再傳送該包,并只適用于INPUT、FORWARD和OUTPUT鏈,以及只調(diào)用它們的用戶自定義鏈。
?
2.12? SNAT
?????? 這個目標(biāo)只適用于nat表的POSTROUTING鏈。它規(guī)定修改包的源地址(此連接以后所有的包都會被影響),停止對規(guī)則的檢查,它包含選項:
(1)--to-source [-][ort-port]
?????? 可以指定一個單一的新的IP地址,一個IP地址范圍,也可以附加一個端口范圍(只能在指定-p tcp 或者-p udp的規(guī)則里)。如果未指定端口范圍,源端口中512以下的(端口)會被安置為其他的512以下的端口;512到1024之間的端口會被安置為1024 以下的,其他端口會被安置為1024或以上。如果可能,端口不會被修改。
(2)--to-destiontion [-][ort-port]
?????? 可以指定一個單一的新的IP地址,一個IP地址范圍,也可以附加一個端口范圍(只能在指定-p tcp 或者-p udp的規(guī)則里)。如果未指定端口范圍,目標(biāo)端口不會被修改。
?
2.13? MASQUERADE
?????? 只用于nat表的POSTROUTING鏈。只能用于動態(tài)獲取IP(撥號)連接:如果你擁有靜態(tài)IP地址,你要用SNAT。偽裝相當(dāng)于給包發(fā)出時所經(jīng)過接 口的IP地址設(shè)置一個映像,當(dāng)接口關(guān)閉連接會終止。這是因為當(dāng)下一次撥號時未必是相同的接口地址(以后所有建立的連接都將關(guān)閉)。它有一個選項:
--to-ports [-port>]
?????? 指定使用的源端口范圍,覆蓋默認(rèn)的SNAT源地址選擇(見上面)。這個選項只適用于指定了-p tcp或者-p udp的規(guī)則。
?
2.14? REDIRECT
?????? 只適用于nat表的PREROUTING和OUTPUT鏈,和只調(diào)用它們的用戶自定義鏈。它修改包的目標(biāo)IP地址來發(fā)送包到機(jī)器自身(本地生成的包被安置為地址127.0.0.1)。它包含一個選項:
--to-ports []
?????? 指定使用的目的端口或端口范圍:不指定的話,目標(biāo)端口不會被修改。只能用于指定了-p tcp 或-p udp的規(guī)則。
?
2.15? DIAGNOSTICS
?????? 診斷,不同的錯誤信息會打印成標(biāo)準(zhǔn)錯誤:退出代碼0表示正確。類似于不對的或者濫用的命令行參數(shù)錯誤會返回錯誤代碼2,其他錯誤返回代碼為1。
?
2.16? COMPATIBILITY WITH IPCHAINS
?????? 與ipchains的兼容性, iptables和Rusty Russell的ipchains非常相似。主要區(qū)別是INPUT 鏈只用于進(jìn)入本地主機(jī)的包,而OUTPUT只用于自本地主機(jī)生成的包。因此每個包只經(jīng)過三個鏈的一個;以前轉(zhuǎn)發(fā)的包會經(jīng)過所有三個鏈。其他主要區(qū)別是-i 引用進(jìn)入接口;-o引用輸出接口,兩者都適用于進(jìn)入FORWARD鏈的包。當(dāng)和可選擴(kuò)展模塊一起使用默認(rèn)過濾器表時,iptables是一個純粹的包過濾 器。這能大大減少以前對IP偽裝和包過濾結(jié)合使用的混淆,所以以下選項作了不同的處理:
-j MASQ
-M -S
-M -L
?
三.? Iptables 示例
1、查看本機(jī)關(guān)于IPTABLES的設(shè)置情況:
[root@singledb ~]# iptables -L -n
Chain FORWARD (policy ACCEPT)
target???? prot opt source?????????????? destination???????
ACCEPT???? all? --? 0.0.0.0/0??????????? 192.168.122.0/24??? state RELATED,ESTABLISHED
ACCEPT???? all? --? 192.168.122.0/24???? 0.0.0.0/0?????????
?
這里面顯示的IP地址加上網(wǎng)絡(luò)號, 這里網(wǎng)絡(luò)號是/24。 關(guān)于IP 地址內(nèi)容,參考Blog:
?????? IP(Internet Protocal) 地址 說明
?????? http://blog.csdn.net/tianlesoftware/archive/2011/02/25/6207289.aspx
?
2.? Iptables 保存
?????? iptables的配置和其他用命令配置IP一樣,重起就會失去作用,可以用如下兩種方式進(jìn)行保存。
# service iptables save
或者:
# iptables-save > /etc/sysconfig/iptables
?
?????? /etc/sysconfig/iptables 是默認(rèn)的保存位置。 在/etc/sysconfig 目錄下還有一個iptables的配置文件:etc/sysconfig/iptables-config
?
注意:一般不建議用戶手工修改這個文件的內(nèi)容,這個文件只用于保存啟動iptables時,需要自動應(yīng)用的防火墻規(guī)則。
?
保存之后,把防火墻重啟一下,才會生效。
??? # service iptables restart
?
3、清除原有規(guī)則(慎用):
# iptables -F --> 清除預(yù)設(shè)表filter中的所有規(guī)則鏈的規(guī)則
# iptables -X --> 清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則
?
4、設(shè)定預(yù)設(shè)規(guī)則
查看規(guī)則的狀態(tài):
[root@localhost ~]# iptables -L
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination???????
Chain FORWARD (policy ACCEPT)
target???? prot opt source?????????????? destination???????
Chain OUTPUT (policy ACCEPT)
target???? prot opt source?????????????? destination??????????
?
更改規(guī)則:
?[root@tp ~]# iptables -P INPUT DROP
?[root@tp ~]# iptables -P OUTPUT ACCEPT
?[root@tp ~]# iptables -P FORWARD DROP
?
如果是ssh連接,連接會中斷。
?
?????? 上面的意思是,當(dāng)超出了IPTABLES里filter表里的兩個鏈規(guī)則(INPUT,FORWARD)時,不在這兩個規(guī)則里的數(shù)據(jù)包就DROP(放 棄).應(yīng)該說這樣配置是很安全的.我們要控制流入數(shù)據(jù)包。而對于OUTPUT鏈,也就是流出的包我們不用做太多限制,而是采取ACCEPT。
?????? INPUT,FORWARD兩個鏈采用的是允許什么包通過,而OUTPUT鏈采用的是不允許什么包通過。 這樣設(shè)置還是挺合理的,當(dāng)然你也可以三個鏈都DROP,但這樣做我認(rèn)為是沒有必要的,而且要寫的規(guī)則就會增加.但如果你只想要有限的幾個規(guī)則是,如只做 WEB服務(wù)器.還是推薦三個鏈都是DROP.
?
5、添加規(guī)則.
???? 首先添加INPUT鏈, 如我們要開啟22端口:
??? # iptables -A INPUT -p tcp --dport 22 -j ACCEPT
???? 注意:如果你把OUTPUT 設(shè)置成DROP的就要寫上下面的規(guī)則,好多人都是忘了寫這一規(guī)則導(dǎo)致始終無法SSH。
???? # iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
?
6、端口操作相關(guān)示例:
?
6.1 添加端口
(1)??? 允許源地址為x.x.x.x/x的主機(jī)通過22(ssh)端口.
iptables -A INPUT -p tcp -s x.x.x.x/x --dport 22 -j ACCEPT
(2)允許80(http)端口的數(shù)據(jù)包進(jìn)入
?????? iptables -A INPUT -p tcp --dport 80 -j ACCEPT
(3)允許110(pop3)端口的數(shù)據(jù)包進(jìn)入,如果不加這規(guī)則,就只能通過web頁面來收信(無法用OE或Foxmail等來收)
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
(4) 允許25(smtp)端口的數(shù)據(jù)包進(jìn)入,如果不加這規(guī)則,就只能通過web頁面來發(fā)信(無法用OE或Foxmail等來發(fā))
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
(5)允許21(ftp)端口的數(shù)據(jù)包進(jìn)入(傳數(shù)據(jù))
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
(6)允許20(ftp)端口的數(shù)據(jù)包進(jìn)入(執(zhí)行ftp命令,如dir等)
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
(7)允許53(dns)端口的數(shù)據(jù)包進(jìn)入(tcp)
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
(8)允許53(dns)端口的數(shù)據(jù)包進(jìn)入(udp)
iptables -A INPUT -p udp --dport 53 -j ACCEPT
(9)允許ICMP包通過,也就是允許ping
iptables -A INPUT -p icmp -j ACCEPT
(10)利用iptables 對連接狀態(tài)的支持
?????? iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(11)把INPUT鏈的默認(rèn)規(guī)則設(shè)置為DROP
?????? iptables -P INPUT DROP
?
6.2 查看端口信息
[root@singledb ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination???????
ACCEPT???? tcp? --? 0.0.0.0/0??????????? 0.0.0.0/0?????????? tcp dpt:22
ACCEPT???? tcp? --? 0.0.0.0/0??????????? 0.0.0.0/0?????????? tcp dpt:2222
?
?????? 端口的信息添加到相信的鏈之后,可以查看到,如之前添加的22端口。 就在INPUT鏈。
?
6.3? 刪除端口信息
[root@singledb ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
[root@singledb ~]# iptables -D INPUT -p tcp --dport 2222 -j ACCEPT
[root@singledb ~]# iptables -L -n
?
刪除后,我們在次查看,INPUT 鏈中就沒有了相關(guān)的信息。
?
7、iptables限制IP訪問特定端口
7.1允許某個IP (192.168.6.100)的機(jī)器進(jìn)行SSH連接:
[root@singledb ~]# iptables -A INPUT -s 192.168.6.100 -p tcp --dport 22 -j ACCEPT
[root@singledb ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target??????? prot opt? source?????????????? destination???????
ACCEPT???? tcp? --? 192.168.6.100??????? 0.0.0.0/0?????????? tcp dpt:22
?
7.2 允許某一段的IP 訪問SSH
[root@singledb ~]# iptables -D INPUT -s 192.168.6.100 -p tcp --dport 22 -j ACCEPT?????
[root@singledb ~]# iptables -A INPUT -s 192.168.6.0/24 -p tcp --dport 22 -j ACCEPT??
[root@singledb ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination???????
ACCEPT???? tcp? --? 192.168.6.0/24?????? 0.0.0.0/0?????????? tcp dpt:22
?????? 因為之前添加過這個端口,所以先刪除了22的配置,然后添加的,這里我們使用的192.168.6.0/24. 它表示的是192.168.6.1-192.168.6.254的IP都可以訪問。這里的24 代表網(wǎng)絡(luò)號。 具體參考:
?????? IP(Internet Protocal) 地址 說明
?????? http://blog.csdn.net/tianlesoftware/archive/2011/02/25/6207289.aspx
?
7.3 限制某一IP 訪問SSH
[root@singledb ~]# iptables -A INPUT -p tcp -s ! 192.168.6.100 --dport 22 -j ACCEPT? --注意!號有個空格
[root@singledb ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target???? prot opt source?????????????? destination???????
ACCEPT???? tcp? --? 192.168.6.0/24?????? 0.0.0.0/0?????????? tcp dpt:22
?
8、配置一個NAT表放火墻
8.1、查看本機(jī)關(guān)于NAT的設(shè)置情況
[root@singledb ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target???? prot opt source?????????????? destination???????
?
Chain POSTROUTING (policy ACCEPT)
target???? prot opt source?????????????? destination???????
MASQUERADE? all? --? 192.168.122.0/24??? !192.168.122.0/24??
MASQUERADE? all? --? 192.168.122.0/24??? !192.168.122.0/24??
?
Chain OUTPUT (policy ACCEPT)
target???? prot opt source?????????????? destination????
?
這些信息也可以在iptables的配置文件(/etc/sysconfig/iptables)里直接查看。
?
8.2 清除NET表的信息:
[root@singledb ~]#iptables -F -t nat
[root@singledb ~]# iptables -X -t nat
[root@singledb ~]#iptables -Z -t nat
?
8.3、添加規(guī)則
(1)防止外網(wǎng)用內(nèi)網(wǎng)IP欺騙
[root@singledb ~]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@singledb ~]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@singledb ~]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
?
(2)禁止與211.101.46.253的所有連接
[root@singledb ~]# iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
?
(3)禁用FTP(21)端口
[root@singledb ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
這樣寫范圍太大了,我們可以更精確的定義.
[root@singledb ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP
?????? 這樣只禁用211.101.46.253地址的FTP連接,其他連接還可以.如web(80端口)連接.
?
(4)drop非法連接
[root@singledb ~]# iptables -A INPUT -m state --state INVALID -j DROP
[root@singledb ~]#iptables -A OUTPUT -m state --state INVALID -j DROP
[root@singledb ~]# iptables-A FORWARD -m state --state INVALID -j DROP
?
(5)允許所有已經(jīng)建立的和相關(guān)的連接
[root@singledb ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@singledb ~]#iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
?
9. 保存
[root@singledb ~]# service iptables save
Saving firewall rules to /etc/sysconfig/iptables:????????? [? OK? ]
[root@singledb ~]# service iptables restart
Flushing firewall rules:?????????????????????????????????? [? OK? ]
Setting chains to policy ACCEPT: filter nat??????????????? [? OK? ]
Unloading iptables modules:??????????????????????????????? [? OK? ]
Applying iptables firewall rules:????????????????????????? [? OK? ]
Loading additional iptables modules: ip_conntrack_netbios_n[? OK? ]
[root@singledb ~]#
轉(zhuǎn)載于:https://www.cnblogs.com/wanhl/archive/2012/10/24/2737096.html
總結(jié)
以上是生活随笔為你收集整理的Linux iptables 防火墙相关命令介绍及使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (未写)tyvj-1333- Coder
- 下一篇: 开始复习下sql,常用SQL语句示例(一