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