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
- centos6.5下系统编译定制iptables防火墙扩展layer7应用层访问控制功能及应用限制QQ2016上网
iptables防火墙扩展之layer7应用层访问控制 概述: iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙.以基于网络层的数据包过滤机制为主,同 ...
- iptables的扩展匹配
iptables的匹配条件 一.通用匹配:-s.-d.-p.-i.-o 二.扩展匹配 1.隐含扩展:使用-p{tcp|udp|icmp}指定某特定协议后,自动能够对协议进行扩展 -p tcp --dp ...
- Linux防火墙之iptables常用扩展匹配条件(一)
上一篇博文讲了iptables的基本匹配条件和隐式匹配条件,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12269717.html:今天在来说说iptabel ...
- Linux防火墙之iptables常用扩展匹配条件(二)
上一篇博文我们讲到了iptables的一些常用的扩展匹配模块以及扩展模块的一些选项的说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12273755.htm ...
- Linux防火墙之iptables扩展处理动作
前文我们讲了iptables的扩展匹配,一些常用的扩展模块以及它的专有选项的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12285152.html ...
- iptables详解--转
出处:http://yijiu.blog.51cto.com/433846/1356254 iptables详解 基本概念: 1.防火墙工作在主机边缘:对于进出本网络或者本主机的数据报文,根据事先设定 ...
- iptables一次性封多个ip,使用ipset 工具
ipset是什么? ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则.而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即时集合比较大也 ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- Iptables 规则 一些简单实例和详细介绍
设定规则 iptables -p INPUT DROP iptables -p OUTPUT ACCEPT iptables -p FORWARD DROP 1.防止外网用内网IP欺骗 iptable ...
随机推荐
- IntelliJ IDEA和pycharm注册码
BIG3CLIK6F-eyJsaWNlbnNlSWQiOiJCSUczQ0xJSzZGIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...
- 【共享单车】—— React后台管理系统开发手记:项目工程化开发
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- Redis缓存清理
Redis缓存清理 学习了:https://www.cnblogs.com/ZnCl/p/7116870.html 使用 redis-cli.exe登录, 使用flushall 命令: 或者key * ...
- java int转String全部方式的效率对照与深入解析
在java中,大家肯定都会遇到int类型转String类型的情形,知其然知其所以然.总结加分析一下,int类型转String类型有下面几种方式: a+"" String.value ...
- 迭代器适配器(一)back_inserter和front_inserter的实现
本文讨论back_inserter和front_inserter的实现. 当我们调用copy函数的时候,要确保目标容器具有足够大的空间,例如: //将other的所有元素拷贝到以coll.begin( ...
- Python——五分钟理解元类(metaclasses)
“元类的魔幻变化比 99% 的用户所担心的更多,当你搞不懂是否真的需要用它的时候,就是不需要.” —Tim Peters 本文源于在 PyCon UK 2008 上的一个快速演讲. 元类被称为 Pyt ...
- Odoo12 重大改变
Table of Contents 重构的功能 ORM 数据导入 库存 库存规则 MRP 多步路线 新功能 IoT Odoo12 预计 2018/10 在 Odoo experience 20 ...
- 杂(三)-The type java.lang.Object cannot be resolved It is indirectly referenced ...
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files ...
- 如何在aspx页面中使用ascx控件(用户自定义的一个控件)?
aspx是页面文件ascx是用户控件,用户控件必须嵌入到aspx中才能使用. ascx是用户控件,相当于模板 其实ascx你可以理解为Html里的一部分代码,只是嵌到aspx里而已,因为aspx内容多 ...
- SQL:OUTER JOIN使用方法具体解释
SQL--JOIN使用方法 外联接. 外联接能够是左向外联接.右向外联接或完整外部联接. 在 FROM 子句中指定外联接时,能够由下列几组keyword中的一组指定: LEFT JOIN 或 LEF ...