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