Iptables+layer7+squid的應用
一、iptables+layer7+squid簡介
(1)Iptables是網絡層防火牆 ,主要用於網絡層、傳輸層的過濾,對應用層的過濾較少,但是支持的應用比較多,如NAT轉換
(2)Layer7 能使iptables基於應用層過濾
(3)Squid 是一個應用層代理服務器,不僅可以過濾網絡層、還可以過濾應用層,就是支持的應用比較少。
二、iptables+layer7+squid應用實例
案例配置:
1、實施環境:
RedHat 5.6(實現iptables,layer7和squid),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),上班時間(週一---週五 08:20:00),現要求工程部門上班時間可以ftp 【192.168.1.253】(使用iptables)、不允許qq (使用layer7)、不允許http (layer7)和迅雷(layer7)、下班後無限制。軟件部門可以http但不允許非法站點sina {squid),不允許使用迅雷 (layer7),連接數最多3個 (iptables),不允許聊天(l7),不允許看圖片 (squid),下班後無限制。經理辦公室http和qq {l7}都可以,下班後無限制。dmz區域rdp server 服務器進行發佈
3、案例拓撲圖:
先分析一下需求,你會發現這些功能單純的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命令後出現以下界面,如下圖所示:
//配置內核,具體如下操作:
在“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)引導系統
在重新啓動時先按下任意鍵進入以下界面,如下圖所示:
然後選擇上圖所顯示的內核(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地址的配置如下:
連接WAN接口的IP地址配置如下:
連接DMZ區域的IP地址配置如下:
//首先打開路由轉發功能
[root@server ~]# vim /etc/sysctl.conf
[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
//啓動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,結果如下:
(2)在軟件部主機上,在上班時間測試,訪問百度和新浪結果如下所示:
//訪問百度
//訪問新浪被拒絕,如下:
訪問163發現圖片被拒絕,如下所示:
登錄qq,結果如下:
(3)dmz區域測試
在經理辦或其他部門找一臺PC機進行測試,遠程連接的結果如下圖所示: