Mar 9

[原]用squid实现身份认证的代理 多云

linuxing , 16:48 , 网络服务 » 常见服务 , 评论(0) , 引用(0) , 阅读(30732) , Via 本站原创 | |
   前面说了,我没法在Apache做的代理下实现身份认证,这样即使代理可以用,但也是很危险的。所以,我宁愿浪费一点资源,还是用squid来做吧。
一、平台
操作系统:红旗DC Server 5.0 Sp2
应用软件:Squid 2.5 Stable
引用
# rpm -qa|grep squid
squid-2.5.STABLE6-3.4E.12

二、准备
同样的,我要实现的就是“一个使用身份认证的代理服务器”,目标很明确也很简单。先是准备好密码文件:
htpasswd -c /etc/httpd/conf/password linuxing

该命令的使用,请参考前面的《日志》
接着,需知道NCSA认证的程序,它在这里:
# ll /usr/lib/squid/ncsa_auth
-rwsr-x---  1 root squid 10144 2006-01-01  /usr/lib/squid/ncsa_auth

为简单期间,可建立一个链接:
ln -sf /usr/lib/squid/ncsa_auth /usr/bin/

三、配置
需要修改的是/etc/squid/squid.conf,请小心权限:
# ll /etc/squid/squid.conf*
-rw-r-----  1 root squid 115731 2006-01-01  /etc/squid/squid.conf
-rw-r--r--  1 root root  115731 2006-01-01  /etc/squid/squid.conf.default

开始,两个文件是相同的,当squid.conf配置混乱的使用,和用squid.conf.default覆盖并修改组权限即可。在squid.conf文件中,很详细的说明了每个参数的功能,我就不一一写了,只写我需要修改和增加的:
1、首先是端口
修改为:
引用
http_port 3128

这也是默认端口,因为我对外是动态分配的,无法固定IP。若您自需要对内部的局域网服务,可写成:
引用
http_port 192.168.228.180:3128

2、配置cache目录
约696行,修改为:
引用
cache_dir ufs /var/spool/squid 100 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

如果,你只是想做一些专有系统,例如我就转VPN连接的,可以不用cache:
引用
cache_dir null /tmp

3、配置用户认证
约1262行,修改为:
引用
auth_param basic program /usr/bin/ncsa_auth /etc/httpd/conf/password
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

4、访问控制
这个也是squid强大的其中一个地方,其可通过IP地址、主机名、MAC地址、用户/密码认证等方式识别及控制对外访问,还可限制时间段等。
ACL的基本格式是:
引用
acl 列表名称 控制方式 控制目标

在1800行后是默认配置,身份认证是加入:
引用
acl client proxy_auth REQUIRED

然后是对上述定义的列表进行访问控制,用的是http_access命令:
引用
http_access deny/allow 列表名称(用空格分割)

该控制是从上往下读取的,只要符合上面的设定的,就会允许,不会再继续读取。所以,若有用户不希望进行身份认证的话,必须在设置对client的控制前设置:
引用
http_access allow advuser localhost
#上面的advuser列表中的用户不会收用户身份认证控制
http_access allow client
http_access deny !Safe_ports
#"!"号是"非"的意思

记住,squid虽然默认是中断所有的,但还是建议在最后写入:
引用
http_access deny all

至此,配置完成。
四、其他
1、用squid做透明代理
必须先配置好linux的iptables代理,然后通过修改配置为:
引用
httpd_accel_host virtual  
httpd_accel_port 80  
httpd_accel_with_proxy on  
httpd_accel_user_host_header on

然后把发到80的协议都通过squid转发即可:
iptables -t nat -A PREROUTING -s 192.168.228.0/24 -p tcp --dport 80 -j REDIRECT 3128

2、其他控制
通常的控制有:
引用
acl normal src 192.168.228.11-192.168.228.200/24
acl baddst dst www.tencent.com
acl advance arp 00:01:03:1f:2e:3e 00:01:03:3c:1a:3c
acl qqwww1 dstdomain www1.tencentt.com
(注意,这个只对域名,其他的www2等域名都是没有控制的)
acl qq dstdomain .tencentt.com
(这个是由“.”号控制了,所有后缀tencent.com都会受控)
acl mmxfile urlpath_regex \.mp3$ \.avi$ \.exe$
(对url进行匹配,可用于防止某些下载)
acl worktime time MTWHF 8:30-12:00 13:00-18:00
(可定义工作时间,结合“!”号,可控制非工作时间的情况)

更多的,请仔细阅读squid.conf.default和man
Tags: ,
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]