歡迎您光臨本站 註冊首頁

Squid Proxy Server基礎入門

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  簡介:
  九十年代是網際網路大放異彩的年代,尤其是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網站查詢http://squid.nlanr.net/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的目錄有符合的部


[火星人 ] Squid Proxy Server基礎入門已經有698次圍觀

http://coctec.com/docs/linux/show-post-56068.html