一、layer7应用
我们了解的防火墙iptables大部分应用控制,基于端口的数据报文控制。不能应用于网络7层协议的控制如:qq等;layer7模块就可以应用于七层的网络控制。
下面操作的是centos6.5的iptables的模块编译。
二、案例介绍
实验目标:iptables可以控制应用层QQ的访问控制。控制局域网内可以访问页面,不能上QQ,一般应用于(那个公司的boss不员工小弟们上班时间聊QQ等)
三、具体编译操作步骤
layer7模块
源码内核下载地址:
http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/
给内核打补丁需要的包
netfilter-layer7-v2.23.tar.bz2
l7-protocols-2009-05-28.tar.gz
总结:操作步骤
1、获取并编译内核
# useradd mockbuild(编译这个源码包需要先创建个用户。)
# rpm -ivh kernel-2.6.32-431.5.1.x86_64.el6.src.rpm
# cd rpmbuild/SOURCES
# tar xf linux-2.6.32-*.tar.gz -C /usr/src(解压内核)
# cd /usr/src
# ln -sv linux-2.6.32-431.23.3.el6/ linux
2、给内核打补丁
# tar xf netfilter-layer7-v2.23.tar.bz2 -C /usr/src
# cd /usr/src/linux
# patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.32-layer7-2.23.patch (不指明向那个文件中打补丁,就是向当前目录打补丁)
# cp /boot/config-* .config(编译内核我们以当前系统的配置文件为模版来,编译内核复制到当前目录下名字为.config)
# make menuconfig
按如下步骤启用layer7模块(启用刚打补丁的模块)
Networking support → Networking Options →Network packet filtering framework → Core Netfilter Configuration
<M> “layer7” match support
3、编译并安装内核
#screen(我们为了避免中断在screen下进行)(screen -ls 查看有那些隐藏屏幕,screen -r ID号 连接隐藏屏幕)
# make -j 4(指定用几个核心编辑)
#ctrl+a 再按d
# make modules_install
# make install
4、重启系统,启用新内核
5、编译iptables
如果编译iptables的目录和编译内核在同个目录下安装(就需要删除rpmbuild)
(1)解压源文件,并制作rpm包
# cd /root/rpmbuild/SOURCES/
# ls /root/rpmbuild/
SOURCES SPECS(/root/rpmbuild/SPECS/iptables.spec 放置的是iptables的信息目录)
#cd SOURCES
# tar xf iptables-1.4.20.tar.gz
# cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* /root/iptables-1.4.20/extensions/
# tar jcf iptables-1.4.7.tar.bz2 iptables-1.4.7/*(打完补丁后,删除原有的包iptables-1.4.20.tar.gz,进行打包)
编译二进制的RPM包工具
rmbuild
-ba(即编译成二进制的包,同时提供个src格式包)
-bb(编译成二进制格式的包)
#vim /root/rpmbuild/SPECS/iptables.spec
把配置文件中的内核指定位置写正确
./configure --enable-devel --enable-libipq --bindir=/bin --sbindir=/sbin --sysconfdir=/etc --libdir=/%{_lib} --libexecdir=/%{_lib} --mandir=%{_mandir} --includedir=%{_includedir} --with-xtlibdir=/%{_lib}/xtables-%{version} --with-kernel=/usr/src/linux --with-kbuild=/usr/src/linux --with-ksource=/usr/src/linux
(--with-kernel=/usr/src/linux --with-kbuild=/usr/src/linux --with-ksource=/usr/src/linux)就是把这里面的路径指向上面编译的内核为位置
生成rpm
#cd /root/rpmbuild/SPECS/
#rpmbuild -ba iptables.spec
编译完成后将会在目录 /root/rpmbuild/RPMS/x86_64/下生成包
# ls /root/rpmbuild/RPMS/x86_64/
iptables-1.4.7-10.el6.x86_64.rpm iptables-devel-1.4.7-10.el6.x86_64.rpm
iptables-debuginfo-1.4.7-10.el6.x86_64.rpm iptables-ipv6-1.4.7-10.el6.x86_64.rpm
#rpm -qpi iptables-1.4.7-10.el6.x86_64.rpm (查看包的信息)
#rpm -q iptables (查看当前版本信息)
# rpm -qa | grep iptables(查看当前安装了那些包)
#rpm -qa | grep iptables(没有升级前版本)
iptables-ipv6-1.4.7-11.el6.x86_64
iptables-1.4.7-11.el6.x86_64
# rpm -Uvh iptables-1.4.7-12.el6.x86_64.rpm iptables-ipv6-1.4.7-12.el6.x86_64.rpm (升级包)
# rpm -qa | grep iptables(升级后查看下)
iptables-1.4.7-12.el6.x86_64
iptables-ipv6-1.4.7-12.el6.x86_64
# rpm -ql iptables |less(查看iptables安装后生成了那些文件如果有layer7.so模块,则说明已经成功)
/lib64/xtables-1.4.7/libxt_layer7.so
(2)安装协议包:l7-protocols-2009-05-28.tar.gz
# tar xf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install
编译完成后安装l7-protocols
# mkdir -p /etc/l7-protocols
# cp -R * /etc/l7-protocols
查协议特征码:
# ls /etc/l7-protocols/protocols/
100bao.pat doom3.pat jabber.pat radmin.pat teamfortress2.pat
aim.pat edonkey.pat kugoo.pat rdp.pat teamspeak.pat
aimwebcontent.pat fasttrack.pat live365.pat replaytv-ivs.pat telnet.pat
applejuice.pat finger.pat liveforspeed.pat rlogin.pat tesla.pat
ares.pat freenet.pat lpd.pat rtp.pat tftp.pat
armagetron.pat ftp.pat mohaa.pat rtsp.pat thecircle.pat
battlefield1942.pat gkrellm.pat msn-filetransfer.pat runesofmagic.pat tonghuashun.pat
battlefield2142.pat gnucleuslan.pat msnmessenger.pat shoutcast.pat tor.pat
battlefield2.pat gnutella.pat mute.pat sip.pat tsp.pat
bgp.pat goboogy.pat napster.pat skypeout.pat unknown.pat
biff.pat gopher.pat nbns.pat skypetoskype.pat unset.pat
bittorrent.pat guildwars.pat ncp.pat smb.pat uucp.pat
chikka.pat h323.pat netbios.pat smtp.pat validcertssl.pat
cimd.pat halflife2-deathmatch.pat nntp.pat snmp.pat ventrilo.pat
ciscovpn.pat hddtemp.pat ntp.pat socks.pat vnc.pat
citrix.pat hotline.pat openft.pat soribada.pat whois.pat
counterstrike-source.pat http.pat pcanywhere.pat soulseek.pat worldofwarcraft.pat
cvs.pat http-rtsp.pat poco.pat ssdp.pat x11.pat
dayofdefeat-source.pat ident.pat pop3.pat ssh.pat xboxlive.pat
dazhihui.pat imap.pat pplive.pat ssl.pat xunlei.pat
dhcp.pat imesh.pat qq.pat stun.pat yahoo.pat
directconnect.pat ipp.pat quake1.pat subspace.pat zmaap.pat
dns.pat irc.pat quake-halflife.pat subversion.pat
(3)、如何使用layer7模块
ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效。
安装模块(安装完成后用#lsmod查看下是否安装上了)
#modprobe nf_conntrack(装载已经编译好的模块)
#modprobe xt_layer7
查看是否安装:# sysctl -a | grep nf_conntrack
# sysctl -a | grep xt_layer7
# lsmod 查看已载入的模块
#vim /etc/sysctl.conf (设置内核参数)
net.netfilter.nf_conntrack_acct = 1(添加这条内容需要添加)内核参数(如果没有安装nf_conntrack这个参数是没有的)
net.ipv4.ip_forward = 1
# sysctl -p(生效修改配置)
(4)添加规则格式如下
l7-filter uses the standard iptables extension syntax
# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action]
禁止qq登入
# iptables -A FORWARD -m layer7 --l7proto qq -j REJECT
提示:xt_layer7.ko依赖于nf_conntrack.ko模块
测试图:1、没有设置规则可以上网登入QQ
2、设置规则之后