Ubuntu下l7-filter-userspace安装

2019-10-14 20:09栏目:网络时代
TAG:

转自:blog.darkices.com

一、L7-filter简介

这两天和一位朋友,相互研究了一下在IPTABLES中增加新的模块功能。

Ubuntu版本为9.10

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

在网上查了些资料,都没有成功实现,最后,经过测试与调试,最终实现。

发现了这个网站里面提供了已经编译好的程序,直接下载
l7-filter-userspace
libnetfilter-conntrack3
libnetfilter-queue1
libnfnetlink0

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

现在就把具体步骤贴出来,与大家分享。

先安装libnfnetlink0,然后安装libnetfilter-queue1和libnetfilter-conntrack3,最后安装l7-filter-userspace。

**二、实验的环境

个人建议:在安装最新的软件前,大家最好看一下他们的版本与适合的版本。否则,出了问题也找不到原因!

从这里下载协议库并安装。

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

系统环境:

在/etc/l7-protocols/protocols/中列出了所有支持的协议。

三、安装相关软件

CentOS 5.3

创建/etc/l7-filter.conf文件
在其中添加自己需要监视的协议,例如
xunlei 9
bittorrent 10
edonkey 11

1、下载相关软件包**

Kernel 2.6.18-128.el5

运行l7-filter -f /etc/l7-filter.conf

kernel 2.6.19.7
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2

iptables 已经卸载(采用源码进行安装)

然后在iptables中添加
iptables -A FORWARD -j QUEUE
iptables -t mangle -A POSTROUTING -m mark –mark 9 -j DROP
iptables -t mangle -A POSTROUTING -m mark –mark 10 -j DROP
iptables -t mangle -A POSTROUTING -m mark –mark 11 -j DROP

iptables-1.3.7
# wget

 

用QQ过滤测试效果良好,测试telnet过滤没有成功。

L7-filter
# wget http://nchc.dl.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz 

1.下载所需软件包

图片 1

l7-protocols
# wget

kernel 2.6.19.7 
# wget 

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

iptables 1.3.7 
# wget 

IPP2P
# wget

L7-filter  
netfilter-layer7-v2.9.tar.gz

注意查看netfilter-layer7-v2.22.tar.gz中的README文件,以便确定内核版本
(1)iptables-1.4-for-kernel-2.6.20forward-layer7-[l7-filter version].patch
forward:表示支持内核版本为2.6.20或更新的版本
(2)iptables-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操作系统是RedHat、centos,只要内核是合适的都能被支持,具体哪些内核合适,请点这里看内核兼容性: 
(4)上面是我的选择:kernel-2.6.19.7 + iptables-1.3.7 + L7-filter-2.22 + IPP2P(2010-02-18) 

l7-protocols-2007-06-22.tar.gz

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 (查看载入是新的内核)

以上软件全部下载在用户的家目录,全部解压到/usr/src/

3、更新升级Iptalbes的Layer7补丁
# 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的版本)

2.配置编译新内核

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模块

先给内核打包:(当前目录/usr/src)

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

# cd linux-2.6.19.7

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

# patch -p1 < /usr/src/netfilter-layer7-v2.9/kernel-2.6.18-2.6.19-layer7-2.9.patch (给内核打上L7-filter的内核补丁)

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

接下来,就是编译内核

# make menuconfig

四、测试

选择好layer 7 (位置如下)

1、测试环境

-> Networking x 
x -> Networking support (NET [=y]) x 
x -> Networking options x 
x -> Network packet filtering (replaces ipchains) (NETFILTER [=y]) x 
x -> IP: Netfilter Configuration x 
x -> IP tables support (required for filtering/masq/NAT) (IP_NF_IP x 
x -> Layer 7 match support (EXPERIMENTAL) (IP_NF_MATCH_LAYER7 [= x

(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)上网

# make bzImage

2、测试目的

# make modules

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

# make modules_install

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,增加内容如下

# make install

#!/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

# reboot(选择编译好的内核启动系统,也可以在/etc/grub.conf中进行一下设置,就不用在启动的时候选择了)

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

# uname -r (查看新的内核)

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

3.更新升级Iptalbes的Layer7补丁:(当前目录/usr/src)

4、定制相关策略

# cd cd iptables-1.3.7

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

# patch -p1 < /usr/src/netfilter-layer7-v2.9/iptables-layer7-2.9.patch

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

# chmod +x extensions/.layer7-test

此外还有针对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)

# make KERNEL_DIR=/usr/src/linux-2.6.19.7

此外还有针对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*/

# make install KERNEL_DIR=/usr/src/linux-2.6.19.7

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 -V(查看IPTABLES的版本) 
4. 安装Layer7 协议文件:(当前目录/usr/src)

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

# cd l7-protocols-2007-06-22

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

# make install

图片 4

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)

6.增加iptables的ipp2p模块:

下载patch-o-matic-ng-20060701软件

ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/

安装IPTABLES的补丁

cd /usr/src/ patch-o-matic-ng-20060701

# export KERNEL_DIR=/usr/src/linux-2.6.19.7

# export IPTABLES_DIR=/usr/src/iptables-1.3.7

# ./runme ipp2p

编译内核

# cd /usr/src/linux-2.6.19.7 
# make modules SUBDIRS=net/ipv4/netfilter

cp -f /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

安装ipp2p协议

cd ipp2p-0.8.2/

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

进行测试

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

因为没有测试的条件,所以,具体的就没有进行测试,大家如果有条件的话,就自行在环境中测试!!

版权声明:本文由澳门新葡亰平台游戏发布于网络时代,转载请注明出处:Ubuntu下l7-filter-userspace安装