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(透明)選項,就可以支持了。

# vim /etc/squid/squid.conf

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 列表前添加 ”!“感嘆號。

# vim /etc/squid/squid.conf

http_access den MYLAN MEDIAFLE        //禁止客戶機下載mp3,mp4等文件

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

http_access deny all        //默認禁止所有客戶機使用代理

執行訪問控制時,squid將按照各條規則的順序依次進行檢查,如果找到一條相匹配的規則就不再向後搜索(這點與iptables的規則匹配類似)。因此,規則的順序安排是非常重要的,一下兩種默認情況需要我們注意:

(1)沒有設置任何規則時:squid服務將拒絕客戶端的請求。

(2)有規則但找不到相匹配的項:squid將採用與最後一條規則相反的權限,即如果最後一條規則時allow ,就拒絕客戶端的請求,否則允許該請求。

通常情況 下,把最常用到的控制規則放在最前面,以減少squid的負載。在訪問控制的總體策略上,建議採用"先拒絕後允許"或“先允許後拒絕”的方式,最後一條規則設爲默認策略,設爲“http_access allow all”或者“http_access deny all”


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章