iptables之nat轉發和建構簡單的DMZ防火牆
一.NAT
iptables 中的nat表:
nat:Network Address Translation:NAT不僅完美地解決了IP位址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隐藏并保護網絡内部的計算機.
nat有三種實作方式:SNAT,DNAT和端口多路複用OverLoad
在了解Nat工作原理之前先了解一下私網IP和公網IP。私網IP位址是指區域網路内部網絡或主機的IP位址,公網位址是指在因特爾網上全球唯一的IP位址。
私有網絡有三個IP 位址塊:
A類:10.0.0.0 ~ 10.255.255.255
B類:172.16.0.0 ~ 172.31.255.255
C類:192.168.0.0 ~ 192.168.255.255
私有網絡不會在網絡中配置設定,可以在公司,校園,企業内部自由使用。NAT最初的設計就是用于實作讓私有網絡位址通路公網的能力,後擴充到實作任意兩個網絡間進行通信時的位址轉換應用。
nat 基本工作原理:
1.SNAT的實作原理
如圖:

(1).内網主機172.16.99.1向外網伺服器1.2.3.4發送請求,通過NAT裝置(可以是一個Linux主機,通過iptables來實作NAT。)。
(2).當内網主機請求網際網路上的一台伺服器時,經過NAT裝置,NAT經過檢視請求封包的頭部資訊發現不是本地的,而是發往外網的,就會在路由之後将源IP位址字段的私有位址172.16.99.1轉換成一個可在Internet選路的公網位址12.1.1.1 。将該封包發往外網伺服器,同時NAT裝置的網絡位址轉換表中記錄這一映射。
(3)外網伺服器給内網主機發送應答封包,開始時封包的目的位址為12.1.1.1源位址為1.2.3.4。到達NAT裝置之後,NAT裝置檢視封包的頭部資訊,根據目前的網絡位址轉換表中的記錄,用原來請求的内網私有位址172.16.99.1代替初始的目的位址12.1.1.1。
上述過程對外網伺服器來說,本地主機時隐藏的,進而有一定的安全性。這一過程是SNAT的實作過程,他是現在iptables的NAT表中的POSTROUTING鍊中。因為要經過本地路由之後,檢視不是本地的請求才進行NAT轉發的。
2.DNAT原理:
(1)外網主機通路内網一伺服器,經過NAT裝置。
(2)當外網主機(1.2.3.4)通路内網伺服器時,通路的肯定是能夠外網識别的一個或多個公網IP(12.1.1.1)。
(3)當外網使用者通路内部網絡伺服器的資料報經過NAT裝置時,NAT裝置根據封包的目的位址,将通路内部伺服器的請求封包的目的位址和端口轉換為内部伺服器的私有IP位址和端口号(這些操作是在内部路由之前,不然NAT會認為請求自己的,轉到自己使用者空間,是以DNAT使用在PREROUTING鍊上)。将請求發送到内部伺服器。
(4)當内部伺服器回應該封包時,NAT裝置再根據已有的位址映射關系将回應封包的源IP位址和端口号轉換成公網IP位址和端口号。
二.建構簡單的DMZ
使用iptables建構DMZ防火牆:一般而言一個公司或企業的内部網絡可以劃分為兩個部分,一個是内部伺服器所在區域DMZ,向外部提供服務,另一部分是公司内部通訊使用的網絡。而公司内部向外提供服務的網絡容易受到攻擊。這是一個危險的子網環境,要做到保護這個子網環境又要做到向外提供服務。往往這連個區域要獨立分開,即使DMZ區受到攻擊,通訊子網仍然要在防火牆的保護之下。
實驗環境(如圖):
簡單介紹,通過防火牆連接配接的有連接配接外網的eth0(IP:172.16.99.1 充當公網位址,以便實驗使用) ,連接配接的内網主機的通信區eth1(IP:192.168.1.1),連接配接内網服務區DMZ eth2(IP:10.20.99.1)。
一般有以下情況
1. 能使内網主機通路外網,能通路DMZ區中的伺服器;
2. 使外網不能通路内網主機,能通路DNZ區中的伺服器;
3. 禁止DMZ通路内網。
實驗步驟:
1.在Linux防火牆上的一些配置:
添加三塊網卡裝置:
路由:
2.在内網通訊區網絡的設定:把該區域的網絡的網關都指向192.168.2.1,DNS伺服器是172.16.99.1。
在實驗中我們使用一台Linux虛拟機充當内網中一台主機,其IP為192.168.2.2,網關為:192.168.2.1,子網路遮罩為:255.255.255.0,DNS為172.16.99.1
3.在内網服務區DMZ網絡的設定,把該區域的網絡的網關都指向10.20.99.1,DNS伺服器是172.16.99.1
在實驗室使用一台Linux虛拟機充當WEB伺服器,IP為10.20.99.2 網關為10.20.99.1,子網路遮罩為:255.255.0.0
又有一台ftp伺服器,IP:10.20.99.3,子網路遮罩為:255.255.0.0,網關為:10.20.99.1
編寫防火牆規則腳本實作相應的功能:
測試結果:
1.内網一主機(IP:192.168.2.2)通路内網伺服器:(分别通過公網IP和私網IP通路):
2.内網一主機(IP:192.168.2.2)通路外網:
2.外網通路内網Web伺服器和ftp伺服器,不能通路内網一主機(ip:192.168.2.2)
2.我們在内網主機(192.168.2.2)上開啟vsftp伺服器,檢視外網能否通路(肯定不能):
此環境的另外一隻實作方法:
另一種防火牆規則的編寫:就是将FORWARD鍊的預設政策改為ACCEPT,詳細政策如下:
#!/bin/bash
#####This is Simple DMZ iptables #######
##### Empty firewall #####
iptables -F
iptables -t nat -F
iptables -X
##### Modify the default policy #####
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT DROP
##### Add module and open routing forwarding ####
modprobe nf_conntrack_ftp
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -I INPUT -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -I OUTPUT -s 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
####開放53端口#####
iptables -A INPUT -d 172.16.99.1 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.99.1 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.99.1 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -d 172.16.99.1 -p udp --sport 53 -j ACCEPT
##### 允許内網主機通路外網,但不允許外網通路内網主機 ####
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j SNAT --to-source 172.16.99.1
####禁止外網通路内網的主機#######
iptables -A FORWARD -i eth0 -o eth1 -m state --state NEW -j DROP
##### 允許内網主機通路内網DMZ區域的伺服器,可以通過公網IP通路也可以通過内部私網通路,DMZ區域的伺服器不允許通路内網主機 ####
iptables -t nat -A PREROUTING -d 172.16.99.1 -i eth1 -p tcp --dport 80 -j DNAT --to-destination 10.20.99.2
iptables -t nat -A PREROUTING -d 172.16.99.1 -i eth1 -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to-destination 10.20.99.3
####禁止内網伺服器通路内網主機####
iptables -A FORWARD -i eth2 -o eth1 -m state --state NEW -j DROP
####允許外網通過公網IP通路DMZ區域中Web服務和FTP服務#####
iptables -t nat -I PREROUTING -d 172.16.99.1 -i eth0 -m state --state NEW,ESTABLISHED,RELATED -j DNAT --to-destination 10.20.99.3
iptables -t nat -I PREROUTING -d 172.16.99.1 -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.20.99.2
####禁止伺服器通路外網,禁止内部伺服器向外發送請求####
iptables -A FORWARD -i eth2 -o eth0 -m state --state NEW -j DROP