使用layer7应用层过滤功能

     默认 netfilter/iptables 体系的不足,以基于网络层的数据包过滤机制为主,同时提供少量的传输层、数据链路层的过滤功能,难以判断数据包对应于何种应用程序(如QQ、迅雷),通过为Linux内核、iptables添加相应的补丁文件,重新编译安装后提供基于应用层(第7层)的扩展功能

      通过独立的 l7-protocols 协议包提供对各种应用层数据的特征识别定义,便于更新整体实现过程。
添加内核补丁,重新编译内核,并以新内核引导系统
添加iptables补丁,重新编译安装iptables
安装l7-protocols协议定义包
使用iptables命令设置应用层过滤规则
使用的软件包列表
Linux内核源码包:linux-2.6.28.10.tar.bz2
iptables源码包:iptables-1.4.6.tar.bz2
layer7补丁源码包:netfilter-layer7-v2.21.tar.gz
协议定义包:l7-protocols-2009-05-28.tar.gz
--------重新编译新内核-------------
释放内核源码包,并合并补丁
[root@localhost ~]# tar zxvf netfilter-layer7-v2.21.tar.gz -C /usr/src/
[root@localhost ~]# tar jxvf linux-2.6.28.10.tar.bz2 -C /usr/src/
[root@localhost ~]# cd /usr/src/linux-2.6.28.10
[root@localhost linux-2.6.28.10]# 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.10/ 目录
安装编译好的内核执行程序
执行 make install 命令
内核执行程序将复制为 /boot/vmlinuz-2.6.28.10
修改grub.conf配置,重启并以新内核进入系统
---------重新编译安装iptables工具--------------
先卸载原有的iptables软件包
可以根据提示的依赖关系卸载相关的各软件包
或者忽略依赖关系卸载几个主要的软件包即可
rpm -e iptables iptables-ipv6 iptstate --nodeps
合并补丁,并编译安装新的iptables工具
[root@localhost ~]# tar jxvf iptables-1.4.6.tar.bz2 -C /usr/src/
[root@localhost ~]# cd /usr/src/iptables-1.4.6/
[root@localhost iptables-1.4.6]# 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.6]# ./configure  --prefix=/
--with-ksource=/usr/src/linux-2.6.28.10
[root@localhost iptables-1.4.6]# make
[root@localhost iptables-1.4.6]# make install
---------安装l7-protocols协议定义包 -------------
解包后直接执行“make install”命令即可
[root@localhost ~]# tar zxvf l7-protocols-2009-05-28.tar.gz
[root@localhost ~]# cd l7-protocols-2009-05-28
[root@localhost ~]l7-protocols-2009-05-28]# 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的版本相匹配
 
 
关于iptables -m state出现invalid argument的解决方法
不是内核bug也不是iptables的原因,问题出在了新内核的配置上。在2.6.20之后的内核,在netfilter的配置以前在ipv4 netfilter configuration中的相当一部分移到了core netfilter configuration中,在core netfilter configuration中配置了state的match之后,另外必须在ip: netfilter configuration中的conntract也选上,否则就会出现本文标题中的invalid argument错误。这个问题,困扰了我很久,最终在国外的一个maillist上找到了原因。这个问题多出现在内核升级之后,对于很多发行版本,由于把所有的feature都编译成了模块,所以不会出现此问题。希望可以帮到大家。

你可能感兴趣的:(职场,iptables,休闲,L7)