Netfilter/Iptables Layer7 应用层过滤策略推荐

Netfilter/Iptables Layer7 应用层过滤策略

Netfilter/Iptables 作为一个典型的包过滤防火墙体系,对于网络层,传输层的数据包过滤具有非常优秀的性能和效率,然而,对于一些面向局域网上网用户的Linux网关服务器,有时候还需要使用QQ,MSN等聊天,使用BT下载工具等现象进行封锁。下面将介绍如何为Netfilter/Iptables 增加应用层过滤。

QQ,MSN等聊天,使用BT下载工具均使用了相对固定的应用层协议。使用L7-filter项目的补丁文件包可以为linux内核增加相应的应用层过滤功能,结合其提供的l7-protocols第7层协议定义包,能够识别不同应用层的数据特征

L7-filter项目站点:http://l7-filter.sourceforge.net/ 下载最新的补丁包及协议包

内核站点:http://www.kernel.org 下载内核,iptables的源码包

注意:L7-filter补丁包内的数据,要与内核及iptables源码版本相匹配

将netfilter-layer7 源码包中的对应补丁文件添加到内核源码中,对内核进行重新编译,安装,安装后使用新内核启动Linux操作系统。

注意:源码目录所在分区至少保持有2.5G的剩余磁盘空间。

wgethttp://jaist.dl.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gzwgethttps://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.8.tar.xzwgethttp://www.netfilter.org/projects/iptables/files/iptables-1.4.2.tar.bz2wgethttp://jaist.dl.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz

帮助文件:http://l7-filter.sf.net/HOWTO-kernel

netfilter-layer7:netfilter-layer7-v2.22.tar.gz

Linux内核源码包:linux-2.6.28.8.tar.xz

l7-protocols协议包:l7-protocols-2009-05-28.tar.gz

iptables源码包:iptables-1.4.2.tar.bz2

内核编译步骤:

解包

配置make menuconfig

编译

安装

1.解压释放netfilter-layer7 和内核源码包,使用patch工具合并补丁文件

yum-yinstallxzxz-dlinux-2.6.28.8.tar.xztarxflinux-2.6.28.8.tar-C/usr/src/tarxfnetfilter-layer7-v2.22.tar.gz-C/usr/src/cd/usr/src/linux-2.6.28.8/patch-p1 ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch------------------------------------------------------------------------------patchingfilenet/netfilter/KconfigHunk#1succeededat757withfuzz1(offset-38lines).patchingfilenet/netfilter/MakefileHunk#1succeededat78withfuzz2(offset-6lines).patchingfilenet/netfilter/xt_layer7.cpatchingfilenet/netfilter/regexp/regexp.cpatchingfilenet/netfilter/regexp/regexp.hpatchingfilenet/netfilter/regexp/regmagic.hpatchingfilenet/netfilter/regexp/regsub.cpatchingfilenet/netfilter/nf_conntrack_core.cHunk#1succeededat206(offset5lines).patchingfilenet/netfilter/nf_conntrack_standalone.cHunk#1succeededat162(offset-3lines).patchingfileinclude/net/netfilter/nf_conntrack.hpatchingfileinclude/linux/netfilter/xt_layer7.h

2.重新配置内核编译参数,添加state机制及layer7支持

使用当前RHEL5系统的内核配置文件作为参考,在此基础上添加新的功能

cp/boot/config-2.6.18-194.el5.configmakemenuconfig

在配置界面中,方向键用于定位需要配置的项目

select进入子配置菜单

exit返回上一层

help查看帮助信息

空格切换所选项目的编译类型

三种状态:

[]表示不需要该功能

[M]将功能编译成模块

[*]将功能直接编入内核

Networking support — Networking options — Network packet filtering framework (Netfilter) — Core Netfilter Configuration —

M Netfilter connection tracking support

M “layer7” match support

M “string” match support

M “time” match support

M “iprange” address range match support

M “connlimit” match support”

M “state” match support

M “conntrack” connection match support

M “mac” address match support

M “multiport” Multiple port match support

Networking support — Networking options — Network packet filtering framework (Netfilter) — IP: Netfilter Configuration —

M IPv4 connection tracking support (required for NAT)

M Full NAT

M MASQUERADE target support

M NETMAP target support

M REDIRECT target support

使用Exit返回 最后当提示保存时,使用Yes确认保存,修改将保存到源码目录中的.config文件中。

/usr/src/linux-2.6.28.8/.config

3.编译新内核,并安装新内核文件

make makemodules_install makeinstall

新内核编译安装过程将花费较长时间,数十分钟到数小时不等

新内核文件被安装到/boot目录,模块文件将复制到/lib/modules/2.6.28

[root@wwwiptables-1.4.2]#ls-l/boot/*2.6.28*-rw-------1rootroot260458112-0810:16/boot/initrd-2.6.28.8.img-rw-r--r--1rootroot112980412-0810:15/boot/System.map-2.6.28.8-rw-r--r--1rootroot210280012-0810:15/boot/vmlinuz-2.6.28.8[root@wwwiptables-1.4.2]#du-sh/lib/modules/2.6.28.8/318M/lib/modules/2.6.28.8/

如果编译内核,途中断过,想重新编译,那么先使用

make mrproper 删除不必要的文件和目录,初次编译内核不需要

make clean 删除不必要的模块和文件

4.调整GRUB引导菜单,使系统以新内核启动,然后重启linux服务器

vi/boot/grub/grub.confdefault=0timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitleRedHatEnterpriseLinuxServer(2.6.28.8)root(hd0,0)kernel/vmlinuz-2.6.28.8roroot=LABEL=/rhgbquietinitrd/initrd-2.6.28.8.imgtitleRedHatEnterpriseLinuxServer(2.6.18-194.el5)root(hd0,0)kernel/vmlinuz-2.6.18-194.el5roroot=LABEL=/rhgbquietinitrd/initrd-2.6.18-194.el5.imgreboot

重新编译安装iptables及安装l7-protocols协议包

除了要对linux内核应用layer7补丁以外,对iptables同样需要应用layer7补丁,才能完整实现应用层过滤功能,在解包后的/usr/src/netfilter-layer7-v2.22/目录中也包括针对iptables源码包的补丁文件。l7-protocols协议包用于为iptables提供判断别应用层数据的特征依据。

1.卸载原有系统中的iptables

cp/etc/rc.d/init.d/iptables/tmp/备份iptables启动脚本cp/etc/sysconfig/iptables.config/tmp备份iptables配置文件rpm-eiptables-ipv6iptablesiptstate--nodeps

2.解压释放iptables,并应用补丁文件(复制extensions子目录即可)

tarxfiptables-1.4.2.tar.bz2-C/usr/src/cd/usr/src/iptables-1.4.2/cp/usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.*extensions/

3.配置,编译并安装iptables,需要使用–with-ksource 参数指定内核源码路径

./configure--prefix=/--with-ksource=/usr/src/linux-2.6.28.8make makeinstall

4.安装l7-protocols协议包

tarxfl7-protocols-2009-05-28.tar.gzcdl7-protocols-2009-05-28makeinstall

5.恢复iptables启动脚本及配置文件

cp/tmp/iptables/etc/init.d/iptablescp/tmp/iptables.config/etc/sysconfig/iptables.config

vim /etc/rc.d/init.d/iptables 编辑iptables启动脚本

把$iptables的路径改成/sbin/$iptables

serviceiptablesstartchkconfigiptableson

如果在防火墙启动的时候报错

Loading additional iptables modules: ip_conntrack_netbios_n[FAILED]

vi /etc/sysconfig/iptables-config

注释掉

#IPTABLES_MODULES=”ip_conntrack_netbios_ns”

使用iptables 设置应用层过滤规则

使用layer7显示匹配策略过滤使用QQ,MSN Edonkey等应用层协议的数据访问

iptables-AFORWARD-mlayer7--l7protoqq-jDROPiptables-AFORWARD-mlayer7--l7protomsn-filetransfer-jDROPiptables-AFORWARD-mlayer7--l7protomsnmessenger-jDROPiptables-AFORWARD-mlayer7--l7protobittorrenr-jDROPiptables-AFORWARD-mlayer7--l7protoxunlei-jDROPiptables-AFORWARD-mlayer7--l7protoedonkey-jDROP

使用–connlimit 显示匹配进行数据并发连接控制,超过100个并发连接将拒绝

iptables-AFORWARD-ptcp--syn-mconnlimit--connlimit-above100-jDROP

使用–time显示匹配根据时间范围设置访问策略,允许周一到周五 8:00-18:00之间的数据访问

iptables-AFORWARD-ptcp--dport80-mtime--timestart8:00--timestop18:00--weekdaysMon,Tue,Wed,Thu,Fri-jACCEPT

使用string显示匹配策略过滤包含tencent,verycd,***,***的网络访问

iptables-AFORWARD-pudp--dport53-mstring--string"qq"--algobm-jDROPiptables-AFORWARD-pudp--dport53-mstring--string"tencent"--algobm-jDROPiptables-AFORWARD-pudp--dport53-mstring--string"verycd"--algobm-jDROPiptables-AFORWARD-pudp--dport53-mstring--string"***"--algobm-jDROPiptables-AFORWARD-pudp--dport53-mstring--string"***"--algobm-jDROP

其中–algo参数用于指定字符串识别算法,bm 或 kmp

备注1:

XZ压缩最新压缩率之王

xz是绝大数linux默认就带的一个压缩工具。压缩的比例大,但是时间慢

xz -z 要压缩的文件

如果要保留被压缩的文件加上参数 -k ,如果要设置压缩率加入参数 -0 到 -9调节压缩率。如果不设置,默认压缩等级是6.

xz -d 要解压的文件

同样使用 -k 参数来保留被解压缩的文件。

创建或解压tar.xz文件的方法

习惯了tar czvf或tar xzvf的人可能碰到tar.xz也会想用单一命令搞定解压或压缩。其实不行

tar里面没有征对xz格式的参数比如:

z是针对gzip

j是针对 bzip2

创建tar.xz文件:只要先tar cvf Crushlinux.tar Crushlinux/这样创建Crushlinux.tar文件先,然后使用xz -z Crushlinux.tar来将Crushlinux.tar压缩成为Crushlinux.tar.xz

解压tar.xz文件:先xz -d Crushlinux.tar.xz将Crushlinux.tar.xz解压成Crushlinux.tar 然后,再用tar xvf Crushlinux.tar来解包

没有伞的孩子必须努力奔跑!

Netfilter/Iptables Layer7 应用层过滤策略推荐

相关文章:

你感兴趣的文章:

标签云: