Proxy Server - 启动使用者认证机制
参考文件
当 Proxy Server 有很多 Client 在使用时,或许您会想要开始做认证机制,也就是说当使用者在输入帐号密码之后才可以使用 Proxy 服务,同时,藉由帐号密码的管制,也可以了解使用者大部份都是连到那一个网站,并且做适当的流量控管。
Squid 支援使用者认证的方法有很多,包含了以 htpasswd 方式的帐号密码档认证 (NCSA)、LDAP、PAM、SASL、SMB (就是 Samba)、YP (就是 NIS)和 MSNT 等方式,在这里我示范 NCSA 的基本方式,当然若有时间的话我将会测试 LDAP 的方式来认证,届时将会归类到 LDAP 应用。
重新编译 NCSA Module
若您的 Proxy 已经上线的话,那么要重新编译整个 squid 再安装似乎是一件不可能的事,这个时候或许你可以直接编译 NCSA 这个模组并挂载上去就可以了。
重新编译
若你要重新编译整个 squid 套件,可以参考 Proxy Server - 安装与基本设定 (New window),当然,你还必需加入 --enable-auth="basic" 和 --enable-basic-auth-helpers="NCSA" 这两个选项。
root # ./configure --enable-auth="basic" --enable-basic-auth-helpers="NCSA" |
只编译 NCSA 套件
在同一个版本的 squid 套件中,请到 squid 原始码的目录里找到 helpers/basic_auth/NCSA 目录,执行 make 后再复制到 squid 的模组目录里就可以了。我的 squid 是在 /usr/local/squid 目录里。
root # cd /misc/squid-2.6.STABLE3/helpers/basic_auth/NCSA root # make root # cp ncsa_auth /usr/local/squid/libexec |
如此就可以了。
取得 htpasswd 程式
htpasswd 是在 Apache 套件里的一个小程式,主要的用法你可以在 Apache 安全设定 (New window) 参考到。你可以从别的 Apache Server 取得 (但是要注意相关的 library),或是直接再载 Apache 然后编译 htpasswd 这个程式。
若你从别台机器复制过来的 htpasswd 无法用的话,请使用 ldd 看看有没有缺少的 library。
root # ldd htpasswd libz.so.1 => /usr/lib/libz.so.1 (0x00781000) libssl.so.4 => /lib/libssl.so.4 (0x00a6c000) libcrypto.so.4 => /lib/libcrypto.so.4 (0x008b4000) libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x0089e000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00814000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x00793000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x0087b000) libresolv.so.2 => /lib/libresolv.so.2 (0x007d3000) librt.so.1 => /lib/tls/librt.so.1 (0x007a3000) libm.so.6 => /lib/tls/libm.so.6 (0x0075c000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x00111000) libnsl.so.1 => /lib/libnsl.so.1 (0x007fc000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0x007e8000) libdl.so.2 => /lib/libdl.so.2 (0x00756000) libc.so.6 => /lib/tls/libc.so.6 (0x0062b000) /lib/ld-linux.so.2 (0x00612000) root # |
若你要重新编译 Apache 的话,在编译完成之后,可以在 support 目录找到一个 htpasswd 这个程式可以直接使用。
root # cp support/htpasswd /usr/bin |
设定 squid.conf
我的 squid.conf 是放在 /usr/local/squid/etc 目录里,所以以下只要说到 squid.conf 都是在这个目录中编辑。你可以先看看 squid.conf 的设定是怎么样子。
下面是去掉注解并加入行号的样子。
root # cat squid.conf | sed -e '/^#.*/d' -e '/^$/d' | nl 1 http_port 3128 2 hierarchy_stoplist cgi-bin ? 3 acl QUERY urlpath_regex cgi-bin \? 4 cache deny QUERY 5 acl apache rep_header Server ^Apache 6 broken_vary_encoding allow apache 7 cache_dir ufs /usr/local/squid/var/cache 100 16 256 8 access_log /usr/local/squid/var/logs/access.log squid 9 refresh_pattern ^ftp: 1440 20% 10080 10 refresh_pattern ^gopher: 1440 0% 1440 11 refresh_pattern . 0 20% 4320 12 acl all src 0.0.0.0/0.0.0.0 13 acl manager proto cache_object 14 acl localhost src 127.0.0.1/255.255.255.255 15 acl to_localhost dst 127.0.0.0/8 16 acl SSL_ports port 443 563 17 acl Safe_ports port 80 # http 18 acl Safe_ports port 21 # ftp 19 acl Safe_ports port 443 563 # https, snews 20 acl Safe_ports port 70 # gopher 21 acl Safe_ports port 210 # wais 22 acl Safe_ports port 1025-65535 # unregistered ports 23 acl Safe_ports port 280 # http-mgmt 24 acl Safe_ports port 488 # gss-http 25 acl Safe_ports port 591 # filemaker 26 acl Safe_ports port 777 # multiling http 27 acl CONNECT method CONNECT 28 http_access allow manager localhost 29 http_access deny manager 30 http_access deny !Safe_ports 31 http_access deny CONNECT !SSL_ports 32 acl l-penguin src 192.168.1./24 33 http_access allow l-penguin 34 http_access deny all 35 http_reply_access allow all 36 icp_access allow all 37 cache_effective_user nobody 38 coredump_dir /usr/local/squid/var/cache root # |
你列出设定档之后,应该更了清楚的看到到底设定了那些东西,现在就来加入 ncsa 支援。
root # vi squid.conf |
请注意,在设定 http_access allow squid-passwd 时,一定要放在 http_access deny all 的前面,否则会全部都被 deny 掉。
新增一个使用者
因为在刚刚的设定档里我指定了帐号密码档是放在 /usr/local/squid/etc/squid-passwd 这个档案里面,所以现在就使用 htpasswd 这个程式来新增使用者。
root # cd /usr/local/squid/etc; htpasswd -c squid-passwd steven |
好了,现在请重新开启 squid,所有设定都会生效。
root # /usr/local/squid/bin/RunCache & |
请注意,若是在启动中发现任错误,可以查看 /usr/local/squid/var/squid.out 这档案的记录。
测试
现在,请使用者开启 Browser 看看,在连线之前会寻问帐号密码。
若是验证不成功就会出现以下画面。
查看使用者的动作
我想一个忙碌的管理员应该不会去看那个使用看了那些网站,但除非必要,还是可以查得出来那些使用者浏