| Squid的配置文件相對規范。它與其他許多unix程序相似。每行以配置指令開(kāi)始,后面跟著(zhù)數字值或關(guān)鍵字。在讀取配置文件時(shí),squid忽略空行和注釋掉的行(以#開(kāi)始)。如下是一些配置行示例: cache_log /squid/var/cache.log # define the localhost ACL acl Localhost src 127.0.0.1/32 connect_timeout 2 minutes log_fqdn on 某些指令取唯一值。在這些情形下,重復賦予該指令不同的值,將覆蓋前面的值。例如,下面是一個(gè)連接超時(shí)值。第一行無(wú)效,因為第二行覆蓋了它: connect_timeout 2 minutes connect_timeout 1 hour 另外,某些指令取列表值。在這些情形下,每一個(gè)新增的值都有效。"擴展方式"指令以這種方法工作: extension_methods UNGET extension_methods UNPUT extension_methods UNPOST 對這些基于列表的指令,你通常能在同一行中賦予多個(gè)值: extension_methods UNGET UNPUT UNPOST 許多指令有通用類(lèi)型。例如,連接超時(shí)值是一個(gè)時(shí)間規范,在數字后面跟著(zhù)時(shí)間單元。例如: connect_timeout 3 hours client_lifetime 4 days negative_ttl 27 minutes 類(lèi)似的,大量的指令指向文件大小或者內存額度。例如,你可以這樣編寫(xiě)大小規范:十進(jìn)制數字后面跟bytes,KB,MB或GB.例如: minimum_object_size 12 bytes request_header_max_size 10 KB maximum_object_size 187 MB 另一種值得提起的類(lèi)型是觸發(fā)器,它的值是on或者off。許多指令使用該類(lèi)型。例如: server_persistent_connections on strip_query_terms off prefer_direct on 通常,配置文件指令能以任何順序出現。然而,如果某個(gè)指令指向的值被其他指令所定義,那么順序就很重要。訪(fǎng)問(wèn)控制列表是個(gè)好的例子。acl被用在http_access規則之前必須被定義: acl Foo src 1.2.3.4 http_access deny Foo squid.conf文件里的許多東西是大小寫(xiě)敏感的,例如指令名。你不能將http_port寫(xiě)成HTTP_port。 默認的squid.conf文件包含了對每個(gè)指令的大量注釋?zhuān)约爸噶畹哪J值。例如: # TAG: persistent_request_timeout # How long to wait for the next HTTP request on a persistent # connection after the previous request completes. # #Default: # persistent_request_timeout 1 minute 每次安裝squid后,當前默認配置文件存放在$prefix/etc目錄下的squid.conf.default。既然指令每次都有所改變,你能參考該文檔,以獲取最近的更新。 該章剩下的部分是關(guān)于在開(kāi)始運行squid之前,你必須知道的少數指令。 4.2 User ID你可能知道,unix進(jìn)程和文件擁有文件和組屬主的屬性。你必須選擇某個(gè)用戶(hù)和組給squid。該用戶(hù)和組的組合,必須對大部分squid相關(guān)的文件和目錄有讀和寫(xiě)的權限。 我高度推薦創(chuàng )建名為"squid"的用戶(hù)和組。這避免了某人利用squid來(lái)讀取系統中的其他文件。假如不止一個(gè)人擁有對squid的管理權限,你可以將他們加到squid組里。 unix進(jìn)程繼承了它們父進(jìn)程的屬主屬性。那就是說(shuō),假如你以joe用戶(hù)來(lái)啟動(dòng)squid,squid也以joe來(lái)運行。假如你不想以joe來(lái)運行squid,你需要預先改變你的用戶(hù)ID。這是su命令的典型功能。例如: joe% su - squid squid% /usr/local/squid/sbin/squid 不幸的是,運行squid并非總是如此簡(jiǎn)單。在某些情況下,你必須以root來(lái)啟動(dòng)squid,這依賴(lài)于你的配置。例如,僅僅root能綁定TCP套接字到特權端口上,如80。假如你必須以root來(lái)啟動(dòng)squid,你必須設置cache_effective_user指令。它告訴squid,在執行完需要特別權限的任務(wù)后,變成哪個(gè)用戶(hù)。例如: cache_effective_user squid 你提供的該名字必須是有效用戶(hù)(在/etc/passwd文件里)。請注意僅僅當你以root來(lái)啟動(dòng)squid時(shí),你才需要用到該指令。僅僅root有能力來(lái)隨意改變用戶(hù)身份。假如你以joe來(lái)啟動(dòng)squid,它不能改變到squid用戶(hù)。 你可能?chē)L試不設置cache_effective_user,直接以root來(lái)運行squid。假如你試過(guò),你會(huì )發(fā)現squid拒絕運行。這違背了安全規則。假如外部攻擊者有能力危及或利用squid,他能獲取對系統的全部訪(fǎng)問(wèn)權。盡管我們努力使squid安全和少bug,但還是穩重點(diǎn)好。 假如你沒(méi)有設置cache_effective_user,以root來(lái)啟動(dòng)squid,squid使用nobody作為默認值。不管你選擇什么用戶(hù)ID,請確認它有對下面目錄的讀訪(fǎng)問(wèn)權:$prefix/etc,$prefix/libexec,$prefix/share.該用戶(hù)ID也必須有對日志文件和緩存目錄的寫(xiě)訪(fǎng)問(wèn)權。 squid也有一個(gè)cache_effective_group指令,但你也許不必設置它。默認的,squid使用cache_effective_user的默認組(從/etc/passwd文件讀?。?。 4.3 端口號http_port指令告訴squid在哪個(gè)端口偵聽(tīng)HTTP請求。默認端口是3128: http_port 3128 假如你將squid作為加速器運行(見(jiàn)15章),你也許該將它設為80。 你能使用附加的http_port行,來(lái)指示squid偵聽(tīng)在多個(gè)端口上。假如你必須支持客戶(hù)組(它們被配置得不一致),這點(diǎn)就經(jīng)常有用。例如,來(lái)自某個(gè)部門(mén)的瀏覽器發(fā)送請求到3128,然而另一個(gè)部門(mén)使用80端口。簡(jiǎn)單的將兩個(gè)端口號列舉出來(lái): http_port 3128 http_port 8080 你也能使用http_port指令來(lái)使squid偵聽(tīng)在指定的接口地址上。當squid作為防火墻運行時(shí),它有兩個(gè)網(wǎng)絡(luò )接口:一個(gè)內部的和一個(gè)外部的。你可能不想接受來(lái)自外部的http請求。為了使squid僅僅偵聽(tīng)在內部接口上,簡(jiǎn)單的將IP地址放在端口號前面: http_port 192.168.1.1:3128 4.4 日志文件路徑我將在第13章討論所有squid的日志細節。你現在你關(guān)注的唯一事情是,squid將它的日志放在何處。默認的日志目錄是squid安裝位置下的logs目錄。例如,假如你在./configure時(shí)沒(méi)有使用--prefix=選項,那么默認的日志文件路徑是/usr/local/squid/var/logs. 你必須確認日志文件所存放的磁盤(pán)位置空間足夠。在squid寫(xiě)日志時(shí)如果接受到錯誤,它會(huì )退出和重啟。該行為的主要理由應引起你的注意。squid想確認你不會(huì )丟失任何重要的日志信息,特別是你的系統被濫用或者被攻擊時(shí)。 squid有三個(gè)主要的日志文件:cache.log,access.log,store.log.第一個(gè)文件即cache.log,包含狀態(tài)性的和調試性的消息。當你剛開(kāi)始運行squid時(shí),你應密切的關(guān)注該文件。假如squid拒絕運行,理由也許會(huì )出現在cache.log文件的結尾處。在正常條件下,該文件不會(huì )變得很大。也請注意,假如你以-s選項來(lái)運行squid,重要的cache.log消息也可被送到你的syslog進(jìn)程。通過(guò)使用cache_log指令,你可以改變該日志文件的路徑: cache_log /squid/logs/cache.log access.log文件包含了對squid發(fā)起的每個(gè)客戶(hù)請求的單一行。每行平均約150個(gè)字節。也就是說(shuō),在接受一百萬(wàn)條客戶(hù)請求后,它的體積約是150M。請使用cache_access_log指令來(lái)改變該日志文件的路徑: cache_access_log /squid/logs/access.log 假如因為某些理由,你不想squid記錄客戶(hù)端請求日志,你能指定日志文件的路徑為/dev/null. store.log文件對大多數cache管理員來(lái)說(shuō)并非很有用。它包含了進(jìn)入和離開(kāi)緩存的每個(gè)目標的記錄。平均記錄大小典型的是175-200字節。然而,squid不在store.log里對cache點(diǎn)擊創(chuàng )建接口,所以它比access.log包含少得多的記錄。請使用cache_store_log指令來(lái)改變它的位置: cache_store_log /squid/logs/store.log 通過(guò)指定路徑為none,你能輕易的完全禁止store.log日志: cache_store_log none 假如你不小心,squid的日志文件增加沒(méi)有限制。某些操作系統對單個(gè)文件強制執行2G的大小限制,即使你有充足的磁盤(pán)空間。超過(guò)該限制會(huì )導致寫(xiě)錯誤,這樣squid就會(huì )退出。為了保證日志文件大小合理,你應創(chuàng )建任務(wù)來(lái)有規律的重命名和打包日志。squid有內建功能來(lái)使這個(gè)容易做到。請見(jiàn)13.7章關(guān)于日志輪循的解釋。 4.5 訪(fǎng)問(wèn)控制在第6章里有更多的關(guān)于訪(fǎng)問(wèn)控制的描述?,F在,我只講述少量的訪(fǎng)問(wèn)控制方法,以使熱心的讀者能快速開(kāi)始使用squid。 squid默認的配置文件拒絕每一個(gè)客戶(hù)請求。在任何人能使用代理之前,你必須在squid.conf文件里加入附加的訪(fǎng)問(wèn)控制規則。最簡(jiǎn)單的方法就是定義一個(gè)針對客戶(hù)IP地址的ACL和一個(gè)訪(fǎng)問(wèn)規則,告訴squid允許來(lái)自這些地址的HTTP請求。squid有許多不同的ACL類(lèi)型。src類(lèi)型匹配客戶(hù)IP地址,squid會(huì )針對客戶(hù)HTTP請求檢查http_access規則。這樣,你需要增加兩行: acl MyNetwork src 192.168.0.0/16 http_access allow MyNetwork 請將這些行放在正確的位置。http_access的順序非常重要,但是acl行的順序你不必介意。你也該注意默認的配置文件包含了一些重要的訪(fǎng)問(wèn)控制,你不應該改變或刪除它們,除非你完全理解它們的意義。在你第一次編輯squid.conf文件時(shí),請看如下注釋?zhuān)?/p> # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS 在該注釋之后,以及"http_access deny all"之前插入你自己的新規則。為了徹底說(shuō)明,如下是一個(gè)合理的初始訪(fǎng)問(wèn)控制配置,包括推薦的默認控制和早先的例子: acl All src 0/0 acl Manager proto cache_object acl Localhost src 127.0.0.1/32 acl Safe_ports port 80 21 443 563 70 210 280 488 591 777 1025-65535 acl SSL_ports 443 563 acl CONNECT method CONNECT acl MyNetwork src 192.168.0.0/16 http_access allow Manager Localhost http_access deny Manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow MyNetwork http_access deny All 4.6 可見(jiàn)主機名希望你不必擔心visible_hostname指令。然而,假如squid不能發(fā)現它所運行的機器的主機名,你就必須設置它。如果發(fā)生這樣的事,squid抱怨和拒絕運行: % squid -Nd1 FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname' 有大量的理由使squid需要知道主機名:
假如你看到上述的致命錯誤,你必須修正主機名和DNS信息,或者顯式的給squid指明主機名。在大多數情況下,請確認"hostname"命令返回一個(gè)完全規范的主機名,并且在/etc/hosts文件里增加這個(gè)接口。假如這樣不成功,請在squid.conf里設置可見(jiàn)主機名: visible_hostname squid.packet-pushers.net 4.7 管理聯(lián)系信息你應該設置cache_mgr指令作為對用戶(hù)的幫助。它是一個(gè)email地址,假如問(wèn)題發(fā)生,用戶(hù)能寫(xiě)信給它。cache_mgr地址默認出現在squid的錯誤消息里。例如: cache_mgr squid@web-cache.net 4.8 下一步在創(chuàng )建了初步的配置文件后,你多少準備首次運行squid了。請遵循下面章節的建議。當你掌握了啟動(dòng)和停止squid后,你該花費一些時(shí)間來(lái)改善配置文件。你可能想增加更高級的訪(fǎng)問(wèn)控制,這在第6章里有描述。既然我在這里沒(méi)有討論磁盤(pán)cache,你該花些時(shí)間閱讀第7和第8章。 |
聯(lián)系客服