搭建Linux安全的Squid代理服务器
本文介紹Linux下非常著名、常用的Squid代理服務器的使用,并著重講述如何使用其提供的訪問控制策略,來保證代理服務器的合法使用。?
代理服務器的功能是代理網絡用戶取得網絡信息,它???
?
Squid是Linux下一個緩存Internet數據的代理服務器軟件,其接收用戶的下載申請,并自動處理所下載的數據。也就是說,當一個用戶想要下載一個主頁時,可以向Squid發出一個申請,要Squid代替其進行下載,然后Squid連接所申請網站并請求該主頁,接著把該主頁傳給用戶同時保留一個備份。當別的用戶申請同樣的頁面時,Squid把保存的備份立即傳給用戶,使用戶覺得速度相當快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS協議,暫不能代理POP3、NNTP等協議。Squid可以工作在很多中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。?操作系統
安裝和配置Squid?Server?
通常說來,安裝Squid有兩種方法:一是從Red?Hat?Linux?9中獲取該軟件的RPM包進行;二是安裝從Squid的官方站點http://www.squid-cache.org/?下載該軟件的源碼進行編譯后安裝。目前網上最新的穩定版本為squid-2.5.STABLE10,下面以此版本為例對兩種安裝方法進行介紹。?
Squid服務器工作原理示意圖
1.?RPM包的安裝?
首先,查看是否已經安裝了squid:?
#rpm?-qa?|?grep?squid?
Red?Hat?Linux9自帶了Squid安裝軟件包,將第一張安裝光盤放入光驅后掛裝光盤分區:?
#mount?/mnt/cdrom?
然后,進入/mnt/cdrom/Red?Hat/RPMS目錄:?
#cd?/mnt/cdrom/Red?Hat/RPMS?
最后,執行安裝:?
#rpm?-ivh?squid-2.5.STABLE1-2.i386.rpm?
當然,我們也可以在開始安裝系統的過程中安裝該軟件。?
2.?源代碼包的安裝?
從http://www.squid-cache.org/下載squid軟件的最新源代碼包squid-2.5.STABLE10.tar.gz,然后,按照如下步驟進行安裝。?
首先,將該文件拷貝到/tmp目錄:?
#cp?squid-2.5.STABLE10.tar.gz?/tmp?
然后,解開該文件:?
#tar?xzvf?squid-2.5.STABLE10.tar.gz?
解開后,在/tmp生成一個新的目錄squid-2.5.STABLE10,為了方便使用mv命令,將該目錄重命名為squid:?
#mv?squid-2.5.STABLE10?squid?
切換進入squid目錄:?
#cd?squid?
接著,執行/configure,可以用./configure?--prefix=/directory/you/want指定安裝目錄,系統默認安裝目錄為/tmp/squid:?
#./configure?
最后,分別執行make?all、make?install:?
#make?all?
#make?install?
安裝結束后,Squid的可執行文件在安裝目錄的bin子目錄下,配置文件在etc子目錄下。?
Squid軟件向用戶提供了許多與配置、應用程序和庫、日志等相關的文檔進行配置和管理,Squid有一個主要的配置文件squid.conf。同時,在Red?Hat環境下所有Squid的配置文件都位于/etc/squid子目錄下。在該目錄當中,系統同時提供了一個默認的配置文件,其名稱為squid.conf.default,然而,在實際的應用當中,該默認的配置文件存在某些問題,所以在使用Squid之前,必須首先對該配置文件的有關內容進行修改。?
下面介紹squid.conf文件的結構以及一些常用的選項。squid.conf配置文件可以分為13個部分。雖然Squid的配置文件很龐大,該配置文件的規模達到了3000多行。然而,如果只是為一個中小型網絡提供代理服務,并且只準備使用一臺服務器,那么,配置問題將會變得相對簡單,只需要修改配置文件中的幾個選項即可滿足應用需求。這些幾個常用選項分別是:?
1.?http_port?
該選項定義Squid監聽HTTPD客戶連接請求的端口。默認是3128,如果使用HTTPD加速模式,則為80。可以指定多個端口,但是所有指定的端口都必須在一條命令行上出現,程序才能正確地識別。?
2.?cache_mem(bytes)?
該選項用于指定Squid可以使用的內存的理想值。這部分內存被用來存儲以下對象:In-Transit?objects(傳入的對象)、Hot?Objects(熱對象,即用戶常訪問的對象)、Negative-Cached?objects(消極存儲的對象)。?
3.?cache_dir?Directory-Name?Mbytes?Level1?Level2?
該選項指定Squid用來存儲對象的交換空間的大小及其目錄結構。可以用多個cache_dir命令來定義多個交換空間,并且這些交換空間可以分布在不同的磁盤分區。“directory”指明了該交換空間的頂級目錄。如果想用整個磁盤作為交換空間,那么可以將該目錄作為裝載點將整個磁盤掛裝上去。默認值為/var/spool/squid。Mbytes定義了可用的空間總量。?
配置訪問控制?
使用訪問控制特性,可以控制在訪問時根據特定的時間間隔進行緩存、訪問特定站點或一組站點等。Squid訪問控制有兩個要素:ACL元素和訪問列表。通過使用這些方法,系統管理員可以嚴格、清晰地定義代理服務器的訪問控制策略。?
1.?ACL元素?
該元素定義的語法如下:?
acl?aclname?acltype?string1…?
acl?aclname?acltype?“file”…?
當使用文件時,該文件的格式為每行包含一個條目。其中,acltype可以是任一個在ACL中定義的名稱;任何兩個ACL元素不能用相同的名字;每個ACL由列表值組成,當進行匹配檢測的時候,多個值由邏輯或運算連接,換句話說,任一ACL元素的值被匹配,則這個ACL元素即被匹配;?并不是所有的ACL元素都能使用訪問列表中的全部類型;不同的ACL元素寫在不同行中,Squid將這些元素組合在一個列表中。?
2.?http_access訪問控制列表?
根據訪問控制列表允許或禁止某一類用戶訪問。如果某個訪問沒有相符合的項目,則默認為應用最后一條項目的“非”。比如最后一條為允許,則默認就是禁止。通常應該把最后的條目設為“deny?all”或“allow?all”來避免安全性隱患。使用該訪問控制列表需要注意如下問題:?
●?這些規則按照它們的排列順序進行匹配檢測,一旦檢測到匹配的規則,匹配檢測就立即結束;?
●?訪問列表可以由多條規則組成;?
●?如果沒有任何規則與訪問請求匹配,默認動作將與列表中最后一條規則對應;?
●?一個訪問條目中的所有元素將用邏輯與運算連接,如下所示:?
http_access?Action?聲明1?AND?聲明2?AND?聲明?OR?
http_access?Action?聲明3?
●?多個http_access聲明間用或運算連接,但每個訪問條目的元素間用與運算連接;?
●?列表中的規則總是遵循由上而下的順序。?
3.?使用訪問控制?
上面詳細講述了ACL元素以及http_access訪問控制列表的語法以及使用過程中需要注意的問題,下面給出使用這些訪問控制方法的實例。?
如果,允許網段10.0.0.124/24以及192.168.10.15/24內的所有客戶機訪問代理服務器,并且允許在文件/etc/squid/guest列出的客戶機訪問代理服務器,除此之外的客戶機將拒絕訪問本地代理服務器。那么具體操作如下:?
acl?clients?src?10.0.0.124/24?192.168.10.15/24?
acl?guests?src?“/etc/squid/guest”?
acl?all?src?0.0.0.0/0.0.0.0?
http_access?allow?clients?
http_access?allow?guests?
http_access?deny?all?
其中,文件“/etc/squid/guest”中的內容為:?
172.168.10.3/24?
210.113.24.8/16?
10.0.1.24/25?
……?
如果,允許域名為job.net、gdfq.edu.cn的兩個域訪問本地代理服務器,其他的域都將拒絕訪問本地代理服務器。那么具體操作如下:?
acl?permitted_domain?src?job.net?gdfq.edu.cn?
acl?all?src?0.0.0.0/0.0.0.0?
http_access?allow?permitted_domain?
http_access?deny?all?
如果,使用正則表達式,拒絕客戶機通過代理服務器訪問包含有諸如“sexy”等關鍵字的網站。那么具體操作如下:?
acl?deny_url?url_regex?-?sexy?
http_access?deny?deny_url?
如果,拒絕客戶機通過代理服務器訪問文件中指定IP或者域名的網站,其中文件/etc/squid/deny_ip中存放有拒絕訪問的IP地址,文件/etc/squid/deny_dns中存放有拒絕訪問的域名。那么具體操作如下:?
acl?deny_ip?dst?“etc/squid/deny_ip”?
acl?deny_dns?dst?“etc/squid/deny_dns”?
http_access?deny?deny_ip?
http_access?deny?deny_dns?
如果,允許和拒絕指定的用戶訪問指定的網站,其中,允許客戶1訪問網站http://www.sina.com.cn,而拒絕客戶2訪問網站http://www.163.com。那么具體操作如下:?
acl?client1?src?192.168.0.118?
acl?client1_url?url_regex?^http://www.sina.com.cn?
acl?client2?src?192.168.0.119?
acl?client2_url?url_regex?^http://www.163.com?
http_access?allow?client1?client1_url?
http_access?deny?client2?client2_url?
如果,允許所有的用戶在規定的時間內(周一至周四的8:30到20:30)訪問代理服務器,只允許特定的用戶(系統管理員,其網段為:192.168.10.0/24)在周五下午訪問代理服務器,其他的在周五下午一律拒絕訪問代理服務器。那么具體操作如下:?
acl?allclient?src?0.0.0.0/0.0.0.0?
acl?administrator?192.168.10.0/24?
acl?common_time?time?MTWH?8:30-20:30?
acl?manage_time?time?F?13:00-18:00?
http_access?allow?allclient?common_time?
http_access?allow?administrator?manage_time?
http_access?deny?manage_time?
?
配置2.............
基本squid安裝配置?
squid?配置詳解+認證?
http://www.chinaunix.net?作者:startdd?發表于:2003-07-15?20:38:52?
   在此,我們要配置一個只對內部網絡提供代理服務的Proxy?Server。它將用戶分為高級用戶和普通用戶兩種,對高級用戶采用網卡物理地址識別的方法,普通用戶則需要輸入用戶名和口令才能正常使用。高級用戶沒有訪問時間和文件類型的限制,而普通用戶只在上班時可以訪問以及一些其它的限制。?
   安裝?
   可以從Squid站點www.squid-cache.org獲取該軟件的源代...的發行版,如Red?Hat提供的RPM包。?
   RPM方式安裝很簡單,命令如下:?
   $?rpm?-ivh?Squid-2.x.STALBx.i386.rpm?
   不過筆者認為,即便是系統中已經默認安裝了Squid,也應當先刪掉然后安裝最新的源代碼包。因為開源軟件會不斷修正問題、提供更新的功能,使用最新版本可以保證最高的性能及安全,而且源代碼方式可以完全定制系統。不過STABLE穩定版、DEVEL版通常是提供給開發人員測試程序的,假定下載了最新的穩定版squid-2.5.STABLE2.tar.gz,用以下命令解開壓縮包:?
 $?tar?xvfz?squid-2.5.STABLE.tar.gz?
   用bz2方式壓縮的包可能體積更小,相應的命令是:?
 $?tar?xvfj?squid-2.5.STABLE.tar.bz2?
   然后,進入相應目錄對源代碼進行配置和編譯,命令如下:?
 $?cd?squid-2.5.STABLE2?
   配置命令configure有很多選項,如果不清楚可先用“-help”查看。通常情況下,用到的選項有以下幾個:?
 --prefix=/web/squid?
 #指定Squid的安裝位置,如果只指定這一選項,那么該目錄下會有bin、sbin、man、conf等目錄,而主要的配置文件此時在conf子目錄中。為便于管理,最好用參數--sysconfdir=/etc把這個文件位置配置為/etc。?
 --enable-storeio=ufs,null?
 #使用的文件系統通常是默認的ufs,不過如果想要做一個不緩存任何文件的代理服?
 務器,就需要加上null文件系統。?
 --enable-arp-acl?
 #這樣可以在規則設置中直接通過客戶端的MAC地址進行管理,防止客戶使用IP欺騙。?
 --enable-err-languages="Simplify_Chinese"?
 --enable-default-err-languages="Simplify_Chinese"?
 #上面兩個選項告訴Squid編入并使用簡體中文錯誤信息。?
 --enable-linux-netfilter?
 #允許使用Linux的透明代理功能。?
 --enable-underscore?
 #允許解析的URL中出現下劃線,因為默認情況下Squid會認為帶下劃線的URL是?
 非法的,并拒絕訪問該地址。?
   整個配置編譯過程如下:?
 ./configure?--prefix=/var/squid?
 --sysconfdir=/etc?
 --enable-arp-acl?
 --enable-linux-netfilter?
 --enable-pthreads?
 --enable-err-language="Simplify_Chinese"?
 --enable-storeio=ufs,null?
 --enable-default-err-language="Simplify_Chinese"?
 --enable-auth="basic"?
 --enable-baisc-auth-helpers="NCSA"?
 --enable-underscore?
   其中一些選項有特殊作用,將在下面介紹它們。?
   最后執行make和make?install兩條命令,將源代碼編譯為可執行文件,并拷貝到指定位置。?
   基本配置?
   安裝完成后,接下來要對Squid的運行進行配置(不是前面安裝時的配置)。所有項目都在squid.conf中完成。Squid自帶的squid.conf包括非常詳盡的說明,相當于一篇用戶手冊,對配置有任何疑問都可以參照解決。?
   在這個例子中,代理服務器同時也是網關,內部網絡接口eth0的IP地址為192.168.0.1,外部網絡接口eth1的IP地址為202.103.x.x。下面是一個基本的代理所需要配置選項:?
   http_port?192.168.0.1:3128?
   默認端口是3128,當然也可以是任何其它端口,只要不與其它服務發生沖突即可。為了安全起見,在前面加上IP地址,Squid就不會監聽外部的網絡接口。?
   下面的配置選項是服務器管理者的電子郵件,當錯誤發生時,該地址會顯示在錯誤頁面上,便于用戶聯系:?
 cache_mgr?start@soocol.com?
   以下這些參數告訴Squid緩存的文件系統、位置和緩存策略:?
 cache_dir?ufs?/var/squid?
 cache_mem?32MB?
 cache_swap_low?90?
 cache_swap_high?95?
   在這里,Squid會將/var/squid目錄作為保存緩存數據的目錄,每次處理的緩存大小是32兆字節,當緩存空間使用達到95%時,新的內容將取代舊的而不直接添加到目錄中,直到空間又下降到90%才停止這一活動。如果不想Squid緩存任何文件,如某些存儲空間有限的專有系統,可以使用null文件系統(這樣不需要那些緩存策略):?
 cache_dir?null?/tmp?
   下面的幾個關于緩存的策略配置中,較主要的是第一行,即用戶的訪問記錄,可以通過分析它來了解所有用戶訪問的詳盡地址:?
 cache_access_log?/var/squid/access.log?
 cache_log?/var/squid/cache.log?
 cache_store_log?/var/squid/store.log?
   下面這行配置是在較新版本中出現的參數,告訴Squid在錯誤頁面中顯示的服務器名稱:?
 visible_hostname?No1.proxy?
   以下配置告訴Squid如何處理用戶,對每個請求的IP地址作為單獨地址處理:?
 client_mask?255.255.255.255?
   如果是普通代理服務器,以上的配置已經足夠。但是很多Squid都被用來做透明代理。所謂透明代理,就是客戶端不知道有代理服務器的存在,當然也不需要進行任何與代理有關的設置,從而大大方便了系統管理員。相關的選項有以下幾個:?
 httpd_accel_host?virtual?
 httpd_accel_port?80?
 httpd_accel_with_proxy?on?
 httpd_accel_user_host_header?on?
   在Linux上,可以用iptables/ipchains直接將對Web端口80的請求直接轉發到Squid端口3128,由Squid接手,而用戶瀏覽器仍然認為它訪問的是對方的80端口。例如以下這條命令:?
 iptables?-t?nat?-A?PREROUTING?-s?192.168.0.200/32?-p?tcp?--dport?80?-j?REDIRECT?3128?
   就是將192.168.0.200的所有針對80端口的訪問重定向到3128端口。?
   所有設置完成后,關鍵且重要的任務是訪問控制。Squid支持的管理方式很多,使用起來也非常簡單(這也是有人寧愿使用不做任何緩存的Squid,也不愿意單獨使用iptables的原因)。Squid可以通過IP地址、主機名、MAC地址、用戶/密碼認證等識別用戶,也可以通過域名、域后綴、文件類型、IP地址、端口、URL匹配等控制用戶的訪問,還可以使用時間區間對用戶進行管理,所以訪問控制是Squid配置中的重點。Squid用ACL(Access?Control?List,訪問控制列表)對訪問類型進行劃分,用http_access?deny?或allow進行控制。根據需求首先定義兩組用戶advance和normal,還有代表所有未指明的用戶組all及不允許上網的baduser,配置代碼如下:?
 acl?advance?192.168.0.2-192.168.0.10/32?
 acl?normal?src?192.168.0.11-192.168.0.200/32?
 acl?baduser?src?192.168.0.100/32?
 acl?baddst?dst?www.soocol.com?
 acl?all?src?0.0.0.0/0?
 http_access?deny?baduser?
 http_access?allow?advance?
 http_access?allow?normal?
   可以看出,ACL的基本格式如下:?
   acl?列表名稱?控制方式?控制目標?
   比如acl?all?src?0.0.0.0/0,其名稱是all,控制方式是src源IP地址,控制目標是0.0.0.0/0的IP地址,即所有未定義的用戶。出于安全考慮,總是在最后禁止這個列表。?
   下面這個列表代表高級用戶,包括IP地址從192.168.0.2到192.168.0.10的所有計算機:?
 acl?advance?192.168.0.2-192.168.0.20/32?
   下面這個baduser列表只包含一臺計算機,其IP地址是192.168.0.100:?
 acl?baduser?192.168.0.100/32?
   ACL寫完后,接下來要對它們分別進行管理,代碼如下:?
 http_access?deny?baduser?
 http_access?allow?advance?
 http_access?allow?normal?
   上面幾行代碼告訴Squid不允許baduser組訪問Internet,但advance、normal組允許(此時還沒有指定詳細的權限)。由于Squid是按照順序讀取規則,會首先禁止baduser,然后允許normal。如果將兩條規則順序顛倒,由于baduser在normal范圍中,Squid先允許了所有的normal,那么再禁止baduser就不會起作用。?
   特別要注意的是,Squid將使用allow-deny-allow-deny……這樣的順序套用規則。例如,當一個用戶訪問代理服務器時,Squid會順序測試Squid中定義的所有規則列表,當所有規則都不匹配時,Squid會使用與最后一條相反的規則。就像上面這個例子,假設有一個用戶的IP地址是192.168.0.201,他試圖通過這臺代理服務器訪問Internet,會發生什么情況呢?我們會發現,他能夠正常訪問,因為Squid找遍所有訪問列表也沒有和192.168.0.201有關的定義,便開始應用規則,而最后一條是deny,那么Squid默認的下一條處理規則是allow,所以192.168.0.201反而能夠訪問Internet了,這顯然不是我們希望的。所以在所有squid.conf中,最后一條規則永遠是http_access?deny?all,而all就是前面定義的“src?0.0.0.0”。?
   高級控制?
   前面說過,Squid的控制功能非常強大,只要理解Squid的行為方式,基本上就能夠滿足所有的控制要求。下面就一步一步來了解Squid是如何進行控制管理的。?
   通過IP地址來識別用戶很不可靠,比IP地址更好的是網卡的MAC物理地址。要在Squid中使用MAC地址識別,必須在編譯時加上“--enable-arp-acl”選項,然后可以通過以下的語句來識別用戶:?
 acl?advance?arp?00:01:02:1f:2c:3e?00:01:02:3c:1a:8b?...?
   它直接使用用戶的MAC地址,而MAC地址一般是不易修改的,即使有普通用戶將自己的IP地址改為高級用戶也無法通過,所以這種方式比IP地址可靠得多。?
   假如不想讓用戶訪問某個網站應該怎么做呢?可以分為兩種情況:一種是不允許訪問某個站點的某個主機,比如ok的主機是ok.sina.com.cn,而其它的新浪資源卻是允許訪問的,那么ACL可以這樣寫:?
 acl?sinapage?dstdomain?ok.sina.com.cn?
 ...?...?
 http_access?deny?ok?
 ...?...?
   由此可以看到,除了ok,其它如www.sina.com.cn、news.sina.com.cn都可以正常訪問。?
   另一種情況是整個網站都不許訪問,那么只需要寫出這個網站共有的域名即可,配置如下:?
 acl?qq?dstdomain?.tcccent.com.cn?
   注意tcccent前面的“.”,正是它指出以此域名結尾的所有主機都不可訪問,否則就只有tcccent.com.cn這一臺主機不能訪問。?
   如果想禁止對某個IP地址的訪問,如202.118.2.182,可以用dst來控制,代碼如下:?
 acl?badaddr?dst?202.118.2.182?
   當然,這個dst也可以是域名,由Squid查詢DNS服務器將其轉換為IP。?
   還有一種比較廣泛的控制是文件類型。如果不希望普通用戶通過代理服務器下載MP3、AVI等文件,完全可以對他們進行限制,代碼如下:?
 acl?mmxfile?urlpath_regex?/.mp3$?/.avi$?/.exe$?
 http_access?deny?mmxfile?
   看到regex,很多讀者應該心領神會,因為這條語句使用了標準的規則表達式(又叫正則表達式)。它將匹配所有以.mp3、.avi等結尾的URL請求,還可以用-i參數忽略大小寫,例如以下代碼:?
 acl?mmxfile?urlpath_regex?-i?/.mp3$?
   這樣,無論是.mp3還是.MP3都會被拒絕。當然,-i參數適用于任何可能需要區分大小寫的地方,如前面的域名控制。?
   如果想讓普通用戶只在上班時間可以上網,而且是每周的工作日,用Squid應當如何處理呢?看看下面的ACL定義:?
 acl?worktime?time?MTWHF?8:30-12:00?14:00-18:00?
 http_access?deny?!worktime?
   首先定義允許上網的時間是每周工作日(星期一至星期五)的上午和下午的固定時段,然后用http_access?定義所有不在這個時間段內的請求都是不允許的。?
   或者為了保證高級用戶的帶寬,希望每個用戶的并發連接不能太多,以免影響他人,也可以通過Squid控制,代碼如下:?
 acl?conncount?maxconn?3?
 http_access?deny?conncount?normal?
 http_access?allow?normal?
   這樣,普通用戶在某個固定時刻只能同時發起三個連接,從第四個開始,連接將被拒絕。?
   總之,Squid的ACL配置非常靈活、強大,更多的控制方式可以參考squid.conf.default。?
   認證?
   用戶/密碼認證為Squid管理提供了更多便利,最常用的認證方式是NCSA。從Squid?2.5版本開始,NCSA認證包含在了basic中,而非以前單獨的認證模塊。下面來看看實現認證的具體操作。?
   首先在編譯時配置選項應包括以下配置:?
 --enable-auth="basic"?--enable-basic-auth-helpers="NCSA"?
   “make?install”以后,需要將“helpers/basic_auth/NCSA/ncsa_auth”拷貝到用戶可執行目錄中,如/usr/bin(如果在該目錄中找不到這個執行文件,在編譯時請使用make?all而不是make,或者直接在該目錄中執行make),然后需要借助Apache的密碼管理程序htpasswd來生成用戶名/密碼對應的文件,就像下面這行代碼:?
 htpasswd?-c?/var/squid/etc/password?guest?
   在輸入兩遍guest用戶的密碼后,一個guest用戶就生成了。如果以后需要添加用戶,把上面的命令去掉-c參數再運行即可。?
   Squid?2.5在認證處理上有了較大的改變,這里就只討論2.5版本的處理方法,2.4及以下版本請參考squid.conf.default。在2.5版的squid.conf中,包括以下幾個相關選項:?
 #該選項指出了認證方式(basic)、需要的程序(ncsa_auth)和?
 對應的密碼文件(password)?
 auth_param?basic?program?/usr/bin/ncsa_auth?/var/squid/etc/password?
 #?指定認證程序的進程數?
 auth_param?basic?children?5?
 #?瀏覽器顯示輸入用戶/密碼對話框時的領域內容?
 auth_param?basic?realm?My?Proxy?Caching?Domain?
 #?基本的認證有效時間?
 auth_param?basic?credentialsttl?2?hours?
 #?普通用戶需要通過認證才能訪問Internet?
 acl?normal?proxy_auth?REQUIRED?
 http_access?allow?normal?
   通過以上的配置即可完成認證工作。有的讀者可能要問:認證只針對普通用戶,而高級用戶是直接上網的,該怎么處理呢?其實,這兩種用戶是可以共存的。如前所述,Squid是順序處理http_access的,所以在http_access處理過程中,如果先處理normal用戶,那么當前用戶無論是否屬于高級用戶,都會被要求進行認證;相反如果先處理高級用戶,剩下的就只有需要認證的普通用戶了。例如以下配置代碼:?
 ...?
 http_access?allow?normal?(需要認證)?
 http_access?allow?advance?(不需要認證)?
 ...?
   不管是否為noauth用戶,都要求進行用戶名/密碼驗證。正確的方法是將二者位置交換,代碼如下:?
 ...?
 http_access?allow?advance?
 http_access?allow?normal?
 ...?
   這時,高級用戶不會受到任何影響。?
   總結?
   下面把整個squid.conf總結一下:?
 #?服務器配置?
 http_port?192.168.0.1:3128?
 cache_mgr?start@soocol.com?
 cache_dir?null?/tmp?
 cache_access_log?/var/squid/access.log?
 cache_log?/var/squid/cache.log?
 cache_store_log?/var/squid/store.log?
 visible_hostname?No1.proxy?
 client_mask?255.255.255.255?
 httpd_accel_host?virtual?
 httpd_accel_port?80?
 httpd_accel_with_proxy?on?
 httpd_accel_user_host_header?on?
 #?用戶分類?
 acl?advance?arp?00:01:02:1f:2c:3e?00:01:02:3c:1a:8b?...?
 acl?normal?proxy_auth?REQUIED?
 acl?all?src?0.0.0.0?
 #?行為分類?
 acl?mmxfile?urlpath_regex?/.mp3$?/.avi$?/.exe$?
 acl?conncount?maxconn?3?
 acl?worktime?time?MTWHF?8:30-12:00?14:00-18:00?
 acl?sinapage?dstdomain?ok.sina.com.cn?
 acl?qq?dstdomain?.tcccent.com.cn?
 #?處理?
 http_access?allow?advance?
 http_access?deny?conncount?normal?
 http_access?deny?!worktime?
 http_access?deny?mmxfile?
 http_access?deny?sinapage?
 http_access?deny?qq?
 http_access?allow?normal?
   配置后的狀況是,advance組可以不受任何限制地訪問Internet,而normal組則只能在工作時間上網,而且不能下載多媒體文件,不能訪問某些特定的站點,而且發送請求不能超過3個。?
   通過本文的介紹,它可以了解Squid的基本能力。當然,它的能力遠不止此,可以建立強大的代理服務器陣列,可以幫助本地的Web服務器提高性能,可以提高本地網絡的安全性等。要想發揮它的功效,還需要進一步控制。
轉載于:https://blog.51cto.com/fantefei/909084
總結
以上是生活随笔為你收集整理的搭建Linux安全的Squid代理服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 微博营销资料合集
 - 下一篇: 在Win平台得到磁盘、CPU、用户信息