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协议安装包
[[email protected] ~]# tar -jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/
[[email protected] ~]# tar -zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
[[email protected] ~]# cd /usr/src/linux-2.6.25.19/
//为内核打上layer7补丁
[[email protected] linux-2.6.25.19]# patch -p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch
//生成内核的编译文件
[[email protected] linux-2.6.25.19]# cp /boot/config-2.6.18-164.el5 .config
[[email protected] linux-2.6.25.19]# make menuconfig
HOSTCC scripts/basic/fixdep //使用旧内核配置
/bin/sh: gcc: command not found
//安装menuconfig所依赖的相关安装包
[[email protected] linux-2.6.25.19]# yum install gcc
[[email protected] linux-2.6.25.19]# yum install ncurses-devel
安装完后再重新执行make menuconfig命令
[[email protected] 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)。
编辑配置完后保存退出,然后编译、安装。
//编译及安装模块、新内核
[[email protected] linux-2.6.25.19]# make && make modules_install && make install
//编译安装成后后,重启选择使用新的内核(2.6.25.19)引导系统
在重新启动时先按下任意键进入以下界面,如下图所示:
然后选择上图所显示的内核(2.6.25.19)引导系统启动。
(2)重新编译iptables
//把原来的iptables控制脚本文件复制一份
[[email protected] ~]# cd /etc/init.d/
[[email protected] init.d]# cp iptables iptables.bk
//卸载现有的iptables
[[email protected] ~]# yum remove iptables
//解压iptables源码安装包
[[email protected] ~]# tar -jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
//为iptables打上layer7补丁
[[email protected] ~]# cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
[[email protected] 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解压目录下进行编译
[[email protected] ~]# cd /usr/src/iptables-1.4.2/
[[email protected] iptables-1.4.2]# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19
//执行make和make install
[[email protected] iptables-1.4.2]# make && make install
//安装l7-protocols模式包
[[email protected] ~]# tar -zxvf l7-protocols-2008-10-04.tar.gz -C /etc
[[email protected] ~]# mv /etc/l7-protocols-2008-10-04 /etc/l7-protocols
(3)防火墙iP地址配置
连接LAN接口IP地址的配置如下:
连接WAN接口的IP地址配置如下:
连接DMZ区域的IP地址配置如下:
//首先打开路由转发功能
[[email protected] ~]# vim /etc/sysctl.conf
[[email protected] ~]# sysctl -p //刷新路由协议
(4)软件部门实现要求
//把自己所在终端加入防火墙策略中,然后设置默认拒绝
[[email protected] ~]# iptables -t filter -A INPUT -s 192.168.2.1 -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -P INPUT DROP //默认拒绝
[[email protected] ~]# iptables -t filter -A OUTPUT -d 192.168.2.1 -p tcp --sport 22 -j ACCEPT
[[email protected] ~]# iptables -P OUTPUT DROP
[[email protected] ~]# iptables -P FORWARD DROP
//上班时间允许访问ftp
[[email protected] ~]# 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
[[email protected] ~]# iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# modprobe ip_nat_ftp //添加ftp模块
[[email protected] ~]# iptables -t filter -D FORWARD 1//删除已有的
//查看已有的策略规则
[[email protected] ~]# iptables -t filter -L -n -v --line-numbers
//上班时间不允许qq
[[email protected] ~]# 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
//不允许使用迅雷下载
[[email protected] ~]# 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
[[email protected] ~]# 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转换
[[email protected] ~]# 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
//做透明代理
[[email protected] ~]# 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
[[email protected] ~]# iptables -t filter -A INPUT -p tcp --dport 3128 -j ACCEPT[[email protected] ~]# iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
[[email protected] ~]# iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
[[email protected] ~]# iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
//安装squid
[[email protected] ~]# mkdir /media/cdrom //创建挂载点
[[email protected] ~]# mount /dev/cdrom /media/cdrom //挂载光盘
[[email protected] ~]# yum install squid
//编辑squid的配置文件
[[email protected] ~]# vim /etc/squid/squid.conf
//启动squid的服务
[[email protected] ~]# service squid start
//拒绝迅雷下载和qq聊天
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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
//下班时间无限制
[[email protected] ~]# iptables -t filter -A FORWARD -m time --timestart 20:01 --timestop 07:59 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
[[email protected] ~]# iptables -t filter -A FORWARD -m time --weekdays Sat,Sun -j ACCEPT
(7)dmz区域
//对rdp服务器进行发布
[[email protected] ~]# iptables -t nat -A PREROUTING -d 192.168.1.3 -p tcp --dport 3389 -j DNAT --to 192.168.3.100
[[email protected] ~]# iptables -t filter -I FORWARD -d 192.168.3.100 -p tcp --dport 3389 -j ACCEPT
//查看规则
[[email protected] ~]# iptables -t nat -L -n -v --line-number
5、案例测试:
(1)在工程部的主机上访问FTP,结果如下:
(2)在软件部主机上,在上班时间测试,访问百度和新浪结果如下所示:
//访问百度
//访问新浪被拒绝,如下:
访问163发现图片被拒绝,如下所示:
登录qq,结果如下:
(3)dmz区域测试
在经理办或其他部门找一台PC机进行测试,远程连接的结果如下图所示: