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的剩余磁盘空间。
1 wget http://jaist.dl.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz
2 wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.8.tar.xz
3 wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.2.tar.bz2
4 wget http://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工具合并补丁文件
1 yum -y install xz
2 xz -d linux-2.6.28.8.tar.xz
3 tar xf linux-2.6.28.8.tar -C /usr/src/
4 tar xf netfilter-layer7-v2.22.tar.gz -C /usr/src/
5 cd /usr/src/linux-2.6.28.8/
6 patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
——————————————————————————
7 patching file net/netfilter/Kconfig
8 Hunk #1 succeeded at 757 with fuzz 1 (offset -38 lines).
9 patching file net/netfilter/Makefile
10 Hunk #1 succeeded at 78 with fuzz 2 (offset -6 lines).
11 patching file net/netfilter/xt_layer7.c
12 patching file net/netfilter/regexp/regexp.c
13 patching file net/netfilter/regexp/regexp.h
14 patching file net/netfilter/regexp/regmagic.h
15 patching file net/netfilter/regexp/regsub.c
16 patching file net/netfilter/nf_conntrack_core.c
17 Hunk #1 succeeded at 206 (offset 5 lines).
18 patching file net/netfilter/nf_conntrack_standalone.c
19 Hunk #1 succeeded at 162 (offset -3 lines).
20 patching file include/net/netfilter/nf_conntrack.h
21 patching file include/linux/netfilter/xt_layer7.h
2.重新配置内核编译参数,添加state机制及layer7支持
使用当前RHEL5系统的内核配置文件作为参考,在此基础上添加新的功能
1 cp /boot/config-2.6.18-194.el5 .config
2 make menuconfig
在配置界面中,方向键用于定位需要配置的项目
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.编译新内核,并安装新内核文件
1 make && make modules_install && make install
新内核编译安装过程将花费较长时间,数十分钟到数小时不等
新内核文件被安装到/boot目录,模块文件将复制到/lib/modules/2.6.28
1 [root@www iptables-1.4.2]# ls -l /boot/*2.6.28*
2 -rw——- 1 root root 2604581 12-08 10:16 /boot/initrd-2.6.28.8.img
3 -rw-r–r– 1 root root 1129804 12-08 10:15 /boot/System.map-2.6.28.8
4 -rw-r–r– 1 root root 2102800 12-08 10:15 /boot/vmlinuz-2.6.28.8
5 [root@www iptables-1.4.2]# du -sh /lib/modules/2.6.28.8/
6 318M/lib/modules/2.6.28.8/
如果编译内核,途中断过,想重新编译,那么先使用
make mrproper 删除不必要的文件和目录,初次编译内核不需要
make clean 删除不必要的模块和文件
4.调整GRUB引导菜单,使系统以新内核启动,然后重启linux服务器
1 vi /boot/grub/grub.conf
2 default=0
3 timeout=5
4 splashimage=(hd0,0)/grub/splash.xpm.gz
5 hiddenmenu
6 title Red Hat Enterprise Linux Server (2.6.28.8)
7 root (hd0,0)
8 kernel /vmlinuz-2.6.28.8 ro root=LABEL=/ rhgb quiet
9 initrd /initrd-2.6.28.8.img
10 title Red Hat Enterprise Linux Server (2.6.18-194.el5)
11 root (hd0,0)
12 kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ rhgb quiet
13 initrd /initrd-2.6.18-194.el5.img
14 reboot
重新编译安装iptables及安装l7-protocols协议包
除了要对linux内核应用layer7补丁以外,对iptables同样需要应用layer7补丁,才能完整实现应用层过滤功能,在解包后的/usr/src/netfilter-layer7-v2.22/目录中也包括针对iptables源码包的补丁文件。l7-protocols协议包用于为iptables提供判断别应用层数据的特征依据。
1.卸载原有系统中的iptables
1 cp /etc/rc.d/init.d/iptables /tmp/ 备份iptables启动脚本
2 cp /etc/sysconfig/iptables.config /tmp 备份iptables配置文件
3 rpm -e iptables-ipv6 iptables iptstate –nodeps
2.解压释放iptables,并应用补丁文件(复制extensions子目录即可)
1 tar xf iptables-1.4.2.tar.bz2 -C /usr/src/
2 cd /usr/src/iptables-1.4.2/
3 cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* extensions/
3.配置,编译并安装iptables,需要使用–with-ksource 参数指定内核源码路径
1 ./configure –prefix=/ –with-ksource=/usr/src/linux-2.6.28.8
2 make && make install
4.安装l7-protocols协议包
1 tar xf l7-protocols-2009-05-28.tar.gz
2 cd l7-protocols-2009-05-28
3 make install
5.恢复iptables启动脚本及配置文件
1 cp /tmp/iptables /etc/init.d/iptables
2 cp /tmp/iptables.config /etc/sysconfig/iptables.config
3 vim /etc/rc.d/init.d/iptables 编辑iptables启动脚本
把$iptables的路径改成/sbin/$iptables
1 service iptables start
2 chkconfig iptables on
如果在防火墙启动的时候报错
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等应用层协议的数据访问
1 iptables -A FORWARD -m layer7 –l7proto qq -j DROP
2 iptables -A FORWARD -m layer7 –l7proto msn-filetransfer -j DROP
3 iptables -A FORWARD -m layer7 –l7proto msnmessenger -j DROP
4 iptables -A FORWARD -m layer7 –l7proto bittorrenr -j DROP
5 iptables -A FORWARD -m layer7 –l7proto xunlei -j DROP
6 iptables -A FORWARD -m layer7 –l7proto edonkey -j DROP
使用–connlimit 显示匹配进行数据并发连接控制,超过100个并发连接将拒绝
1 iptables -A FORWARD -p tcp –syn -m connlimit –connlimit-above 100 -j DROP
使用–time显示匹配根据时间范围设置访问策略,允许周一到周五 8:00-18:00之间的数据访问
1 iptables -A FORWARD -p tcp –dport 80 -m time –timestart 8:00 –timestop 18:00 –weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
星期一 MON
星期二 TUE
星期三 WED
星期四 THU
星期五 FRI
星期六 SAT
星期天 SUN
使用string显示匹配策略过滤包含tencent,verycd,***,***的网络访问
1 iptables -A FORWARD -p udp –dport 53 -m string –string "qq" –algo bm -j DROP
2 iptables -A FORWARD -p udp –dport 53 -m string –string "tencent" –algo bm -j DROP
3 iptables -A FORWARD -p udp –dport 53 -m string –string "verycd" –algo bm -j DROP
4 iptables -A FORWARD -p udp –dport 53 -m string –string "***" –algo bm -j DROP
5 iptables -A FORWARD -p udp –dport 53 -m string –string "***" –algo bm -j DROP
其中–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来解包
文章来源:http://crushlinux.blog.51cto.com/2663646/1588574
相关文章
- 3条评论
- 辙弃寺瞳2022-05-28 05:23:16
- 件 同样使用 -k 参数来保留被解压缩的文件。 创建或解压tar.xz文件的方法 习惯了tar czvf或tar xzvf的人可能碰到tar.xz也会想用单一命令搞定解压或压缩。其实不行 tar里面没有征对xz格式的参数比如: z是针对gzip j是针对 bzip2 创建tar.xz文
- 孤央邶谌2022-05-28 01:10:08
- ARD -p udp –dport 53 -m string –string "***" –algo bm -j DROP 其中–algo参数用于指定字符串识别算法,bm 或 kmp 备注1: XZ压缩最新压缩率之王 xz是绝大数linux默认就
- 双笙边侣2022-05-28 03:52:06
- forward-for-kernel-2.6.20forward/libxt_layer7.* extensions/ 3.配置,编译并安装iptables,需要使用–with-ksource 参数指定