前言:
雖然因為中文碼與認證的問題,我們準備採用ISA Server來測
但是Squid還是個很棒的軟體,我把這段時間準備的文件都留個備份...
原文:http://www.ccw.com.cn/htm/app/linux/admin/01_7_26_8.asp
高效配置Linux代理服務器--Squid
毛毛
01-5-18 下午 03:01:50
--------------------------------------------------------------------------------
作為一種免費的網絡操作系統,Linux越來越受到廣大網絡愛好者的歡迎,目前Internet上運行的主機有相當一部分採用的就是Linux,而且中國已經把Linux作為政府上網的指定網絡操作系統。種種跡象表明,Linux正在逐漸走向成熟。為了解決Internet發展迅速和IP地址資源緊張的矛盾,代理服務器的使用越來越廣泛。Squid是一種在Linux系統下使用的比較優秀的代理服務器軟件。
代理服務
代理服務是指由一台擁有標準IP地址的機器代替若干沒有標準IP地址的機器和Internet上的其它主機打交道,提供代理服務的這台機器稱為代理服務器。擁有內部地址的機器想連接到Internet上時,先把這個請求發給擁有標準IP地址的代理服務器,由代理服務器把這個請求通過它的標準IP地址發到請求的目的地址。然後目標地址的服務器把返回的結果發回給代理服務器,代理服務器再原封不動的把資料發給內部主機。若干擁有內部地址的機器就組成了內部網,代理服務器的作用就是溝通內部網和Internet,解決內部網訪問Internet的問題。這種代理事不可逆的,Internet上的主機不能訪問任何一台擁有內部地址的機器,這樣又可以保障內部資料的安全性。
代理軟件的一個優點是它能夠檢驗除了數據包之外的許多東西。Squid對數據包的有效載荷進行檢驗,也就是穿越防火牆的數據包中TCP(或者UDP)部分所佔地份量。根據數據包報頭(數據包中的IP部分)和數據包有效載荷(TCP部分)的信息,代理防火牆能夠決定數據包將發往何處,數據包請求什麼,以及根據數據包所必須提供的這些信息決定採取什麼樣的行動。
對於Web用戶來說,Squid是一個高性能的代理緩存服務器,可以加快內部網瀏覽Internet的速度,提高客戶機的訪問命中率。Squid不僅支持HTTP協議,還支持FTP、gopher、SSL和WAIS等協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。
Squid將數據元緩存在內存中,同時也緩存DNS查尋的結果,除此之外,它還支持非模塊化的DNS查詢,對失敗的請求進行消極緩存。Squid支持SSL,支持訪問控制。由於使用了ICP,Squid能夠實現重疊的代理陣列,從而最大限度的節約帶寬。
Squid由一個主要的服務程序Squid,一個DNS查詢程序dnsserver,幾個重寫請求和執行認證的程序,以及幾個管理工具組成。當Squid啟動以後,它可以派生出指定數目的dnsserver進程,而每一個dnsserver進程都可以執行單獨的DNS查詢,這樣一來就大大減少了服務器等待DNS查詢的時間。
Squid的另一個優越性在於它使用訪問控制清單(ACL)和訪問權限清單(ARL)。訪問控制清單和訪問權限清單通過阻止特定的網絡連接來減少潛在的Internet非法連接,可以使用這些清單來確保內部網的主機無法訪問有威脅的或不適宜的站點。
編譯安裝Squid
squid軟件包有兩種:一種是RedHat所使用的rpm包,另一種是源代碼包。
rpm包的安裝:
1.進入/mnt/cdrom/RedHat/RPMS。
2.執行rpm -ivh squid-2.2.STABLE4-8.I386.rpm。
源代碼包的安裝:
1.從http://www.squid-cache.org下載squid-2.2.STABLE4-src.tar.gz。
2.將該文件拷貝到/usr/local目錄。
3.解開該文件tar xvzf squid-2.2.STABLE4-src.tar.gz,在/usr/local目錄下生成一個新的目錄squid-2.2.STABLE4,為了方便使用mv squid-2.2.STABLE4 squid將目錄更名為squid。。
4.進入squid目錄。
5.執行./configure,可以用./configure -prefix=/directory/you/want指定安裝目錄。系統默認安裝目錄為/usr/local/squid。
6.執行make all。
7.執行make install。
8.安裝結束後,Squid的可執行文件在安裝目錄的bin子目錄下,配置文件在etc子目錄下。
配置squid
配置文件squid.conf
Squid有一個主要的配置文件squid.conf,位於/etc/squid目錄下,用戶僅僅需要修改該配置文件即可。
squid.conf配置文件分為13個部分,分別是:
1.NETWORK OPTIONS(有關的網絡選項)
2.OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM(作用於鄰居選擇算法的有關選項)
3.OPTIONS WHICH AFFECT THE CACHE SIZE(定義cache大小選項)
4.LOGFILE PATHNAMES AND CACHE DIRECTORIES(定義日誌文件的路徑及cache的目錄)
5.OPTIONS FOR EXTERNAL SUPPORT PROGRAMS(外部支持程序選項)
6.OPTIONS FOE TUNING THE CACHE(調整cache選項)
7.TIMEOUTS(超時)
8.ACCESS CONTROLS(訪問控制)
9.ADMINISTRATIVE PARAMETERS(管理參數)
10.OPTIONS FOR THE CACHE REGISTRATION SERVICE(cache註冊服務選項)
11.HTTPD-ACCELERATOE OPTIONS(HTTPD加速選項)
12.MISCELLANEOUS(雜項)
13.DELAY POOL PARAMETERS(延時池選項)
雖然squid的配置文件很龐大,但是用戶可以根據自己的實際情況修改相應的選項,並不需要配置所有的選項。下面介紹幾個常用的選項。
1.http_port
定義squid監聽HTTP客戶連接請求的端口。缺省是3128,如果使用HTTPD加速模式則為80。可以指定多個端口,但是所有指定的端口都必須在一條命令行上。
2.cache_mem
指定squid可以使用的內存理想值,建議設為內存的1/3.
3.cache_dir Directory-Name Mbytes Level1 Level2
指定squid用來存儲對象的交換空間的大小及其目錄結構。可以用下面的公式來估算系統所需要的子目錄數目。
已知量:
DS = 可用交換空間總量(單位KB)/ 交換空間數目
OS = 平均每個對象的大小= 20k
NO = 平均每個二級子目錄所存儲的對象數目 = 256
未知量:
L1 = 一級子目錄的數量
L2 = 二級子目錄的數量
計算公式:
L1 x L2 = DS / OS / NO
注意這是個不定方程,可以有多個解。
4.maximum_object_size
大於該值得對像將不被存儲。如果要提高訪問速度,就降低該值;如果想最大限度的節約帶寬,降低成本,就增加該值。
5.dns_nameservers
定義Squid進行域名解析時使用的域名服務器。
6.acl
定義訪問控制列表。定義語法為:
acl aclname acltype string ...
acl aclname acltype "file" ...
7.http_access
根據某個訪問控制列表允許或禁止某一類用戶訪問。
運行Squid
配置並保存好squid.conf後,就可以啟動、停止和重新啟動Squid:
/etc/rc.d/init.d/squid start
/etc/rc.d/init.d/squid stop
/etc/rc.d/init.d/squid restart
可以通過ps命令查看Squid服務是否已經正常啟動:
ps -A |grep squid
如果出現以下信息:
6573 ? 00:00:00 squid
6574 ? 00:00:00 squid
則表明Squid服務已經正常啟動。
客戶端的配置
將某台終端設置成內部地址,並將該終端的DNS服務器設置為代理服務器的DNS服務,在內部地址和標準地址之間作一個路由。在瀏覽器裡設置代理服務器地址為Squid代理服務器的地址,就可以通過代理服務器上網了。
一個實例
假設有這樣的應用環境,網絡中有一台撥號服務器為用戶提供撥號接入服務,且運行有Squid實現的代理服務器,其IP地址為192.168.2.32。撥號用戶得到一個內部IP,地址範圍為192.168.2.1-192.168.2.30。
1.配置squid.conf
http_port 80
cache_mem 32 MB
cache_swap_low 90
cache_swap_high 95
maximum_object_size 4096 KB
cache_dir /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
cache_dns_program /usr/lib/squid/dnsserver
dns_nameservers 192.168.2.32
unlinkd_program /usr/lib/squid/unlinkd
acl all src 0.0.0.0/0.0.0.0
acl allow_ip src 192.168.2.1/255.255.255.0
acl manager proto cache_object
acl localhost src 192.168.2.32/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow allow_ip
cache_effective_user squid
cache_effective_group squid
下面兩個選項是用來定義squid加速模式的。用virtual來指定為虛擬主機模式。80端口為要加速的請求端口。採用這種模式時,Squid就取消了緩存及ICP功能,假如需要這些功能,必須設置httpd_accel_with_proxy選項。
httpd_accel_host virtual
httpd_accel_port 80
下面兩個選項在透明代理模式下是必須設置成on的。在該模式下,Squid既是web請求的加速器,又是緩存代理服務器。
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
設置透明代理時,必須打開包轉發功能,還要結合ipchains:
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -A input -j ACCEPT -i lo
/sbin/ipchains -A forward -s 192.168.2.1/24 -d 0/0 -j MASQ
2.用戶認證設置
默認時,Squid本身不帶任何認證程序,但是可以通過外部認證程序來實現用戶認證。一般有以下的認證程序:LDAP認證、SMB認證、基於mysql的認證、基於sock5的密碼認證和基於Radius的認證。下面介紹常用的ncsa實現的認證,ncsa是Squid源代碼包自帶的認證程序之一,實現步驟如下:
* 進入/usr/local/squid/auth_modules/NCSA目錄,執行:
make
make install
* 編譯成功後,會生成ncsa_auth的可執行文件,拷貝生成的可執行文件到/usr/bin目錄下。
* 修改squid.conf文件的相關選項。
acl auth_user proxy_auth REQUIRED
http_access allow auth_user
authenticate_program /usr/local/squid/bin/ncsa_auth
/usr/local/squid/etc/passwd
* 利用Apache攜帶的工具軟件htpasswd在/usr/locad/squid/etc下生成密碼文件,並添加相應的用戶信息。該密碼文件每行包含一個用戶的信息,即用戶名和密碼。例如,用htpasswd生成密碼文件passwd並添加用戶me:
htpasswd -c /usr/local/squid/etc/passwd me
* 重新啟動Squid,密碼認證生效。
3.客戶端的設置
在客戶端瀏覽器的選項中將代理服務器的IP地址設為192.168.2.32,http端口為80。若要設置透明代理,則客戶端不需要在瀏覽器中指定代理服務器,而將網關設為192.168.2.32,並且客戶端要配置好DNS。
現在,內部網的主機就可以通過代理訪問Internet了。
結束語
Squid與Linux下其它的代理軟件如Apache、Socks、TIS FWTK和delegate相比,下載安裝簡單,配置簡單靈活,支持緩存和多種協議。用ipchains+Squid的解決方案,就可以獲得通過緩存高性能的同時能夠無縫的訪問Internet。最後說明一點,squid不僅可用在Linux系統上,還可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系統上。
沒有留言:
張貼留言