歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

用iptales實現包過濾型防火牆(二)

  四、 iptables使用實例 首先讓我們看一下服務器/客戶機的交互原理。服務器提供某特定功能的服務總是由特定的後台程序提供的。在TCP/IP網絡中,常常把這個特定的服務綁定到特定的TCP或UDP端口。之後,該後台程序就不斷地監聽(listen)該端口,一旦接收到符合條件的客戶端請求,該服務進行TCP握手後就同客戶端建立一個連接,響應客戶請求。與此同時,再產生一個該綁定的拷貝,繼續監聽客戶端的請求。 舉一個具體的例子:假設網絡中有一台服務器A(IP地址為1.1.1.1)提供WWW服務,另有客戶機B(2.2.2.2)、C (3.3.3.3)。首先,服務器A運行提供WWW服務的後台程序(比如Apache)並且把該服務綁定到端口80,也就是說,在端口80進行監聽。當B 發起一個連接請求時,B將打開一個大於1024的連接端口(1024內為已定義端口),假設為1037。A在接收到請求後,用80端口與B建立連接以響應 B的請求,同時產生一個80端口綁定的拷貝,繼續監聽客戶端的請求。假如A又接收到C的連接請求(設連接請求端口為1071),則A在與C建立連接的同時又產生一個80端口綁定的拷貝繼續監聽客戶端的請求。如下所示,因為系統是以源地址、源端口、目的地址、目的端口來標識一個連接的,所以在這裡每個連接都是唯一的。 服務器 客戶端 連接1:a.b.c.1:80 <=> a.b.c.4:1037 連接2:a.b.c.1:80 <=> a.b.c.7:1071 每一種特定的服務都有自己特定的端口,一般說來小於1024的端口多為保留端口,或者說是已定義端口,低端口分配給眾所周知的服務(如WWW、 FTP等等),從512到1024的端口通常保留給特殊的UNIX TCP/IP應用程序,具體情況請參考/etc/services文件或 RFC1700。 假設網絡環境如下:某一單位,租用DDN專線上網,網絡拓撲如下: +--------------+ 內部網段 eth1+--------+eth0 DDN +------------firewall<===============>Internet 198.168.80.0 +--------+ +--------------+ eth0: 198.199.37.254 eth1: 198.168.80.254 以上的IP地址都是Internet上真實的IP,故沒有用到IP欺騙。並且,我們假設在內部網中存在以下服務器: www服務器:www.yourdomain.com 198.168.80.11 ftp服務器:ftp.yourdomain.com 198.168.80.12 email服務器:mail.yourdomain.com 198.168.80.13 下面我們將用iptables一步一步地來建立我們的包過濾防火牆,需要說明的是,在這個例子中,我們主要是對內部的各種服務器提供保護。 1. 在/etc/rc.d/目錄下用toUCh命令建立firewall文件,執行chmod u+x firewll以更改文件屬性 ,編輯 /etc/rc.d/rc.local文件,在末尾加上 /etc/rc.d/firewall 以確保開機時能自動執行該腳本。 2. 刷新所有的鏈的規則 #!/bin/sh echo "Starting iptables rules..." #Refresh all chains /sbin/iptables -F 3. 我們將首先禁止轉發任何包,然後再一步步設置允許通過的包。 所以首先設置防火牆FORWARD鏈的策略為DROP: /sbin/iptables -P FORWARD DROP 4.設置關於服務器的包過濾規則: 在這裡需要注意的是,服務器/客戶機交互是有來有往的,也就是說是雙向的,所以我們不僅僅要設置數據包出去的規則,還要設置數據包返回的規則,我們先建立針對來自Internet數據包的過濾規則。 WWW服務:服務端口為80,采用tcp或udp協議。規則為:eth0=>允許目的為內部網WWW服務器的包。 ###########################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服務:FTP服務有點特別,因為需要兩個端口,因為FTP有命令通道和數據通道。其中命令端口為21,數據端口為20,並且有主動和消極兩種服務模式,其消極模式連接過程為:FTP客戶端首先向FTP服務器發起連接請求,三步握手後建立命令通道,然後由FTP服務器請求建立數據通道,成功後開始傳輸數據,現在大多數FTP客戶端均支持消極模式,因為這種模式可以提高安全性。FTP服務采用tcp協議。規則為:eth0=>僅允許目的為內部網ftp服務器的包。


############################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服務:包含兩個協議,一是smtp,一是pop3。出於安全性考慮,通常只提供對內的pop3服務,所以在這裡我們只考慮針對smtp的安全性問題。smtp端口為21,采用tcp協議。eth0=>僅允許目的為email服務器的smtp請求。 ###########################Define smtp packets#################################### /sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -i eth0 -j ACCEPT 5. 設置針對Intranet客戶的過濾規則: 在本例中我們的防火牆位於網關的位置,所以我們主要是防止來自Internet的攻擊,不能防止來自Intranet的攻擊。假如我們的服務器都是基於Linux的,也可以在每一部服務器上設置相關的過濾規則來防止來自Intranet的攻擊。對於Internet對Intranet客戶的返回包,我們定義如下規則。 #############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 說明:第一條允許Intranet客戶采用消極模式訪問Internet的FTP服務器;第二條接收來自Internet的非連接請求tcp包;最後一條接收所有udp包,主要是針對oicq等使用udp的服務。 6. 接受來自整個Intranet的數據包過濾,我們定義如下規則: #############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匹配擴展對其單位時間可以通過的ip碎片數量進行限制,以防止ip碎片攻擊。 #################################Define fregment rule################################## /sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT 說明:對不管來自哪裡的ip碎片都進行限制,允許每秒通過100個ip碎片,該限制觸發的條件是100個ip碎片。 8. 設置icmp包過濾 icmp包通常用於網絡測試等,故允許所有的icmp包通過。但是黑客常常采用icmp進行攻擊,如ping of death等,所以我們采用limit匹配擴展加以限制: #################################Define icmp rule################################## /sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT 說明:對不管來自哪裡的icmp包都進行限制,允許每秒通過一個包,該限制觸發的條件是10個包。 通過以上個步驟,我們建立了一個相對完整的防火牆。只對外開放了有限的幾個端口,同時提供了客戶對Internet的無縫訪問,並且對ip碎片攻擊和icmp的ping of death提供了有效的防護手段。以下是完整的腳本文件內容,希望通過這個實例能是對iptables的用法有所了解: #!/bin/sh echo "Starting iptables rules..." #Refresh all chains /sbin/iptables -F ###########################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 ############################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 smtp packets#################################### /sbin/iptables -A FORWARD -p tcp -d 198.168.80.13 --dport smtp -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 /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 #############Define packets from Intranet to Internet############### /sbin/iptables -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT #################################Define fregment rule################################## /sbin/iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT #################################Define icmp rule################################## /sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT 五、 iptables與ipchains的區別   ·iptables的缺省鏈的名稱從小寫換成大寫,並且意義不再相同:INPUT和OUTPUT分別放置對目的地址是本機以及本機發出的數據包的過濾規則。   ·-i選項現在只代表輸入網絡接口,輸入網絡接口則使用-o選項。   ·TCP和UDP端口現在需要用--source-port或--sport(或--destination-port/--dport)選項拼寫出來並且必須置於"-p tcp"或"-p udp"選項之後,因為它們分別是載入TCP和UDP擴展的。   ·以前TCP的"-y"標志現在改為"--syn",並且必須置於"-p tcp"之後。   ·原來的DENY目標最後改為了DROP。   ·可以在列表顯示單個鏈的同時將其清空。   ·可以在清空內建鏈的同時將策略計數器清零。   ·列表顯示鏈時可顯示計數器的當前瞬時值。   ·REJECT和LOG現在變成了擴展目標,即意味著它們成為獨立的內核模塊。   ·鏈名可以長達31個字符。   ·MASQ現在改為MASQUERADE,並且使用不同的語法。REDIRECT保留原名稱,但也改變了所使用的語法。



/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT 五、 iptables與ipchains的區別   ·iptables的缺省鏈的名稱從小寫換成大寫,並且意義不再相同:INPUT和OUTPUT分別放置對目的地址是本機以及本機發出的數據包的過濾規則。   ·-i選項現在只代表輸入網絡接口,輸入網絡接口則使用-o選項。   ·TCP和UDP端口現在需要用--source-port或--sport(或--destination-port/--dport)選項拼寫出來並且必須置於"-p tcp"或"-p udp"選項之後,因為它們分別是載入TCP和UDP擴展的。   ·以前TCP的"-y"標志現在改為"--syn",並且必須置於"-p tcp"之後。   ·原來的DENY目標最後改為了DROP。   ·可以在列表顯示單個鏈的同時將其清空。   ·可以在清空內建鏈的同時將策略計數器清零。   ·列表顯示鏈時可顯示計數器的當前瞬時值。   ·REJECT和LOG現在變成了擴展目標,即意味著它們成為獨立的內核模塊。   ·鏈名可以長達31個字符。   ·MASQ現在改為MASQUERADE,並且使用不同的語法。REDIRECT保留原名稱,但也改變了所使用的語法。



  ·可以在清空內建鏈的同時將策略計數器清零。   ·列表顯示鏈時可顯示計數器的當前瞬時值。   ·REJECT和LOG現在變成了擴展目標,即意味著它們成為獨立的內核模塊。   ·鏈名可以長達31個字符。   ·MASQ現在改為MASQUERADE,並且使用不同的語法。REDIRECT保留原名稱,但也改變了所使用的語法。



Copyright © Linux教程網 All Rights Reserved