對(duì)iptables配置命令的不解!
2005-3-11 09:35 海之藍(lán)
對(duì)iptables配置命令的不解!
假設(shè)網(wǎng)絡(luò)環(huán)境如下:某一單位,租用DDN專線上網(wǎng),網(wǎng)絡(luò)拓?fù)淙缦拢?br>
+--------------+
| 內(nèi)部網(wǎng)段 | eth1+--------+eth0 DDN
| +------------|firewall|<===============>;Internet
| 198.168.80.0 | +--------+
+--------------+
eth0: 198.199.37.254
eth1: 198.168.80.254
以上的IP地址都是Internet上真實(shí)的IP,故沒(méi)有用到IP欺騙。并且,我們假設(shè)在內(nèi)部網(wǎng)中存在以下服務(wù)器:
www服務(wù)器:www.yourdomain.com 198.168.80.11
ftp服務(wù)器:ftp.yourdomain.com 198.168.80.12
email服務(wù)器:mail.yourdomain.com 198.168.80.13
[quote]############################Define FTP packets#####################################
#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT
#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
允許Intranet客戶采用消極模式訪問(wèn)Internet的FTP服務(wù)器[/quote]
對(duì)于上面這句命令我理解不是很清楚,我覺得這個(gè)命令是允許來(lái)自任何IP的FTP數(shù)據(jù)流都能通過(guò)eth0到內(nèi)網(wǎng)阿.和上面解釋的理解不同!!!
[quote]#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
說(shuō)明:對(duì)不管來(lái)自哪里的icmp包都進(jìn)行限制,允許每秒通過(guò)一個(gè)包,該限制觸發(fā)的條件是10個(gè)包。[/quote]
我client ping的時(shí)候,連續(xù)ping了10個(gè)包還是一直在 ping,我換成1/m,1/h還是在ping
難道觸發(fā)條件是同時(shí)收到10個(gè)包才能觸發(fā)嗎?
2005-3-11 09:37 海之藍(lán)
對(duì)iptables配置命令的不解!
我要怎么樣才能觸發(fā)這個(gè)條件呢?
2005-3-11 09:45 platinum
對(duì)iptables配置命令的不解!
[code]
############################Define FTP packets#####################################
#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT
#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
允許Intranet客戶采用消極模式訪問(wèn)Internet的FTP服務(wù)器
[/code]
單從這兩句,看不出什么來(lái),因?yàn)槲也恢勒麄€(gè)FORWARD鏈的全部?jī)?nèi)容
假設(shè)他的FORWARD默認(rèn)規(guī)則是ACCEPT,而鏈里面就這兩個(gè)策略,那么他的策略就如同虛設(shè)
要上下聯(lián)系看
[code]
#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
說(shuō)明:對(duì)不管來(lái)自哪里的icmp包都進(jìn)行限制,允許每秒通過(guò)一個(gè)包,該限制觸發(fā)的條件是10個(gè)包。
[/code]
burst是一個(gè)并發(fā)量
當(dāng)你寫的規(guī)則的并發(fā)量達(dá)到burst規(guī)定的值以后,limit開始生效,按照l(shuí)imit縮要求的速率開始放行
2005-3-11 10:23 海之藍(lán)
對(duì)iptables配置命令的不解!
文章全部?jī)?nèi)容
[quote]iptables使用實(shí)例
首先讓我們看一下服務(wù)器/客戶機(jī)的交互原理。服務(wù)器提供某特定功能的服務(wù)總是由特定的后臺(tái)程序提供的。在TCP/IP網(wǎng)絡(luò)中,常常把這個(gè)特定的服務(wù)綁定到特定的TCP或UDP端口。之后,該后臺(tái)程序就不斷地監(jiān)聽(listen)該端口,一旦接收到符合條件的客戶端請(qǐng)求,該服務(wù)進(jìn)行TCP握手后就同客戶端建立一個(gè)連接,響應(yīng)客戶請(qǐng)求。與此同時(shí),再產(chǎn)生一個(gè)該綁定的拷貝,繼續(xù)監(jiān)聽客戶端的請(qǐng)求。
舉一個(gè)具體的例子:假設(shè)網(wǎng)絡(luò)中有一臺(tái)服務(wù)器A(IP地址為1.1.1.1)提供WWW服務(wù),另有客戶機(jī)B(2.2.2.2)、C(3.3.3.3)。首先,服務(wù)器A運(yùn)行提供WWW服務(wù)的后臺(tái)程序(比如Apache)并且把該服務(wù)綁定到端口80,也就是說(shuō),在端口80進(jìn)行監(jiān)聽。當(dāng)B發(fā)起一個(gè)連接請(qǐng)求時(shí),B將打開一個(gè)大于1024的連接端口(1024內(nèi)為已定義端口),假設(shè)為1037。A在接收到請(qǐng)求后,用80端口與B建立連接以響應(yīng)B的請(qǐng)求,同時(shí)產(chǎn)生一個(gè)80端口綁定的拷貝,繼續(xù)監(jiān)聽客戶端的請(qǐng)求。假如A又接收到C的連接請(qǐng)求(設(shè)連接請(qǐng)求端口為1071),則A在與C建立連接的同時(shí)又產(chǎn)生一個(gè)80端口綁定的拷貝繼續(xù)監(jiān)聽客戶端的請(qǐng)求。如下所示,因?yàn)橄到y(tǒng)是以源地址、源端口、目的地址、目的端口來(lái)標(biāo)識(shí)一個(gè)連接的,所以在這里每個(gè)連接都是唯一的。
服務(wù)器 客戶端
連接1:a.b.c.1:80 <=>; a.b.c.4:1037
連接2:a.b.c.1:80 <=>; a.b.c.7:1071
每一種特定的服務(wù)都有自己特定的端口,一般說(shuō)來(lái)小于1024的端口多為保留端口,或者說(shuō)是已定義端口,低端口分配給眾所周知的服務(wù)(如WWW、FTP等等),從512到1024的端口通常保留給特殊的UNIX TCP/IP應(yīng)用程序,具體情況請(qǐng)參考/etc/services文件或RFC1700。
假設(shè)網(wǎng)絡(luò)環(huán)境如下:某一單位,租用DDN專線上網(wǎng),網(wǎng)絡(luò)拓?fù)淙缦拢?br>
+--------------+
| 內(nèi)部網(wǎng)段 | eth1+--------+eth0 DDN
| +------------|firewall|<===============>;Internet
| 198.168.80.0 | +--------+
+--------------+
eth0: 198.199.37.254
eth1: 198.168.80.254
以上的IP地址都是Internet上真實(shí)的IP,故沒(méi)有用到IP欺騙。并且,我們假設(shè)在內(nèi)部網(wǎng)中存在以下服務(wù)器:
www服務(wù)器:www.yourdomain.com 198.168.80.11
ftp服務(wù)器:ftp.yourdomain.com 198.168.80.12
email服務(wù)器:mail.yourdomain.com 198.168.80.13
下面我們將用iptables一步一步地來(lái)建立我們的包過(guò)濾防火墻,需要說(shuō)明的是,在這個(gè)例子中,我們主要是對(duì)內(nèi)部的各種服務(wù)器提供保護(hù)。
1. 在/etc/rc.d/目錄下用touch命令建立firewall文件,執(zhí)行chmod u+x firewll以更改文件屬性 ,編輯/etc/rc.d/rc.local文件,在末尾加上 /etc/rc.d/firewall 以確保開機(jī)時(shí)能自動(dòng)執(zhí)行該腳本。
2. 刷新所有的鏈的規(guī)則
#!/bin/sh
echo "Starting iptables rules..."
#Refresh all chains
/sbin/iptables -F
3. 我們將首先禁止轉(zhuǎn)發(fā)任何包,然后再一步步設(shè)置允許通過(guò)的包。
所以首先設(shè)置防火墻FORWARD鏈的策略為DROP:
/sbin/iptables -P FORWARD DROP
4.設(shè)置關(guān)于服務(wù)器的包過(guò)慮規(guī)則:
在這里需要注意的是,服務(wù)器/客戶機(jī)交互是有來(lái)有往的,也就是說(shuō)是雙向的,所以我們不僅僅要設(shè)置數(shù)據(jù)包出去的規(guī)則,還要設(shè)置數(shù)據(jù)包返回的規(guī)則,我們先建立針對(duì)來(lái)自Internet數(shù)據(jù)包的過(guò)慮規(guī)則。
WWW服務(wù):服務(wù)端口為80,采用tcp或udp協(xié)議。規(guī)則為:eth0=>;允許目的為內(nèi)部網(wǎng)WWW服務(wù)器的包。
###########################Define HTTP packets####################################
#Allow www request packets from Internet clients to www servers
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT
FTP服務(wù):FTP服務(wù)有點(diǎn)特別,因?yàn)樾枰獌蓚€(gè)端口,因?yàn)镕TP有命令通道和數(shù)據(jù)通道。其中命令端口為21,數(shù)據(jù)端口為20,并且有主動(dòng)和消極兩種服務(wù)模式,其消極模式連接過(guò)程為:FTP客戶端首先向FTP服務(wù)器發(fā)起連接請(qǐng)求,三步握手后建立命令通道,然后由FTP服務(wù)器請(qǐng)求建立數(shù)據(jù)通道,成功后開始傳輸數(shù)據(jù),現(xiàn)在大多數(shù)FTP客戶端均支持消極模式,因?yàn)檫@種模式可以提高安全性。FTP服務(wù)采用tcp協(xié)議。規(guī)則為:eth0=>;僅允許目的為內(nèi)部網(wǎng)ftp服務(wù)器的包。
############################Define FTP packets#####################################
#Allow ftp request packets from Internet clients to Intranet ftp server
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.12 --dport ftp -i eth0 -j ACCEPT
EMAIL服務(wù):包含兩個(gè)協(xié)議,一是smtp,一是pop3。出于安全性考慮,通常只提供對(duì)內(nèi)的pop3服務(wù),所以在這里我們只考慮針對(duì)smtp的安全性問(wèn)題。smtp端口為21,采用tcp協(xié)議。eth0=>;僅允許目的為email服務(wù)器的smtp請(qǐng)求。
###########################Define smtp packets####################################
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -i eth0 -j ACCEPT
5. 設(shè)置針對(duì)Intranet客戶的過(guò)慮規(guī)則:
在本例中我們的防火墻位于網(wǎng)關(guān)的位置,所以我們主要是防止來(lái)自Internet的攻擊,不能防止來(lái)自Intranet的攻擊。假如我們的服務(wù)器都是基于linux的,也可以在每一部服務(wù)器上設(shè)置相關(guān)的過(guò)慮規(guī)則來(lái)防止來(lái)自Intranet的攻擊。對(duì)于Internet對(duì)Intranet客戶的返回包,我們定義如下規(guī)則。
#############Define packets from Internet server to Intranet#######################
/sbin/iptables -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 198.168.80.0/24 -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d 198.168.80.0/24 ! -syn -i eth0 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
說(shuō)明:第一條允許Intranet客戶采用消極模式訪問(wèn)Internet的FTP服務(wù)器;第二條接收來(lái)自Internet的非連接請(qǐng)求tcp包;最后一條接收所有udp包,主要是針對(duì)oicq等使用udp的服務(wù)。
6. 接受來(lái)自整個(gè)Intranet的數(shù)據(jù)包過(guò)慮,我們定義如下規(guī)則:
#############Define packets from Internet server to Intranet server###############
/sbin/iptables -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT
7. 處理ip碎片
我們接受所有的ip碎片,但采用limit匹配擴(kuò)展對(duì)其單位時(shí)間可以通過(guò)的ip碎片數(shù)量進(jìn)行限制,以防止ip碎片攻擊。
#################################Define fregment rule##################################
/sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
說(shuō)明:對(duì)不管來(lái)自哪里的ip碎片都進(jìn)行限制,允許每秒通過(guò)100個(gè)ip碎片,該限制觸發(fā)的條件是100個(gè)ip碎片。
8. 設(shè)置icmp包過(guò)濾
icmp包通常用于網(wǎng)絡(luò)測(cè)試等,故允許所有的icmp包通過(guò)。但是黑客常常采用icmp進(jìn)行攻擊,如ping of death等,所以我們采用limit匹配擴(kuò)展加以限制:
#################################Define icmp rule##################################
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
說(shuō)明:對(duì)不管來(lái)自哪里的icmp包都進(jìn)行限制,允許每秒通過(guò)一個(gè)包,該限制觸發(fā)的條件是10個(gè)包。[/quote]
還有我剛才實(shí)踐limit-burst,我用
[quote]iptables -A FORWARD -p icmp -m limit --limit 12/m --limit-burst 5 -j ACCEPT
iptables -P FORWARD DROP
[/quote]
當(dāng)我在2個(gè)網(wǎng)段轉(zhuǎn)發(fā)的時(shí)候只能發(fā)出前2個(gè)包,后面的包全部丟失
而當(dāng)在INPUT連使用的時(shí)候就能可以.
[quote]iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 5 -j ACCEPT
iptables -P INPUT DROP[/quote]
前5個(gè)包正?;貞?yīng),以后每個(gè)包隔10秒收到一個(gè)包.
難道是我大命令些錯(cuò)了嗎?
LINUX的防火墻規(guī)則不是由上而下的判斷嗎?
2005-3-11 10:33 platinum
對(duì)iptables配置命令的不解!
你忘記了TCP協(xié)議的狀態(tài)問(wèn)題
記得我跟你說(shuō)過(guò)的-m state模塊嗎
記得里面的ESTABLISHED和RELATED狀態(tài)嗎?
再去想想
2005-3-11 10:43 海之藍(lán)
對(duì)iptables配置命令的不解!
我記得,FTP的問(wèn)題先不討論
你能告訴我FROWARD連轉(zhuǎn)發(fā)的時(shí)候limit-burst為什么不起作用 了?
你看我上個(gè) 帖子最好寫的東西
2005-3-11 10:53 platinum
對(duì)iptables配置命令的不解!
什么是burst?
burst是什么意思?
怎么才叫“并發(fā)”
你一個(gè)人ping,默認(rèn)ping命令是一秒一次,你如何達(dá)到5的并發(fā)?
你再做一個(gè)試驗(yàn),多開一個(gè)cmd,也同樣去ping
如果2個(gè)不行開3個(gè),3個(gè)不行開4個(gè),看看是什么結(jié)果?
2005-3-11 11:27 海之藍(lán)
對(duì)iptables配置命令的不解!
我看了iptables-tutorial 1-1-19里面的原文是
"6.4.3.1. Limit match
[code]這個(gè)匹配操作必須由-m limit明確指定才能使用。有了它的幫助,就可以對(duì)指定 的規(guī)則的日志數(shù)量加以限制,以免你被信息的洪流淹沒(méi)哦。比如,你可以事先設(shè)定一個(gè)限定值,當(dāng)符合條件 的包的數(shù)量不超過(guò)它時(shí),就記錄;超過(guò)了,就不記錄了。我們可以控制某條規(guī)則在一段時(shí)間內(nèi)的匹配次數(shù) (也就是可以匹配的包的數(shù)量),這樣就能夠減少DoS syn flood攻擊的影響。這 是它的主要作用,當(dāng)然,還有很多其他作用(譯者注:比如,對(duì)于某些不常用的服務(wù)可以限制連接數(shù)量,以 免影響其他服務(wù))。limit match也可以用英文感嘆號(hào)取反,如:-m limit ! --limit 5/s表示在數(shù)量超過(guò)限定值后,所有的包都會(huì)被匹配。
(譯者注:為了更好地理解這個(gè)匹配操作,我們通過(guò)一個(gè)比喻來(lái)解釋一下。原文也做了類似地比喻,但 我覺得對(duì)于初學(xué)者不易理解,故未采用。)limit match的工作方式就像一個(gè)單位大門口的保安,當(dāng)有人要 進(jìn)入時(shí),需要找他辦理通行證。早上上班時(shí),保安手里有一定數(shù)量的通行證,來(lái)一個(gè)人,就簽發(fā)一個(gè),當(dāng)通 行證用完后,再來(lái)人就進(jìn)不去了,但他們不會(huì)等,而是到別的地方去(在iptables里,這相當(dāng)于一個(gè)包不符 合某條規(guī)則,就會(huì)由后面的規(guī)則來(lái)處理,如果都不符合,就由缺省的策略處理)。但有個(gè)規(guī)定,每隔一段時(shí) 間保安就要簽發(fā)一個(gè)新的通行證。這樣,后面來(lái)的人如果恰巧趕上,也就可以進(jìn)去了。如果沒(méi)有人來(lái),那通 行證就保留下來(lái),以備來(lái)的人用。如果一直沒(méi)人來(lái),可用的通行證的數(shù)量就增加了,但不是無(wú)限增大的,最 多也就是剛開始時(shí)保安手里有的那個(gè)數(shù)量。也就是說(shuō),剛開始時(shí),通行證的數(shù)量是有限的,但每隔一段時(shí)間 就有新的通行證可用。limit match有兩個(gè)參數(shù)就對(duì)應(yīng)這種情況,--limit-burst指 定剛開始時(shí)有多少通行證可用,--limit指定要隔多長(zhǎng)時(shí)間才能簽發(fā)一個(gè)新的通行 證。要注意的是,我這里強(qiáng)調(diào)的是“簽發(fā)一個(gè)新的通行證”,這是以iptables的角度考慮的。在你自己寫規(guī) 則時(shí),就要從這個(gè)角度考慮。比如,你指定了--limit 3/minute --limit-burst 5 ,意思是開始時(shí)有5個(gè)通行證,用完之后每20秒增加一個(gè)(這就是從iptables的角度看的,要是以用戶 的角度看,說(shuō)法就是每一分鐘增加三個(gè)或者每分鐘只能過(guò)三個(gè))。你要是想每20分鐘過(guò)一個(gè),只能寫成--limit 3/hour --limit-burst 5,也就是說(shuō)你要把時(shí)間單位湊成整的。 "[/code]
burst并不是同時(shí)收到5個(gè)包才觸發(fā)的,具體上面說(shuō)的比較清楚.
我現(xiàn)在無(wú)法理解的就是在FORWARD連轉(zhuǎn)發(fā)的時(shí)候limit-burst為什么不起作用 了
我也用你大方法同時(shí)開3,4個(gè)CMD還是不行.
2005-3-11 11:41 platinum
對(duì)iptables配置命令的不解!
可以想成一個(gè)“桶”
桶滿了,水就溢出來(lái),limit開始生效
我不太會(huì)用自己的話解釋清楚:)
你可以ping 210.51.184.198,看看這個(gè)效果
2005-3-11 11:51 海之藍(lán)
對(duì)iptables配置命令的不解!
我剛才又實(shí)驗(yàn)了一下,終于知道為什么了
假設(shè)主機(jī)A:172.168.0.2
主機(jī)B:192.168.0.2
因?yàn)镕ORWARD連比較特殊,當(dāng)主機(jī)A PING 主機(jī)B的時(shí)候,
根據(jù)PING的工作狀態(tài),A發(fā)送給B,B就要返回一個(gè)數(shù)據(jù)包給A,實(shí)際上FORWARD轉(zhuǎn)發(fā)了2次,且就需要2秒的時(shí)間.
所以當(dāng)你設(shè)limit的值超過(guò)1/s,2邊主機(jī)無(wú)論怎么樣都無(wú)法PING通.
你可以分別用iptables -A FORWARD -p icmp -m limit --limit 2/s --limit-burst 2 -j ACCEPT
和iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 2 -j ACCEPT
實(shí)驗(yàn)一下就很清楚了.
2/S的2邊主機(jī)PING通不受阻礙.
1/S的2邊主機(jī)會(huì)在丟2個(gè)包大情況下在收到一個(gè)包.
前提是只由一個(gè)主機(jī)在PING,如果2個(gè)同時(shí)PING則轉(zhuǎn)發(fā)的更多.
2005-3-11 11:54 platinum
對(duì)iptables配置命令的不解!
恩,一般這種情況下,都是針對(duì)ICMP協(xié)議的狀態(tài)進(jìn)行限制的
比如,你可以這樣試試
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
2005-3-11 12:26 海之藍(lán)
對(duì)iptables配置命令的不解!
恩,我在試試試試