使用Squid做Proxy 伺服器的方法_Proxy 伺服器
來源:互聯網
上載者:User
說到Proxy 伺服器,我們最先想到的可能是一些專門的Proxy 伺服器網站,某些情況下,通過它們能加快訪問互連網的速度。其實,在需要訪問外部的區域網路中,我們自己就能設定代理,把訪問次數較多的網頁儲存在緩衝中,從而“提高”網路速度。更重要的是,我們能通過Proxy 伺服器,達到控制存取權限的目的。在 Windows中,有很多這樣的軟體,如:WinGate、SyGate等,不過,本文要討論的,是能給你充分自由的Linux下的Squid。
Linux下的Proxy 伺服器軟體也不是只有Squid,不過在大部分Linux版本中都帶有它。
走進“代理”
首先,我們來瞭解一下Proxy 伺服器的工作原理。Proxy 伺服器其實就是基於TCP/IP的一種軟體,它在TCP的某個連接埠上進行監聽,例如:4444,其他客戶機(就是想通過代理上網的那些Windows系統)配置好應用軟體,如:IE。其中需要填上Proxy 伺服器的連接埠,即前例中的4444,這樣Proxy 伺服器才知道你要訪問的地址。如果你是合法使用者的話,它就取得你想要的網頁,然後再通過4444這個連接埠傳遞給你,上網時你不會感覺到Proxy 伺服器的存在。
而Proxy 伺服器的真正意義在於:一、由於它是先將網頁下載到本地使用,因此訪問頻率越高的網站速度就會越快;二、如果你沒有訪問某個網站的許可權而它有,你就能通過它訪問到該網站;三、它可以控制你的訪問。
當今,通過窄帶聯入Internet的恐怕仍然佔大多數,Proxy 伺服器的提速作用也就十分明顯了。
熟悉Linux的朋友可能知道,在Linux下有Ipchains可以做路由器,一樣可以控制存取權限,但Ipchains的缺點是不支援DNS解析,如果你想通過它控制客戶機的訪問,就必須一一指定目的地的IP,如果有誰把Ipchains用在訪問Internet上,那他一定是瘋了,因為 Internet上的IP地址不但多得像天上的星星,而且和星星一樣隨時都在變化。Squid就不同,它可以指定哪些域尾碼不能訪問,如:.tw、. net等,這樣就把網域名稱對IP的映射交給ISP去做了。
配置舉例
在這個例子中,我們使用的是一台普通品牌機做Proxy 伺服器,內裝兩塊網卡,第一塊eth0接的是本單位的區域網路,第二塊eth1接的是一台簡單的Internet共用器,作業系統是RedHat Linux 6.1,Ipchains和Squid都是系統內建的。
像大多數Linux軟體一樣,Squid是通過設定檔工作的,它的預設設定檔是/etc/squid/squid.conf,原始檔案長達數十頁,給出了詳細的配置說明,其中真正用得上的,可能只是很小的一部分。看看下面這個設定檔,其實很多選項都是一目瞭然的:
http_port 4444
#Proxy 伺服器監聽的連接埠
cache_dir /var/cache/squid 100 16 32
#緩衝目錄 大小(兆) 第一級子目錄個數 第二級子目錄個數
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
acl all src 0.0.0.0/0.0.0.0
acl head src 192.168.0.2/255.255.255. 255 192.168.0.3/255.255.255.255
acl normal src 192.168.0.21-192.168. 0.99/255.255.255.255
acl denysite dstdomain tw net
acl denyip dst 61.136.135.04/255.255. 255.255
acl dnsport port 53
http_access allow head
http_access deny denysite
http_access deny denyip
http_access allow normal
http_access deny dnsport
執行個體分析
上面的內容,就是一個基本Squid所需要的全部配置,是不是很簡單?!
從上面我們可以看到,Proxy 伺服器使用4444這個連接埠進行監聽,緩衝目錄為100MB,IP地址為192.168.0.2和192.168.0.3的使用者可訪問所有網站,而IP地址為192.168.0.21~99的使用者不能訪問尾碼為tw和net的網站,也不能訪問IP地址為 61.136.135.04的網站(如果dst 61.136.135.04/255.255.255.255變成dst 61.136.135.04/255.255.255.0,指的是61.136.135.0這個網路)。
很明顯,Squid使用acl 來定義使用者組,並使用http_access來控制使用者組的許可權。acl後面可以是src(源地址)、dst(目標地址)、proto(協議)、port (連接埠)、 srcdomain(源域)、dstdomain(目標域)等,Squid的控制功能十分強大,你甚至可以用acl aclname time指定使用者組生效的時間,不過要注意,用http_access設定不同使用者組的許可權時,Squid是按從上到下的順序執行的,如果你想關閉一個組訪問某些網站的許可權,就必須把deny的相應句子放在這個組的前面。
另外,Squid文檔中特別指出,如果沒有相應的access設定,那麼預設的許可權與最後一行相反,在上例中,一個IP為192.168.0.5的客戶未被定義卻能訪問外部網路,因此,在最後一行設定http_access deny all是很有必要的。
設定完成後,就可以直接運行Squid來啟動它,如果設定檔有誤,Squid會給出相應的提示。然後再使用Ipchains設定包的轉寄規則,如只允許客戶機使用POP3(110)、SMTP(25)、DNS(53)這幾個連接埠收發信件,瀏覽網頁只能使用代理,這樣網路就安全得多了。