标题: squid+squidGuard能否实现透明代理?
zjj2002
LU新生
Rank: 1



UID 18551
精华 0
积分 3
帖子 6
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-4-20
 
发表于 2004-5-11 11:27  资料  个人空间  短消息  加为好友 
squid+squidGuard能否实现透明代理?

顶部
无花果
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14
吻下去爱上你



UID 1080
精华 1
积分 339
帖子 674
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2003-10-28
来自 北京朝阳顺景园
 
发表于 2004-5-11 13:54  资料  个人空间  主页 短消息  加为好友 
透明代理要实现的是客户端不用设置代理,当浏览网页的请求到达网关时自动送到代理服务器去完成请求任务.

没有iptables或ipchains估计不能完成这件任务吧?

我没用过squidguard,不知道他是不是能控制netfilter完成这些事情.





欲知前世因,今生受者是。
欲知来世果,今生作者是。
顶部
rhinofly
LU幼天使
Rank: 2
-RhinoFly-



LU爱心使者  
UID 275
精华 2
积分 142
帖子 276
活跃指数 0
LU金币 2007 个
LU金条 0 个
阅读权限 20
注册 2003-10-2
来自 -
 
发表于 2004-5-11 18:14  资料  个人空间  主页 短消息  加为好友 
可以。

不要问怎么实现,资料够多了。





阿土的阿,阿土的土.
-
蜗牛阿土
-
顶部
~贝贝~
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
X~M~K~--MM


UID 5753
精华 22
积分 1795
帖子 3478
活跃指数 18
LU金币 2634 个
LU金条 0 个
阅读权限 200
注册 2003-12-13
来自 游乐园
 
发表于 2004-5-11 20:29  资料  个人空间  短消息  加为好友  添加 ~贝贝~ 为MSN好友 通过MSN和 ~贝贝~ 交谈
iptables+NAT+squid 透明代理上网实现方案


平台:RedHat8.0 各组件均为Linux 自带,双网卡eth0为出口地址,eth1为连接内网地址,网络连接正常。

实现步骤:

一。做IP地址翻译,让局域网内机器能够连入互联网。

#加载模块
modprobe ip_tables
modprobe iptable_nat
modprobe iptable_filter
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
#ip翻译(伪装)
iptables -t nat -A POSTROUTING -s 172.28.0.0/16 -o eth0 -j SNAT --to x.x.x.x

注:172.28.0.0/16为内网地址,x.x.x.x为这台机器的外部接口地址。

客户端只需将自己的网关设置为这些命令就实现了让内网机器上网的目的!如果想用代理服务器提供HTTP的缓存功能接 着做:

二。代理服务器

#修改配置文件----squid.conf
cd /etc/squid
cp squid.conf.defauld squid.conf
#切记!这点重要,因为二者文件有所不同!!!

行数 修改
48 http_port 80
405 cache_mem 80 MB #大小自己改
1466 http_access allow all
1650 httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

最后一步运行squid:
cd /etc/init.d
./squid start

#以上是最简单的设置,至于怎么优化squid请参考其他资料。

这样,客户端实际上是通过代理方式浏览网页(其他服务则不通过代理服务!)。
这样做的最大神奇之处在于:
1.客户断完全感觉不到代理服务器的存在,IE不用做任何设置!
2.你可以随时启动/关闭squid,客户端完全不受影响!(够神奇吧?!)


三.补充

以下两句最好写进 /etc/rc.d/rc.local,因为这两条记录重起机器后就失效了。
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.28.0.0/16 -o eth0 -j SNAT --to x.x.x.x




注: [color=red:eef1554163][size=18:eef1554163]这部分内容目前实现的功能主要就是一个nat的转换的功能,对于squid方便的功能还没有加上来,如果想实现iptables + squid的结合的话,必须在规则里加上如下一条:
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 172.28.0.0/16 --dport 80 -j REDIRECT --to-port 3128





^_^MSN:wangbei_1123@hotmail.com
顶部
~贝贝~
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
X~M~K~--MM


UID 5753
精华 22
积分 1795
帖子 3478
活跃指数 18
LU金币 2634 个
LU金条 0 个
阅读权限 200
注册 2003-12-13
来自 游乐园
 
发表于 2004-5-11 20:30  资料  个人空间  短消息  加为好友  添加 ~贝贝~ 为MSN好友 通过MSN和 ~贝贝~ 交谈
Linux下的代理服务器设置

创建时间:2001-10-23
文章属性:原创
文章来源:psef@163.com
文章提交:psef (psef_at_163.com)

Linux下的代理服务器设置
     
前言:
本文主要介绍了在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中的javs script或Vbscript脚本语言。

二. 安装
1。安装squid:
从www.squid-cache.org下载squid-2.4.STABLE2-src.tar.gz存在本地/usr/local/squid/src下。
在编译Squid之前,建立一个专门运行Squid的用户和组,这里建立了名为squid的组和用户,用户目录设为/usr/local/squid
#su squid
$cd /usr/local/squid/src
$tar xvzf squid-2.4.STABLE2-src.tar.gz
$ cd squid-2.4.STABLE2
$./configure
$make
$make install
(默认安装到/usr/local/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
#../dist/configure
#make
#make install
(默认安装到/usr/local/BerkeleyDB目录下)
注意:squidGuard不支持Berkeley DB 3.x版本

3。安装squidGuard
从http://ftp.ost.eltele.no/pub/www/proxy/squidGuard/squidGuard-1.1.4.tar.gz下载软件包并存于本地/usr/local/squidGuard/src/
#cd /usr/local/squidGuard/src/
#tar xvzf squidGuard-1.1.4.tar.gz
#cd squidGuard-1.1.4
#./configure --with-sg-config=/usr/local/squidGuard/squidGuard.conf
--with-sg-logdir=/usr/local/squidGuard/logs
--with-sg-dbhome=/usr/local/squidGuard/db
#make
#make test //测试ok,即可进行下一步安装
#make install

三. 配置
1.配置squid:
修改squid的配置文件/usr/local/squid/etc/squid.conf:
http_port 8080
#squid的代理端口,使用1024以下的端口,squid必须以root身份运行
http_access allow all
#允许所有的用户通过代理进行http访问
redirect_program /usr/local/squid/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
#squid启用squidGuard进行过滤和转发
其它参数:
cache_mem:设置代理服务使用的内存大小,一般推荐为物理内存的三分之一
cache_dir:指定cache目录的路径,默认为/usr/local/squid/cache。
maximum_object_size: 指定Squid可以接收的最大对象的大小。Squid缺省值为4M,可以根据自己的需要进行设定。
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_group:设定使用缓存的有效用户组。缺省组为nogroup,如果系统中没有组nogroup,最好建一个组。这里是squid组。
 (其余参数用默认值即可!)

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

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

time testtime { #时间规则定义
weekly mtwhf 05:00 - 10:30
weekly as 08:00 - 19:00
date *-*-01 08:00 - 16:30
date 2001.10.01 - 2001.10.09
}

src admin { #源组定义
ip 192.168.100.18
}

src client{
ip 192.168.100.20 192.168.100.21 192.168.100.22
ip 192.168.200.0/24
}

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

acl { #访问规则定义
admin within testtime {
pass !porn all
} else {
pass all
}

client {
pass !in-addr !porn all
}

default {
pass none
redirect http://admin.foo.com
(#也可以重定向到一个含有一些信息的cgi页面,如下:
http://admin.foo.com/cgi/blocked?clientadd...oup=%t&url=%u)
}
}

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

# vi db/porn/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/porn/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/

四. 运行:
$ chmod 777 /usr/local/squid/logs
(设置logs对所有用户为可写。这样,不特定的squid代理客户才能正常访问代理服务器,并能在logs目录、产生access.log、cache.log等文件。)
$ /usr/local/squid/bin/squid -z
(手工建立squid的缓存目录/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/porn/domains
2001-12-20 16:14:43 [2270] init domainlist /usr/local/squidGuard/db/porn/domains
2001-12-20 16:14:43 [2270] init urllist /usr/local/squidGuard/db/porn/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://admin.foo.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代理的例子,其它的应用和功能大家可以自己试试。





^_^MSN:wangbei_1123@hotmail.com
顶部
zjj2002
LU新生
Rank: 1



UID 18551
精华 0
积分 3
帖子 6
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-4-20
 
发表于 2004-5-11 22:14  资料  个人空间  短消息  加为好友 
谢谢~贝贝~的热心回答!不过你给的那两篇资料都不符合要求啊!第一篇虽然是透明代理但与squidGuard没有任何关系!第二篇虽然是用squidGuard,但不是透明代理啊!

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
zjj2002
LU新生
Rank: 1



UID 18551
精华 0
积分 3
帖子 6
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-4-20
 
发表于 2004-5-11 22:19  资料  个人空间  短消息  加为好友 
QUOTE(rhinofly @ 2004-05-11 18:14:15)
可以。

不要问怎么实现,资料够多了。

既然有那么多的资料给个链接好吗?一个就够了!

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
~贝贝~
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
X~M~K~--MM


UID 5753
精华 22
积分 1795
帖子 3478
活跃指数 18
LU金币 2634 个
LU金条 0 个
阅读权限 200
注册 2003-12-13
来自 游乐园
 
发表于 2004-5-11 23:05  资料  个人空间  短消息  加为好友  添加 ~贝贝~ 为MSN好友 通过MSN和 ~贝贝~ 交谈
QUOTE(zjj2002 @ 2004-05-11 22:14:24)
谢谢~贝贝~的热心回答!不过你给的那两篇资料都不符合要求啊!第一篇虽然是透明代理但与squidGuard没有任何关系!第二篇虽然是用squidGuard,但不是透明代理啊!

unsure.gif unsure.gif unsure.gif
对你没有帮助啊
不是你想要的东西啊???

smile.gif rhinofly GG我已经帮你问过了
他说资料都是英文的,中文讲解这个的资料很少很少





^_^MSN:wangbei_1123@hotmail.com
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
zjj2002
LU新生
Rank: 1



UID 18551
精华 0
积分 3
帖子 6
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-4-20
 
发表于 2004-5-12 08:03  资料  个人空间  短消息  加为好友 
那我再到英文网站找找,再次感谢~贝贝~小姐!

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无花果
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14
吻下去爱上你



UID 1080
精华 1
积分 339
帖子 674
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2003-10-28
来自 北京朝阳顺景园
 
发表于 2004-5-12 08:31  资料  个人空间  主页 短消息  加为好友 
QUOTE(zjj2002 @ 2004-05-11 22:14:24)
谢谢~贝贝~的热心回答!不过你给的那两篇资料都不符合要求啊!第一篇虽然是透明代理但与squidGuard没有任何关系!第二篇虽然是用squidGuard,但不是透明代理啊!

要学会变通...

给你两篇文章,难道你就会把它看两篇文章吗?





欲知前世因,今生受者是。
欲知来世果,今生作者是。
顶部
zjj2002
LU新生
Rank: 1



UID 18551
精华 0
积分 3
帖子 6
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-4-20
 
发表于 2004-5-12 09:21  资料  个人空间  短消息  加为好友 
QUOTE(无花果 @ 2004-05-12 08:31:48)
要学会变通...

给你两篇文章,难道你就会把它看两篇文章吗?

那倒不是,那两篇资料我是在以前看过的(因为比较经典,所以记忆深刻),还有一些其它资料,在我看过的资料中,没有涉及squidGuard与透明代理的,加之对squidGuard也不熟悉,所以前来向各位请教,想一解心中疑惑!无花果大哥说的也对,虚心接受!我在问这问题之前,没有对squidGuard做比较深入的了解!

顶部
 



当前时区 GMT+8, 现在时间是 2008-12-5 14:42
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.085261 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver