Squid Proxy Server基礎入門(轉)

post0發表於2007-08-10
Squid Proxy Server基礎入門(轉)[@more@]

簡介:

九O年代是網際網路大放異彩的年代,尤其是World Wild Web的出現更使得人與人之間的距離越來越小,但是圖形、影像和聲音的劇增對原本速度就不快的internet來說無疑是雪上加霜,因此大大小小Proxy server便油然而生,其目的是為減輕網路負載,也可加快client端網頁瀏覽的速度。當初proxy server本為保護firewall內主機的安全並做為local與remote間的傳輸煤介,關如下 

 Client端不但可以流覽網頁,也可以透過Proxy存取Inetrnet資源並抵擋外界的網路風暴與破壞。

說明:

Squid Internet Object Cache (Harvest Project的後續版本) 是美國政府大力助的一項研究計畫,其目的為解決網路頻寬不足的問題,是現在Unix系統上使用者最多功能也最完整的一套軟體,目前臺灣三大網Tanet、Hinet和Seednet有超過 95%以上的Proxy Server使用。Apache和Netscape雖附有Proxy軟體,但因功能簡單而不夠普及。有關squid的詳細說明可到squid網站查詢。

安裝說明:

我們這次安裝的平臺是Pentium 200 MMX,使用32 mb 記憶體,有2.5 gb的硬碟,安裝的是Slackware- 3.3 Linux,核心為 linux-2.0.30。目前squid穩定的版本是1.1.16,另有一個並行發展的軟體squid- 1.NOVM.16是適合於使用較少虛擬記憶體的主機,如使用的swap memory很小的話可以下載這個版本,但是file descriptors 會變大,確定了我們所要使用的軟體後,再來就可以把軟體下載到主機中,這次我們使用的是squid-1.1.16.tar.gz,首先用adduser增加一個proxy user,因為使用root帳號開啟proxy server會有安全上的問題且程式本身也不允許,再來的動作都由 proxy user來完成,如此才不會有許可權不足而導致cache無法寫入的影響,把剛傳下來的squid-1.1.16.tar.gz用tar解開,進入squid目錄中依序輸入

./configure --prefix=/usr/local/squid

make all

make install

便完成了所有compiler和install的過程,此時我們的 squid完全install到/usr/local/squid目錄下,進入安裝完成的目錄中或是link過來也可以,我們可以看到三個目錄分別是bin、etc與log,進入bin中使用 squid z把要cache的目錄建立起來,再來編輯etc目錄下的squid.conf,有關 squid.conf語法稍後會詳述,完成所有設定後便可以背景執行squid或是放在 /etc/rc裡,成一開機便執行的daemon,執行後可使用bin裡的client測試squid是否成功的執行,方法 client h localhost p 3128

 

 squid.conf 設定說明:

http_port: squid接受client端http需求使用的阜號,預設 值3128,在命令列中也可使用squid a做設定。

icp_port: squid接收或傳送icp訊號所使用的阜號,預設值為3130,如非必要不需做修改,也可使用squid u在命令列中做設定。icp是一種udp_base的封包,主要的功能為web cache主機間連絡的訊息格式,也因為是udp_base的封包,所以速度上也就比 client與server間的tcp封包還來的快,可減少cache主機間傳送的時間。

cache_host: 設定其它的cache主機,當server收到client端的request時,便透過3130這個port傳送 icp給設定中的每一臺cache主機,如cache host有client端所需求的資料,便傳送一份給server,如沒有server便自己抓取資料。例:

cache_host proxy.nsysu.edu.tw sibling 3128 3130 option

第一為hostname。

第二為type 有 “parent” “sibling” “multicast”。

在web cache的階層裡,同一個cache level裡以sibling稱之,在上位者則為parent,不過在整個 cache level中並沒有很明顯的分層,所以每一臺主機有可能是sibling 或是 parent。當server收到request時,先對所有的sibling和parent送出ICP去詢問,等待回應開始對第一個回應HIT的cache抓object,如沒有人回覆HIT,就對先回覆 MISS的parent開始抓取,找到資料後送給host並自己cache起來,若都失敗server便乖乖的自己去source抓取資料。

第三為proxy_port 為cache主機的porxy port。

第四為icp_port cache主機接收icp的port,通常為3130。

第五為option 有proxy-only、weight=n、ttl=n、no-query、default、round-robin、 multicast-responder等。當proxy server的儲存空間很少時,可加上proxy-only,server便不會把資料 cache住,直接將資料送往client。Weight值為與parent間的依賴性,值越大依賴性越大,預設值為1。

Inside_firewall:設定firewall內主機domain。

Local_domain:設定local_domain主要是把這些網域視為本身網域的一部份,如此一來當所要抓取的URL為是在本網域中,則不必再向Neighbor/Sibling詢問了,只要是與有直接連線的都可設為local_domain。

Local_ip:與local_domain同。

Neighbor_timeout:當送出icp時等待回應的時間。

Cache_mem:用來儲存物件的記憶體大小,包括in-transit、negative和”hot”物件,通常設定實體記憶體的三分之一大小,所謂的實體記憶體是隻主記體加上swap memory。In-transit比negative與hot等物件擁有較大的優先權,當有資料進來時, negative與hot objects將會首先被更新,換句話說,兩者將會填滿所有in-transit objects沒有使用的記憶體空間。

Cache_swap: Proxy使用的最大磁碟空間,當使用的空間接近此值的話,cache使用LRU(Least-Recently- Used)的設定來刪除過久的資料。Squid對物件的清除是由每個物件的LRU年齡檔標準,如太久沒用的就會先被清除掉,倘若cache佔硬碟的容量低時,物件較不易被清除,但若cache越來越滿時,LRU限制較高,資料清除較快。

Cache_log:硬碟中所要當cache的目錄。

Log_fqdn:如client有domain name的話,access.log便會把domain name完整的記錄下來。

ftp_user:假如需要使用 anonymous ftp來抓取檔案,會送出後面所接的字串當 password。

Dns_children: Squid本身附有一個dnsserver程式來處理client端domain name的需求,一般來說,當 proxy有較大的使用量時,dns children設定較多可以處理的domain name request較多也較快,但當設定過多的 dnsserver對系統的performance也會有相當的影響,可使用cache manger來觀看每個dnsserver的使用量決定數量的多寡。

Refresh_pattern:更新cache的時間,其演演算法則如下:

FRESH if age < min

STALE if expires < now

STALE if age > max

FRESH if lm-factor < percent

使用格式:refresh_pattern regex min percent max

reference_age:物件的LRU,若比值大的話便清除cache中的物件。例如設定一星期,如一星期內沒有存取動作,就把物件從cache中移出,假如值為零的話,物件會存放於cache中直到cache swap上限。

Read_time:當proxy與web連線後,經過read_time的時間接收不到web站傳送資料便斷線,有可能是remote server或是網路連線突然性的中斷等因素。

Shutdown_lifetime:當cache server收到SIGTERM或是SIGHUP時,squid會對使用端發出”shutdown pending”訊息,並關掉所有正在進行中的動作,直到squid重新啟動。

Cache_mgr: cache server管理者的email信箱,當server無故死掉時,squid會發出一封信至管理者信箱。

Cache_effective_user:啟動squid的user名稱,包含UID與GID兩個欄位。

Err_html_text:使用者瀏覽網頁中,常常遇到不存在或連線中斷的網站,squid本身會回應一個error message至使用者端,squid管理者可使用這個引數來改變回應至使用者端的error message,來連線至管理者的homepage。

Deny_html_text:若遇到access control fail的情況,回應一個access fail message,squid本身提供一個簡單的message,可利用此功能連線至homepage。

 

以上是 squid.conf的大部引數介紹,已包括所有架設一個功能完整的cache server的所有設定。

 

 

研究分析:

Squid的特點也是它優於其它cache軟體的地方,就是其Access Control Lists的部份,使用acl可設定那些client發出的request會被接受,那些會被擋住,如此可減輕server端網路負載的問題。

首先在squid.conf中定義acl name,以便於之後來設定其存取權。其格式如下:

acl aclname acltype string1…..

acl aclname acltype “file”….

File必須編輯ip name而且每一行只能有一項

acltype有下列幾項:

acl aclname src ip-address/netmask

(定義client的ip和netmask)

acl aclname src addr1-addr2/netmask

(定義一段ip address區間和netmask)

acl aclname dst ip-address/netmask

(URL的網路位址和遮罩)

acl aclname srcdomain kyit.edu.tw

(定義反查的domain)

acl aclname dstname kyit.edu.tw

(定義URL的domain)

acl aclname time [day-abbrevs] [h1:m1-h2:m2]

day-abbrevs:星期日至星期六

acl aclname url_regex ^http:// …

(定義符合URL字串的部份)

acl aclname urlpath_regex xxxxx

(定義URL的目錄有符合的部份)

acl aclname port 80 ….

(定義所使用的port)

acl aclname proto HTTP FTP …

(定義所使用的通訊協定)

acl aclname browser regexp

(定義client所使用的browser,如IE或Netscape等)

acl aclname user username

(定義存取的username)

預先定義完所有的字串與數值後,再使用後面的引數來做控制的動作,其引數有:

http_access:可設定allow與deny兩種,格式為

http_access allow|deny [!]aclname

! 為不包括此aclname

cache_host_acl:類似cache_host,只不過加上aclname。

 

Squid Proxy server減低網路的負載,也加快client端抓取資料的速度,尤其squid的強大功能更使proxy server更快也更強,對Internet的貢獻可謂大且深矣

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940735/,如需轉載,請註明出處,否則將追究法律責任。