Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2783518
  • 博文数量: 423
  • 博客积分: 7770
  • 博客等级: 少将
  • 技术积分: 4766
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 11:58
个人简介

Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb

文章分类

全部博文(423)

文章存档

2019年(3)

2018年(6)

2017年(27)

2016年(23)

2015年(30)

2014年(16)

2013年(31)

2012年(73)

2011年(45)

2010年(14)

2009年(30)

2008年(30)

2007年(63)

2006年(32)

分类: LINUX

2011-11-11 01:02:52

Centos5.4+iptables+l7-filter+IPP2P 转载地址:http://hi.baidu.com/9812658/blog/item/0a8e2024f26afc1b8a82a1a9.html/cmtid/db7f730b4fa2558dd1581bd2
一、L7-filter简介

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

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


二、实验的环境

CentOS 5.4
Kernel 2.6.18-164.el5
iptables(卸载系统自带的,使用源码进行安装)


三、安装相关软件

1、下载相关软件包

kernel 2.6.19.7
# wget


iptables-1.3.7
# wget

L7-filter
# wget


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

IPP2P patch for iptables
# wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20100218.tar.bz2

IPP2P
# wget

注意查看netfilter-layer7-v2.22.tar.gz中的README文件,以便确定内核版本
1iptables-1.4-for-kernel-2.6.20forward-layer7-[l7-filter version].patch
forward
:表示支持内核版本为2.6.20或更新的版本
2iptables-1.3-for-kernel-pre2.6.20-layer7-[l7-filter version].patch
pre
:表示支持内核版本为2.6.20之前的内核老版本,包括2.4

(3) L7在部分2.4内核和2.6内核中都能安装,不管你的linux操作系统是redhatcentos,只要内核是合适的都能被支持,具体哪些内核合适,请点这里看内核兼容性:
(4)上面是我的选择:kernel-2.6.19.7 + iptables-1.3.7 + L7-filter-2.22 + IPP2P(2010-02-18)

2、配置编译内核
首先将所有下载的软件都放置于/usr/src目录下
# cd /usr/src
# yum update gcc(升级一下gcc)
# tar zxvf
netfilter-layer7-v2.22.tar.gz
# tar jxvf linux-2.6.19.7.tar.bz2
# cd linux-2.6.19.7
#
patch -p1 < ../netfilter-layer7-v2.22/for_older_kernels/kernel-2.6.18-2.6.19-layer7-2.9.patch给内核打上L7-filter的内核补丁)
# make menuconfig(选择好layer 7,位置如下)
首先,选载入原来的.config,然后再进行增加layer7-filter的支持
Networking--->
Networking options --->
Network packet filtering (replaces ipchains)--->
IP: Netfilter Configuration
--->
"layer7" match support 和 Layer 7 debugging output

注意:如果以上选项一时看不到,那可能是它前面依赖的一些选项没选到,慢慢摸索下
# cp /usr/src/kernels/2.6.18-164.el5-i686/.config  .  #使用原来的配置文件
# make bzImage # 链接程序代码和函数库
# make modules # 开始编译外挂模块
# make modules_install # 安装编译完成的模块
# make install # 将刚才编译完成的内核安装到系统里面
# reboot(选择编译好的内核启动系统,也可以在/etc/grub.conf中进行一下设置,就不用在启动的时候选择了)
#
uname -r (查看载入是新的内核)

3、更新升级IptalbesLayer7补丁
# cd /usr/src
# tar jxvf iptables-1.3.7.tar.bz2
# cd iptables-1.3.7
#
patch -p1 < ../netfilter-layer7-v2.22/for_older_iptables/iptables-1.3-for-kernel-pre2.6.20-layer7-2.21.patch
# chmod +x  extensions/
.layer7-test
# make KERNEL_DIR=/usr/src/linux-2.6.19.7
# make install KERNEL_DIR=/usr/src/linux-2.6.19.7

#
iptables -V(查看IPTABLES的版本)

4、安装Layer7协议文件
# cd  /usr/src
# tar zxvf l7-protocols-2009-05-28.tar.gz

# cd l7-protocols-2009-05-28
# make install

5、增加iptables的ipp2p模块

1)给iptables的ipp2p补丁
# cd /usr/src
# tar jxvf patch-o-matic-ng-20100218.tar.bz2
# cd patch-o-matic-ng-20100218
# export KERNEL_DIR=/usr/src/linux-2.6.19.7
# export IPTABLES_DIR=/usr/src/iptables-1.3.7
# ./runme ipp2p

2)编译内核
# cd /usr/src/linux-2.6.19.7
# make modules SUBDIRS=net/ipv4/netfilter
# cp -rf /usr/src/linux-2.6.19.7/net/ipv4/netfilter/*.ko  /lib/modules/2.6.19.7/kernel/net/ipv4/netfilter/
# chmod +x /lib/modules/2.6.19.7/kernel/net/ipv4/netfilter/*.ko

3)安装ipp2p协议
# cd /usr/src
# tar zxvf ipp2p-0.8.2.tar.gz
# cd ipp2p-0.8.2/
注意:要修改Makefile文件中的这一行
#ld -shared -o libipt_ipp2p.so libipt_ipp2p.o(注释掉),否则iptables指令将不能使用ipp2p模块
$(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o(改为这一行的内容)

# make
# cp libipt_ipp2p.so /usr/local/lib/iptables/
# cp ipt_ipp2p.ko /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
# chmod +x /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
# depmod -a
# echo 'modprobe ipt_ipp2p' >> /etc/rc.local


四、测试

1、测试环境

(1)网关:它是一台linux操作系统,有两块网卡,eth0:192.168.0.254,eth1:192.168.1.254,eth1为一个内网(192.168.1.0/24)提供网关服务
(2)客户端:安装的windows xp系统,它属于192.168.1.0/24这个网段,通过网关(eth1)上网

2、测试目的

禁止192.168.1.0/24网段内的客户机(假设:192.168.1.2/24该台客户机)使用一些p2p软件下载东西,或者使用MSN等通讯工具

3、配置防火墙,让192.168.1.0网段的客户端能上网

# touch /etc/init.d/iptables.sh && chmod u+x /etc/init.d/iptables.sh
# vi  /etc/init.d/iptables.sh,增加内容如下

#!/bin/bash
#Firewall is SSH SERVER
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#Firewall is SSH Client
iptables -t filter -A INPUT -p tcp --sport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
#Firewall is DNS Client
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
#Firewall is WEB Client
iptables -t filter -A INPUT -p tcp --sport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
#Firewall accept ICMP Packages from 192.168.1.0/24
iptables -t filter -A INPUT -p icmp -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -d 192.168.1.0/24 -j ACCEPT
#Modify Default Policy
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf   && sysctl -p &> /dev/null
iptables -t filter -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -A FORWARD -d 192.168.1.0/24 -j ACCEPT
modprobe ip_nat
iptables -t nat -A POSTROUTING  -s 192.168.1.0/24 -j SNAT --to-source 192.168.0.254

# echo '/etc/init.d/iptables.sh' >> /etc/rc.local

通过上述的配置,检查一下该网段(192.168.1.0/24)内的客户端能否通过网关进行上网

4、定制相关策略

(1)禁用QQ通讯
iptables -t mangle -I PREROUTING -m layer7 --l7proto qq -j DROP

(2)禁止MSN通讯
iptables -t mangle -I PREROUTING -m layer7 --l7proto msnmessenger -j DROP


此外还有针对layer7的,如下规则:
# 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 xunlei -j DROP (禁止Thunder)
# 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)

此外还有针对ipp2p的,如下规则:
iptables -A FORWARD -p tcp -m ipp2p --bit -j DROP      /*TCP traffic only*/
iptables -A FORWARD -p udp -m ipp2p --bit -j DROP      /*UDP traffic only*/
iptables -A FORWARD -m ipp2p --bit -j DROP             /*UDP and TCP traffic*/

iptables -A FORWARD -m ipp2p --edk --kazaa --gnu --bit --apple --dc --soul --winmx --ares -j DROP
或者
iptables -A FORWARD -m ipp2p --ipp2p -j DROP
注意:'--ipp2p'等价于 '--edk --dc --kazaa --gnu --bit --apple --winmx --soul --ares'

iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP

总结:l7+IPP2P已经失效好多年,想封的话,不可能的,呵呵!我这里只是做个实验罢了,为什么不能封这此P2P软件,google吧!哈哈

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