1. 程式人生 > >linux基礎伺服器架設squid(一)普通代理伺服器!

linux基礎伺服器架設squid(一)普通代理伺服器!

一、簡介

代理伺服器英文全稱是Proxy Server,其功能就是代理網路使用者去取得網路資訊。

Squid是一個快取Internet 資料的軟體,其接收使用者的下載申請,並自動處理所下載的資料。當一個使用者想要下載一個主頁時,可以向Squid 發出一個申請,要Squid 代替其進行下載,然後Squid 連線所申請網站並請求該主頁,接著把該主頁傳給使用者同時保留一個備份,當別的使用者申請同樣的頁面時,Squid 把儲存的備份立即傳給使用者,使使用者覺得速度相當快。Squid 可以代理HTTP、FTP、GOPHER、SSL和WAIS等協議並且Squid 可以自動地進行處理,可以根據自己的需要設定Squid,使之過濾掉不想要的東西。

1.1 工作流程

當代理伺服器中客戶端需要的資料時:

a. 客戶端向代理伺服器傳送資料請求;

b. 代理伺服器檢查自己的資料快取;

c. 代理伺服器在快取中找到了使用者想要的資料,取出資料;

d. 代理伺服器將從快取中取得的資料返回給客戶端。

當代理伺服器中沒有客戶端需要的資料時:

1. 客戶端向代理伺服器傳送資料請求;

2. 代理伺服器檢查自己的資料快取;

3. 代理伺服器在快取中沒有找到使用者想要的資料;

4. 代理伺服器向Internet 上的遠端伺服器傳送資料請求;

5. 遠端伺服器響應,返回相應的資料;

6. 代理伺服器取得遠端伺服器的資料,返回給客戶端,並保留一份到自己的資料快取中。

1.2 Squid 分類

按照代理型別的不同,可以將Squid 代理分為正向代理和反向代理,正向代理中,根據實現方式的不同,又可以分為普通代理和透明代理。

  • 普通代理:需要客戶機在瀏覽器中指定代理伺服器的地址、埠;
  • 透明代理:適用於企業的閘道器主機(共享接入Internet)中,客戶機不需要指定代理伺服器地址、埠等資訊,代理伺服器需要設定防火牆策略將客戶機的Web訪問資料轉交給代理服務程式處理;
  • 反向代理:是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器;

 

二、系統環境

普通代理伺服器關閉iptables

作業系統:CentOS release 6.5 (Final)

Squid版本:squid-3.1.23-24.el6.x86_64

SELINUX=disabled

service iptables stop

三、安裝Squid服務

3.1 首先檢查系統中是否安裝squid 軟體

  [[email protected] ~]# rpm -aq | grep squid

3.2 如果未安裝,使用yum方式安裝(配置本機yum源或使用阿里的源都可以,或使用RPM包方式進行安裝)

[[email protected] ~]# yum -y install squid 

下面是我安裝的squid 的版本資訊!

3.3 設定開機自啟動

[[email protected] ~]# chkconfig squid on     

或者[[email protected] ~]# chkconfig --level 35 squid on            

確認服務狀態

[[email protected] ~]# chkconfig --list | grep squid

squid 0:off 1:off 2:on 3:on 4:on 5:on 6:off

四、squid伺服器的配置檔案說明

squid 的主配置檔案是 /etc/squid/squid.conf,所有squid的設定都是在這個檔案裡配置,下面我們來講解一下該檔案的配置選項。

http_port 3128      //設定監聽的IP與埠號

cache_mem 64 MB      //額外提供給squid使用的記憶體,squid的記憶體總佔用為 X * 10+15+“cache_mem”,其中X為squid的cache佔用的容量(以GB為單位),
               //比如下面的cache大小是100M,即0.1GB,則記憶體總佔用為0.1*10+15+64=80M,推薦大小為實體記憶體的1/3-1/2或更多。
maximum_object_size 4 MB   //設定squid磁碟快取最大檔案,超過4M的檔案不儲存到硬碟

minimum_object_size 0 KB   //設定squid磁碟快取最小檔案

maximum_object_size_in_memory 4096 KB   //設定squid記憶體快取最大檔案,超過4M的檔案不儲存到記憶體

cache_dir ufs /var/spool/squid 100 16 256   //定義squid的cache存放路徑 、cache目錄容量(單位M)、一級快取目錄數量、二級快取目錄數量

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh        //log檔案日誌格式

access_log /var/log/squid/access.log combined  //log檔案存放路徑和日誌格式

cache_log /var/log/squid/cache.log   //設定快取日誌

logfile_rotate 60   //log輪循 60天

cache_swap_high 95  //cache目錄使用量大於95%時,開始清理舊的cache

cache_swap_low 90   //cache目錄清理到90%時停止。

acl localnet src 192.168.1.0/24  //定義本地網段

http_access allow localnet  //允許本地網段使用

http_access deny all  //拒絕所有

visible_hostname squid.david.dev  //主機名

cache_mgr mchi[email protected]  //管理員郵箱

五、普通代理服務  

 我的實驗架構圖

因為我的網路環境中有一個代理伺服器(10.67.50.59),有許可權使用者可正常使用,本次我的是在現有環境下配置一個二級代理伺服器(10.67.50.52)測試使用!

5.1 配置Squid 代理伺服器IP地址

將eth0的IP地址修改為 10.67.50.52

 5.2 檢視squid.conf 的配置檔案,在修改前先進行備份!

 5.2.1  配置檔案備份:cp /etc/squid/squid.conf /etc/squid/squid.conf.blk 

5.2.2  grep 檢視配置檔案內的原始配置

[[email protected] squid]#  grep -P -v '#|^$' squid.conf.blk
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern .		0	20%	4320 

 5.2.3 我們本次做普通的代理伺服器,在設定之前,可將原始配置值姐刪除,我們重新加入如下配置!

http_port 3128         #代理埠設定;預設3128     
cache_mem 128 MB       #最大快取塊
cache_dir ufs /var/spool/squid 4096 16 256    #ufs:快取資料的儲存格式  #/var/spool/squid    快取目錄   #100:快取目錄佔磁碟空間大小(M)   #16:快取空間一級子目錄個數  #256:快取空間二級子目錄個數
cache_effective_user squid #這裡以使用者squid 的身份squid伺服器 我們安裝完squid服務後,會在/etc/passwd 檔案中生成一個 squid 的賬號!截圖如下!
cache_effective_group squid #這裡以群組squid 的身份squid伺服器
cache_access_log /var/log/squid/access.log #接入訪問日誌存放位置
cache_log /var/log/squid/cache.log #快取日誌
cache_store_log /var/log/squid/store.log #儲存日誌
visible_hostname basicservices #可見主機名
acl localnet src 10.0.0.0/8 #acl 定義本地網路地址範圍
http_access allow localnet #允許所有的10.0.0.0/8地址段使用
cache_peer 10.67.50.59 parent 808 0 default #本次設定為二級代理,需將服務請求指向一級代理,如預設為雙網絡卡的以及代理,可無需配置此項
never_direct allow all

 如果以及代理需要賬號密碼,配置選項中需新增如下語句!方可呼叫一級代理

  #cache_peer 10.67.50.59 parent 808 0 login=account:passwd default
  #never_direct allow all

生成的squid使用者

5.3 初始化

[[email protected] ~]# squid -z

5.4 啟動Squid

在此入夥遇到無法啟動的情況,去檢視一下/var/log/message 中的報錯,我的是squid.conf配置檔案語句有錯誤,導致無法啟動,後修改正確後,可正常啟動服務!

5.5 配置user proxy

5.6 測試

配置上以後,可以正常連線外網!