• Centos5.4下安装Layer7禁止QQ、MSN、p2p软件


    1、下载所需要软件包

    linux-2.6.28.tar.gz             


    iptables-1.4.5.tar.bz2          


    netfilter-layer7-v2.22.tar.gz   
    %20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz/download

    l7-protocols-2009-05-28.tar.gz  
    %20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz/download


    2、把以上内核和软件包解压到/usr/src下
    tar -zxvf linux-2.6.28.tar.gz -C /usr/src
    tar -zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src
    tar -zxvf l7-protocols-2009-05-28.tar.gz -C /usr/src
    tar -jxvf iptables-1.4.5.tar.bz2 -C /usr/src

    3、卸载系统自带的iptables
    rpm -qa | grep iptables    查看有没有安装iptables软件包
    rpm -e iptables --nodeps   强制卸载



    4、给新内核安装layer7补丁
    cd /usr/src/linux-2.6.28/
    patch -p1 < /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch


    5、编译新内核,修改内核配置项
    make oldconfig
    注意:  
    全部保持默认,直接回车。
    (如果之前曾经编译过,需要先执行 make mrproper 。make oldconfig会自动对比之前的kernel config,根据之前版本的配置生成一个kernel config,这样方便我们在编译新核心的时候,无须在从头修改所有的核心设置)

    make menuconfig

    General setup  --->
    Prompt for development and/or incomplete code/drivers  必选
    Networking  --->
    Networking options  --->
    Network packet filtering framework (Netfilter)  --->
    Core Netfilter Configuration  --->   该项下的所有项目建议都选上
    Netfilter connection tracking support  这个项目必需选上,下面才会出现layer7的选项
       "layer7" match support         必选                               
    Layer 7 debugging output             必选   
    IP: Netfilter Configuration  --->    该项下的所有 项目必需都选上


    6、编译并安装新内核
    make
    make modules_install
    make install

    7、设置新内核为默认启动的内核
    vi /etc/gurb.conf

    default=1     把1改为0
    timeout=9     设置等候时间为9秒
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.28)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.28 ro root=LABEL=/ rhgb quiet
    initrd /boot/initrd-2.6.28.img
    title CentOS (2.6.18-164.el5)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet
    initrd /boot/initrd-2.6.18-164.el5.img


    保存退出,重新启动系统
    reboot
    编译内核重启后会报出 insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits,解决方法见下文。


    查看新内核版本
    uame -a
    Linux localhost.localdomain 2.6.28 #1 SMP Wed Apr 28 16:17:14 CST 2010 x86_64 x86_64 x86_64 GNU/Linux


    8、编译安装iptables并支持layer7
    cd /usr/src/iptables-1.4.5/
    cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/*.* extensions/
    ./configure --with-ksource=/usr/src/linux-2.6.28
    make
    make install


    9、安装Layer7协议文件
    cd l7-protocols-2009-05-28
    make install


    10、测试iptables版本是否生效
    /usr/local/sbin/iptables -V

    显示如下,说明安装成功:
    iptables v1.4.5

    再来测试layer7模块是否安装成功
    /usr/local/sbin/iptables -m layer7 --help

    显示如下,说明安装成功:
    [root@localhost src]# /usr/local/sbin/iptables -m layer7 --help
    iptables v1.4.5

    Usage: iptables -[AD] chain rule-specification [options]
           iptables -I chain [rulenum] rule-specification [options]
           iptables -R chain rulenum rule-specification [options]
           iptables -D chain rulenum [options]
           iptables -[LS] [chain [rulenum]] [options]
           iptables -[FZ] [chain] [options]
           iptables -[NX] chain
           iptables -E old-chain-name new-chain-name
           iptables -P chain target [options]
           iptables -h (print this help information)
    。。。。。。。。。。。。。
    。。。。。。。。。。。。。
    。。。。。。。。。。。。。

    layer7 match options:
        --l7dir : Look for patterns here instead of /etc/l7-protocols/
                              (--l7dir must be specified before --l7proto if used)
    [!] --l7proto : Match named protocol using /etc/l7-protocols/.../name.pat

    至此安装过程完全完成。


    11、使用iptables的layer-7模块进行测试,我的运行脚本如下:

    $ipt -A FORWARD -m layer7 --l7proto qq -j DROP
    $ipt -A FORWARD -m layer7 --l7proto kugoo -j DROP
    $ipt -A FORWARD -m layer7 --l7proto edonkey -j DROP
    $ipt -A FORWARD -m layer7 --l7proto xunlei -j DROP
    $ipt -A FORWARD -m layer7 --l7proto bittorrent -j DROP
    $ipt -A FORWARD -m string --algo bm --string 'web.qq.com' -j DROP
    $ipt -A FORWARD -m time --timestart 01:40 --timestop 02:40 -j DROP      #Use UTC


    经过测试,是完全有效果的,如果你能力强,还可以自己编写.pat文件,实现更灵活的访问控制。




    FAQ

    编译内核重启后会报出 insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits

    其实不影响启动,解决方法如下:

    1、解压initrd
    cp /boot/initrd-2.6.28.img /tmp
    cd /tmp/
     
    mkdir newinitrd
    cd newinitrd/
    zcat ../initrd-2.6.28.img | cpio -i
    11264 blocks


    2、编辑init,删掉其中重复的两行
    echo "Loading dm-region-hash.ko module"
    insmod /lib/dm-region-hash.ko
    echo "Loading dm-region-hash.ko module"
    insmod /lib/dm-region-hash.ko


    3、重新打包initrd
    find . | cpio -c -o > ../initrd
    11169 blocks

    cd ..
    gzip -9 < initrd > initrd-2.6.28.img
     
    initrd-2.6.28.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot就可以了,再reboot,就不会有之前的错误了。

  • 相关阅读:
    QGis的使用
    Haproxy配合Nginx搭建Web集群部署实验
    RabbitMQ统一消息处理
    【毕业设计】基于大数据的招聘与租房分析可视化系统
    Go expvar包
    Redis-学习之字典类型
    uView u-slider 自定义滑块
    AOSP ~ OTA调整分区
    leetcode 20. 有效的括号
    数据结构c版(2)——二叉树
  • 原文地址:https://blog.csdn.net/vempire/article/details/127712774