使用iptables过滤bt下载的测试

wp1998@e21.edu.cn 于http://kds.1vs1.cn

看了网上的几篇iptables的文档,发现可以使用ipp2p模块来过滤bt下载等形式的p2p应用,很感兴趣,所以今天在办公网的网关server上测试了一下,效果感觉还是很不错的,BitComet和电驴都过滤掉。

实验环境如下,redhat9系统,内核是2.4.20-8,目前使用iptables-1.2.7做NAT的应用,已经安装了kernel-source-2.4.20-8的rpm包。

1。相关软件下载
# cd /usr/src/
# wget http://www.netfilter.org/files/iptables-1.3.1.tar.bz2
这是iptables-1.3.1的软件
# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20050331.tar.bz2
这是内核中netfilter模块的补丁,其中就包含ipp2p的补丁
# tar xjvf iptables-1.3.1.tar.bz2
# tar xjvf patch-o-matic-ng-20050331.tar.bz2

2。处理内核源码
# cd /usr/src/linux-2.4
# vi Makefile
将“EXTRAVERSION=-8custom”改为“EXTRAVERSION=-8”,保证内核编译的时候版本一致
# make mrproper
建立.config配置文件

3。给内核中的netfilter模块打补丁
# cd /usr/src/patch-o-matic-ng-20050331
进入这个补丁包的目录之后,可以发现有很多的目录,其中每一个目录就代表一个模块补丁,其中就有ipp2p的目录,我们可以全部安装也可以挑选其中需要的安装,为了避免麻烦,我选择了后者。
也可以查看README来了解更多信息。
# KERNEL_DIR=/usr/src/linux-2.4 IPTABLES_DIR=/usr/src/iptables-1.3.1 ./runme ipp2p
这个命令用来在内核和iptables源码中加入ipp2p的模块补丁。
# cd /usr/src/linux-2.4
# make menuconfig
回到源码目录,我们开始给netfilter模块打补丁;
在内核模块配置的界面中我们添加ipp2p的模块补丁;
首先要确认[*] Prompt for development and/or incomplete code/drivers要选中;
然后进入Networking options的子菜单;
再进入IP:Netfilter Configuration的子菜单;
我们会发现这是有一个标记为[new]的ipp2p的模块补丁,选中此模块补丁为”M”,然后保存退出;
至此,给netfilter打补丁工作完成。

3。编译netfilter模块
我们只需要编译内核中netfilter的模块,不需要编译整个内核和其他模块。
# cd /usr/src/linux-2.4
# make dep
# make modules SUBDIRS=net/ipv4/netfilter
# cp -f /usr/src/linux-2.4/net/ipv4/netfilter/*.o /lib/modules/2.4.20-8/kernel/net/ipv4/netfilter/
拷贝编译完成的内核文件覆盖以前的内核文件;
# depmod -a
更新modules.dep,这个时候也许会报一些错误,没有关系;
至此,内核中的netfilter模块重新编译完成了。

4。编译安装新的iptables
# cd /usr/src/iptables-1.3.1
# export KERNEL_DIR=/usr/src/linux-2.4
# export IPTABLES_DIR=/usr/src/iptables-1.3.1
# make BINDIR=/sbin LIBDIR=/lib MANDIR=/usr/share/man install
自此,新的iptables安装就完成了。

通过下面的iptables命令就可以封杀p2p方面的应用了:
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

netfilter/iptables是一个非常强大的软体,这个只是其中的冰山一角而已,在官网上http://www.netfilter.org可以了解更多的信息。
其实iptables还有很多其他的指令是非常强大的,可以在patch-o-matic-ng-20050331目录中看到有如此多的模块补丁,例如 string可以做字符串内容的过滤,iprang可以做ip地址范围的过滤,time可以做基于时间的过滤,connlimit可以做并发连接数的过滤,quota可以做速率限制的过滤,等等。

关于ipp2p的过滤原理,我简单的浏览了下ipp2p的模块源码,好像是根据各种p2p工具中数据包的特征字符来判断的,具体还没有完全看。

网上有许多此类资料,非常值得参考。
ipp2p的网站,http://www.ipp2p.org

# Generated by iptables-save v1.3.3 on Sun Oct  8 13:57:54 2006
*nat
:PREROUTING ACCEPT [95867:5540921]
:POSTROUTING ACCEPT [52:5248]
:OUTPUT ACCEPT [2:188]
-A POSTROUTING -s 136.17.224.0/255.255.255.0 -o eth0 -j SNAT –to-source 61.128.249.1
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT –to-source 61.128.249.1
COMMIT
# Completed on Sun Oct  8 13:57:54 2006
# Generated by iptables-save v1.3.3 on Sun Oct  8 13:57:54 2006
*filter
:INPUT ACCEPT [2842:228702]
:FORWARD ACCEPT [236687:174374864]
:OUTPUT ACCEPT [2895:371990]
-A INPUT -f -m limit –limit 10/sec –limit-burst 10 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp –tcp-flags FIN,SYN FIN,SYN -j DROP
-A FORWARD -p udp -m udp –dport 69 -j DROP
-A FORWARD -p udp -m udp –dport 1434 -j DROP
-A FORWARD -p tcp -m tcp –dport 4444 -j DROP
-A FORWARD -p udp -m udp –dport 593 -j DROP
-A FORWARD -p tcp -m tcp –dport 593 -j DROP
-A FORWARD -p udp -m udp –dport 135 -j DROP
-A FORWARD -p tcp -m tcp –dport 135 -j DROP
-A FORWARD -p udp -m udp –dport 445 -j DROP
-A FORWARD -p tcp -m tcp –dport 445 -j DROP
-A FORWARD -p udp -m udp –dport 139 -j DROP
-A FORWARD -p tcp -m tcp –dport 139 -j DROP
-A FORWARD -m ipp2p –kazaa –edk –bit -j DROP
-A FORWARD -p tcp -m ipp2p –ares -j DROP
-A FORWARD -p udp -m ipp2p –kazaa -j DROP

发表评论