嚴(yán)學(xué)軍
摘要:介紹Linux下的iptables的基本原理,結(jié)合虛擬機(jī)闡述了如何使用IPtables在網(wǎng)絡(luò)中實(shí)現(xiàn)內(nèi)外網(wǎng)的訪問(wèn)控制,并實(shí)現(xiàn)了典型的訪問(wèn)控制案例。
關(guān)鍵詞:虛擬機(jī);iptables ;防火墻
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)02-0208-02
由于LINUX是源代碼開放的免費(fèi)軟件,現(xiàn)在使用LINUX的人越來(lái)越多。同時(shí)LINUX又具有比WINDOWS更加強(qiáng)大的穩(wěn)定性和安全性,特別是網(wǎng)絡(luò)服務(wù)這個(gè)部分,LINUX具有和兼容幾乎所有WINDOWS的網(wǎng)絡(luò)服務(wù),所以現(xiàn)在在互聯(lián)網(wǎng)上出現(xiàn)的LINUX服務(wù)器所占比例也逐漸增加,基于LINUX的使用越來(lái)越廣泛,很多學(xué)校都開設(shè)了LINUX課程。本文主要對(duì)LINUX服務(wù)器上常用的iptables防火墻的使用如何在虛擬機(jī)中實(shí)現(xiàn)進(jìn)行討論。
1 iptables工作原理
IPTables包含3個(gè)表,分別是Filter、NAT、Manage表,通過(guò)這幾個(gè)表可以設(shè)置對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾和篩選。具體來(lái)說(shuō),F(xiàn)ilter表可以實(shí)現(xiàn)數(shù)據(jù)包過(guò)濾,NAT表可以實(shí)現(xiàn)地址轉(zhuǎn)換,Manage表主要用來(lái)對(duì)數(shù)據(jù)包進(jìn)行處理。在每個(gè)表中又包含若干鏈,每個(gè)鏈都可以設(shè)置一些規(guī)則,通過(guò)使用鏈中的規(guī)則以對(duì)流進(jìn)的數(shù)據(jù)包做出判斷。根據(jù)表和鏈的結(jié)合情況,下面幾種是經(jīng)常碰到的情況。當(dāng)INPUT鏈位于 filter 表,匹配目的 IP 是本機(jī)的數(shù)據(jù)包;FORWARD鏈位于 filter 表,匹配穿過(guò)本機(jī)的數(shù)據(jù)包;PREROUTING鏈位于 nat 表,用于修改目的地址(DNAT);POSTROUTING鏈位于 nat 表,用于修改源地址(SNAT)。
2 iptables的過(guò)濾規(guī)則
IPtables命令由六個(gè)基本部分構(gòu)成,下面分別介紹。
1)要操作的表:主要有三個(gè)分別是filter實(shí)現(xiàn)數(shù)據(jù)報(bào)過(guò)濾;nat實(shí)現(xiàn)網(wǎng)絡(luò)地址轉(zhuǎn)換;Mangle實(shí)現(xiàn)數(shù)據(jù)報(bào)處理。
2)操作命令:主要有-A、-I、-D、-R、-F等單字符命令,表示添加、插入、刪除、替代、清空等等操作。
3)要操作的鏈:INPUT鏈位于filter表,匹配目的 IP 是本機(jī)的數(shù)據(jù)包,F(xiàn)ORWARD鏈位于filter表,匹配穿過(guò)本機(jī)的數(shù)據(jù)包,PREROUTING鏈位于 nat 表,用于修改目的地址(DNAT),POSTROUTING:位于 nat 表,用于修改源地址(SNAT)。
4)規(guī)則號(hào)碼:表示規(guī)則的位次。
5)匹配條件:按照進(jìn)出的端口、地址、接口和協(xié)議類型來(lái)進(jìn)行匹配。
6)匹配以后的動(dòng)作:主要有接受、丟棄、地址轉(zhuǎn)換(SNAT和DNAT)、動(dòng)態(tài)源地址轉(zhuǎn)換。
3 在虛擬機(jī)中配置LINUX的iptables工作環(huán)境
拓?fù)浣Y(jié)構(gòu)如下所示,中間為L(zhǎng)INUX服務(wù)器,左右兩端分別模擬內(nèi)網(wǎng)和外網(wǎng)計(jì)算機(jī)及網(wǎng)段,總共使用兩個(gè)WINDOWSSERVER2003主機(jī)。分別使用不同的VMNET進(jìn)行網(wǎng)絡(luò)隔離,下面用了兩個(gè)VMNET虛擬交換機(jī)進(jìn)行隔離,其中內(nèi)網(wǎng)使用VMNET3,而外網(wǎng)使用VMNET5。
CCC10.0.0.6(VNET3)(gw:10.0.0.1)----10.0.0.1(eth1--vnet 3)LINUX192.168.100.1(eth0--vnet5)----BBB192.168.100.42(VNET5)
CCC和BBB 為WINDOWSSERVER2003主機(jī)并且都配置了IIS以便于測(cè)試。
4 在虛擬機(jī)中的配置和測(cè)試
4.1數(shù)據(jù)轉(zhuǎn)發(fā)配置和測(cè)試
由于要測(cè)試數(shù)據(jù)的轉(zhuǎn)發(fā),所以需要打開IP轉(zhuǎn)發(fā)功能,可以修改/etc/sysctl.conf文件,將net.ipv4.ip_forward = 0修改為:net.ipv4.ip_forward = 1保存并退出,同時(shí)執(zhí)行如下命令使之生效。
[root@localhost ~]# cd /etc
[root@localhost etc]# sysctl -p
下面是一些常見的配置案例
[root@localhost /]#iptables -L /查看默認(rèn)情況下的規(guī)則
[root@localhost /]# iptables -F /清除表中內(nèi)容
[root@localhost /]# iptables -I INPUT -p icmp -j DROP /禁止PING本地
[root@localhost /]# iptables -D INPUT -p icmp -j DROP /刪除INPUT鏈中的ICMP規(guī)則
[root@localhost /]# iptables -I FORWARD -p icmp -j DROP /禁止轉(zhuǎn)發(fā)PING
[root@localhost /]# iptables -D FORWARD -p icmp -j DROP /轉(zhuǎn)發(fā)PING
4.2地址轉(zhuǎn)換配置和測(cè)試
1)SNAT :如果沒(méi)有NAT,在企業(yè)中,內(nèi)網(wǎng)用戶要訪問(wèn)外部網(wǎng)站需要配置單獨(dú)的公網(wǎng)IP,基于成本,這幾乎不可能。通常的做法是將內(nèi)網(wǎng)用戶訪問(wèn)請(qǐng)求做地址轉(zhuǎn)換,將用戶的內(nèi)部地址從內(nèi)網(wǎng)進(jìn)入公網(wǎng)的時(shí)候進(jìn)行SNAT轉(zhuǎn)換,并由轉(zhuǎn)換設(shè)備記住轉(zhuǎn)換的過(guò)程以后便于把應(yīng)答的數(shù)據(jù)發(fā)送給正確的內(nèi)網(wǎng)計(jì)算機(jī)。轉(zhuǎn)換設(shè)備通常使用路由器或者防護(hù)墻,以將內(nèi)網(wǎng)私有IP轉(zhuǎn)換為公網(wǎng)IP。
[root@localhost /]# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to 192.168.100.1
安裝WIRESHARK 找到光盤-SERVER---圖形界面下點(diǎn)右鍵安裝如下4個(gè)RPM包(在ISO文件中可以找到,位于/Server目錄中)即可,分別是lm_sensors-2.10.0-3.1.i386.rpm、
net-snmp-5.3.1-19.e15.i386.rpm、wireshark-0.99.6-1.el5.i386.rpm、wireshark-gnome-0.99.6-1.el5.i386.rpm。
可以看到源地址被轉(zhuǎn)換成對(duì)外接口IP而不是CCC上的10.0.0.6 訪問(wèn)外網(wǎng)HTTP也沒(méi)問(wèn)題,可以在LINUX計(jì)算機(jī)的ETH0接口抓包驗(yàn)證,如圖1所示發(fā)現(xiàn)抓包圖上看見源地址已經(jīng)被轉(zhuǎn)換為外部地址
2)DNAT :當(dāng)企業(yè)需要對(duì)外發(fā)布自己的各項(xiàng)服務(wù),比如WEB服務(wù)、FTP服務(wù)、郵件服務(wù)等等,而發(fā)布的服務(wù)器可以使用內(nèi)網(wǎng)IP,外網(wǎng)用戶如果想訪問(wèn)這些服務(wù),那么必須在內(nèi)外網(wǎng)的關(guān)聯(lián)設(shè)備上做DNAT以實(shí)現(xiàn)目標(biāo)地主轉(zhuǎn)換,訪問(wèn)者只需要訪問(wèn)DNAT對(duì)應(yīng)的IP地址就可以通過(guò)DNAT設(shè)備把請(qǐng)求轉(zhuǎn)發(fā)到內(nèi)服服務(wù)器,同樣DNAT轉(zhuǎn)換過(guò)程也會(huì)被記錄以把應(yīng)答數(shù)據(jù)順利送出去。
[root@localhost /]# iptables -t nat -A PREROUTING -p tcp --dport 80 -d 192.168.100.1 -i eth0 -j DNAT --to 10.0.0.6
實(shí)際測(cè)試后在LINUX計(jì)算機(jī)的ETH0接口抓包驗(yàn)證,結(jié)果如圖2。雖然外部計(jì)算機(jī)最終訪問(wèn)到內(nèi)網(wǎng)發(fā)布的WEB服務(wù),但是訪問(wèn)時(shí)可以看到三次握手發(fā)生在兩個(gè)外部地址之間,一個(gè)是訪問(wèn)者IP,另外一個(gè)是LINUX服務(wù)器對(duì)外接口IP。
4.3訪問(wèn)控制
以下可以通過(guò)iptable命令實(shí)現(xiàn)對(duì)訪問(wèn)的精細(xì)控制。
[root@localhost /]# iptables -t nat -A PREROUTING -d 192.168.100.42 -j DROP(禁止訪問(wèn)某個(gè)站點(diǎn))
4.4保存規(guī)則
規(guī)則在配置完成后需要手工使用命令進(jìn)行保存。
[root@localhost /]# iptables-save >/etc/iptables-script
5 結(jié)束語(yǔ)
在LINUX教學(xué)實(shí)踐中,因?yàn)閷?shí)驗(yàn)室經(jīng)常都不會(huì)去做LINUX系統(tǒng),所以在教學(xué)中使用虛擬機(jī)是非常好的一種方式,通過(guò)VMWARE軟件的強(qiáng)大的網(wǎng)絡(luò)虛擬功能可以自由搭建各種各樣的網(wǎng)絡(luò)環(huán)境,以實(shí)現(xiàn)各種常見的配置。
參考文獻(xiàn):
[1] 王衛(wèi)星,李斌.基于Netfilter的Linux防火墻[J].福建電腦,2009(3).
[2] 林天峰,譚志彬.LINUX服務(wù)器架設(shè)指南[M].北京:清華大學(xué)出版社,2014.
[3] 張勤,楊章明.LINUX服務(wù)器配置全程實(shí)錄[M].北京:人民郵電出版社,2010.