• debian环境下 l7filter 的安装教程


    debian环境下 l7-filter 的安装教程

    本文欢迎大家转载,请保留作者信息。
    请注明转自linuxsir.org,作者memory。

    l7-filter(Application Layer Packet Classifier for Linux)是linux下的开源项目,它是基于应用层数

    据识别的分类器。它可以分类数据包而不管你使用的是哪些端口,这对那些经常变换端口的网络应用进行

    数据流整形非常有用。l7-filter已经开发到v1.3版,功能已经比较完善。它以kernel、iptables的补丁的
    形式提供的,尚未合并到kernel的源代码中。

    debian linux是当前流行的几大linux发行版之一。它的优势就是其有着强大的软件包管理工具集,能够很

    好的自动解决软件包之间的相互依赖关系,以及便捷的升级方式。本文将介绍怎样以debian的方式来安装

    使用l7-filter。



    1、安装编译相关工具
    apt-get install debhelper kernel-package fakeroot libncurses5-dev bzip2



    2、获取源代码

    (1)获取debian官方源代码包(unstable)
    cd /usr/src
    apt-get source kernel-image-2.6.11-686
    apt-get install kernel-tree-2.6.11
    apt-get source iptables

    iptables的当前debian官方版本是1.2.11。下载debian的iptables源代码是为了使用其编译脚本,后边会

    介绍。


    (2)到iptables主页下载最新版本,官方主页http://www.netfilter.org。下面的是我当前使用得版本:
    wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050520.tar.bz2
    wget http://ftp.netfilter.org/pub/iptables/iptables-1.3.1.tar.bz2


    (3)layer7 filter 官方主页下载补丁和协议定义包,主页http://l7-filter.sourceforge.net/
    wget http://jaist.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v1.3.tar.gz
    wget http://jaist.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2005-05-19.tar.gz

    解开这两个包:
    tar -xzf netfilter-layer7-v1.3.tar.gz
    tar -xzf l7-protocols-2005-05-19.tar.gz



    3、准备编译iptables

    (1)拷贝新版本源代码到debian的iptables源代码目录中:
    cp patch-o-matic-ng-20050520.tar.bz2 iptables-1.3.1.tar.bz2 kernel-source-2.6.11.tar.bz2

    iptables-1.2.11/upstream


    (2)修改debian脚本
    cd iptables-1.2.11
    vi scripts/prep.sh
    修改下面几行为:
    iptables="iptables-1.3.1"
    pomng="patch-o-matic-ng-20050520"
    kernel="kernel-source-2.6.11"

    找到下面两行:
    unpack "$ipset"
    > ${build}/ipset/Makefile

    在其后添加:
    (cd "$iptables_profectio"; \
    patch -p1 < /usr/src/netfilter-layer7-v1.3/iptables-layer7-1.3.patch; \
    chmod o+x extensions/.layer7-test;
    > ippool/ippool)
    (cd "$kernel_profectio"; patch -p1 <

    /usr/src/netfilter-layer7-v1.3/kernel-2.6.11-layer7-1.3.patch)

    上面几行在脚本运行时将会把iptables和kernel的layer7 filter 补丁打上。

    iptables编译时有个小问题,一直没能很好的解决,那就是修改后的源代码编译时总是不能编译出ippool

    这个工具,不知为何。但debian在给编译结果打包时总是要找这个东西。无奈,我只能采取欺骗的手法,

    先在ippool目录中建个假的ippool完事。这也就是上边:
    > ippool/ippool
    这一句的用意。


    (3)修改debian的iptables版本
    vi debian/changlog
    修改第一行为:
    iptables (1.3.1-1) unstable; urgency=medium
    编译后iptables的debian包版本就是1.3.1-1


    (4)去掉1.2.11版iptables的patch,因为现在用的是1.3.1版的:
    cd patches
    mv all all.old
    mkdir all


    (5)编译iptables

    make binary

    如果不出什么异常的话,/usr/src下应该多出两个叫iptables_1.3.1-1_i386.deb和iptables-dev_1.3.1-1

    _i386.deb的包,这就是编译成果。

    注意:这一步会因为kernel以前打过一些补丁出现问题,直接回车跳过即可。



    4、编译kernel

    (1)拷贝iptables编译时使用的kernel源代码
    cd /usr/src/kernel-image-2.6.11-i386-2.6.11
    cp -R ../iptables-1.2.11/debian/build/kernel-source-2.6.11 .


    (2)kernel编译的准备工作
    vi debian/rules
    找到下面这一行:
    tar jxf /usr/src/kernel-source-$(version).tar.bz2
    改为:
    # tar jxf /usr/src/kernel-source-$(version).tar.bz2
    实际就是注释掉,因为源代码我们已经从iptables目录中拷贝过来了。

    删除不必要的配置文件,只保留你需要的平台配置。比如我只保留686、686-smp和default配置:
    rm ./config/k7* ./config/386

    如果你不删除,rules脚本将为每个配置建立相应的build目录。每个配置文件都是以面对平台的处理器命

    名的,如386、686、k7等,而且要为每种配置编译生成相应的debian包,很耗时间。

    运行debian脚本:
    ./debian/rules unpack

    这步结束后,多出几个目录形如:build-686、build-686-smp,default对应的就是kernel-source-2.6.11

    目录。目录个数是根据具体配置来的。


    (3)为每个平台配置kernel
    以686为例:
    cd build-686
    make menuconfig
    进入
    Device Drivers --->
    Networking support --->
    Networking options --->
    Network packet filtering (replaces ipchains) --->
    IP: Netfilter Configuration --->
    <M> Layer 7 match support (EXPERIMENTAL)

    记住:为每个你需要编译的平台作上面这一步,否则在编译是会停在那里等你确认。


    (3)编译kernel
    cd /usr/src/kernel-image-2.6.11-i386-2.6.11
    ./debian/rules binary-arch

    要是没什么异常的话,在上级目录中将为每个平台建立了各自的.deb包。



    5、安装

    (1)安装l7 protocol
    cd l7-protocols-2005-05-19
    make install

    这一步很简单,实际就是把这个整个目录拷贝到了/etc下


    (2)安装iptables
    cd /usr/src
    dpkg -i iptables_1.3.1-1_i386.deb
    dpkg -i iptables-dev_1.3.1-1_i386.deb


    (3)安装kernel
    dpkg -i kernel-image-2.6.11-1-686_2.6.11-3_i386.deb



    6、测试成果

    禁用bt的iptables规则:
    iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j DROP

    官方howto不建议上边的这种用法,因为l7的协议定义实际上就是正则表达式,有的数据包可能会匹配多种

    协议,造成误判。他建议用tc工具分配一个带宽很窄的通道,将那些不期望的数据都定向到此通道。具体

    说法和用法还是参照其主页howto。



    7、禁止升级kernel、iptables软件包

    测试无误后,使用包管理命令禁止更新这两个包:
    echo iptables hold | dpkg --set-selections
    echo kernel-image-2.6.11-1-686 hold | dpkg --set-selections


    完成。

    有什么问题或错误欢迎大家批评指正。
  • 相关阅读:
    jmeter循环发送http请求
    判断字符串是否为日期格式
    正则表达式的部分替换 $1~$99
    js验证上传文件大小
    mongodb主从备份 和 手动主从切换
    openproject安装与使用
    软件项目开发常见错误
    使用selenium的WebDriver和ChromeDriver实现UI自动化
    shell ssh远程执行命令
    Flask入门
  • 原文地址:https://www.cnblogs.com/1327/p/1515014.html
Copyright © 2020-2023  润新知