l7filter:介绍


能过滤7层协议,例如过滤QQ、迅雷
原版只支持2.6.28,不支持centos6的2.6.32;马哥的版本支持2.6.32
实现l7filter:
给内核(netfilter)打补丁。下载内核源码打补丁后,重新编译
内核源码从内核官网下载版本2.6.32,与红帽官网的同一版本不同,红帽在其上集成最新驱动
红帽内核源码rpm包内置密钥,如果检测不通过则无法编译,但是我们可以关闭该检测
http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/
kernel-2.6.32-431.11.2.el6.src.rpm
安装此源码包,就解压到当前目录,生成一个编译内核的环境
给iptables打补丁。先卸载iptables的rpm,再下载其源码来打补丁

diff/patch:打补丁的知识


diff是比对旧程序和新程序的源码以便生成补丁的工具
diff [-u] 旧源码 新源码 > 新版本补丁.patch
patch打补丁
单个旧源码文件:
给旧源码打补丁
patch [选项] 旧源码 < 新版本补丁.patch
还原旧源码
patch -R 新源码 < 新版本补丁.patch
多个旧源码文件(有目录层级)
patch -p[num] < 新版本补丁
例如:
a/b/c/d.txt 当前目录下的源码目录中的源码
cd a/b 打补丁的目录,跳过2级目录
patch -p2 < 新版本补丁

rpmbuild [选项] SPECS文件 制作rpm包
-ba 既制作源码包又制作二进制包
-bb 制作二进制包

实验:使用layer7禁止QQ联网


要安装的包

kernel-2.6.32-431.11.2.el6.src.rpm 待打补丁的内核(netfilter)源码
iptables-1.4.7-11.el6.src.rpm 待打补丁的iptables源码
netfilter-layer7-v2.23.tar.bz2 layer7在内核和iptables的源码补丁
l7-protocols-2009-05-28.tar.gz layer7的特征码

实验步骤

第一步.对内核源码打补丁后,编译安装
a.安装kernel源码
uname -r 
useradd mockbuild 添加内核源码安装用户
rpm -ivh kernel-2.6.32-431.11.2.el6.src.rpm 注意:会自动解压到当前用户的家目录下
cd ~
cd rpmbuild
SOURCES 源码文件目录
config-x86_64-generic[-rhel] 在不同平台编译的配置文件
相当于当前系统的/boot/config-${内核版本}
linux-${内核版本号}.tar.bz2 红帽的内核源码
解压内核源码
SPECS 制作rpm的指导文件
cd SOURCES
tar xf linux-${内核版本号}.tar.bz2 -C /usr/src
cd /usr/src 
ln -sv linux-${内核版本号} linux
b.给内核源码打补丁
cd ~
tar xf netfilter-layer7-v2.23.tar.bz2 -C /usr/src
cd /usr/src/linux
patch -p1 < ../netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch
c.编译安装内核并重启
cp /boot/config-2.6.32-358.el6.x86_64 .config 使用本地的配置模板来编译
make menuconfig
配置内核选项
启用layer7模块,因为源模板没配置该选项
Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration  --->  启用"layer7" match support
关闭模块签名校验和内核签名校验,否则内核编译后无法安装
Enable loadable module support ---> 禁用 Module signature verification (EXPERIMENTAL)
Cryptographic API  ---> 禁用 In-kernel signature checker (EXPERIMENTAL)
为了编译更快,可以去掉一些驱动和不必要的功能。例如硬件驱动、虚拟化等
yum -y install screen
screen 防止编译过程中中断
重新编译:
make help
make mrproper
cp /boot/config-2.6.32-358.el6.x86_64 .config
make menuconfig
.....
make -j 4 利用CPU核心并行编译
make modules_install 
make install
init 6
uname -r
2.6.32 版本号不够长是因为编译时没配置
ls /lib/modules/2.6.32/kernel/net/netfilter/
nf_conntrack.ko xt_layer7.ko 新增的模块依赖于前者,两个模块同时装载才有效

第二步.对iptables打补丁后,编译rpm后安装
a.安装iptables源码
cd ~
rm -fr rpmbuild 安装源码时会重新生成该目录,因此将前面安装内核源码生成的目录删掉
rpm -ivh iptables-1.4.7-11.el6.src.rpm
b.给源码打补丁
cd rpmbuild/SOURCES
tar xf iptables-1.4.7.tar.bz2
cd iptables-1.4.7
cp /usr/src/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* extensions/
cd ..
rm iptables-1.4.7.tar.bz2
tar jcf iptables-1.4.7.tar.bz2 iptables-1.4.7
rm -fr iptables-1.4.7
c.编译制作rpm包
cd ../SPECS
vim iptables.spec 修改编译参数,让其基于修改后的内核源码来编译
更改%build区域中的编译值:删除--with-kernel、--with-kbuild选项,修改--with-ksource=/usr/src/linux
./configure --enable-devel --enable-libipq --bindir=/bin --sbindir=/sbin --sysconfdir=/etc --libdir=/%{_lib} --libexecdir=/%{_lib} --mandir=%{_mandir} --includedir=%{_includedir} --with-ksource=/usr/src/linux
修改发行版本号,11改为11.1
Release: 11.1%{?dist} 
添加打包者信息,在Provides:指令后追加
Packager: Tangsw <tsw1107@163.com>
添加修改日志,在%changelog指令后添加
* Sat Dec 5 2015 Tangsw <tsw1107@163.com> 1.4.7-11.1
- add layer7 module
rpmbuild -ba iptables.spec
cd ..;ls 
SOURCES/  SPECS/  SRPMS/ BUILD/  BUILDROOT/  RPMS/  生成了后面4个目录
ls SRPMS  源码rpm包
iptables-1.4.7-11.1.el6.src.rpm 
cd RPMS/x86_64/; ls 二进制rpm包
iptables-1.4.7-11.1.el6.x86_64.rpm           v4版本包
iptables-ipv6-1.4.7-11.1.el6.x86_64.rpm      v6版本包
iptables-devel-1.4.7-11.1.el6.x86_64.rpm     devel包
iptables-debuginfo-1.4.7-11.1.el6.x86_64.rpm
d.安装rpm包
rpm -qi iptables 查看本地版本
rpm -Uvh iptables-1.4.7-11.1.el6.x86_64.rpm iptables-ipv6-1.4.7-11.1.el6.x86_64.rpm 升级新版本
rpm -qa | grep iptables
iptables-1.4.7-11.1.el6.x86_64
iptables-ipv6-1.4.7-11.1.el6.x86_64
rpm -ql iptables | grep layer7
/lib64/xtables/libxt_layer7.so
第三步.安装layer7的特征码
tar xf l7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28
make install
ls /etc/l7-protocols/protocols 
kugoo.pat、qq.pat、pplive.pat、xunlei.pat



第四步.配置测试环境
NAT服务器:
外网IP:192.168.8.15
内网IP:192.168.56.15
DNS: 192.168.8.1
内网客户端:
IP:192.168.56.16
GW: 192.168.56.15
DNS: 192.168.8.1
a.以编译后的新内核启动

b.配置NAT服务器
开启forward内核参数
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
添加nat规则,在内网通过nat服务器上外网
iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j SNAT --to-source 192.168.8.15
添加filter规则,禁止qq连线,添加前先加载layer7相关模块,并设置参数
modprobe nf_conntrack
modprobe xt_layer7
sysctl -a | grep nf_conntrack
vim /etc/sysctl.conf
net.netfilter.nf_conntrack_acct=1
sysctl -p
iptables -t filter -A FORWARD -s 192.168.56.0/24 -m layer7 --l7proto qq -j REJECT


第五部.测试
192.168.56.16主机能访问网页,但不能上QQ

iptables的扩展,layer7实现的更多相关文章

  1. centos6.5下系统编译定制iptables防火墙扩展layer7应用层访问控制功能及应用限制QQ2016上网

    iptables防火墙扩展之layer7应用层访问控制 概述: iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙.以基于网络层的数据包过滤机制为主,同 ...

  2. iptables的扩展匹配

    iptables的匹配条件 一.通用匹配:-s.-d.-p.-i.-o 二.扩展匹配 1.隐含扩展:使用-p{tcp|udp|icmp}指定某特定协议后,自动能够对协议进行扩展 -p tcp --dp ...

  3. Linux防火墙之iptables常用扩展匹配条件(一)

    上一篇博文讲了iptables的基本匹配条件和隐式匹配条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12269717.html:今天在来说说iptabel ...

  4. Linux防火墙之iptables常用扩展匹配条件(二)

    上一篇博文我们讲到了iptables的一些常用的扩展匹配模块以及扩展模块的一些选项的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12273755.htm ...

  5. Linux防火墙之iptables扩展处理动作

    前文我们讲了iptables的扩展匹配,一些常用的扩展模块以及它的专有选项的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12285152.html ...

  6. iptables详解--转

    出处:http://yijiu.blog.51cto.com/433846/1356254 iptables详解 基本概念: 1.防火墙工作在主机边缘:对于进出本网络或者本主机的数据报文,根据事先设定 ...

  7. iptables一次性封多个ip,使用ipset 工具

    ipset是什么? ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也 ...

  8. iptables参数详解

    iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...

  9. Iptables 规则 一些简单实例和详细介绍

    设定规则 iptables -p INPUT DROP iptables -p OUTPUT ACCEPT iptables -p FORWARD DROP 1.防止外网用内网IP欺骗 iptable ...

随机推荐

  1. wp8使用mvvm模式简单例子(二)---登陆功能,事件触发

    首先,还是需要一个Model类来为UI层的元素提供数据源 public class LoginModel:DependencyObject { public string Uid { get { re ...

  2. PHP Warning: 的解决方法

    在后台管理,用header("location:");做返回时,总是不能正常返回, Warning: Cannot modify header information - head ...

  3. ECSHOP搜索框文字点击消失

    <input name="keywords" type="text" id="keyword" value="黄山金银币&q ...

  4. ListView控件绑定DataSet

    DataSet数据集,数据缓存在客户端内存中,支持断开式连接.   在对DataSet做操作的时候,首先一定要修改其行的状态,然后执行SqlDataAdapter的Update方法,Update方法根 ...

  5. AndroidStudio短信验证功能收不到验证码

    http://mob.com/第三方接口获取地址: 登陆过后点我的后台即可上传,管理应用.需注意的是,即使验证不通过,只要整合了短信验证的Jar包,每天都有20条免费验证短信.现在的mob.com只支 ...

  6. ios 使用gcd 显示倒计时

    __block ;//倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ...

  7. UINavigationController改变动画效果

    @interface UINavigationController (CustomTransition) - (void) pushWithCustomAnimation:(UIViewControl ...

  8. ios 不通过import 调用其他控制器的方法

    ios 开发过程中在不通过import 调用其他类的方法 //获取类名 Class controller = NSClassFromString(@"controller"); / ...

  9. 分类--ROC 和曲线下面积

    ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表.该曲线绘制了以下两个参数: 真正例率 假正例率 真正例率 (TPR) 是召回率的同义词,因此定义如下: $$TPR = ...

  10. pods 遇到的问题

    解决方法 : product -> sccheme ->pod  点击