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