Chinaunix首页 | 论坛 | 博客
  • 博客访问: 253626
  • 博文数量: 72
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 541
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-13 09:42
文章分类
文章存档

2015年(2)

2012年(1)

2011年(1)

2010年(3)

2009年(65)

我的朋友

分类: 系统运维

2009-04-03 09:46:46

Centos+iptables+l7-filter 封QQ MSN和P2P

发表于 2009-01-21 23:17 作者: wangyu1314
主要是按照进行实作,只是软件都换成最新版本。
在网关上如果要封杀 QQ、MSN 或者 P2P 等软件的通讯,单纯用 iptables 逐一封服务端IP或者封通讯端口都不是很好的办法,最简单的方法是使用L7-filter。
L7-filter (Application Layer Packet Classifier for Linux), 是 Linux netfilter 的外挂模块, 它能使 Linux 的 iptables 支持 Layer 7 (Application 应用层) 过滤功能, 限制封杀 P2P、即时通讯软件。
Centos 4.7
Kernel 2.6.28
Iptables 1.4.2
1.下载所需软件包:
kernel 2.6.28
# wget
iptables 1.4.2
# wget
L7-filter
netfilter-layer7-v2.21.tar.gz
l7-protocols-2008-12-18.tar.gz
2.配置编译新内核
首先将所下载的软件都放置于/usr/src目录下
# tar zxvf netfilter-layer7-v2.21.tar.gz
# tar xjvf linux-2.6.28.tar.bz2
# cd linux-2.6.28
# patch -p1 < /usr/src/netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch (打L7-filter的内核补丁)
# make clean && make mrproper
# cp /boot/config-`uname -r` ./.config
# make oldconfig
(如果之前曾经编译过,需要先执行 make mrproper 。make oldconfig会自动对比之前的kernel config,根据之前版本的配置生成一个kernel config,这样方便我们在编译新核心的时候,无须在从头修改所有的核心设置)
//配置内核时,在“Networking ---> Networking Options ---> Network Packet filtering framework (Netfilter) ”处主要注意两个地方:
1) ---> Code Netfilter Configuration
//将“Netfilter connection tracking suport (NEW)”选择编译为模块(M),需选取此项才能看到layer7支持的配置。
//将layer7、string、state、time、IPsec、iprange、connlimit……等编译成模块,根据需要看着办。
2) ---> IP: Netfilter Configuration
//将“IPv4 connection tracking support (require for NAT)”编译成模块。
//将“Full NAT”下的“MASQUERADE target support”和“REDIRECT target support”编译成模块。
# make rpm
# rpm -i /usr/src/redhat/RPMS/i386/kernel-2.6.28-1.i386.rpm
# mkinitrd /boot/initrd-2.6.28.img 2.6.28
编辑/boot/grub/menu.lst
# vi /boot/grub/menu.lst
我的menu.lst如下:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda3
# initrd /initrd-version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$4fY3Crzn$TBJNWnddsam0vg5xmJSRa0
title CentOS (2.6.9-78.0.8.EL)
root (hd0,0)
kernel /vmlinuz-2.6.9-78.0.8.EL ro root=LABEL=/
initrd /initrd-2.6.9-78.0.8.EL.img
title CentOS (2.6.28)
root (hd0,0)
kernel /vmlinuz-2.6.28 ro root=LABEL=/
initrd /initrd-2.6.28.img
title CentOS (2.6.9-78.0.8.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.6.9-78.0.8.ELsmp ro root=LABEL=/
initrd /initrd-2.6.9-78.0.8.ELsmp.img
# shutdown -r now
# uame -a
Linux pe840.luanhe.com 2.6.28 #1 SMP Sat Jan 10 10:59:10 CST 2009 i686 i686 i386 GNU/Linux
系统已经更新至新内核 2.6.28
3.更新升级Iptalbes的Layer7补丁
# cd /usr/src
# tar xjvf iptables-1.4.2.tar.bz2
# cd /usr/src/netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/
# cp libxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/
# cd /usr/src/iptables-1.4.2/
# ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.28
# make && make install
# iptables -V
iptables v1.4.2 已经更新至新版本
4. 安装Layer7 协议文件
# cd /usr/src
# tar zxvf l7-protocols-2008-12-18.tar.gz
# cd l7-protocols-2008-12-18
# make install
5.使用iptables layer-7 filter:
# iptables -t mangle -I PREROUTING -m layer7 --l7proto edonkey -j DROP (禁止edonkey)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto bittorrent -j DROP (禁止bt)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto qq -j DROP (禁止QQ通讯)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto msnmessenger -j DROP (禁止edonkey)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto xunlei -j DROP (禁止迅雷)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto kugoo -j DROP (禁止kugoo)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto yahoo -j DROP (禁止Yahoo! Messenger)
 

另外以下为旧版的方法:

          在网关上如果要封杀 QQ、MSN 或者 P2P 等软件的通讯,单纯用 iptables 逐一封服务端IP或者封通讯端口都不是很好的办法,最简单的方法是使用L7-filter。  

          L7-filter (Application Layer Packet Classifier for Linux), 是 Linux netfilter 的外挂模块, 它能使 Linux 的 iptables 支持 Layer 7 (Application 应用层) 过滤功能, 限制封杀 P2P、即时通讯软件。

  Centos 4.4

  Kernel 2.6.9-42.0.3.EL

  Iptables 1.2.11

1.下载所需软件包:

kernel 2.6.19.7
# wget

iptables 1.3.7
# wget

L7-filter
netfilter-layer7-v2.12.tar.gz
l7-protocols-2007-06-22.tar.gz


2.配置编译新内核
首先将所下载的软件都放置于/usr/src目录下

# tar zxvf netfilter-layer7-v2.12.tar.gz
# tar xjvf linux.2.6.19.7.tar.bz2
# ln -s linux.2.6.19.7 linux
# cd linux
# patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch (打L7-filter的内核补丁) 

# make oldconfig
(如果之前曾经编译过,需要先执行 make mrproper 。make oldconfig会自动对比之前的kernel config,根据之前版本的配置生成一个kernel config,这样方便我们在编译新核心的时候,无须在从头修改所有的核心设置)

 

# make menuconfig 设定内核参数,具体参数可以参考这篇文章 内核编译详解

核心不同,内核选项的排列方式有可能不一样,仔细找一下可以找到:

Code maturity level options –> [*] Prompt for development and/or incomplete code/drivers

Networking –> Networking options –>
    [*] Network packet filtering (replaces ipchains) –>
        IP: Netfilter Configuration –>
             Connection tracking (required for masq/NAT)

           [*] Connection tracking flow accounting

            IP tables support (required for filtering/masq/NAT)

            Layer 7 match support

# make
# make modules
# make modules_install
# make install
# reboot
# uame -a
Linux jason.10235 2.6.19.7 #1 Fri Jul 6 11:56:11 CST 2007 i686 i686 i386 GNU/Linux
系统已经更新至新内核 2.6.19.7

3.更新升级Iptalbes的Layer7补丁

# cd /usr/src
# tar xjvf iptables-1.3.7.tar.bz2
# cd iptables-1.3.7
# patch -p < ../netfilter-layer7-v2.0/iptables-layer7-2.0.patch
# chmod +x extensions/.layer7-test
# export KERNEL_DIR=/usr/src/linux-2.6.19.7
# export IPTABLES_DIR=/usr/src/iptables-1.3.7
# make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
# iptables -V
iptables v1.3.7 已经更新至新版本

4. 安装Layer7 协议文件

# cd /usr/src
# tar zxvf l7-protocols-2007-06-22.tar.gz
# cd l7-protocols-2007-06-22
# make install

5.使用iptables layer-7 filter:

# iptables -t mangle -I PREROUTING -m layer7 --l7proto edonkey -j DROP (禁止edonkey)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto bittorrent -j DROP (禁止bt)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto qq -j DROP (禁止QQ通讯)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto msnmessenger -j DROP (禁止edonkey)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto xunlei -j DROP (禁止迅雷)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto kugoo -j DROP (禁止kugoo)
# iptables -t mangle -I PREROUTING -m layer7 --l7proto yahoo -j DROP (禁止Yahoo! Messenger)

Iptables -t mangle -A POSTROUTING -d x.x.x.x -p udp -m layer7 --l7proto qq -j DROP

Last update 2007.7.16

阅读(1282) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~