Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1765256
  • 博文数量: 293
  • 博客积分: 10574
  • 博客等级: 上将
  • 技术积分: 5085
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(293)

文章存档

2011年(27)

2010年(84)

2009年(62)

2008年(120)

我的朋友

分类: LINUX

2008-07-14 14:58:48

一、    准备工作
根据内核版本的相关性我还是选择了linux-2.6.18.8这个内核的版本。

1、下载相关程序
下载 kernel源码和源码patch



下载iptables源码



下载netfiter扩展



下载layer7扩展(第一个为layer7协议,第二个为layer7内核与iptables的补丁)
wget
wget



2、解压相关程序
tar zxvf linux-2.6.18.8.tar.gz -C /usr/src/
tar jxvf iptables-1.3.8.tar.bz2 -C /usr/src/
tar jxvf patch-o-matic-ng-20071120.tar.bz2 -C /usr/src/
tar zxvf l7-protocols-2007-11-22.tar.gz
tar zxvf netfilter-layer7-v2.16.1.tar.gz

3、定义相关符号链接
ln s /usr/src/linux-2.6.18.8  /usr/src/linux
ln s /usr/src/iptables-1.3.8  /usr/src/iptables

二、     内核打补丁
1、修改内核源代码相关参数
  1、设置fd_set支持的最大数量
  a、修改vi /usr/include/bits/typesizes.h
   #define __FD_SETSIZE 1024 ---> 65536
  b、修改vi /usr/src/linux/include/linux/posix_types.h
   #define __FD_SETSIZE 1024 ---> 65536
  2、修改vi /usr/src/linux/include/linux/fs.h
  设置最大打开文件数量(TCP连接数量)
  #define INR_OPEN 1024 ---> 65536
  #define NR_FILE 8192 ---> 65536
  3、修改vi /usr/src/linux/include/net/tcp.h
  a、设置TIMEOUT的时间为1秒
  #define TCP_TIMEWAIT_LEN (60*HZ) 60 ---> 1*HZ
  b、设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上也是减少重试时间
  #define TCP_SYNACK_RETRIES 5 ---> 3

2、读取原有的配置
首先做一个配置上的保存
cp /boot/config-2.6.18-8.el5 /usr/src/linux/.config
cd /usr/src/linux/
make menuconfig
选择 Load an Alternate Configuration File
    选择 .config
保存  退出

3、内核打补丁
cd /usr/src/linux
gunzip ../patch-2.6.18.8.gz |patch -p1

4、内核打layer7补丁
cd /usr/src/linux
p
atch p1


三、安装netfilter扩展
1、安装netfilter扩展
cd /usr/src/patch-o-matic-ng-20071120
首先下载相关的扩展
./runme download
定义环境变量
export KERNEL_DIR=/usr/src/linux
export IPTABLES_DIR=/usr/src/iptables

安装iptables netfilter的扩展项(我安装了以下项目)
./runme ipp2p
./runme time
./runme connlimit
./runme u32
./runme geoip

四、配置内核选项
cd /usr/src/linux
make menuconfig
networking
   networking options
      network packet filtering (replaces ipchains)
IP:Netfilter Configuration
   Layer 7 match support (EXPERIMENTAL)   
  •      Layer 7 debugging output

    IPP2P match support  
    TIME match support  
    Connections/IP limit match support   
    U32 match support  
    geoip match support
    把 Layer 7 match 、ipp2p、time、 Connections/IP 、u32选上


    去除Selinux相关
    Security options
        NSA SELinux Support 选项 去除
    同时保存 退出
    vi /etc/sysconfig/selinux
       SELINUX=disabled

    五、开始编译并安装
    make
    make modules_install
    make install

    2.6的kernel的编译把make bzImage make modules等步骤都在make一步都搞定,以前还要cp 内核和System.map,修改Grub.conf的步骤,统统make install搞定了。

    六、设置grub.conf
    设置default=0的相关项  主要是将我们配置好的新的内核启动的设置为缺省启动
       重新启动计算机

    七、安装新版本iptables以及layer7协议
    1、cd /usr/src/iptables
    export KERNEL_DIR=/usr/src/linux
    export IPTABLES_DIR=/usr/src/iptables
    patch -p1
    make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man
    make install BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man

    2、安装l7-filter协议文件:
    cd /usr/src/l7-protocols-2007-11-22
    make install

    同时要注意layer7屏蔽的信息会在终端画面显示,可以通过改变以下参数来关闭终端的显示:
    vi /etc/sysconfig/syslog
    KLOGD_OPTIONS="-x -c 3"

    修改好以后要重置syslogd服务
    killall -HUP syslogd

    3、以下为关于layer7如何屏蔽信息的相关知识
    l7-filter 的語法與 iptables 類似, 在使用上差不多, 其格式大致如下:
    iptables
    -t mangle -I POSTROUTING -m layer7 --l7proto http -j DROP
              ─┬──     ───┬────  ──┬──   ───┬───
    使用 mangle 表格             │     符合 Layer 7 的封包     │
                       使用 POSTROUTING             Layer 7 封包的通訊協定

    其中比較需要注意的只有 --l7proto 參數後面所使用的 Layer 7 封包通訊協定, 它就是我們所要阻擋的封包類型。至於如何知道該填哪些名稱, 可由我們所安裝的 l7-filter 樣式檔得知。請檢視 /etc/l7-protocols 目錄下的 file_types protocols、weakpatterns、extra malware 子目錄下附檔名為 pat 的檔案, 它們就是 l7-filter 的樣式檔。裡面有簡單的說明, 告訴您這個樣式檔可以過濾哪些類型網路軟體的封包, 以及它的過濾規則。而 --l7proto 參數後面僅需填樣式檔的名稱即可 (不含附檔名)。

    過濾常見的即時通訊軟體
    常見的即時通訊軟體有
    MSN Messenger、Yahoo Messenger ICQ, 若要擋下這些軟體, 所需要用到的 l7-filter 樣式檔有 /etc/l7-protocols/protocols/ 目錄下的 msnmessenger.pat、yahoo.pat aim.pat。其中因為 ICQ 已經賣給 AOL (American online), 所以亦叫 AIM (AOL instant messenger)
    知道要使用哪些
    l7-filter 樣式檔之後, iptables 的寫法如下:
    #
    iptables -t mangle -I POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
           阻擋 MSN Messenger
    #
    iptables -t mangle -I POSTROUTING -m layer7 --l7proto yahoo -j DROP
            阻擋 Yahoo Messenger
    #
    iptables -t mangle -I POSTROUTING -m layer7  --l7proto aim -j DROP
                       ↑阻擋 ICQ
    設定好後, 可如下檢視:
    #
    iptables -t mangle -L POSTROUTING
             檢視 mangle 表格的 POSTROUTING
    Chain
    POSTROUTING (policy ACCEPT)
    target
    prot opt source    destination
    DROP
       all  --  anywhere  anywhere LAYER7 l7proto aim         
    DROP
       all  --  anywhere  anywhere LAYER7 l7proto yahoo      
    DROP
       all  --  anywhere  anywhere LAYER7 l7proto msnmessenger
                  阻擋常見的即時通訊軟體
    此後,只要使用者開啟即時通訊軟體時, 就會發現無法連上網路:
    過濾常見的
    P2P 軟體
    常見的
    P2P 軟體有 eMule、eDonkey、Kazaa Bittorrent...等, 要擋這些軟體需要用到的 l7-filter 樣式檔有 /etc/l7-protocols/protocols 目錄下的 bittorrent.pat fasttrack.pat
    /etc/l7-protocols/weakpatterns 目錄下的 edonkey.pat 檔。
    其中
    bittorrent.pat 可以阻擋所有使用 bittorrent 通訊協定的軟體, ABC、Bitcomet ...等。fasttrack.pat 可以阻擋 kazaa。edonkey.pat 可以阻擋所有使用 eDonkey 通訊協定的軟體, eDonkey eMule... 等。
    設定方式如下:
    #
    iptables -t mangle -I POSTROUTING -m layer7 --l7proto bittorrent -j DROP阻擋 bittorrent 通訊協定
    #
    iptables -t mangle -I POSTROUTING -m layer7  --l7proto fasttrack -j DROP  ←阻擋 kazaa
    #
    iptables -t mangle -I POSTROUTING -m layer7  --l7proto edonkey -j DROP    ←阻擋 eDonkey
          
    檢視 mangle 表格的 POSTROUTING 鏈:
    #
    iptables -t mangle -L POSTROUTING
    Chain
    POSTROUTING (policy ACCEPT)
    target
    prot opt source    destination
    DROP
       all  --  anywhere  anywhere  LAYER7 l7proto edonkey
    DROP
       all  --  anywhere  anywhere  LAYER7 l7proto fasttrack
    DROP
       all  --  anywhere  anywhere  LAYER7 l7proto bittorrent
    DROP
       all  --  anywhere  anywhere  LAYER7 l7proto aim
    DROP
       all  --  anywhere  anywhere  LAYER7 l7proto yahoo
    DROP
       all  --  anywhere  anywhere  LAYER7 l7proto msnmessenger

    這樣 P2P 軟體使用時會發生連線錯誤,日後也不能使用了。
    l7-filter
    還可以過濾很多的封包, 比方說可以限制傳輸 jpg gif 格式的圖檔。當然還有其他更多的功能, 您可以自行閱讀 /etc/l7-protocols/ 目錄下的 l7-filter 樣式檔的說明以取得相關資訊
    察看目前使用的模块
    # lsmod

    八、测试
    uname -r 显示内核版本
    iptables -V 显示iptables版本
    ulimit -a 显示最大打开文件等参数
    top 选择1 看多cpu支持情况

    参考以下文档:


    [color="#0000ff"]http://cha.homeip.net/blog/archives/2005/12/l7filter.html

                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/64992/showart_572961.html
  • 阅读(1256) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~