Iptables+layer7+squid

Iptables+layer7+squid的應用

一、iptables+layer7+squid簡介

(1)Iptables是網絡層防火牆 ,主要用於網絡層、傳輸層的過濾,對應用層的過濾較少,但是支持的應用比較多,如NAT轉換

(2)Layer7  能使iptables基於應用層過濾

(3)Squid 是一個應用層代理服務器,不僅可以過濾網絡層、還可以過濾應用層,就是支持的應用比較少。

二、iptables+layer7+squid應用實例

案例配置:


1、實施環境:

RedHat 5.6(實現iptableslayer7squid)windows PC作爲測試機器


2、案例要求:

公司有三個部門工程部門(192.168.2.10--192.168.2.20)軟件部門(192.168.2.21-192.168.2.30)經理辦(192.168.2.31-192.168.2.40)上班時間(週一---週五 082000,現要求工程部門上班時間可以ftp 192.168.1.253(使用iptables)允許qq (使用layer7)不允許http (layer7)迅雷(layer7)下班後無限制軟件部門可以http不允許非法站點sina {squid),不允許使用迅雷 (layer7),連接數最多3個 (iptables)不允許聊天(l7)不允許看圖片 (squid)下班後無限制經理辦公室httpqq {l7}都可以,下班後無限制dmz區域rdp  server  服務器進行發佈


3、案例拓撲圖:

wKiom1O7lFDALw09AAJxos49Er8549.jpg 

先分析一下需求,你會發現這些功能單純的iptables根本沒法實現啊,因爲包過濾機制只是適用於傳輸層,那禁用QQ,禁用迅雷,又是不能看圖片,都是應用層,怎麼辦呢?想想啊,還有一個神奇的東東,代理服務器squid,想起來沒啊,當然對與禁用QQ、迅雷那一類的東東還是可以用iptables來實現的,只不過是得做做手腳,把你的iptables改造一下,打上補丁,當然iptables是和內核緊密相關的啦,爲了能支持打了補丁的iptables,使用新內核打上補丁重新編譯,具體介紹如下實施。


4、案例實施:


(1)重新編譯內核,爲內核打layer7的補丁

//解壓內核補丁安裝包和layer7協議安裝包

[root@server ~]# tar -jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/

[root@server ~]# tar -zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/

[root@server ~]# cd /usr/src/linux-2.6.25.19/

//爲內核打上layer7補丁

[root@server linux-2.6.25.19]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

//生成內核的編譯文件

[root@server linux-2.6.25.19]# cp /boot/config-2.6.18-164.el5 .config

[root@server linux-2.6.25.19]# make menuconfig

  HOSTCC  scripts/basic/fixdep    //使用舊內核配置

/bin/sh: gcc: command not found  

//安裝menuconfig所依賴的相關安裝包

[root@server linux-2.6.25.19]# yum install gcc

[root@server linux-2.6.25.19]# yum install ncurses-devel

安裝完後再重新執行make menuconfig命令

[root@server linux-2.6.25.19]# make menuconfig

執行完make menuconfig命令後出現以下界面,如下圖所示:

wKiom1O7lGHi4FrdAARNEXq8tZU004.jpg 

//配置內核,具體如下操作:

在“Networking ---> Networking Options ---> Network Packet filtering framework (Netfilter) ”處主要注意兩個地方:

1) ---> Core Netfilter Configuration

將“Netfilter connection tracking suport (NEW)”選擇編譯爲模塊(M)(注:選擇按空格鍵),需選取此項才能看到layer7支持的配置。

將layer7、string、state、time、IPsec、iprange、connlimit……等編譯成模塊,根據需要看着辦。

2) ---> IP: Netfilter Configuration

將“IPv4 connection tracking support (require for NAT)”編譯成模塊(M)

將“ Full NET下的“MASQUERADE target support”和“REDIRECT target support”編譯成模塊(M)

編輯配置完後保存退出,然後編譯、安裝。

//編譯及安裝模塊、新內核

[root@server linux-2.6.25.19]# make && make modules_install && make install

//編譯安裝成後後,重啓選擇使用新的內核(2.6.25.19)引導系統

在重新啓動時先按下任意鍵進入以下界面,如下圖所示:

wKiom1O7lHGTKQl_AAMjJLCiFe4380.jpg 

然後選擇上圖所顯示的內核(2.6.25.19)引導系統啓動。

 

(2)重新編譯iptables

//把原來的iptables控制腳本文件複製一份

[root@server ~]# cd /etc/init.d/

[root@server init.d]# cp iptables iptables.bk

//卸載現有的iptables

[root@server ~]# yum remove iptables

//解壓iptables源碼安裝包

[root@server ~]# tar -jxvf iptables-1.4.2.tar.bz2 -C /usr/src/

//爲iptables打上layer7補丁

[root@server ~]# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/

[root@server iptables-1.4.1.1-for-kernel-2.6.20forward]# cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/

//切換到iptables解壓目錄下進行編譯

[root@server ~]# cd /usr/src/iptables-1.4.2/

[root@server iptables-1.4.2]# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19

//執行make和make  install

[root@server iptables-1.4.2]# make && make install

//安裝l7-protocols模式包

[root@server ~]# tar -zxvf l7-protocols-2008-10-04.tar.gz -C /etc

[root@server ~]# mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols


(3)防火牆iP地址配置

連接LAN接口IP地址的配置如下:

wKioL1O7lGmwvm2xAADsNcCAVzY615.jpg 

連接WAN接口的IP地址配置如下:

wKiom1O7lKbjJIMCAAD5JSusNdA989.jpg 

連接DMZ區域的IP地址配置如下:

wKioL1O7lIPB22FIAADvRkUQ5i8060.jpg 

//首先打開路由轉發功能

[root@server ~]# vim /etc/sysctl.conf 

wKioL1O7lJKSCDnHAAB3HG36Yo4528.jpg 

[root@server ~]# sysctl -p   //刷新路由協議


(4)軟件部門實現要求

//把自己所在終端加入防火牆策略中,然後設置默認拒絕

[root@server ~]# iptables -t filter -A INPUT -s 192.168.2.1 -p tcp --dport 22 -j ACCEPT

[root@server ~]# iptables -P INPUT DROP //默認拒絕

[root@server ~]# iptables -t filter -A OUTPUT -d 192.168.2.1 -p tcp --sport 22 -j ACCEPT

[root@server ~]# iptables -P OUTPUT DROP

[root@server ~]# iptables -P FORWARD DROP

//上班時間允許訪問ftp

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.10-192.168.2.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 21 -d 192.168.1.253 -j ACCEPT

[root@server ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@server ~]# modprobe ip_nat_ftp  //添加ftp模塊

[root@server ~]# iptables -t filter -D FORWARD 1//刪除已有的

//查看已有的策略規則

[root@server ~]# iptables -t filter -L -n -v --line-numbers

//上班時間不允許qq

[root@server ~]# iptables -t filter -I FORWARD -m iprange --src-range 192.168.2.10-192.168.2.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j DROP

//不允許使用迅雷下載

[root@server ~]# iptables -t filter -I FORWARD -m iprange --src-range 192.168.2.10-192.168.2.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP

//不允許訪問http
[root@server ~]# iptables -t filter -I FORWARD -m iprange --src-range 192.168.2.10-192.168.2.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto http -j DROP

(5)工程部門實現要求

//允許dns訪問,做nat轉換

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.21-192.168.2.40 -p udp --dport 53 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT

//做透明代理

[root@server ~]# iptables -t nat -A PREROUTING -m iprange --src-range 192.168.2.21-192.168.2.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j REDIRECT --to-port 3128

[root@server ~]# iptables -t filter -A INPUT -p tcp --dport 3128 -j ACCEPT[root@server ~]# iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT

[root@server ~]# iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

[root@server ~]# iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

//安裝squid

[root@server ~]# mkdir /media/cdrom   //創建掛載點

[root@server ~]# mount /dev/cdrom /media/cdrom //掛載光盤

[root@server ~]# yum install squid

//編輯squid的配置文件

[root@server ~]# vim /etc/squid/squid.conf

wKiom1O7lM-gHIvZAAG9dxYPjZ0533.jpg 

//啓動squid的服務

[root@server ~]# service squid start

//拒絕迅雷下載和qq聊天

[root@server ~]# iptables -t filter -I FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j DROP 

[root@server ~]# iptables -t filter -I FORWARD -m iprange --src-range 192.168.2.21-192.168.2.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j DROP


(6)經理辦實現要求

//允許訪問http

[root@server ~]# iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.31-192.168.2.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT

[root@server ~]# iptables -t filter -I FORWARD -m iprange --src-range 192.168.2.31-192.168.2.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j ACCEPT

//下班時間無限制

[root@server ~]# iptables -t filter -A FORWARD -m time --timestart 20:01 --timestop 07:59 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT

[root@server ~]# iptables -t filter -A FORWARD -m time --weekdays Sat,Sun -j ACCEPT


(7)dmz區域

//對rdp服務器進行發佈

[root@server ~]# iptables -t nat -A PREROUTING -d 192.168.1.3 -p tcp --dport 3389 -j DNAT --to 192.168.3.100

[root@server ~]# iptables -t filter -I FORWARD -d 192.168.3.100 -p tcp --dport 3389 -j ACCEPT

//查看規則

[root@server ~]# iptables -t nat -L -n -v --line-number

 

5、案例測試:

(1)在工程部的主機上訪問FTP,結果如下:

wKioL1O7lLOgGNdmAAKTot5El1g648.jpg 

(2)在軟件部主機上,在上班時間測試,訪問百度和新浪結果如下所示:

//訪問百度


wKioL1O7lL7wnxdzAAJ0DKfHVu0088.jpg 

//訪問新浪被拒絕,如下:


wKioL1O7lMnRI4DtAAKegWcUARs578.jpg 

訪問163發現圖片被拒絕,如下所示:


wKioL1O7lNbxCjN5AALJnoIyyr8805.jpg 

登錄qq,結果如下:


 

wKiom1O7lRrBfzk0AAEl5KZHHKI608.jpg

wKioL1O7lOvxQyoFAABBY90_biI188.jpg

 

(3)dmz區域測試

在經理辦或其他部門找一臺PC機進行測試,遠程連接的結果如下圖所示:

wKiom1O7lSjQay8nAAH3Yte_hNw711.jpg 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章