天天看點

squid代理伺服器

安裝squid

有的發行版本會預裝squid服務,有的則沒有。

# yum install squid

代理伺服器概述

squid提供緩存加速,應用層過濾控制的功能。當客戶機通過代理請求web頁面時,指定的代理伺服器會先檢查自己的緩存,如果緩存中已經有客戶機需要的頁面,則直接将緩存的頁面内容傳回給客戶機;如果緩存中沒有客戶機要通路的頁面,則由代理伺服器向internet中發送通路請求,當獲得傳回的web頁面以後,将網頁資料儲存到緩存中并發送給客戶機。

http代理的緩存加速對象主要是文字,圖像等靜态web元素。使用緩存後減少了向internet送出重複的web請求的過程,提高了客戶機的web通路相應速度。

由于客戶機的web通路請求實際上是由代理伺服器代替完成的,進而可以隐藏使用者的真是IP位址,起到一定的保護作用。代理伺服器也可以起到過濾作用。

代理伺服器的基本類型

1)。傳統代理

就是普通代理服務,在客戶機的浏覽器,QQ聊天工具等軟體中,必須手動設定代理伺服器的位址和端口,然後才能使用代理來通路網絡。對于也米娜浏覽器來說,通路網站是的域名解析請求也要發給指定的代理伺服器。

2)。透明代理

提供的功能與傳統代理相同,差別在于透明代理不用指定代理伺服器的位址和端口。而是通過預設路由,防火牆政策将WEB通路重定向,這個過程對于客戶機來說是透明的,客戶機不知道自己使用了代理,是以叫透明代理。使用透明代理時,網頁浏覽器通路網站時的域名解析請求将優先發給DNS伺服器。

實際應用中傳統代理多用于internet中,例如:電腦程式使用代理可以隐藏本機真實的IP位址,為下載下傳工具使用多個代理可以規避伺服器的并發連接配接限制。透明代理多用于區域網路環境。

Squid的配置檔案

squid 的配置檔案位于 /etc/squid/squid.conf

http_port 3128    //代理服務監聽的位址和端口(預設端口為3128);如果伺服器有多個網絡接口,但隻希望給一個IP 提供服務,還可以指定IP位址和接口,例: http_port 192.168.1.33:3128

cache_mem 64 MB    //指定緩存功能所使用的記憶體大小,機關為MB,容量應為4的倍數,建議設為實際記憶體的1/4到1/3,具體根據伺服器的性能和負載而定。

maximum_object_size 4096 KB      //允許儲存到緩存空間的最大對象(檔案)大小,機關KB,超過限制大小的檔案将不會被緩存,而是直接發給使用者,預設的4096KB基本可以滿足一般頁面,但是希望代理音頻,視訊等緩存檔案時,則應适當增加參數。

reply_body_max_size 10240000 allow all    //允許使用者下載下傳的最大檔案大小,以位元組(byte)為機關,預設設定為0位元組,表示不限制。其中 all 指任意使用者。

cache_dir ufs    /var/spool/squid 100 16 256    //指緩存資料所使用的目錄,容量,子目錄個數等相關參數。ufs(UNIX file system,squid最早使用的緩存檔案的格式)/var/spool/squid 緩存資料的預設存放目錄;後面的數字依次表示為緩存目錄配置設定的磁盤空間大小(MB),以及子目錄個數,二級子目錄個數。當代理的使用者數量較多時,可以适當增大緩存目錄大小。

access_log /var/log/squid/access.log squid    //指定代理伺服器的日志位置及記錄格式(squid)

visible_hostname proxy.dyq.com    //    代理伺服器本機的可見主機名

dns_testnames www.google.com www.sina.com.cn www.162.com     //用來指定DNS解析,為了確定解析正常,最好設定多個DNS。

傳統代理建構

傳統代理的特點在于,客戶機的相關程式必須指定代理伺服器的位址,端口等基本資訊。下面舉例說明。

例子說明:

    伺服器A →→  伺服器B(squid代理) →→ 客戶機c

192.168.1.12        192.168.1.13                     192.168.1.14

配置Squid 實作傳統代理服務時,需要注意兩個地方:

1. 配置好可見的主機名

2. 添加 http_access allow all 通路政策,以允許任何客戶機都可以使用代理服務。

修改squid.conf 配置檔案

# vim /etc/squid/squid.conf

http_port 3128

visible_hostname localhost.localdomain

reply_body_max_size 10240000 allow all    #允許下載下傳的最大檔案大小

http_access allow all    #放在http_access deny all 之前

初始化并啟動 squid 服務

第一次啟動squid服務時,會啟動并初始化緩存目錄,在沒有可用的squid服務腳本的情況下,也可以直接滴啊用squid程式來啟動服務,這時需要先程序初始化。

squid -z     //-z選項用來初始化緩存目錄

squid -D    //啟動squid服務;-D 表示不DNS測試

修改完squid.conf 配置檔案以後,需要重新加載才能生效。

service squid reload 

squid -k reconfigure        //這兩個指令都可以重新加載配置。

确認squid 服務運作正常

# netstat -anpt | grep "squid"

tcp        0      0 :::3128                     :::*                        LISTEN      8556/(squid)

設定用戶端配置

一般的浏覽器,程式都有配置代理的選項,這個百度就好,不多說了

驗證代理伺服器

使用代理後的浏覽器通路網站,然後再檢視伺服器的日子檔案,檢視通路日志,看同一時間的IP 有沒有變化。

透明代理

透明代理與傳統代理提供的服務是一緻的,但是其 透明 的實作依賴與預設路由和防火牆的重定向政策,是以更适合于為網際網路主機服務,而不适合為internet中的客戶機提供服務。

基于區域網路主機通過linux網關通路internet的環境,描述如下:

(1)在linux網關上,建構squid為客戶機通路internet提供代理服務。

(2)在所有的區域網路客戶機上,隻需正确設定IP位址,預設網關,不需要手動指定代理伺服器的位址,端口等資訊

透明代理的關鍵在于linux網關伺服器,而對于客戶機僅需正确設定網絡位址,預設網關,而并不需要指定代理伺服器。

至于客戶機的DNS解析功能,最好是通過正常DNS解析,不推薦交給代理伺服器處理。下面主要介紹squid服務的透明代理設定,防火牆政策設定,其他操作參考前面的傳統代理配置過程。

配置Squid支援透明代理

squid預設不支援透明代理,如果要設定的話,要在 http_port 配置後面加上 transparent(透明)選項,就可以支援了。

http_port 192.168.1.33:3128 transparent

:wq

# service squid reload

設定iptables的重定向政策

squid服務是建構在linux網關之上的,是以隻需正确設定防火牆政策,就可以将區域網路主機通路internet的資料包轉交給squid進行處理。這需要用到iptables的REDIRECT(重定向)政策,其作用是實作本機端口的重新定向,将通路網站協定http https的外發資料包轉交給本機的squid服務(3128端口)

REDIRECT 也是一種資料包控制類型,隻能在nat表的PREROUTING或 OUTPUT 鍊以及被其調用的鍊中使用,通過  --to-port 端口号 的形式來指定映射的目标端口。

例:192.168.4.0/24 通路的http  https 等協定的資料包,轉交給運作在本機3128 端口上的squid服務處理

# iptables -t nat -A PREROUTING -i eth1 -s 192.168.4.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

# iptabbles -t nat -A PREROUTING -i eth1 -s 192.168.4.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128

FTP協定因為涉及多個端口,多個連接配接,使用透明代理不太好實作,是以推薦用傳統代理,手動指定代理IP,端口。

驗證透明代理的使用

有些軟體可以設定代理伺服器的位址,在linux中也可以用unset指令清楚 HTTP_PROXY , HTTPS_PROXY 等變量

# unset HTTP_PROXY HTTPS_PROXY

###

ACL通路控制

squid伺服器通過合理設定ACL(Access Control List  通路控制清單)并進行限制,可以針對源位址,目标位址,通路的URL路徑,通路的時間等各種條件進行過濾。

在配置檔案squid.conf中,ACL通路控制通過以下兩個步驟來實作:

(1)使用acl配置項定義需要控制的條件

(2)通過http_access配置項對已定義的清單做”允許“或”拒絕“通路的控制。

定義ACL清單

格式:

acl 清單名稱 清單類型 清單内容 ...

其中,”清單名稱“可以随便起;”清單類型“必須使用squid預定義的值,對應不同類别的控制條件;”清單内容“是控制的具體對象,不同類型的清單所對應的内容也不一樣。可以有多個值(以空格分隔,為”或“的關系)

通路控制的關鍵在于,選擇的清單類型,具體條件對象。

設定 acl 通路權限

定義好通路控制清單以後,需要使用 httpd_access  配置項來進行控制。注意:http_access 配置行必須放在對應的acl配置行之後,每一行http_access配置确定一條通路控制規則。

http_access allow或deny 清單名...

每一條 http_access 規則中可以包含多個清單名,每個清單名之間用空格分開(與 的關系),表示必須滿足所有acl清單對應的條件才會進行限制。使用取反條件時,可以在acl 清單前添加 ”!“感歎号。

http_access den MYLAN MEDIAFLE        //禁止客戶機下載下傳mp3,mp4等檔案

http_access allow MYLAN WORKTIME        //允許客戶機在工作時間上網

http_access deny all        //預設禁止所有客戶機使用代理

執行通路控制時,squid将按照各條規則的順序依次進行檢查,如果找到一條相比對的規則就不再向後搜尋(這點與iptables的規則比對類似)。是以,規則的順序安排是非常重要的,一下兩種預設情況需要我們注意:

(1)沒有設定任何規則時:squid服務将拒絕用戶端的請求。