Linux做路由封P2P的常见方法

[不指定 2005/12/30 17:41 | by ipaddr ]
Linux做路由封P2P的常见方法:

1. P2PWall:基于iptables的p2p限制工具,支持Kazaa、Kazaa Lite、K++、iMesh、Grokster、WinMX协议,不过这几种协议在国内不多见。连接:http://www.lowth.com/p2pwall/,国内可能需要代理才能上;

2. iptables-p2p:iptables的p2p协议状态检测模块,支持dc、bt、edonkey。连接:http://sourceforge.net/projects/iptables-p2p;

3. l7-filter:Linux应用层协议分类器,支持的协议:http://l7-filter.sourceforge.net/protocols。连接:http://l7-filter.sourceforge.net/;

4. snort-inline:snort有检测p2p协议的规则,当然作为IPS的snort-inline也能够限制p2p协议了,不怕麻烦的话,可以尝试一下,连接:http://snort-inline.sourceforge.net/;
Tags: , ,
转至CU

                            IP/MAC捆绑原理及ARP

链路层用mac,网络层用ip:

网络中传输的是IP地址--三层32位地址,终端需要的是MAC地址--两层48位地,

ARP(RARP)都属于3层协议


    网络通信中,两个节点想要通信,必须先知道源与目标的MAC地址。为了让系  

统能快速地找到远程节点的MAC,每一个本地的内核都保存有一个即时的查询表  

(ARP缓存)。  

    ARP中有映射远程主机的IP--->对应的MAC地址的一个列表。地址解析协议  

(ARP)缓存是一个TSR的数据结构,由本地的内核来管理的。Default ARP缓  

存中留有last 10 mins本地系统与之通信的节点的IP地址(和对应的MAC地址)。  

当一个远程MAC存在于本地ARP 缓存中,转换远程节点的IP地址为MAC地址  

no problem。然而,系统在知道一个远程IP,但MAC不在本地ARP缓存中时,是这  

样来获取远程MAC的:本地主机发送一个Broadcast package,询问各节点是否有对  

应的IP。回应是唯一的。在回应包中就包含此MAC。在收到返回包后,本地节点就  

会在本地ARP缓存中记录远程MAC。  

   如果将IP/MAC对应关系中那些合法IP地址建立静态的MAC/IP绑定,那么即使  

非法用户盗用IP地址,linux路由器在回应这些IP发出的连接请求时则不会通过arp协  

议询问其MAC,而是使用Linux建立的静态MAC, 发出应答数据,这样.......  


两种方法
1.
建立/etc/ether,指定正确的IP/MAC对应关系:  

168.192.12.6 XX:AS:YOUR:MAC:WISH:XX  

在/etc/rc.d/rc.local中加:  

arp -f  


2.  

# arp -i eth0 -s 168.192.12.6 XX:AS:YOUR:MAC:WISH:XX  

_____________________________________________________


理智告诉我们:缺憾同优点孪生

                       IP/MAC捆绑缺陷

这种方法本意是用来管理内网的IP,但无心插柳........不过,

缺陷随之表现:即router对发出的包不检查,即使网卡MAC 是未登记的,也可以向外发数据包,而且

可以用伪造的IP,(有的路由器检查源IP范围), 这时候伪造的IP也必须属于子网内的IP.  

还有的server是这样做的:把没有登记的IP对应的MAC一致设为XXXXXXXXXX,这种方法很危险,只要

把网卡的MAC改成XXXXXXXXXX, 就能以任何没有登记的IP出去.......

采用IP/MAC来防止IP盗用不是根本办法:因为不仅所有的网卡MAC都可以修改,而且网卡发

出包的源MAC地址并不是网卡本身write的,而由驱动或APP提供的:他们先从网卡上得到了MAC地址,

每次发送包的时候用此MAC地址,所以等于没有!配置程序修改MAC仅仅靠修改其driver就可以

(Win下利用NDIS就可以).  

注:但基于Link的TCP来说,伪造IP就不是"太"容易,需要TCP连接序号的预测的知识--大有学问呀.

  如有兴趣,到安全网站上去看看,尤其是国外的  

_____________________________________________________


                         软件修改MAC的原理


MAC写在ROM中,在网卡组帧时需要将MAC写入帧中,其并不是直接从ROM中写入帧的,
 
而是从网卡的ARegs中读出,然后由硬件写入帧中,ARegs的内容是Driver在网卡  

初始化时从ROM中读入的.
 
So,我们可以截取NC Driver中相关代码,进而修改MAC.  

在linux下简单实现

#/sbin/ifconfig eth0 down

#/sbin/ifconfig eth0 hw ether 00:AS:YOU:WISH:00

#/sbin/ifconfig eht0 up  

_____________________________________________________


                          关于Switch/MAC/Port

    一般的局域网采用HUB连接,如果换用Switch, 某些Switch可以锁定端口和MAC, 某个端口

只允许指定MAC接入,再加上IP/MAC绑定(还要将Switch加锁), 情况会好许多. 这时  

如有人盗用IP除了要改IP,改MAC,还要将机器搬过来换网线(只要在雇两个保安就可以解决:))

 
这是Linux的ifconfig后一般没有信息(除了log).关键在于合法IP的MAC地址是在router处定好的,

router不会发ARP查询MAC, 因此至少从router外来的包,ARP不会乱:IP的MAC合法,

而非法盗用的IP相当于进入promisc模式, 从合法IP机包中取出属于自己的IP包(port不对的丢弃).

ping, traceroute等ICMP双方(合法非法IP机)可以用, UDP也可以. 但TCP不行(telnet, ftp等),

即合法IP机TCP可用, 盗用者不可用(要是TCP也可以了, 那盗用IP就非常简单了, 根本不用改MAC,

ifconfig/route就可以了)


CU精华文章
路由器的网络地址转换、管理登陆限制、MAC与IP的绑定(作者:xjc1027)

http://chinaunix.net/jh/30/13886.html


_____________________________________________________

几个注意点

1.
攻击方法是把攻击者自己的服务器绑定成攻击目标的IP,这样后者无法正常工作:报警说某一个MAC

地址的IP与其冲突,如何利用这个MAC地址查找到当前的绑定IP?

如果是在同一个网段里的可以发arp请求包,然后再解析arp回复包,即取得mac地址,

至于不在一个网段内的就不能直接取mac了.


2.DHCp&MAC&IP
配置DHCP让一个具体的MAC绑定到一个固定的IP上完全可以,在isc的dhcpd中有一个host字段,

可以定义这个功能,在dhcpd.conf文件中有详细的例子.

自动分配固定内部IP给相应的MAC网卡,对不上MAC的不能上网,但可以强行写上IP,网关,DNS一样

可以上网.修改一下就能实现控制用户上网(不要让人知道你的网关)

 
内网ip最好不要像192.168.0.0/24一样,否则非上网权限用Winxp的用户无需写任何设置一样可以上
-----------------------------------------------------------------
dhcpd.conf  
option domain-name "your";  
option routers 192.168.1.254;  
option domain-name-servers 192.168.1.254;61.144.56.101;  
ddns-update-style none;  
default-lease-time 88600;  
max-lease-time 887200;  

subnet 192.168.1.0 netmask 255.255.255.0 {  
# range 192.168.1.0 192.168.1.0;  

}  
host usr1 { #user1  
hardware ethernet 00:90:99:BD:85:F7;  
fixed-address 192.168.1.21;  
}  
host usr2 { #user2  
hardware ethernet 00:A0:C9:75:A7:45;  
fixed-address 192.168.1.22;  
}  
host usr3 { #user3
hardware ethernet 00:D0:09:59:02:DB;  
fixed-address 192.168.1.23;  
}

当MAC是以上的主机user1.2.3请求分配IP地址时,DHCP会固定的分配相应的IP
--------------------------------------------------------------------

关于用编程获得MAC.IP

CU精华区里有几篇文章很好

1.本地机

http://chinaunix.net/forum/viewtopic.php?t=85716&highlight=MAC

(作者:gadfly)

shell下大致方法:
ifconfig -a  
set - -  
Ip=$..............  
MAC=$..........  



2.子网其他机器

http://chinaunix.net/forum/viewtopic.php?p=870221&highlight=mac#870221

(解答者:gadfly)

---------------------------------------------------------------------

现在防地址盗用的最好方法:

MAC/IP  +   VLAN/PVC

VLAN +  PPPoE
 
Port + MAC/IP
 
-----------------------------------------------------------------------

多个PPTP VPN客户机通过LINUX网关连接VPN服务器

PPTP方式的VPN使用了GRE协议,这个协议跟TCP/UDP是同一级的协议。因为GRE协议没有端口的概念,LINUX不能像TCP/UDP那样IP伪装。所以,LINUX网关后面的pptp vpn客户机连接vpn时总会遇见这种那种的问题。

所以,当只有单个客户机通过linux网关连接VPN的时候,最简单的办法是用iptables把所有GRE协议的包转发给客户机。比如客户机的ip是192.168.0.2,iptables命令是

iptables -t nat -I PREROUTING -p gre -j DNAT --to-destination 192.168.0.2

上面的命令感觉很奇怪,当这个规则输入了,即使立刻删除,也依旧生效,一直过了好久才断掉。

当然,如果客户机连接的vpn ip地址互不相同,还可以根据源ip地址DNAT。但是,当多台机器要连接相同的pptp vpn服务器时,问题就出现了,简单的DNAT规则并不能生效,因为他们都是GRE协议。唯一能分辨的就只有GRE包里面的Class ID。这个ID在默认的linux防火墙上并没有得到支持。解决方法有两个

1,使用2.0版本以上的iptables,里面内置了ip_nat_gre等模块用于支持gre包的ip伪装。这个方案比较复杂,工程浩大,还要给内核打补丁。以后更新内核的时候也更加麻烦。

2,使用pptp proxy(http://www.mgix.com/pptpproxy/)。这是一个用户空间下的gre包转发工具。只要下载源码,编译,得到了pptpproxy。比如你的linux网关内网ip是192.168.0.254,vpn服务器是202.202.202.202,只要运行

pptpproxy -p 192.168.0.254,202.202.202.202

就可以了

这时,vpn客户机只要把192.168.0.254作为vpn服务器ip地址就可以了。

当然,让pptp监听在127.0.0.1,然后配合一些iptables转发规则,甚至可以做成一个透明pptpproxy代理。

pptpproxy还支持多vpn server代理。

如果你运行的是*BSD或者MAC,也许frickin(http://frickin.sourceforge.net/)更符合你的需要

# cp /dev/cdrom /home/cdiso/cd_iso.iso

# dd if=/dev/cdrom of=/home/cdiso/cd_iso.iso

# mkisofs -R -o /home/cdiso/cd_iso.iso /mnt/cdrom

# cat /dev/cdrom > /home/cdiso/cd_iso.iso

让Linux NAT服务器支持UPnP

[不指定 2005/12/19 22:47 | by ipaddr ]
让Linux NAT服务器支持UPnP
=========================================
作者:Nanu
如需转载请注明作者,谢谢!
参考文献:
《UPnP on your Linux 2.4 firewall how-to》 by bijl
《让 Linux NAT 服务器支持 UPnP》 by lonestar
《UPnP为我们献上一道怎样的大餐》 by Sharon Crawford
=========================================

注意:如果对网络安全要求较高或要求高可控制性的网络,则不要安装配置UPnP支持,否则会导致网络NAT映射比较混乱,从而引发许多问题。建议小型网络或者家庭网络使用UPnP。

最近经常使用一些P2P类型软件,发现老得在Linux服务器上手动设置NAT,非常麻烦,而看着许多P2P软件都支持UPnP就眼馋,如果能让Linux支持UPnP那就简单方便多了!于是在网上搜索了一下有关让Linux支持UPnP的文章,于是就写了这篇文章。

一、什么是UPnP

1. UPnP简介
--------------
UPnP(Universal Plug and Play)技术对即插即用进行了扩展,它简化了家庭或企业中智能设备的联网过程。在结合了UPnP技术的设备以物理形式连接到网络中之后,它们可以通过网络自动彼此连接在一起,而且连接过程无需用户的参与

UPnP规范基于TCP/IP协议和针对设备彼此间通讯而制订的其它Internet协议。这就是它之所以被称作"通用(Universal)"的原因所在--UPnP技术不依赖于特定的设备驱动程序,而是使用标准的协议。UPnP设备可以自动配置网络地址,宣布它们在某个网络子网的存在,以及互相交换对设备和服务的描述。基于Windows XP的计算机可以充当一个UPnP控制点,通过程序界面对设备进行发现和控制。

如果与以前的即插即用相比,这种技术似乎并不具有什么革命性的意义。在操作系统中增加即插即用技术使得在单个计算机上安装、配置和添加外设的工作变得更容易了。但是UPnP为家庭用户或者小型办公环境中的非专业用户所带来的是一道更加美味的"大餐",他们可以利用UPnP玩多人游戏,进行实时通信(Internet电话,电话会议)以及使用类似Windows XP的远程协助这样的其它技术。

2. NAT 穿越技术
------------------
NAT穿越技术允许网络应用程序对它们是否位于一个具有UPnP能力的NAT设备之后进行检测。然后,这些程序将获得共享的全球可路由IP地址,并且配置端口映射以将来自NAT外部端口的数据包转发到应用程序使用的内部端口上--所有这一切都是自动完成的,用户无需手动映射端口或者进行其它工作。NAT穿越技术允许网络设备或者点对点应用程序通过动态开启和闭合与外部服务之间的通信端口穿过NAT网关与外界通信。

二、在Linux中部署UPnP支持

我们假设该Linux的内核版本是2.4.x,使用拨号上网,外网接口是ppp0,内网接口是eth0,并且已经启用iptables设定了 NAT。

在Linux中部署UPnP主要使用2个软件的配合:UPnP SDK for Linux和LinuxIGD。

下载地址:
UPnP SDK for Linux: http://sourceforge.net/projects/upnp/
LinuxIGD: http://linux-igd.sourceforge.net/

注意:要下载upnpsdk-1.0.4.tar.gz,1.0.4以上的版本不能和LinuxIGD很好的协同工作!

A. 安装:
----------
1. 解包UPnP SDK
# tar xzvf upnpsdk-1.0.4.tar.gz

2. 修改源代码
为了能够使Windows MSN Messenger在UPnP下正常通讯,所以必须修改源代码:
# cd upnpsdk-1.0.4
# vi src/ssdp/ssdplib.c
将第406行的:

SelfAddr.sin_addr.s_addr = inet_addr(SSDP_IP);

改为:

SelfAddr.sin_addr.s_addr = htonl(INADDR_ANY);

3. 编译安装UPnP SDK
# make
# make install

4. 解包Linux-IGD
# tar xzvf linuxigd-0.92.tgz

5. 编译安装Linux-IGD
# cd linux-igd
# make
# make install

B. 配置
--------
1. 增加多播路由
# route add -net 239.0.0.0 netmask 255.0.0.0 eth0

2. 为iptables建议一个软链接
# cd /usr/sbin
# ln -s /sbin/iptables ./

启动UPnP
# upnpd ppp0 eth0

诊断UPnP运行状态
# tail /var/log/messages

如果能够看到:

Dec  14 16:01:49 doorway -- MARK --
Dec  14 16:02:15 doorway upnpd: The Linux UPnP Internet Gateway Device Ver 0.92 by Dime (dime@gulfsales.com)
Dec  14 16:02:15 doorway upnpd: Special Thanks for Intel's Open Source SDK and original author Genmei Mori's work.

则说明UPnP已经成功启动。

C. 测试
--------
以支持UPnP的P2P网络电视PPLive为例,在PPLive中打开UPnP支持选项,然后连接一个频道。
在Linux中执行:
# tail /var/log/debug -f

如果能看到:

Dec  14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 17 ExtPort: 3226 Int: 10.0.0.2.3226
Dec  14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort: 3226 Int: 10.0.0.2.3226
Dec  14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort:  3156 Int: 10.0.0.2.3156
Dec  14 16:56:33 doorway upnpd: AddPortMap: RemoteHost: (null) Prot: 6 ExtPort:  3156 Int: 10.0.0.2.3156

则说明PPLive已经向UPnP请求进行端口映射了。只要看到这样的字样,就说明UPnP已经完全工作起来了。


clamav第三方软件

[不指定 2005/12/15 22:47 | by ipaddr ]
clamav是一款Linux,Unix下的免费病毒扫描引擎(只是扫描),并且可在线更新。

clamav非常强大,可以做很多应用的病毒扫描引擎,比如Proxy病毒扫描,邮件病毒扫描,Ftp扫描等等。

Clamav官方网站列出了常见的第三方软件,用来实现和不同的应用结合,主要有以下几类:

MTA+ClamAV
POP3+ClamAV
Web/FTP+ClamAV
FileSystem+ClamAV
MUA+ClamAV
GUI+ClamAV
Library+ClamAV
Miscellaneous

详情可查看官方网站说明:

http://www.clamav.net/3rdparty.html

IIS高级管理

[不指定 2005/12/13 22:49 | by ipaddr ]
下面是一位高手整理的问题精华,大家好好看看吧,收获肯定很大的!

  1.如何让asp脚本以system权限运行?

  修改你asp脚本所对应的虚拟目录,把"应用程序保护"修改为"低"....

  2.如何防止asp木马?

  基于FileSystemObject组件的asp木马

  cacls %systemroot%\system32\scrrun.dll /e /d guests //禁止guests使用

  regsvr32 scrrun.dll /u /s //删除

  基于shell.application组件的asp木马

  cacls %systemroot%\system32\shell32.dll /e /d guests //禁止guests使用

  regsvr32 shell32.dll /u /s //删除

  3.如何加密asp文件?

  从微软免费下载到sce10chs.exe 直接运行即可完成安装过程。

  安装完毕后,将生成screnc.exe文件,这是一个运行在DOS PROMAPT的命令工具。

  运行screnc - l vbscript source.asp destination.asp

  生成包含密文ASP脚本的新文件destination.asp

  用记事本打开看凡是""之内的,不管是否注解,都变成不可阅读的密文了

  但无法加密中文。

  4.如何从IISLockdown中提取urlscan?

  iislockd.exe /q /c /t:c:\urlscan

  5.如何防止Content-Location标头暴露了web服务器的内部IP地址?

  执行

  cscript c:\inetpub\adminscripts\adsutil.vbs set w3svc/UseHostName True

  最后需要重新启动iis

  6.如何解决HTTP500内部错误?

  iis http500内部错误大部分原因

  主要是由于iwam账号的密码不同步造成的。

  我们只要同步iwam_myserver账号在com+应用程序中的密码即可解决问题。

  执行

  cscript c:\inetpub\adminscripts\synciwam.vbs -v
  7.如何增强iis防御SYN Flood的能力?

  Windows Registry Editor Version 5.00

  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]

  '启动syn攻击保护。缺省项值为0,表示不开启攻击保护,项值为1和2表示启动syn攻击保护,设成2之后

  '安全级别更高,对何种状况下认为是攻击,则需要根据下面的TcpMaxHalfOpen和TcpMaxHalfOpenRetried值

  '设定的条件来触发启动了。这里需要注意的是,NT4.0必须设为1,设为2后在某种特殊数据包下会导致系统重启。

  "SynAttackProtect"=dword:00000002

  '同时允许打开的半连接数量。所谓半连接,表示未完整建立的TCP会话,用netstat命令可以看到呈SYN_RCVD状态

  '的就是。这里使用微软建议值,服务器设为100,高级服务器设为500。建议可以设稍微小一点。

  "TcpMaxHalfOpen"=dword:00000064

  '判断是否存在攻击的触发点。这里使用微软建议值,服务器为80,高级服务器为400。

  "TcpMaxHalfOpenRetried"=dword:00000050

  '设置等待SYN-ACK时间。缺省项值为3,缺省这一过程消耗时间45秒。项值为2,消耗时间为21秒。

  '项值为1,消耗时间为9秒。最低可以设为0,表示不等待,消耗时间为3秒。这个值可以根据遭受攻击规模修改。

  '微软站点安全推荐为2。

  "TcpMaxConnectResponseRetransmissions"=dword:00000001

  '设置TCP重传单个数据段的次数。缺省项值为5,缺省这一过程消耗时间240秒。微软站点安全推荐为3。

  "TcpMaxDataRetransmissions"=dword:00000003

  '设置syn攻击保护的临界点。当可用的backlog变为0时,此参数用于控制syn攻击保护的开启,微软站点安全推荐为5。

  "TCPMaxPortsExhausted"=dword:00000005

  '禁止IP源路由。缺省项值为1,表示不转发源路由包,项值设为0,表示全部转发,设置为2,表示丢弃所有接受的

  '源路由包,微软站点安全推荐为2。

  "DisableIPSourceRouting"=dword:0000002

  '限制处于TIME_WAIT状态的最长时间。缺省为240秒,最低为30秒,最高为300秒。建议设为30秒。

  "TcpTimedWaitDelay"=dword:0000001e
  8.如何避免*mdb文件被下载?

  安装ms发布的urlscan工具,可以从根本上解决这个问题。

  同时它也是一个强大的安全工具,你可以从ms的网站上获取更为详细的信息。

  9.如何让iis的最小ntfs权限运行?

  依次做下面的工作:

  a.选取整个硬盘:

  system:完全控制

  administrator:完全控制

  (允许将来自父系的可继承性权限传播给对象)

  b.\program files\common files:

  everyone:读取及运行

  列出文件目录

  读取

  (允许将来自父系的可继承性权限传播给对象)

  c.\inetpub\wwwroot:

  iusr_machine:读取及运行

  列出文件目录

  读取

  (允许将来自父系的可继承性权限传播给对象)

  e.\winnt\system32:

  选择除inetsrv和centsrv以外的所有目录,

  去除“允许将来自父系的可继承性权限传播给对象”选框,复制。

  f.\winnt:

  选择除了downloaded program files、help、iis temporary compressed files、

  offline web pages、system32、tasks、temp、web以外的所有目录

  去除“允许将来自父系的可继承性权限传播给对象”选框,复制。

  g.\winnt:

  everyone:读取及运行

  列出文件目录

  读取

  (允许将来自父系的可继承性权限传播给对象)

  h.\winnt\temp:(允许访问数据库并显示在asp页面上)

  everyone:修改

  (允许将来自父系的可继承性权限传播给对象)

  10.如何隐藏iis版本?

  一个黑客可以可以轻易的telnet到你的web端口,发送get命令来获取很多信息

  iis存放IIS BANNER的所对应的dll文件如下:

  WEB:C:\WINNT\SYSTEM32\INETSRV\W3SVC.DLL

  FTP:C:\WINNT\SYSTEM32\INETSRV\FTPSVC2.DLL

  SMTP:C:\WINNT\SYSTEM32\INETSRV\SMTPSVC.DLL

  你可以用16进制编辑器去修改那些dll文件的关键字,比如iis的Microsoft-IIS/5.0

  具体过程如下:

  1.停掉iis iisreset /stop

  2.删除%SYSTEMROOT%\system32\dllcache目录下的同名文件

  3.修改

代理服务squid+squidGuard的安装

[不指定 2005/12/13 22:48 | by ipaddr ]
参考SkyUranus的《Linux下的代理服务器设置》ipaddr整理

前言:
本文主要介绍了在linux使用squid和squidGuard配置代理服务器,以www代理服务为例介绍如何过滤有害站点和限制用户对internet

的访问。

一. 介绍
Squid是Linux下最为流行的代理服务器软件,它功能强大,支持对HTTP,FTP,Gopher,SSL和WAIS等协议的代理;设置简单,只需对

配置文件中稍稍改动就可使代理服务器运转起来。而且Squid具有页面缓存功能,它接收用户的下载申请,并自动处理所下载的数据

。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主

页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度

相当快。
squidGuard则是作为squid的辅助软件,完成过滤、重定向和访问控制的功能。它是一个自由软件,功能强,便于安装、易于配置、

而且处理速度快。功能主要包括:根据web服务器或URLs列表限制一些用户的访问;阻塞某些用户对黑名单上的web服务器和URLs的访

问;阻塞某些用户对正则表达式匹配的URLs的访问;在URL路径加强了使用域名访问而禁止用IP访问;重定向阻塞的URLs到一个智能

CGI的信息页;重定向非授权用户到一个注册页面;具有基于日期、每周、每天具体时间的访问规则;对不同用户组有不同的规则。

但是不能过滤、检查文档中的文本以及HTML中的JavaScript或Vbscript脚本语言。

二. 安装
1。安装squid:
从www.squid-cache.org下载squid-2.5.STABLE12.tar.gz存在本地/usr/local/squid/src下。
在编译Squid之前,建立一个专门运行Squid的用户和组,这里建立了名为squid的组和用户,用户目录设为/usr/local/squid
#su squid
$cd /usr/local/squid/src
$tar xvzf squid-2.5.STABLE12.tar.gz
$ cd squid-2.5.STABLE12
$./configure
$make
$make install
(默认安装到/usr/local/squid目录下)
//默认RH系统里有squid用户和组

2。安装Berkeley DB 2.x:
从http://www.sleepycat.com 下载db-2.7.7.tar.gz并存在/usr/local/squidGuard/src/目录下
$su
#cd /usr/local/squidGuard/src/
#tar xvzf db-2.7.7.tar.gz
#cd db-2.7.7
#cd build_unix
//不能在根目录直接configure,必须先进入build_unix,再../dist/configure
#../dist/configure
#make
#make install
(默认安装到/usr/local/BerkeleyDB目录下)
注意:squidGuard不支持Berkeley DB 3.x,4.x版本

3。安装squidGuard
官方网站:http://www.squidguard.org
从http://ftp.ost.eltele.no/pub/www/proxy/squidGuard/squidGuard-1.2.0.tar.gz下载软件包并存于本

地/usr/local/squidGuard/src/
#cd /usr/local/squidGuard/src/
#tar xvzf squidGuard-1.2.0.tar.gz
#cd squidGuard-1.2.0
#./configure --prefix=/usr/local/squidGuard
#make
#make test //测试ok,即可进行下一步安装
#make install

三. 配置
1.配置squid:
修改squid的配置文件/usr/local/squid/etc/squid.conf:
http_port 8080
#squid的代理端口,使用1024以下的端口,squid必须以root身份运行,一般以3128端口运行,开了防火墙的话,注意要打开

iptables的端口限制。
http_access allow all
#允许所有的用户通过代理进行http访问

#squid启用squidGuard进行过滤和转发
#/usr/local/squid/bin/squidGuard是squidGuard的执行路径,后面-c是配置文件的路径
redirect_program /usr/local/squid/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
#派生5个squidGuard进程
redirect_children =5


其它参数:
#cache_mem:设置代理服务使用的内存大小,一般推荐为物理内存的三分之一
cache_mem 16 m
#cache_dir:设定缓存的位置、大小。一般格式如下:
cache_dir /usr/local/squid/cache 100 16 256
#/usr/local/squid/cache代表缓存的位置;100代表缓存最大为100M;16和256代表一级和二级目录数。
#cache_effective_user:设定使用缓存的有效用户。缺省为用户nobody,如果系统中没有用户nobody,最好建一个或以非root用户

运行Squid。这里是以squid身份运行的
cache_effective_user squid
#cache_effective_group:设定使用缓存的有效用户组。缺省组为nogroup,如果系统中没有组nogroup,最好建一个组。这里是

squid组。
cache_effective_group squid
(其余参数用默认值即可!)

2.配置squidGuard:
修改squidGuard的配置文件/usr/local/squidGuard/squidGuard.conf文件:

logdir /usr/local/squidGuard/logs #日志目录定义
dbhome /usr/local/squidGuard/db #db目录定义

#目标组定义
dest ipaddr {
domainlist ipaddr/domains
urllist ipaddr/urls
expressionlist ipaddr/expressions
}

#访问规则定义
acl {
default {
pass !ipaddr all
redirect http://192.168.0.1/error
(
#也可以重定向到一个含有一些信息的cgi页面,如下:
http://192.168.0.1/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
#也可以重定向到www.google.com
)
}
}

# vi db/ipaddr/domains
(域列表文件:主要是阻塞一些定义的站点)
co.za
sex.com
(如上,可以阻塞如hack.co.za、sex.com、www.sex.com、whatever.sex.com,但是不同于.*[^.]sex.com,不匹配ssex.com)

# vi db/ipaddr/urls
(url列表文件,主要是阻塞一些站点及其一些栏目)
qihui.com/sex
valen.sohu.com/album
(如上可阻塞http://qihui.com/sex、http://qihui.com/sex/whatever、ftp://qihui.com/sex、http://www.qihui.com/sex等)

# vi db/ipaddr/expressions
(表达式列表文件,主要是阻塞一些与表达式匹配的URL访问)
(^│[\?+=/])(.*)(girl)(.*)([\?+=/]│$)
(上面的正则表达式可以阻塞URL中包括girl站点的访问,如:www.girlzine.com、girl.huabao.net、www.huayu.net/girl、

www.universiti.com/girl等 )

注意:squidGuard对配置文件的语法要求很严,如果配置文件语法有误,squidGuard仍能运行,但是squidGuard已进入应急模式,此

时代理服务不具有任何阻塞作用,所有通过该代理的访问都可通过,可以查看logs/squidGuard的日志文件,即可发现错误,例如:
2001-12-20 17:08:44 [2430] parse error in configfile /usr/local/squidGuard/squidGuard.conf line 8
2001-12-20 17:08:44 [2430] going into emergency mode
…….
其中配置文件第8行有误,squidGuard进入应急模式。
配置的具体说明详见http://www.squidguard.org/

---------日志的存放----------------
squidGuard的日志是检查配置是否正确的工具。如果日志里出现了going into emergency mode,说明配置不成功。
默认squidGuard的日志存放[--prefix]/squidGuard/log/squidGuard.log,我们安装时--prefix=/usr/local/squidGuard,所以,还

需要:
mkdir /usr/local/squidGuard/squidGuard
mkdir /usr/local/squidGuard/squidGuard/log
chown squid.squid mkdir /usr/local/squidGuard/squidGuard
启动后,日志存放在/usr/local/squidGuard/squidGuard/log/squidGuard.log
此外,也可以在squidGuard的./configure时指定默认的日志文件
---------日志的存放----------------
#squidGuard的更多配置的安装,在squidGuard的安装包squidGuard-1.2.0.tar.gz有详细介绍。


四. 运行:
$ chmod 777 /usr/local/squid/logs
(设置logs对所有用户为可写。这样,不特定的squid代理客户才能正常访问代理服务器,并能在logs目录、产生access.log、

cache.log等文件。)
$ /usr/local/squid/bin/squid -z
(手工建立squid的缓存目录/usr/local/squid/cache。)
(cache有时默认是/usr/local/squid/var/cache)
(设置了cache_effective_user和cache_effective_group为squid时,还需要chown squid.squid -R /usr/local/squid/cache)
#/usr/local/squid/bin/squid
(后台执行squid。如果想前台执行squid:如果你想前台执行Squid执行命令:
  $/usr/local/squid/bin/squid -NCd1
  该命令正式启动Squid。如果一切正常,你会看到一行输出:
  Ready to serve requests )
# ps ax│grep squid
20198 ? S 0:00 /usr/local/squid/bin/squid
20200 ? S 0:27 (squid)
20310 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20311 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20312 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20313 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20314 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
(此时squidGuard也已启用,每次修改配置后squid -k reconfigure重新起用即可,要杀掉squid执行squid -k kill)
查看squidGuard日志文件:
init domainlist /usr/local/squidGuard/db/ipaddr/domains
2001-12-20 16:14:43 [2270] init domainlist /usr/local/squidGuard/db/ipaddr/domains
2001-12-20 16:14:43 [2270] init urllist /usr/local/squidGuard/db/ipaddr/urls
2001-12-20 16:14:43 [2270] init expressionlist /usr/local/squidGuard/db/porn/expressions
2001-12-20 16:14:43 [2270] squidGuard 1.1.4 started (1008836083.022)
2001-12-20 16:14:43 [2270] recalculating alarm in 917 seconds
2001-12-20 16:14:43 [2270] squidGuard ready for requests (1008836083.044)
表示squidGuard已正常启动

五. 测试:
配置客户端,然后测试代理服务:
在另一台win2k上,(以Internet Explore5.0为例)运行IE,单击"工具",接着单击"Internet选项",再单击"连接"选项卡,单击"

局域网设置";在"局域网设置"窗口中,在"地址"处填上squid服务器的IP地址192.168.100.16,在"端口"处填上"8080"(修改后

squid代理使用的端口号,也就是squid.conf中的http_port,默认值为3128),确定后退出。
接下来,先把IP改成192.168.100.20,浏览一些网站,如sohu,163等,然后再试试domains和urls中定义的,如hack.co.za、qihui.com/sex,会发现主页被重定向到http://www.google.com。然后再试试浏览有关girl的网站,去不了了:(;在sohu中搜girl

也被重定向了;用IP试试(有些代理程序对IP不做限制,用IP可以绕过代理的限制访问一些禁止的站点),可惜不行!(因为

squidGuard配置文件中使用了!in_addr,所以可以强迫用户使用域名访问而不能使用ip访问)
再下来,把IP改成192.168.100.18,然后时间改为testtime外的时间,浏览网页,试试结果,然后再将时间改为testtime内浏览网页


最后,把IP改成192.168.100.30,浏览网页测试。
(可以查看logs下的access.log和cache.log,看看是否代理运行正常以及访问的站点记录)

总结:
由上可见,用squid和squidGuard建立的代理服务器,配置比较简单,而且功能强大,可以有效的限制一些用户对internet的访问并

过滤一些黑名单列出的站点(如色情站点等)。
这里只简单的介绍了关于http代理的例子,其它的应用和功能大家可以自己试试。


分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]