qq xunlei
这些影响网络性能的应用程序,iptables + netfilter
本身是不提供这种过滤机制的,如果需要实现上面的功能,就需要通过第三方的补丁软件来提供上述功能,并且需要注意的是netfilter
实现的是规则的执行,iptables
实现的是规则的制定,所以需要向两个都打补;linux.26.29
内核,并且向内核提供补丁文件[root@server14 src]# xz -d linux-2.6.28.1.tar.xz
[root@server14 src]# tar -xf netfilter-layer7-v2.22.tar.gz
[root@server14 src]# ln -sv linux-2.6.28.1 linux
[root@server14 linux]# patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
[root@server14 linux]# cp /boot/config-2.6.18-308.el5 .config
make menuconfig
General setup ---> () Local version - append to kernel release
Networking support ---> Networking options --->
[*] Network packet filtering framework (Netfilter) --->
Core Netfilter Configuration --->
<M> Netfilter connection tracking support
"state" match support
"layer7" match support
"iprange" address range match support
"conntrack" connection tracking match support
"connlimit" match support"
" connbytes" per-connection counter match support
<M> FTP protocol support
netfilter
的信息Networking support ---> Networking options --->
[*] Network packet filtering framework (Netfilter) --->
IP: Netfilter Configuration --->
IPv4 connection tracking support (required for NAT)
<M> Full NAT
<M> MASQUERADE target support
<M> NETMAP target support
<M> REDIRECT target support
M
表示作为模块,进行编译,*
:表示作为内核核心的一部分;ssh
链接的虚拟机或者服务器,建议使用screen
命令,然后执行make
,防止链接中断,编译停止[root@server14 linux]# make
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf -s arch/x86/Kconfig
........这个过程需要好久,好久
2048MB
以上,并且虚拟机里面不建议使用make -j #
,这个选项,几次使用的经历都出现了虚拟机自动关机的情况;make
之后,执行[root@server14 linux]# make modules_install
这个过程大约几分钟
[root@server14 linux]# make install
[root@server14 linux]# vim /etc/grub.conf
[root@server14 ~]# shutdown -r now
[root@server14 ~]# cp /etc/init.d/iptables /mnt/
[root@server14 ~]# cp /etc/sysconfig/iptables-config /mnt/
[root@server14 ~]# cp /etc/sysconfig/iptables /mnt/iptablesRules
[root@server14 ~]# /etc/init.d/iptables stop
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
[root@server14 ~]# chkconfig iptables off
iptables
相关的软件包[root@server14 ~]# rpm -e iptables-ipv6 iptables iptstate --nodeps
warning: /etc/sysconfig/iptables-config saved as /etc/sysconfig/iptables-config.rpmsave //这个信息表示保存了一份之前安装的配置文件
iptables
的软件包[root@server14 src]# tar xf iptables-1.4.6.tar.bz2
[root@server14 extensions]# pwd
/usr/src/iptables-1.4.6/extensions
[root@server14 extensions]# cp ../../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* .
其实只有两个文件
[root@server14 iptables-1.4.6]# ./configure --prefix=/usr --with-ksource=/usr/src/linux
iptables
脚本里面的环境变量和使用make
安装的脚本路径不一致,所以这样进行安装,需要修改iptables
里面的路径[root@server14 iptables-1.4.6]# vim /mnt/iptables
if [ ! -x /usr/sbin/$IPTABLES ]; then
echo -n $"/usr/sbin/$IPTABLES does not exist."; warning; echo
exit 0
fi
[root@server14 iptables-1.4.6]# cp /mnt/iptables /etc/init.d/
[root@server14 iptables-1.4.6]# chkconfig --add iptables
[root@server14 iptables-1.4.6]# chkconfig --list | grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@server14 iptables-1.4.6]# cp /mnt/iptables-config /etc/sysconfig/
iptables
服务[root@server14 ~]# /etc/init.d/iptables start
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: nat filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Loading additional iptables modules: ip_conntrack_netbios_n[ OK ]
nf_nat_ftp
修改配置文件添加[root@server14 ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_nat_ftp ip_conntrack_netbios_ns"
提供协议特征包
layer7
的过滤需要使用只idng特定的协议特征,协议特征包使用软件l7-protocols-2009-05-28.tar.gz
软件包来提供;make install
[root@server14 src]# tar -xf l7-protocols-2009-05-28.tar.gz
[root@server14 src]# cd l7-protocols-2009-05-28
[root@server14 l7-protocols-2009-05-28]# make install
mkdir -p /etc/l7-protocols
cp -R * /etc/l7-protocols
iptables
[root@server14 l7-protocols-2009-05-28]# service iptables restart
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
Applying iptables firewall rules: [ OK ]
Loading additional iptables modules: nf_nat_ftp ip_conntrac[ OK ]s_ns
[root@server14 l7-protocols-2009-05-28]# ll /etc/l7-protocols/protocols/
关于需要layer7
的基础环境配置已经完成了,接下来需要三台主机来模拟进行实验
server12.com: 192.169.10.20/24表示内网主机
server14.com:两个地址172.25.23.14/24虚拟为互联网地址; 192.168.10.100/24:表示内网主机,并且作为网关地址;
server20.com:172.25.23.30/24表示为互联网地址
这里添加一个windows xp professional 的主机,用来安装qq,等软件,IP地址为192.168.10.40/24
首先配置windows xp
的网络,并且测试网络是否正常
TCP/IP
点击属性 SNAT
规则用于将内网地址转换层虚拟的外网地址[root@server14 ~]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.25.23.14
192.168.10.0/24
网段的主机访问172.25.23.14
,接下来需要添加规则,配置真机允许172.25.23.14/25
能够连上互联网[root@my Desktop]# iptables -t nat -I POSTROUTING -s 172.25.23.14 -j MASQUERADE
[root@my Desktop]# iptables -I FORWARD -s 172.25.23.14 -j ACCEPT
[root@server14 ~]# iptables -A FORWARD -s 192.168.10.0/24 -m layer7 --l7proto qq -j REJECT
QQ
,这里显示由于防火墙的设置,导致登陆失败 QQ
对应的报文 QQ
访问 QQ
进行确认,说明登陆已经是成功的了,截一张小图,说明QQ
已经登陆成功,在QQ
已经登陆的情况下,添加上述规则,查看QQ
是否会被强制下线;QQ
并不能够强制进行下线,所以状态仍然为在线 这个QQ
版本使用的是最新的版本,上面的规则是可以进行生效的;
因为上面重新编译了kernel iptables
并且在指定模块时将time
模块加入了,所以这里是可以使用iptables
的time
扩展模块的
time
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!] --monthdays day[,day...]
[!] --weekdays day[,day...]
start
和stop
必须是结合起来使用的time
模块来实现对于QQ
的访问限制 [root@server14 ~]# iptables -R FORWARD 1 -m time --timestart 08:10:00 --timestop 12:00:00 -j DROP
[root@server14 ~]# iptables -A FORWARD -m time --timestart 14:10:00 --timestop 18:00:00 -j DROP