用iptables構建簡單DMZ防火牆
說明:一般被保護的內部網路可分成兩部分,一部分是內部通訊區,只允許內部使用者訪問,絕對禁止外部使用者訪問,另一部分是停火區DMZ,對外提供有條件的服務。前者是系統的核心子網,後者易受到外部的攻擊,是一個比較危險的子網環境。一方面要求嚴格保護內部子網,另一方面又要滿足DMZ對外提供服務的需要,因此,必須採用分別保護的策略,對上述兩個區域進行保護。兩個區域要儘量獨立,即使DMZ受到外部攻擊,內部子網仍處於防火牆的保護之下。
步驟1:環境構造
充當防火牆的機器是一臺支援iptables的Linux系統,實驗使用Centos6.5-i386裝有三塊網絡卡。
一臺有三塊網絡卡的Linux系統主機稱為NAT:(作為網路防火牆)
eth0 : inet addr:10.33.1.142 (連線外網)
eth1: inet addr:192.168.5.125(連線內網的DMZ區)
eth2: inet addr:172.16.10.7 (連線內網的終端)
根據實驗拓撲圖設定網路,使得主機NAT中eth0連上外網
內網中設定DMZ伺服器的網路引數,將閘道器指向NAT主機的eth1
內網一臺測試主機,閘道器指向NAT主機的eth2
步驟2:首先啟用路由的轉發功能
設定iptables規則,寫在shell指令碼中並儲存執行
步驟3測試:(1)確保DMZ已經啟動HTTP服務和FTP伺服器:
同時確保NAT主機上沒有提供httpd和vsftpd服務
(2)測試內網主機172.16.10.8能否連線外網:
(3)測試內網主機172.16.10.8能否訪問DMZ區中192.168.5.131的Web伺服器:
(4)驗證內網主機172.16.10.8能訪問DMZ中192.168.5.131的FTP伺服器:
(5)驗證外網不能訪問內網
(6)驗證外網能訪問DMZ中的FTP伺服器:
(7)驗證外網能訪問DMZ中的WEB伺服器:
(8)驗證DMZ不可訪問外網且不可訪問內網
附:iptables指令碼
#!/bin/bash
modprobe ip_nat_ftp
#把ip_nat_ftp模組載入核心,實現對nat,ftp的支援功能
modprobe ip_conntrack_ftp
#把ip_conntrack_ftp模組載入核心實現對ftp會話的跟蹤
iptables -F
iptables -F -t nat
iptables -F -t mangle
#以上3條分別清空filter,nat和mangle3張表
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#設定INPUT,OUTPUT 鏈的預設策略為DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#放行遠端連線,這裡為了方便使用X-shell遠端連線,非必要策略
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
#放行ping請求,方便測試網路是否連通
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eht0 -j SNAT --to-source 10.33.1.142
#內網需要自由地訪問外網。在這一策略中,防火牆需要進行源地址轉換。做SNAT,當位於內網網段172.16.0.0/16的客戶機訪問外網時,將其地址轉換為10.33.1.142
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j DNAT --to-destination 192.168.5.131
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 21 -j DNAT --to-destination 192.168.5.131
#內網可以訪問DMZ ,此策略是為了方便內網使用者使用和管理DMZ中的伺服器。
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#開放DMZ中ftp服務資料連線的被動傳輸模式
iptables -A FORWARD -i eth0 -d 172.16.0.0/16 -p tcp --syn -j DROP
#阻止外網主機直接以內網IP網段作為目標地址訪問內網,一是為了安全,二是為了體現本例的nat功能
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT --to-destination 192.168.5.131
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.5.131
#外網可以訪問DMZ ,DMZ中的伺服器本身就是要給外界提供服務的,所以外網必須可以訪問DMZ。同時,外#網訪問DMZ需要由防火牆完成對外地址到伺服器實際地址的轉換。
iptables -A FORWARD -i eth1 -o eth0 -m state --state NEW -j DROP
#DMZ不能訪問外網 此條策略也有例外,比如DMZ中放置郵件伺服器時,就需要訪問外網,否則將不能正常工作
iptables -A FORWARD -i eth1 -o eth2 -m state --state NEW -j DROP
#DMZ不能訪問內網 ,如果違背此策略,則當入侵者攻陷DMZ時,就可以進一步進攻到內#網的重要資料。