1.目前官方的layer只支持到2.6.22内核的版本,所以想要在更新版本的内核使用layer就得自己修改layer的源码了.这里不做介绍
在redhat rpm包在安装的时候都依赖一个mockbuild的用户,所以首先创建这个用户,然后去安装
[root@station142 ~]# groupadd mockbuild [root@station142 ~]# useradd -g mockbuild mockbuild [root@station142 ~]# rpm -ivh kernel-2.6.32-431.5.1.el6.src.rpm warning: kernel-2.6.32-431.5.1.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY 1:kernel ########################################### [100%]
安装完成后,在用户的家目录下的rpmbuild/SOURCES/ 会生成安装后的源码
[root@station142 ~]# cd rpmbuild/SOURCES/ [root@www SOURCES]# ll linux-2.6.32-431.5.1.el6.tar.bz2 -rw-rw-r--. 1 mockbuild mockbuild 92608285 Jan 11 03:21 linux-2.6.32-431.5.1.el6.tar.bz2
·解压内核源码,获取redhat特制的源码
[root@www SOURCES]# tar xf linux-2.6.32-431.5.1.el6.tar.bz2 -C /usr/src [root@www SOURCES]# cd /usr/src [root@www src]# ls debug kabi-rhel60 kabi-rhel61 kabi-rhel62 kabi-rhel63 kabi-rhel64 kabi-rhel65 kernels linux-2.6.32-431.5.1.el6 [root@www src]# ln -sv linux-2.6.32-431.5.1.el6/ linux
·拷贝内核编译的模板,大家还记得,每次装完系统后,都会在/boot/config-**生成当前内核的配置信息吧.
[root@www linux]# cp /boot/config-2.6.32-358.el6.x86_64 /usr/src/linux/.config
·下载layer7并打补丁
lftp 172.16.0.1:/pub/Sources/sources/iptables> get netfilter-layer7-v2.23.tar.bz2 22754 bytes transferred lftp 172.16.0.1:/pub/Sources/sources/iptables> bye [root@www data]# tar netfilter-layer7-v2.23.tar.bz2 [root@www linux]# patch -p1 < /root/data/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch #打补丁
·配置内核
·
---> Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> <M> "layer7" match support #把这一项打开
·
---> Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) ---> IP: Netfilter Configuration ---> <M> IPv4 connection tracking support (required for NAT) #确保这一项启用了
·红帽为了防止盗版,会在内核源码编译时做签名检查(使用hash码检查源文件,我们做过改动了),所以这里要关闭检查密钥的功能
---> Enable loadable module support ---> [ ] Module signature verification (EXPERIMENTAL) #禁用这一项
---> Cryptographic API ---> [ ] In-kernel signature checker (EXPERIMENTAL) #关闭此模块,此模块是检查各项签名的,我们在编译的时候没有签名,所以这项得关闭
·为了区别其他版本的,我们给自己编译的这个内核加上版本信息
---> General setup ---> (-layer7) Local version - append to kernel release #加上版本信息
·为了能在后台编译,我们使用screen
[root@www linux]# yum -y install screen [root@www linux]# screen #就算断开了也不受影响 [root@www linux]# make -j 4
·安装内核模块
[root@www linux]# make modules_install #安装模块???忘记是干嘛的了 [root@www linux]# make install #安装
·重启系统并启用新内核
[root@www ~]# uname -r #查看是否是新内核 2.6.32-layer7
·编译iptables
·解压iptables,并为iptables的源码打补丁
[root@www data]# tar xf iptables-1.4.20.tar.bz2 [root@www data]# cd /netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward [root@www iptables-1.4.3forward-for-kernel-2.6.20forward]# cp libxt_layer7.* /root/data/iptables-1.4.20/extensions/ #这就是打补丁
·备份原有的iptables配置文件
[root@www ~]# service iptables stop #停止iptables [root@www ~]# cp /etc/rc.d/init.d/iptables /root/data/ #备份配置文件 [root@www ~]# cp /etc/sysconfig/iptables-config /root/data #备份配置文件
·卸载原有的iptables
[root@www ~]# rpm -qa | grep iptables #首先查看 iptables-ipv6-1.4.7-9.el6.x86_64 iptables-1.4.7-9.el6.x86_64 [root@www ~]# rpm -e iptables iptables-ipv6 --nodeps #防止依赖卸不掉,使用--nodeps
·编译iptables,这一步要新系统启动后才能开始
[root@www ~]# uname -r #这是新系统,可以开始了 2.6.32-layer7 [root@www ~]# cd data/iptables- iptables-1.4.20/ iptables-1.4.20.tar.bz2 iptables-config [root@www ~]# cd data/iptables-1.4.20 [root@www iptables-1.4.20]# ./configure --prefix=/usr --with-ksource=/usr/src/linux #安装路径为/usr,--with指定内核源码位置??? [root@www iptables-1.4.20]# make && make install #安装
·恢复之前备份的iptables文件,修改iptables的配置文件的路径
[root@www iptables-1.4.20]# cp /root/data/iptables /etc/rc.d/init.d/ [root@www iptables-1.4.20]# cp /root/data/iptables-config /etc/sysconfig/ [root@www iptables-1.4.20]# iptables -L -nv #尝试使用iptables命令 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination ... [root@www iptables-1.4.20]# vim /etc/rc.d/init.d/iptables #修改路径为你安装时的路径
·查看iptables的版本号
[root@www iptables-1.4.20]# iptables -V #可以看到是我们自己编译的 iptables v1.4.20
·安装l7-protocols,为layer7模块提供其能所识别的协议特征码
[root@www data]# tar xf l7-protocols-2009-05-28.tar.gz [root@www data]# cd l7-protocols-2009-05-28 [root@www l7-protocols-2009-05-28]# make install #安装 mkdir -p /etc/l7-protocols cp -R * /etc/l7-protocols [root@www protocols]# cd /etc/l7-protocols/protocols/ #到这个目录下查看他可以限制的协议 [root@www protocols]# ls ... battlefield2142.pat halflife2-deathmatch.pat pplive.pat telnet.pat battlefield2.pat hddtemp.pat qq.pat tesla.pat ...
·使用layer7模块前准备:启用net.netfilter.nf_conntrack_acct=1
[root@www iptables-1.4.20]# vim /etc/sysctl.conf #编辑这个文件可以使??永久生效,忘记了?? net.netfilter.nf_conntrank_acct = 1 #在最后一行添加这一条
·让sysctl重新生效
[root@www iptables-1.4.20]# sysctl -p #重新加载sysctl ... error: "net.netfilter.nf_conntrank_acct" is an unknown key #最后这里会报这个错,是因为我们要加载某一连接追踪的模块才能启用acct模块,nf_conntrack [root@www iptables-1.4.20]# modprobe nf_conntrack #加载一模块??也忘了..囧 [root@www iptables-1.4.20]# sysctl -p #在加载一次 ... net.netfilter.nf_conntrack_acct = 1 #可以看到成功了
·答题的环境都搭好了,现在开始测试了,下面的服务器IP打错了,应该是172.16.1.1
·添加一条iptables规则,让A可以通过B连上互联网
[root@www ~]# sysctl -w net.ipv4.ip_forward=1 #临时开启转发功能 [root@www ~]# iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 192.168.1.110
·使用A主机登录QQ
·
[root@www ~]# iptables -A FORWARD -m layer 7 --l7proto qq -j REJECT iptables: No chain/target/match by that name. #添加失败???原因是我没有设置开机自动启动新的内核版本,在老的版本上弄了好久,错了
·添加拒绝登录QQ的规则
转载于:https://blog.51cto.com/lidefu/1391852
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109858.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...