原文:http://www.l-penguin.idv.tw/article/proxy-auth.htm
Proxy Server - 啟動使用者認證機制
參考文件
http://forum.icst.org.tw/phpBB2/viewtopic.php?t=8646
當 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
---------------------------------------------------------------
# 認證時出現的提示
auth_param basic realm Welcome to l-penguin's proxy service, please enter your name and password.
# 指定是由 ncsa_auth 認證,帳號密碼檔為 squid-passwd
auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/squid-passwd
# 設定使用 proxy_auth
acl squid-passwd proxy_auth REQUIRED
# 允許通過認證的者用者使用用 Proxy
http_access allow squid-passwd
---------------------------------------------------------------
root #
請注意,在設定 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
New password: your_password
沒有留言:
張貼留言