--------使用layer7应用层过滤功能---------------
默认 netfilter/iptables 体系的不足
以基于网络层的数据包过滤机制为主,同时提供少量的传输层、数据链路层的过滤功能
难以判断数据包对应于何种应用程序(如QQ、MSN)
netfilter-layer7 补丁包的作用
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 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”命令
在配置界面中的操作
方向键 ?、?、?、? 用于定位功能项、菜单项
菜单项
空格键用于选择配置类型
对不同功能的配置选择
[ ]:空选时表示不需要在新内核中使用该功能
[ M ]:表示将此项功能编译为模块,以便在需要时加载 Module
[ * ]:将此项功能直接编入新内核,作为新内核的一部分需要配置哪些内核编译参数
Code Netfilter Configuration 网络过滤代码配置
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
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
[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
[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的版本相匹配