标签:netfilter/iptables layer7 应用层过滤策略部署
Netfilter/Iptables Layer7 应用层过滤策略部署
环境:内核版本:Linux version 2.6.32-431.el6.x86_64
iptables版本:iptables v1.4.7
gcc版本:4.6.1
软件准备:wget http://download.clearfoundation.com/l7-filter/netfilter-layer7-v2.23.tar.gz
wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.9.tar.bz2
wget http://download.clearfoundation.com/l7-filter/l7-protocols-2009-05-28.tar.gz
wget http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/iptables-1.4.7-11.el6.src.rpm
窗体顶端
窗体底端
简介
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的源码包
将netfilter-layer7 源码包中的对应补丁文件添加到内核源码中,对内核进行重新编译,安装,安装后使用新内核启动Linux操作系统。
注意:L7-filter补丁包内的数据,要与内核及iptables源码版本相匹配
注意:源码目录所在分区至少保持有2.5G的剩余磁盘空间。
窗体顶端
窗体底端
编译安装内核
1.解压释放netfilter-layer7和内核源码包,使用patch工具合并补丁文件
tar xflinux-2.6.35.9.tar.bz2 -C /usr/src/
tar xfnetfilter-layer7-v2.23.tar.gz
cd /usr/src
ln -sn linux-2.6.35.9/linux
ll linux* -d
lrwxrwxrwx 1 root root 15 Aug 26 10:55 linux ->linux-2.6.35.9/
drwxrwxr-x 23root root 4096 Nov 23 2010linux-2.6.35.9
#cd linux
#patch -p1 </root/netfilter-layer7-v2.23/kernel-2.6.35-layer7-2.23.patch
patching fileinclude/linux/netfilter/xt_layer7.h
patching fileinclude/net/netfilter/nf_conntrack.h
patching filenet/netfilter/Kconfig
patching filenet/netfilter/Makefile
patching filenet/netfilter/nf_conntrack_core.c
patching filenet/netfilter/nf_conntrack_standalone.c
patching filenet/netfilter/regexp/regexp.c
patching filenet/netfilter/regexp/regexp.h
patching filenet/netfilter/regexp/regmagic.h
patching filenet/netfilter/regexp/regsub.c
patching filenet/netfilter/xt_layer7.c
注意:【patch -p1 】 中“1” 是数字 1,不是小写字母 L
2.重新配置内核编译参数,添加state机制及layer7支持【仍在内核编译目录】
cp /boot/config-2.6.32-431.el6.x86_64.config
yum -y installgcc ncurses-devel
make menuconfig
在配置界面中,方向键用于定位需要配置的项目
select 进入子配置菜单
exit 返回上一层
help 查看帮助信息
空格 切换所选项目的编译类型
三种状态:
[] 表示不需要该功能
[M] 将功能编译成模块
[*] 将功能直接编入内核
Networkingsupport ---> Networking options ---> Network packet filtering framework(Netfilter)
---> CoreNetfilter Configuration --->
<M>Netfilter connection tracking support
<M> "layer7" match support
<M> "string" match support
<M> "time" match support
<M> "iprange" address range matchsupport
<M> "connlimit" matchsupport"
<M> "state" match support
<M> "conntrack" connection matchsupport
<M> "mac" address match support
<M> "multiport" Multiple port matchsupport
Networkingsupport ---> Networking options ---> Network packet filtering framework(Netfilter)
---> IP:Netfilter Configuration --->
<M> IPv4connection tracking support (required for NAT)
<M> Full NAT
<M> MASQUERADE target support
<M> NETMAP target support
<M> REDIRECT target support
使用Exit返回 最后当提示保存时,使用Yes确认保存,修改将保存到源码目录中的.config文件中。
3.编译新内核,并安装新内核文件
make
makemodules_install && make install
新内核编译安装过程将花费较长时间,数十分钟到数小时不等
新内核文件被安装到/boot目录,模块文件将复制到/lib/modules/2.6.35.9
如果编译内核,途中断过,想重新编译,那么先使用
makemrproper 删除不必要的文件和目录,初次编译内核不需要
makeclean 删除不必要的模块和文件
然后重新 makemenuconfig
4.调整GRUB引导菜单,使系统以新内核启动,然后重启linux服务器 从新版内核启动
vim/boot/grub/grub.conf 【修改default=0 ,1改为0】
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS(2.6.35.9)
root(hd0,1)
reboot
窗体顶端
窗体底端
安装iptables/l7-protocols协议包
1、制作iptables升级包
新建mockbuild用户,将l7-protocols-2009-05-28.tar.gz解压后的用于iptables 1.4.3和内核2.6.20之后的文件复制过来。
注意目录层次。
useraddmockbuild
rpm -ivhiptables-1.4.7-11.el6.src.rpm
warning:iptables-1.4.7-11.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51:NOKEY
1:iptables ########################################### [100%]
cd/root/rpmbuild/SOURCES/
tar xfiptables-1.4.7.tar.bz2
cdiptables-1.4.7
cp/root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/*./extensions/
cd ..
tar -jcfiptables-1.4.7.tar.bz2 iptables-1.4.7/*
mviptables-1.4.7/ /tmp/
cd ../SPECS/
vim iptables.spec
Version:1.4.7
Release:11.5%{?dist} //修改11.5表示升级
CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
--with-kernel=/usr/src/linux --with-kbuild=/usr/src/linux--with-ksource=/usr/src/linux
//最后 三项 参数改为编译 的内核 linux所在目录
%changelog
* Wed May 172016 Fisher 1.4.7-11.5
- L7-filtersupport //在 %changelog 后添加这两段,加入更新日志(日期为当天)
yum installrpm-build libselinux-devel -y
rpmbuild -baiptables.spec
2、开始升级iptables
cd/root/rpmbuild/RPMS/x86_64/
rpm -Uvhiptables-1.4.7-11.5.el6.x86_64.rpm iptables-ipv6-1.4.7-11.5.el6.x86_64.rpm //可加参数 --nodeps 强制安装
cd /tmp
tar xfl7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28
make install
mkdir -p/etc/l7-protocols
cp -R */etc/l7-protocols
3、检查l7-protocols协议包
rpm -ql iptables| grep layer7
/lib64/xtables/libxt_layer7.so
窗体顶端
窗体底端
启用七层过滤/添加规则
1、启用七层过滤
# modprobext_layer7
# lsmod | grepxt_layer7
xt_layer7 12060 0
nf_conntrack 79850 1 xt_layer7
2、查看并开启内核参数,确保net.netfilter.nf_conntrack_acct等于1
# sysctl -a |grep conntrack_acct
net.netfilter.nf_conntrack_acct = 1
3、在Iptables上做7层防火墙过虑限制
vim/etc/sysctl.conf
net.ipv4.ip_forward = 1 //开启路由转发功能
sysctl -p
lsmod | grep -wnf_conntrack //查看nf_conntrack模块是否加载
nf_conntrack 79485 6
xt_layer7,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
sysctl -a |grep acct //查看内核连接追踪功能是否开启
kernel.acct = 42 30
###如果下面值为0,修改为1
net.netfilter.nf_conntrack_acct = 1
###打开下面文件加入到里面执行如下命令即可生效
vim/etc/sysctl.conf
net.netfilter.nf_conntrack_acct = 1
sysctl -p
###也可使用此项命令修改,但一重启系统便会失效
sysctl -wnet.netfilter.nf_conntrack_acct=1
4、添加规则
支持的layer7应用层协议
匹配格式:iptables [-t 表名] -m layer7--l7proto 协议名
根据时间过滤
匹配格式:-m time --timestart 起始时间--timestop 结束时间 --weekdays 每周的那些天
时间格式以24小时制表示,如早9:30 晚18:00
每周一至周日对应的英文缩写表示为:Mon、Tue、Wed、Thu、Fri、Sat、Sun 也可以使用数字表示周一至周日,如:1、2、3、4、5、6、7
根据字符串过滤
匹配格式:-m string --string “字符串”--algo {bm|kmp}
实例:
使用layer7显示匹配策略过滤使用QQ,MSN Edonkey等应用层协议的数据访问
iptables -AFORWARD -m layer7 --l7proto qq -j DROP
iptables -AFORWARD -m layer7 --l7proto msn-filetransfer -j DROP
iptables -AFORWARD -m layer7 --l7proto msnmessenger -j DROP
iptables -AFORWARD -m layer7 --l7proto bittorrenr -j DROP
iptables -AFORWARD -m layer7 --l7proto xunlei -j DROP
iptables -AFORWARD -m layer7 --l7proto edonkey -j DROP
使用--connlimit 显示匹配进行数据并发连接控制,超过100个并发连接将拒绝
iptables -AFORWARD -p tcp --syn -m connlimit --connlimit-above 100 -j DROP
使用--time显示匹配根据时间范围设置访问策略,允许周一到周五8:00-18:00之间的数据访问
iptables -AFORWARD -p tcp --dport 80 -m time --timestart 8:00 --timestop 18:00 --weekdaysMon,Tue,Wed,Thu,Fri -j ACCEPT
星期一 MON 星期二 TUE 星期三 WED 星期四 THU 星期五 FRI 星期六 SAT 星期天 SUN
使用string显示匹配策略过滤包含tencent,verycd,色情,成人电影的网络访问
iptables -AFORWARD -m string --string"qq" --algo bm -j DROP
iptables -AFORWARD -m string --string"tencent" --algo bm -j DROP
iptables -AFORWARD -m string --string"verycd" --algo bm -j DROP
iptables -AFORWARD -m string --string "色情" --algo bm -j DROP
iptables -AFORWARD -m string --string "成人电影" --algo bm -j DROP
其中--algo参数用于指定字符串识别算法,bm 或 kmp
5、查看支持的协议簇
ls/etc/l7-protocols/protocols/
窗体顶端
窗体底端
问题汇总
1、在make 内核过程中报【gcc: error: elf_x86_64: No such file or directory】
解决:gcc -v ,若gcc 版本为4.6 ,则不支持 linker-style 架构
在内核目录arch/x86/vdso/Makefile中,大约在28,29行找到
VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 \
-Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
把"-m elf_x86_64" 替换为"-m64"
然后再继续找,大约在72行左右,找到
VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
中的 "-m elf_i386" 替换为"-m32"
2、在make 内核过程中报【drivers/net/igbvf/igbvf.h:129:15: 错误:重复的成员‘page’】
解决:打开文件,看129行,代码为:struct page*page;再往上看,第124行,也有struct page*page这行代码,
这个结构定义在内部的一个结构体中。就是他的名字与129行的重复了,而4.6.*的编译器不支持这种方式的定义,
我们修改129行的代码为struct page *pagep;保存退出
3、在rpmbuild -bbiptables.spec 制作rpm包报 【***ERROR: No build ID note found in /home/wuyang/rpmbuild/BUILDROOT/******
error: Bad exitstatus from /var/tmp/rpm-tmp.BPd1OI (%install)】
解决:在iptables.spec文件中任意位置添加如下参数:
%define__debug_install_post \
%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts}"%{_builddir}/%{?buildsubdir}"\
%{nil}
重新打包
本文出自 “13007250” 博客,请务必保留此出处http://13017250.blog.51cto.com/13007250/1984043
Netfilter/Iptables Layer7 应用层过滤策略部署
标签:netfilter/iptables layer7 应用层过滤策略部署
原文地址:http://13017250.blog.51cto.com/13007250/1984043