一、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
                cisco***.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

QQ能登入的图

2、设置规则之后

成功图