Squid 服務的安裝及部署

squid 作爲一款服務器代理工具,可以緩存網頁對象,減少重複請求,從而達到加快網頁訪問速度,隱藏客戶機真實IP,更爲安全。
squid的工作機制:
Squid 服務的安裝及部署
當我們客戶機通過squid代理去訪問web頁面時,指定的代理服務器會先檢查自己的緩存,若是緩存中有我們客戶機需要的頁面,那麼squid服務器將直接把緩存中的頁面內容返回給客戶機,如果緩存中沒有客戶端請求的頁面,那麼squid代理服務器就會向internet發送訪問請求,獲得返回的web頁面後,將網頁的數據保存到緩存中併發送給客戶機。

由於客戶機的web訪問請求實際上是squid代理服務器來代替完成的,所以隱藏了用戶的真實IP地址,從而起到一定的保護作用。
另一方面,squid也可以針對要訪問的目標、客戶機的地址、訪問的時間段進行過濾控制。

根據實現的方式不同,基本可以分爲傳統代理和透明代理兩種方式:

傳統代理:也就是普通的代理服務,需要我們客戶端在瀏覽器、聊天工具等一些程序中設置代理服務器的地址和端口,然後才能使用代理來訪問網絡,這種方式相比較而言比較麻煩,因爲客戶機還需手動指定代理服務器,所以一般用於Internet環境。

透明代理:與傳統代理實現的功能是一樣的,區別在於客戶機不需要手動指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將web訪問重定向,實際上仍然交給代理服務器來處理,重定向的過程完全是由squid服務器進行的,所以對於客戶機來說,甚至不知道自己使用了squid代理服務,因此呢,我們稱之爲透明模式。
透明代理多用於局域網環境,如在Linux網關中啓用透明代理後,局域網主機無須進行額外設置就能享受更好的上網速度。

首先編譯安裝 Squid:

[root@localhost media]# tar zxf squid-3.5.23.tar.gz -C /usr/src/
[root@localhost media]# cd /usr/src/squid-3.5.23
[root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter -enable-async-io=240 --enable-default-err-language=Simplify_Chinese -disable-poll --enable-epoll --enable-gnuregex 

上述選項含義:

--prefix=/usr/local/squid:指定安裝目錄。
--sysconfdir=/etc:單獨將配置文件修改到其他目錄。
--enable-linux-netfilter:使用內核過濾。
--enable-async-io=值:異步I/O,提升存儲性能,相當於“--enable-pthreads --enable-storeio=ufs,aufs --with -pthreads --with-aufs=thread=值”
--enable-default-err-language=Simplify_Chinese:錯誤信息的顯示語言。
--disable-poll 與 --enable-epoll:關閉默認使用 poll 模式,開啓 epoll 模式提升性能。
--enable-gnuregex:使用 GNU 正則表達式。
[root@localhost /]# ln -s /usr/local/squid/sbin/*  /usr/local/sbin/         # 將程序文件做鏈接,方便服務使用
[root@localhost /]# useradd -M -s   /sbin/nologin  squid      # 創建系統賬戶
[root@localhost /]# chown -R squid:squid /usr/local/squid/var/         # 設置屬主 屬組

修改 Squid 的配置文件:

[root@localhost /]# vim /etc/squid.conf
...........
http_port 3128      #用來指定代理服務器監聽地址和端口,默認存在該行(默認端口號是3128)
cache_effective_user squid   #用來指定squid的程序用戶,用來設置初始化等相關信息。
#否則啓動不成功,該行及下一行配置項默認不存在。
cache_effective_group squid      #用來指定運行組。需手動添加該行
[root@localhost /]# squid -k parse 
# 用來檢查配置文件語法是否正確,只要在輸出的信息中沒有ERROR字樣說明沒毛病
[root@localhost /]# squid -z                         #初始化緩存目錄。
[root@localhost /]# squid                            #啓動squid服務。

爲了使 Squid 服務的啓動、停止、重載更加方便,可以編寫一個 Squid 服務腳本,並添加爲系統服務:

[root@localhost /]# vim /etc/init.d/squid

#!/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 -rf $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

[root@localhost /]# chmod +x /etc/init.d/squid              #賦予腳本執行權限
[root@localhost /]# chkconfig --add squid                     #添加爲系統服務
[root@localhost /]# systemctl restart squid                      #重啓服務以測試腳本是否可用

基於傳統代理的squid代理服務器已經配置完成了,web 服務器配置過程省略,可以參考博文:https://blog.51cto.com/14227204/2424170 來搭建 web 服務器
現在開啓客戶端進行驗證:
打開瀏覽器手動指定代理:
Squid 服務的安裝及部署
Squid 服務的安裝及部署
指定代理服務器 IP 及端口號
Squid 服務的安裝及部署
這裏沒有配置 DNS 服務,所以使用IP進行的驗證:
Squid 服務的安裝及部署

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