1. 程式人生 > 實用技巧 >Squid代理伺服器

Squid代理伺服器


一、快取代理概述

作為應用層的代理服務軟體,Squid主要提供快取加速、應用層過濾控制的功能。

1.代理的工作機制

當客戶機通過代理來請求Web頁面時,指定的代理伺服器會先檢查自己的快取,如果快取中已經有客戶機需要的頁面,則直接將快取中的頁面內容反饋給客戶機;如果快取中沒有客戶機要的訪問的頁面,則由代理伺服器向Internet傳送訪問請求,當獲得返回的Web頁面以後,將網頁資料儲存到快取中併發送給客戶機。

作用:

減少了向Internet提交重複的Web請求的過程,提高了客戶機的Web訪問響應速度;

客戶機的web訪問請求實際上是由代理伺服器來代替完成的,從而可以隱藏使用者的真實IP地址;

代理伺服器有機會針對要訪問的目標、客戶機的地址、訪問時間段等進行過濾控制,還能起到監控的作用。

2.代理的基本型別

傳統代理:首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟體等程式中手動設定代理服務器的地址和埠,然後才

能使用代理來訪問網路。網頁瀏覽器訪問網站時的域名解析請求也會發給指定的代理伺服器。

透明代理:提供與傳統代理形同的功能和服務,其區別在於客戶機不需要指定代理伺服器的地址和埠,而是通過默

認路由、防火牆策略將Web訪問重定向。重定向的過程對客戶機來說是“透明”的,使用者甚至不知道自己在

使用代理服務,所以稱為“透明代理”。網頁瀏覽器訪問網站時的域名解析請求將優先發給DNS伺服器。

實際應用中,傳統代理多見於Internet環境,如為QQ程式使用代理可以隱藏本機的真實IP地址,為下載工具使用多個代理可以規避伺服器的併發連結限制;透明代理多見於區域網環境。

二、安裝及執行控制

1.編譯安裝

wKiom1hSIgaCY_aVAAAEEGCTZgs065.png

wKiom1hSIgbSH3skAAAKUS30xLA439.png

主要配置項含義:

--sysconfdir=/etc//單獨將配置檔案修改到其他目錄

--enable-arp-acl//可以在規則中設定直接通過客戶端MAC行管理,防止客戶端使用IP欺騙

--enable-linux-netfilter//使用核心過濾

--enable-linux-tproxy //支援透明模式

--enable-async-io=//非同步I/O,提升儲存效能,

--enable-err-language=Simplify_Chinese//錯誤資訊的顯示語言

--enable-underscore //允許URL中有下劃線

--enable-poll//使用Poll()模式,提升效能

--enable-gunregex //使用GNU正則表示式

wKioL1hSIgeDEAqpAAAGIT7Npm0245.png

安裝完成後,建立連結檔案、建立使用者和組。

2.Squid的配置檔案

wKiom1hSIgeCmwzoAAADdI0xn_o483.png

wKioL1hSIgeTk5bqAAALMjgckFU451.png

主要修改有以下幾條配置項,有的配置項需要修改,而有的配置項需要新增。

http_port 3128 //用來指定代理伺服器監聽的地址和埠,預設

埠號為3128修改

cache_effective_user squid//指定squid的程式使用者,用來設定初始化、運

行時快取的賬號,否則啟動不成功! 新增

cache_effective_group squid//預設為cache_effective_user指定賬號的基

本組 新增

visible_hostname 主機名//代理伺服器的主機名 新增

cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

3.Squid的執行控制

wKiom1hSIgjxes5rAAAB3gSFJSQ168.png

檢查配置檔案語法是否正確


wKioL1hSIgjR4xNIAAABpFDk0UI293.png

-z選項用來初始化快取目錄

wKioL1hSIgjAeJ--AAABe5GXmh8000.png

啟動squid服務

注意:第一次啟動Squid服務時,會自動初始化快取目錄。在沒有可用的Squid服務指令碼的情況下,需要直接呼叫Squid程式來啟動服務,這時需要先進行初始化。

wKiom1hSIgmyyXnnAAAE9G4kOt0852.png

確認服務處於正常監聽狀態

為了使Squid服務的啟動、停止、過載等操作更加方便,可以編寫Squid服務指令碼,並使用chkconfigservice工具來進行管理。

wKioL1hSIgmzRrFkAAACHACZml4373.png

#!/bin/bash

# chkconfig: 2345 90 25

# config: /etc/squid.conf

# pidfile: /usr/local/squid/var/run/squid.pid

# Description: Squid - internet object cache.

PID="/usr/local/squid/var/run/squid.pid"

CONF="/etc/squid.conf"

CMD="/usr/local/squid/sbin/squid"

case "$1" in

start)

netstat -anpt | grep squid &> /dev/null

if [ $? -eq 0 ]

then

echo "squid is running"

else

echo "正在啟動squid..."

$CMD

fi

;;

stop)

$CMD -k kill &> /dev/null

rm -fr $PID &> /dev/null

;;

status)

[ -f $PID ] &> /dev/null

if [ $? -eq 0 ]

then

netstat -anpt | grep squid

else

echo "squid is not running."

fi

;;

restart)

$0 stop &> /dev/null

echo "正在關閉squid..."

$0 start &> /dev/null

echo "正在啟動squid..."

;;

reload)

$CMD -k reconfigure

;;

check)

$CMD -k parse

;;

*)

echo "用法:$0 {start | stop | restart | reload | check | status}"

;;

esac

wKioL1hSI02y-7z9AAAEWLfB1pI638.png


三、構建透明代理伺服器

透明代理依賴於預設路由和防火牆的重定向策略,因此更適用於為區域網主機服務,而不適合為Internet中的客戶機提供服務。

案例:

·linux閘道器上,構建Squid為客戶機訪問Internet提供代理服務,設定ACL訪問控制。

·在所有的區域網客戶機上,只需要正確設定IP地址、預設閘道器,不需要手動指定代理伺服器的地址、埠等資訊。


wKiom1hSI0_gqnqfAABZsgD83AA024.png



1.配置Squid支援透明代理

wKioL1hSI0-yhl3FAAACEP0Q1Zk192.png

wKiom1hSI0_hpPG6AAACjfRq-W4464.png

wKiom1hSI0-gNEQ8AAACC9FxaEc243.png

對於2.6以上版本的Squid服務,只要在http_port配置行加上一個transparent選項,就可以支援透明代理了。


2.設定iptables的重定向策略

wKioL1hSI1DBsDllAAADQLpq128197.png

在防火牆上為3128埠開啟例外


wKioL1hSI1CTZw6dAAAOtMFMqOk050.png

設定重定向策略

控制型別REDIRECT:實現本機埠的重定向,此例中將訪問網站協議HTTPHTTPS的外發資料交給本機的Squid服務

3128埠)。

選項--to 埠號:指定對映的目標埠

客戶機配置正確的IP和預設閘道器後,就可以訪問網站伺服器了,接下來通過設定ACL訪問控制,實現有針對性的過濾。

3.ACL訪問控制

在配置檔案squid.conf中,ACL訪問控制通過兩個步驟:

第一、使用acl配置項定義需要控制的條件;

第二、通過http_access配置項對已定義列表做“允許”或“拒絕”訪問的控制。

(1)定義訪問控制列表

格式:acl 列表名稱 列表型別 列表內容

[[email protected] ~]# vim /etc/squid.conf

……

acl SAFEPORT port 80 443

acl MALAN src 192.168.1.0 /24//客戶機網段

acl MEIDAFILE urlpath_regex -i \.mp4$ \.avi$//.mp4.avi結尾的URL路徑

acl WORKING time MWTHF 0830-1730 //時間為週一至週五830~1730

……

當要限制的同一類物件較多時,可以使用獨立的檔案來存放,在acl配置行的列表內容處指定對應的檔案位置即可。例如,要針對目標地址建立黑名單檔案,操作如下:

[[email protected] ~]# mkdir /etc/squid

[[email protected] ~]# vim /etc/squid/ipblock.list//建立目標IP地址名單

61.135.167.36

125.39.127.25

……

[[email protected] ~]# vim /etc/squid/dmblock.list//建立目標域地址名單

.qq.com

.msn.com

.live.com

……

[[email protected] ~]# vim /etc/squid.conf

……

acl IPBLOCK dst /etc/squid/ipblock.list//呼叫指定檔案中的內容

acl DMBLOCK dstdomain /etc/squid/dmblock.list

常用的訪問控制列表型別

src:源IP地址、網段、IP地址範圍

dst:目標IP地址、網段、主機名

port:目標埠

dstdomain:目標域

time:上網時間,WTWHFAS表示一星期中的各天的英文縮寫(H-Thursday

maxconn:每個客戶機的併發連線數

url_regex:目標資源的URL地址,-i表示忽略大小寫(例如:^rtsp://

urlpath_regex:目標資源的整個URL路徑(例如:\.mp3$

(2)設定訪問許可權

使用http_access配置項來進行控制,需要注意的是,http_access配置行必須放在對應的acl配置行之後。

格式:http_access allowdeny 列表名……

[[email protected] ~]# vim /etc/squid.conf

…… //acl列表

http_access deny MYLAN MEDIAFILE IPBLOCK DMBLOCK

//禁止客戶機下載MP4avi型別文件,禁止客戶機訪問黑名單中的IP地址、網站域

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

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

執行訪問控制時,squid將按照各條規則的順序一次進行檢查,如果找到一條相匹配的規則就不再向後搜尋,需要注意的是:

·沒有設定任何規則時:Squid伺服器拒絕客戶端的請求

·有規則但找不到相匹配的項:Squid將採用與最後一條規則的相反的許可權


四、Squid日誌分析

Sarg全名是Squid Analysis Report Generator,是一款Squid日誌分析工具,採用HTML格式,詳細列出每一位使用者訪問Internet的站點資訊、時間佔用資訊、排名、連線次數、訪問量等。

1.安裝GD

[[email protected] ~]# yum -y install gd gd-devel

2.安裝sarg

wKiom1hSI1CCArmcAAAEdWA0grY881.png

wKioL1hSI1DTvTx7AAAHywa9oiw784.png

上述配置項的含義:

--sysconfdir=/etc/sarg //配置檔案目錄,預設是/usr/local/etc

--enable-extraprotection//新增額外的安全保護

3.配置

[[email protected] ~]# vim /etc/sarg/sarg.conf

access_log /usr/local/squid/var/logs/access.log//指定squid的訪問日誌檔案

title Squid User Access Report//網頁標題

output_dir /var/www/html/sarg//sarg報告的輸出目錄

user_ip no//使使用者名稱顯示

exclude_hosts /usr/local/sarg/noreport//指定不計入排序的站點列表檔案

topuser_sort_filed connect BYTES reverse

//top排序中,指定連線次數、訪問位元組數,採用降序排列,升序將reverse換成normal

user_sort_filed connect reverse//對於使用者訪問記錄,連線次數按降序排列

overwrite_report no //當那個日期報告已經存在,是否覆蓋報告

charset UTF-8 //使用字符集

weekdays0-6//指定top排序時的星期週期,0為週日

hours 9-12,14-16,18-20//指定top排序時的時間週期

www_document_root /var/www/html //網頁根目錄

4.執行

上述配置中,添加了不計入排序的站點,需要存在這個檔案中:

[[email protected] ~]# touch /usr/local/sarg/noreport

這個檔案中新增的 域名將不被顯示在排序中

[[email protected] ~]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin//設定符號連結

[[email protected] ~]# sarg//啟動一次記錄


5.驗證

在客戶端上訪問http://192.168.1.254/sarg/,可以看到報表。

6.計劃任務

可以將sarg做成計劃任務,定期執行

例如,寫個日報告:

[[email protected] ~]# vim /usr/local/sarg/daily.sh

#/bin/bash

#get current date

TODAY=$(date +%d/%M/%Y)

#get one week ago today

YESTERDAY=$(date -d 1 day ago+%d/%m/%Y)

/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null

exit 0

[[email protected] ~]# chmod +x /usr/local/sarg/dalily.sh

[[email protected] ~]# crontab -e

00 00 * * * /usr/local/sarg/daily.sh

[[email protected] ~]# chkconfig crond on



轉載於:https://blog.51cto.com/fengjicheng/1882984