使用layer7应用层过滤功能

pengchou 2012-11-29

--------使用layer7应用层过滤功能---------------
 
默认 netfilter/iptables 体系的不足
 
以基于网络层的数据包过滤机制为主,同时提供少量的传输层、数据链路层的过滤功能
 
难以判断数据包对应于何种应用程序(如QQ、MSN)
netfilter-layer7 补丁包的作用
 
由“L7-filter”项目提供
 
源码站点位于 http://l7-filter.sourceforge.net
 
通过为Linux内核、iptables添加相应的补丁文件,重新编译安装后提供基于应用层(第7层)的扩展功能
 
通过独立的 l7-protocols 协议包提供对各种应用层数据的特征识别定义,便于更新
 
整体实现过程
 
添加内核补丁,重新编译内核,并以新内核引导系统
 
添加iptables补丁,重新编译安装iptables
 
安装l7-protocols协议定义包
 
使用iptables命令设置应用层过滤规则
 
使用的软件包列表
 
Linux内核源码包:linux-2.6.28.8.tar.bz2
 
iptables源码包:iptables-1.4.2.tar.bz2
 
layer7补丁源码包:netfilter-layer7-v2.21.tar.gz
 
协议定义包:l7-protocols-2009-05-10.tar.gz
 
--------重新编译新内核-------------
 
释放内核源码包,并合并补丁
[root@localhost ~]# tar zxvf netfilter-layer7-v2.21.tar.gz -C /usr/src/
 
[root@localhost ~]# tar jxvf linux-2.6.28.8.tar.bz2 -C /usr/src/
 
[root@localhost ~]# cd /usr/src/linux-2.6.28.8
 
[root@localhost linux-2.6.28.8]# patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch

---------配置内核编译参数------------
 

复制当前系统使用的内核配置文件,以此作为基础
 
当前系统的内核配置文件:/boot/config-2.6.18-8.el5
 
源码目录的默认配置文件名:.config
 
进入源码目录,执行“make menuconfig”命令
 
在配置界面中的操作
 
方向键 ?、?、?、? 用于定位功能项、菜单项
 
菜单项 <Select>、<Exit>、<Help>
 
空格键用于选择配置类型
 
对不同功能的配置选择
 
[  ]:空选时表示不需要在新内核中使用该功能
 
[ M ]:表示将此项功能编译为模块,以便在需要时加载  Module
 
[ * ]:将此项功能直接编入新内核,作为新内核的一部分需要配置哪些内核编译参数
Code Netfilter Configuration 网络过滤代码配置
 
将“Netfilter connection tracking support”编为模块
 
将以下应用层过滤支持的功能也编译为模块:
 
    "layer7" match support、"string" match support
 
    "time" match support、"connlimit" match support"
 
其他功能模块根据实际需要酌情添加
 
“iprange” address range match support
 
“state” match support、"mac" address match support

IP: Netfilter Configuration IP包过滤功能配置
 
 将“IPv4 connection tracking support (require for NAT)”功能编为模块
 
将“Full NAT”部分的“MASQUERADE target support”、“REDIRECT target support”等功能也编译为模块

编译内核的模块文件、执行程序
 
执行 make 命令即可
安装编译好的模块文件
 
执行 make modules_install 命令
 
模块文件将安装到 /lib/modules/2.6.28.8/ 目录
 
安装编译好的内核执行程序
 
执行 make install 命令
 
内核执行程序将复制为 /boot/vmlinuz-2.6.28.8
 
修改grub.conf配置,重启并以新内核进入系统
 
---------重新编译安装iptables工具--------------
 
先卸载原有的iptables软件包
 
可以根据提示的依赖关系卸载相关的各软件包
 
或者忽略依赖关系卸载几个主要的软件包即可
rpm -e iptables iptables-ipv6 iptstate --nodeps

合并补丁,并编译安装新的iptables工具
[root@localhost ~]# tar jxvf iptables-1.4.2.tar.bz2 -C /usr/src/
[root@localhost ~]# cd /usr/src/iptables-1.4.2/
[root@localhost iptables-1.4.2]# cp /usr/src/netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/libxt_layer7.*  extensions/
[root@localhost iptables-1.4.2]# ./configure  --prefix=/  --with-ksource=/usr/src/linux-2.6.28.8
[root@localhost iptables-1.4.2]# make
[root@localhost iptables-1.4.2]# make install
 
---------安装l7-protocols协议定义包 -------------
 
解包后直接执行“make install”命令即可
[root@localhost ~]# tar zxvf l7-protocols-2009-05-10.tar.gz
[root@localhost ~]# cd l7-protocols-2009-05-10
[root@localhost l7-protocols-2009-05-10]# make install
 
----------设置使用应用层过滤规则-----------
 
layer7应用层协议匹配
 
匹配格式:-m layer7 --l7proto 协议名
 
协议定义文件位于:/etc/l7-protocols/protocols
 
支持以下常见应用层协议的过滤
 
 qq:腾讯公司QQ程序的通讯协议
 
 msnmessenger:微软公司MSN程序的通讯协议
 
 msn-filetransfer:MSN程序的文件传输协议
 
 bittorrent:BT下载类软件使用的通讯协议
 
 xunlei:迅雷下载工具使用的通讯协议
 
 edonkey:电驴下载工具使用的通讯协议
 
其他各种应用层协议:ftp、http、dns、imap、pop3……
 
------------规则示例:过滤使用qq协议的转发数据包-------
 
 iptables -A FORWARD -m layer7 --l7proto qq -j DROP
时间匹配
 
匹配格式:-m time --timestart 起始时间 --timestop 结束时间 --wekdays 每周的哪些天
 
时间以24小时制表示,例如 18:00
 
每周的哪些天以对应的英文缩写表示,例如周一至周日分别为 Mon、Tue、Wed、Thu、Fri、Sat、Sun
并发连接数匹配
 
匹配格式:-m connlimit --connlimit-above 上限数
字符串匹配
 
匹配格式:-m string --string “字串” --algo 算法

算法指的是用于比对数据包中字符串的特定方法,可以为 bm 或 kmp ,其中任一种均可
 
--------实验案例:Layer7应用层过滤策略---------------
 
需求描述
 
重新编译Linux内核,添加l7-filter应用层过滤补丁
 
重新编译iptables,添加l7-filter应用层过滤补丁
 
设置过滤规则,禁止使用QQ、MSN等聊天工具
 
设置过滤规则,禁止使用BT、电驴等下载工具

实现思路
 
重新编译内核
 
重新编译iptables
 
使用新的iptables程序设置应用层过滤策略
 
注意事项
 
注意选择的layer7补丁文件要与内核、iptables的版本相匹配

相关推荐