iptables配置指南
iptables是IP信息包過濾系統(tǒng),我們有必要知道iptables的配置過程!
一、數(shù)據(jù)包經(jīng)過防火墻的路徑
圖1比較完整地展示了一個數(shù)據(jù)包是如何經(jīng)過防火墻的,考慮到節(jié)省空間,該圖實(shí)際上包了三種情況:
來自外部,以防火墻(本機(jī))為目的地的包,在圖1中自上至下走左邊一條路徑。
由防火墻(本機(jī))產(chǎn)生的包,在圖1中從“本地進(jìn)程”開始,自上至下走左邊一條路徑
來自外部,目的地是其它主機(jī)的包,在圖1中自上至下走右邊一條路徑。

?
圖1
如果我們從上圖中略去比較少用的mangle表的圖示,就有圖2所顯示的更為清晰的路徑圖.

?
圖2
#p#
二、禁止端口的實(shí)例
禁止ssh端口
只允許在192.168.62.1上使用ssh遠(yuǎn)程登錄,從其它計(jì)算機(jī)上禁止使用ssh
#iptables -A INPUT -s 192.168.62.1 -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j DROP
禁止代理端口
#iptables -A INPUT -p tcp --dport 3128 -j REJECT
禁止icmp端口
除192.168.62.1外,禁止其它人ping我的主機(jī)
#iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type echo-request -j ACCEPT
#iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request –j ?DROP
或
#iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT
#iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP
注:可以用iptables --protocol icmp --help查看ICMP類型
還有沒有其它辦法實(shí)現(xiàn)?
禁止QQ端口
#iptables -D FORWARD -p udp --dport 8000 -j REJECT
#p#
三、強(qiáng)制訪問指定的站點(diǎn)

?
圖3
要使192.168.52.0/24網(wǎng)絡(luò)內(nèi)的計(jì)算機(jī)(這此計(jì)算機(jī)的網(wǎng)關(guān)應(yīng)設(shè)為192.168.52.10)強(qiáng)制訪問指定的站點(diǎn),在做為防火墻的計(jì)算機(jī)(192.168.52.10)上應(yīng)添加以下規(guī)則:
1. 打開ip包轉(zhuǎn)發(fā)功能
echo 1 > /proc/sys/net/ipv4/ip_forward
2. 在NAT/防火墻計(jì)算機(jī)上的NAT表中添加目的地址轉(zhuǎn)換規(guī)則:
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 202.96.134.130:80
iptables -t nat -I PREROUTING -i eth0 -p udp --dport 80 -j DNAT --to-destination 202.96.134.130:80
3. 在NAT/防火墻計(jì)算機(jī)上的NAT表中添加源地址轉(zhuǎn)換規(guī)則:
iptables -t nat -I POSTROUTING -o eth1 -p tcp --dport 80 -s 192.168.52.0/24 -j SNAT --to-source 202.96.134.10:20000-30000
iptables -t nat -I POSTROUTING -o eth1 -p udp --dport 80 -s 192.168.52.0/24 -j SNAT --to-source 202.96.134.10:20000-30000
4. 測試:在內(nèi)部網(wǎng)的任一臺計(jì)算機(jī)上打開瀏覽器,輸入任一非本網(wǎng)絡(luò)的IP,都將指向IP為202.96.134.130的網(wǎng)站.
#p#
四、發(fā)布內(nèi)部網(wǎng)絡(luò)服務(wù)器

?
圖4
要使因特網(wǎng)上的計(jì)算機(jī)訪問到內(nèi)部網(wǎng)的FTP服務(wù)器、WEB服務(wù)器,在做為防火墻的計(jì)算機(jī)上應(yīng)添加以下規(guī)則:
1. echo 1 > /proc/sys/net/ipv4/ip_forward
2. 發(fā)布內(nèi)部網(wǎng)web服務(wù)器
iptables -t nat -I PREROUTING -p tcp -i eth1 -s 202.96.134.0/24 --dport 80 -j DNAT --to-destination 192.168.52.15:80
iptables -t nat -I POSTROUTING -p tcp -i eth0 -s 192.168.52.15 --sport 80 -j SNAT --to-source 202.96.134.10:20000-30000
3. 發(fā)布內(nèi)部網(wǎng)ftp服務(wù)器
iptables -t nat -I PREROUTING -p tcp -i eth1 -s 202.96.134.0/24 --dport 21 -j DNAT --to-destination 192.168.52.14:21
iptables -t nat -I POSTROUTING -p tcp -i eth0 -s 192.168.52.14 --sport 21 -j SNAT --to-source 202.96.134.10:40000-50000
4. 注意:內(nèi)部網(wǎng)的計(jì)算機(jī)網(wǎng)關(guān)要設(shè)置為防火墻的ip(192.168.52.1)
5. 測試: 用一臺IP地址為202.96.134.0段的計(jì)算機(jī)虛擬因特網(wǎng)訪問,當(dāng)在其瀏覽器中訪問http://202.96.134.10時,實(shí)際應(yīng)看到的是192.168.52.15的的web服務(wù);
當(dāng)訪問ftp://202.96.134.10時,實(shí)際應(yīng)看到的是192.168.52.14上的的ftp服務(wù)
#p#
五、智能DNS

?
圖5
1. echo 1 > /proc/sys/net/ipv4/ip_forward
2. 在NAT服務(wù)器上添加以下規(guī)則:
在PREROUTING鏈中添加目的地址轉(zhuǎn)換規(guī)則:
iptables -t nat -I PREROUTING -i eth0 -p tcp --dpor 53 -j DNAT --to-destination 202.96.134.130
iptables -t nat -I PREROUTING -i eth0 -p udp --dpor 53 -j DNAT --to-destination 202.96.134.130
在POSTROUTING鏈中添加源地址轉(zhuǎn)換規(guī)則:
iptables -t nat -I POSTROUTING -o eth1 -s 192.168.52.0/24 -p tcp --dpor 53 -j SNAT --to-source 202.96.134.10:40000-50000
iptables -t nat -I POSTROUTING -o eth1 -s 192.168.52.0/24 -p udp --dpor 53 -j SNAT --to-source 202.96.134.10:40000-50000
3. 測試
在內(nèi)部網(wǎng)任一臺計(jì)算機(jī)上,將DNS設(shè)置為任意的外網(wǎng)IP,就可以使用DNS測試工具如nslookup來解析DNS服務(wù)器202.96.134.130上的名稱.
#p#
六、端口映射
見上節(jié)透明代理設(shè)置
#iptables -t nat -A PREROUTING -i eth0 -p tcp -s 192.168.62.0/24 --dport 80 -j REDIRECT --to-ports 3128
七、通過NAT上網(wǎng)
典型NAT上網(wǎng)
一般做為NAT的計(jì)算機(jī)同時也是局域網(wǎng)的網(wǎng)關(guān),假定該機(jī)有兩塊網(wǎng)卡eth0、eth1,eth0連接外網(wǎng),IP為202.96.134.134;eth1連接局域網(wǎng),IP為192.168.62.10
1. 先在內(nèi)核里打開ip轉(zhuǎn)發(fā)功能
#echo 1 > /proc/sys/net/ipv4/ip_forward
2.?使局域網(wǎng)用戶能訪問internet所要做的nat
#iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to?202.96.134.134
如果上網(wǎng)的IP是動態(tài)IP,則使用以下規(guī)則:
#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.62.0/24 -j MASQUERADE
如果是通過ADSL上網(wǎng),且公網(wǎng)IP是動態(tài)IP,則使用以下規(guī)則:
#iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.62.0/24 -j MASQUERADE
3. 使internet用戶可以訪問局域網(wǎng)內(nèi)web主機(jī)所要做的nat
#iptables -t nat -A PREROUTING -p tcp -d 202.96.134.134 --dport 80 -j DNAT --to-destination 192.168.62.10
注:局域網(wǎng)內(nèi)的客戶端需將默認(rèn)網(wǎng)關(guān)、DNS設(shè)為防火墻的IP
在我們的網(wǎng)絡(luò)機(jī)房實(shí)現(xiàn)NAT共享上網(wǎng)
工作環(huán)境:上層代理192.168.60.6(4480),只授予教師機(jī)(192.168.62.111)使用該代理的權(quán)限
目標(biāo):不使用squid代理上網(wǎng),而是使用NAT的方式上網(wǎng)
方法:
1) 確保停止教師機(jī)(192.168.62.111)的squid或其它代理服務(wù)
2) 客戶端網(wǎng)關(guān)、DNS均指向192.168.62.111,瀏覽器代理設(shè)置為192.168.60.6(4480)。測試在當(dāng)前情況下能否上網(wǎng)
3) 在教師機(jī)(192.168.62.111)上添加如下iptables規(guī)則:
#iptables -t nat -A POSTROUTING -p tcp -d 192.168.60.6/32 --dport 4480 -j SNAT --to-source 192.168.62.111:10000-30000
解釋:對于目的地為192.168.60.6、目的端口為4480的TCP包,在經(jīng)過防火墻路由后,將其源地址轉(zhuǎn)換為192.168.62.111,端口轉(zhuǎn)換為10000-30000間的某個端口。
4) 客戶端測試能否上網(wǎng)
#p#
八、IP規(guī)則的保存與恢復(fù)
iptables-save把規(guī)則保存到文件中,再由目錄rc.d下的腳本(/etc/rc.d/init.d/iptables)自動裝載
使用命令iptables-save來保存規(guī)則。一般用
iptables-save > /etc/sysconfig/iptables
生成保存規(guī)則的文件 /etc/sysconfig/iptables,
也可以用
service iptables save
它能把規(guī)則自動保存在/etc/sysconfig/iptables中。
當(dāng)計(jì)算機(jī)啟動時,rc.d下的腳本將用命令iptables-restore調(diào)用這個文件,從而就自動恢復(fù)了規(guī)則。