一,、鏈的基本操作 1、清除所有的規(guī)則,。 1)清除預(yù)設(shè)表filter中所有規(guī)則鏈中的規(guī)則,。 # iptables -F 2)清除預(yù)設(shè)表filter中使用者自定鏈中的規(guī)則。 #iptables -X #iptables -Z 2、設(shè)置鏈的默認(rèn)策略,。一般有兩種方法,。 1)首先允許所有的包,然后再禁止有危險(xiǎn)的包通過(guò)放火墻,。 #iptables -P INPUT ACCEPT #iptables -P OUTPUT ACCEPT #iptables -P FORWARD ACCEPT 2)首先禁止所有的包,,然后根據(jù)需要的服務(wù)允許特定的包通過(guò)防火墻。 #iptables -P INPUT DROP #iptables -P OUTPUT DROP #iptables -P FORWARD DROP 3,、列出表/鏈中的所有規(guī)則,。默認(rèn)只列出filter表。 #iptables -L 4,、向鏈中添加規(guī)則,。下面的語(yǔ)句用于開(kāi)放網(wǎng)絡(luò)接口: #iptables -A INPUT -i lo -j ACCEPT #iptables -A OUTPUT -o lo -j ACCEPT #iptables -A INPUT -i eth0 -j ACEPT #iptables -A OUTPUT -o eth1 -j ACCEPT #iptables -A FORWARD -i eth1 -j ACCEPT #iptables -A FORWARD -0 eth1 -j ACCEPT 注意:由于本地進(jìn)程不會(huì)經(jīng)過(guò)FORWARD鏈,因此回環(huán)接口lo只在INPUT和OUTPUT兩個(gè)鏈上作用,。 5,、使用者自定義鏈。 #iptables -N custom #iptables -A custom -s 0/0 -d 0/0 -p icmp -j DROP #iptables -A INPUT -s 0/0 -d 0/0 -j DROP 二,、設(shè)置基本的規(guī)則匹配 1,、指定協(xié)議匹配。 1)匹配指定協(xié)議,。 #iptables -A INPUT -p tcp 2)匹配指定協(xié)議之外的所有協(xié)議,。 #iptables -A INPUT -p !tcp 2、指定地址匹配,。 1)指定匹配的主機(jī),。 #iptables -A INPUT -s 192.168.0.18 2)指定匹配的網(wǎng)絡(luò)。 #iptables -A INPUT -s 192.168.2.0/24 3)匹配指定主機(jī)之外的地址,。 #iptables -A FORWARD -s !192.168.0.19 4)匹配指定網(wǎng)絡(luò)之外的網(wǎng)絡(luò),。 #iptables -A FORWARD -s ! 192.168.3.0/24 3、指定網(wǎng)絡(luò)接口匹配,。 1)指定單一的網(wǎng)絡(luò)接口匹配,。 #iptables -A INPUT -i eth0 #iptables -A FORWARD -o eth0 2)指定同類(lèi)型的網(wǎng)絡(luò)接口匹配。 #iptables -A FORWARD -o ppp+ 4,、指定端口匹配,。 1)指定單一端口匹配。 #iptables -A INPUT -p tcp --sport www #iptables -A INPUT -p udp –dport 53 2)匹配指定端口之外的端口,。 #iptables -A INPUT -p tcp –dport !22 3)匹配端口范圍,。 #iptables -A INPUT -p tcp –sport 22:80 4)匹配ICMP端口和ICMP類(lèi)型。 #iptables -A INOUT -p icmp –icimp-type 8 5)指定ip碎片,。 每個(gè)網(wǎng)絡(luò)接口都有一個(gè)MTU(最大傳輸單元),,這個(gè)參數(shù)定義了可以通過(guò)的數(shù)據(jù)包的最大尺寸,。如果一個(gè)數(shù)據(jù)包大于這個(gè)參數(shù)值時(shí),系統(tǒng)會(huì)將其劃分成更小的數(shù)據(jù)包(稱(chēng)為ip碎片)來(lái)傳輸,,而接受方則對(duì)這些ip碎片再進(jìn)行重組以還原整個(gè)包,。這樣會(huì)導(dǎo)致一個(gè)問(wèn)題:當(dāng)系統(tǒng)將大數(shù)據(jù)包劃分成ip碎片傳輸時(shí),第一個(gè)碎片含有完整的包頭信息(IP+TCP,、UDP和ICMP),,但是后續(xù)的碎片只有包頭的部分信息(如源地址、目的地址),。因此,,檢查后面的ip碎片的頭部(象有TCP、UDP和ICMP一樣)是不可能的,。假如有這樣的一條規(guī)則: #iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 –dport 80 -j ACCEPT 并且這時(shí)的FORWARD的policy為DROP時(shí),,系統(tǒng)只會(huì)讓第一個(gè)ip碎片通過(guò),而余下的碎片因?yàn)榘^信息不完整而無(wú)法通過(guò),??梢酝ㄟ^(guò)—fragment/-f 選項(xiàng)來(lái)指定第二個(gè)及以后的ip碎片解決上述問(wèn)題。 #iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT 注意現(xiàn)在有許多進(jìn)行ip碎片攻擊的實(shí)例,,如DoS攻擊,,因此允許ip碎片通過(guò)是有安全隱患的,對(duì)于這一點(diǎn)可以采用iptables的匹配擴(kuò)展來(lái)進(jìn)行限制,。 三,、設(shè)置擴(kuò)展的規(guī)則匹配(舉例已忽略目標(biāo)動(dòng)作) 1、多端口匹配,。 1)匹配多個(gè)源端口,。 #iptables -A INPUT -p tcp -m multiport –sport 22,53,80,110 2)匹配多個(gè)目的端口。 #iptables -A INPUT -p tcp -m multiport –dpoort 22,53,80 3)匹配多端口(無(wú)論是源端口還是目的端口) #iptables -A INPUT -p tcp -m multiport –port 22,53,80,110 2,、指定TCP匹配擴(kuò)展 使用 –tcp-flags 選項(xiàng)可以根據(jù)tcp包的標(biāo)志位進(jìn)行過(guò)濾。 #iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN #iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK 上實(shí)例中第一個(gè)表示SYN,、ACK,、FIN的標(biāo)志都檢查,但是只有SYN匹配,。第二個(gè)表示ALL(SYN,,ACK,F(xiàn)IN,,RST,,URG,PSH)的標(biāo)志都檢查,,但是只有設(shè)置了SYN和ACK的匹配,。 #iptables -A FORWARD -p tcp --syn 選項(xiàng)—syn相當(dāng)于”--tcp-flags SYN,RST,ACK SYN”的簡(jiǎn)寫(xiě),。 3、limit速率匹配擴(kuò)展,。 1)指定單位時(shí)間內(nèi)允許通過(guò)的數(shù)據(jù)包個(gè)數(shù),,單位時(shí)間可以是/second、/minute,、/hour,、/day或使用第一個(gè)子母。 #iptables -A INPUT -m limit --limit 300/hour 2 )指定觸發(fā)事件的閥值,。 #iptables -A INPUT -m limit –limit-burst 10 用來(lái)比對(duì)一次同時(shí)涌入的封包是否超過(guò)10個(gè),,超過(guò)此上限的包將直接丟棄。 3)同時(shí)指定速率限制和觸發(fā)閥值,。 #iptables -A INPUT -p icmp -m limit –-limit 3/m –limit-burst 3 表示每分鐘允許的最大包數(shù)量為限制速率(本例為3)加上當(dāng)前的觸發(fā)閥值burst數(shù),。任何情況下,都可保證3個(gè)數(shù)據(jù)包通過(guò),,觸發(fā)閥值burst相當(dāng)于允許額外的包數(shù)量,。 4)基于狀態(tài)的匹配擴(kuò)展(連接跟蹤) 每個(gè)網(wǎng)絡(luò)連接包括以下信息:源地址、目標(biāo)地址,、源端口,、目的端口,稱(chēng)為套接字對(duì)(socket pairs),;協(xié)議類(lèi)型,、連接狀態(tài)(TCP協(xié)議) 和超時(shí)時(shí)間等。防火墻把這些信息稱(chēng)為狀態(tài)(stateful),。狀態(tài)包過(guò)濾防火墻能在內(nèi)存中維護(hù)一個(gè)跟蹤狀態(tài)的表,,比簡(jiǎn)單包過(guò)濾防火墻具有更大的安全性,命令格式如下: iptables -m state –-state [!]state [,state,state,state] 其中,,state表是一個(gè)逗號(hào)分割的列表,,用來(lái)指定連接狀態(tài),4種: >NEW: 該包想要開(kāi)始一個(gè)新的連接(重新連接或連接重定向) >RELATED:該包是屬于某個(gè)已經(jīng)建立的連接所建立的新連接,。舉例: FTP的數(shù)據(jù)傳輸連接和控制連接之間就是RELATED關(guān)系,。 >ESTABLISHED:該包屬于某個(gè)已經(jīng)建立的連接。 >INVALID:該包不匹配于任何連接,,通常這些包被DROP,。 例如: (1)在INPUT鏈添加一條規(guī)則,匹配已經(jīng)建立的連接或由已經(jīng)建立的連接所建立的新連接,。即匹配所有的TCP回應(yīng)包,。 #iptables -A INPUT -m state –state RELATED,ESTABLISHED (2)在INPUT鏈鏈添加一條規(guī)則,匹配所有從非eth0接口來(lái)的連接請(qǐng)求包,。 #iptables -A INPUT -m state -–state NEW -i !eth0 又如,,對(duì)于ftp連接可以使用下面的連接跟蹤: (1)被動(dòng)(Passive)ftp連接模式,。 #iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state –-state ESTABLISHED -j ACCEPT #iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state -–state ESTABLISHED,RELATED -j ACCEPT (2)主動(dòng)(Active)ftp連接模式 #iptables -A INNPUT -p tcp --sport 20 -m state –-state ESTABLISHED,RELATED -j ACCEPT #iptables -A OUTPUT -p tcp –OUTPUT -p tcp –dport 20 -m state --state ESTABLISHED -j ACCEPT 5)TOS匹配擴(kuò)展。 四,、設(shè)置目標(biāo)擴(kuò)展 目標(biāo)擴(kuò)展由內(nèi)核模塊組成,,而且iptables的一個(gè)可選擴(kuò)展提供了新的命令行選項(xiàng)。 有時(shí)連入互連網(wǎng)的時(shí)候網(wǎng)關(guān)是動(dòng)態(tài)的不確定的.如adsl上網(wǎng) iptables -t nat -A OUTPUT -s 192.168.0.0.1/24 -j MARSUERADE |
|
來(lái)自: lanyue211 > 《linux&ubuntu》