前面说了,我没法在Apache做的代理下实现身份认证,这样即使代理可以用,但也是很危险的。所以,我宁愿浪费一点资源,还是用squid来做吧。
一、平台
操作系统:红旗DC Server 5.0 Sp2
应用软件:Squid 2.5 Stable
squid-2.5.STABLE6-3.4E.12
二、准备
同样的,我要实现的就是“一个使用身份认证的代理服务器”,目标很明确也很简单。先是准备好密码文件:
该命令的使用,请参考前面的《日志》。
接着,需知道NCSA认证的程序,它在这里:
-rwsr-x— 1 root squid 10144 2006-01-01 /usr/lib/squid/ncsa_auth
为简单期间,可建立一个链接:
三、配置
需要修改的是/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、首先是端口
修改为:
这也是默认端口,因为我对外是动态分配的,无法固定IP。若您自需要对内部的局域网服务,可写成:
2、配置cache目录
约696行,修改为:
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:
3、配置用户认证
约1262行,修改为:
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的基本格式是:
在1800行后是默认配置,身份认证是加入:
然后是对上述定义的列表进行访问控制,用的是http_access命令:
该控制是从上往下读取的,只要符合上面的设定的,就会允许,不会再继续读取。所以,若有用户不希望进行身份认证的话,必须在设置对client的控制前设置:
#上面的advuser列表中的用户不会收用户身份认证控制
http_access allow client
http_access deny !Safe_ports
#”!”号是”非”的意思
记住,squid虽然默认是中断所有的,但还是建议在最后写入:
至此,配置完成。
四、其他
1、用squid做透明代理
必须先配置好linux的iptables代理,然后通过修改配置为:
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_user_host_header on
然后把发到80的协议都通过squid转发即可:
2、其他控制
通常的控制有:
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
典型的Squid配置
用Apache搭建代理服务器
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/113033.html