Oracle/DB2/Postgresql/Mysql/Hadoop/Greenplum/Postgres-xl/Mongodb
分类: LINUX
2011-11-11 01:02:52
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文件,以便确定内核版本
(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)
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、更新升级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的版本)
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
此外还有针对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吧!哈哈