Squid-4.1(最新)安裝及構建代理服務器

Squid-4.1(最新)安裝及構建代理服務器

緩存代理簡介

Squid做爲應用層代理服務軟件,主要提供緩存加速和應用層過濾控制的功能。本次實驗使用的是Squid 4.1版本,和以往版本有較多不一樣,通過幾天的摸索,終於成功實現了傳統代理、透明代理及反向代理等功能。Squid-4.1(最新)安裝及構建代理服務器linux

代理的工做機制

代理服務器(Proxy Server)是我的網絡和Internet服務商之間的中間代理機構,負責轉發合法的網絡信息,對轉發進行控制和登記。其最基本的功能就是鏈接,此外還包括安全性、緩存,內容過濾,訪問控制管理等功能。當客戶機經過代理請求Web頁面時,執行的代理服務器會先檢查本身的緩存,當緩存中有客戶機須要訪問的頁面,則直接將緩存服務器中的頁面內容反饋給客戶機;若是緩存中沒有客戶機須要訪問的頁面,則由代理服務器想Internet發送訪問請求,當得到返回的Web頁面之後,將頁面數據保存到緩存中併發送給客戶機。web

代理的基本類型

根據實現的方式不一樣,代理服務能夠分爲傳統代理和透明代理兩種常見的代理服務。正則表達式

一、傳統代理:普通代理服務,必須在瀏覽器、QQ聊天工具,下載團建等程序中手動設置代理服務器的地址和端口,而後才能使用代理服務來訪問網絡,對於網頁瀏覽器,訪問網站時的域名解析請求也會發送給指定的代理服務器。vim

二、透明代理:提供與傳統代理相同的功能和服務,其區別在於客戶機不須要指定代理服務器的地址和端口,而是經過默認路由、防火牆策略將Web訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對客戶機「透明」的,用戶甚至不知道本身在使用代理服務,因此稱爲「透明代理」。使用透明代理時,網頁瀏覽器訪問網站時的域名解析請求將優先發給DNS服務器。瀏覽器

安裝及運行控制

下面以最新版Squid 4.1版本爲例,介紹其安裝和運行控制。緩存

編譯安裝Squid

首先將下載下來的源代碼包,解壓到指定目錄中。安全

[root@promote ~]# tar xfvz squid-4.1.tar.gz -C /opt/
[root@promote ~]# cd /opt/squid-4.1/
[root@promote squid-4.1]# ./configure --prefix=/usr/local/squid \ #指定安裝目錄
> --sysconfdir=/etc \   #單獨將配置文件修改到其餘目錄
> --enable-arp-acl \    #能夠在規則中設置經過客戶端MAC進行管理,防止IP欺騙
> --enable-linux-netfilter \   #使用內核過濾
> --enable-linux-tproxy \      #支持透明代理(這個很重要,不然後面透明代理沒法實現)
> --enable-async-io=100 \      #異步IO,提高存儲性能
> --enable-err-language="Simplify_Chinese" \   #錯誤信息的顯示語言
> --enable-underscore \        #容許URL中有下劃線
> --enable-poll \              #使用Poll()模式,提高性能
> --enable-gnuregex            #使用GNU正則表達式

配置完成後,進行編譯安裝bash

[root@promote squid-4.1]# make && make install

安裝完成後,建立連接文件、建立用戶和組服務器

[root@promote squid-4.1]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
#建立軟連接,這樣能夠直接使用squid相關的命令
[root@promote squid-4.1]# useradd -M -s /sbin/nologin squid
#建立管理進程的用戶
[root@promote squid-4.1]# chown -R squid.squid /usr/local/squid/var/
#將文件的屬主和屬組修改

修改Squid的配置文件,Squid服務的配置文件位於/etc/squid.conf。網絡

[root@promote squid-4.1]# vim /etc/squid.conf
cache_effective_user squid       #添加指定程序用戶   
cache_effective_group squid      #添加指定帳號基本組

其餘的先保持默認的

[root@promote squid-4.1]# squid -k parse   #檢查配置文件語法
[root@promote squid-4.1]# squid -z         #初始化緩存目錄
[root@promote squid-4.1]# 2018/07/22 20:03:12| Created PID file (/usr/local/squid/var/run/squid.pid)
2018/07/22 20:03:12 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2018/07/22 20:03:12 kid1| Creating missing swap directories
2018/07/22 20:03:12 kid1| No cache_dir stores are configured.
2018/07/22 20:03:12| Removing PID file (/usr/local/squid/var/run/squid.pid)
[root@promote squid-4.1]# squid            #啓動Squid服務
[root@promote squid-4.1]# netstat -ntap | grep squid       #服務啓動,Squid服務處於正常監聽狀態
tcp6       0      0 :::3128                 :::*                    LISTEN      90280/(squid-1)

建立Squid服務腳本,爲了使Squid服務啓動、中止、重載等操做更加方便,能夠編寫Squid服務腳本,並使用chkconfig和service工具進行管理。

[root@promote squid-4.1]# vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
   start)
     netstat -natp | grep squid &> /dev/null
     if [ $? -eq 0 ]
     then
       echo "squid is running"
       else
       echo "正在啓動 squid..."
       $CMD
     fi
   ;;
   stop)
     kill -9 `expr $(cat $PID) + 2`   #squid.pid中的數字和進程號相差2,直接殺死進程,後續實驗發現不必定相差2,暫時找不到緣由,但願大佬出來能解答一下。
   ;;
   status)
     [ -f $PID ] &> /dev/null
        if [ $? -eq 0 ]
          then
            netstat -natp | 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|status|reload|check|restart}"
   ;;
esac

[root@promote squid-4.1]# cd /etc/init.d/
[root@promote init.d]# chmod +x squid                  #添加執行權限
[root@promote init.d]# chkconfig --add squid           #使用chkconfig管理
[root@promote init.d]# chkconfig --level 35 squid on   #設置開機啓動

構建代理服務器

傳統代理

Squid-4.1(最新)安裝及構建代理服務器
修改配置文件,在配置傳統代理時,須要添加http_access allow all訪問策略,容許任意客戶機使用代理。除此之外還要設置reply_body_max_size項,其餘參數保持默認。

[root@promote init.d]# vim /etc/squid.conf
http_access allow all  #容許任意客戶機使用代理
http_port 3128         #使用3128端口
cache_mem 64 MB        #指定緩存功能所使用的內存空間大小,便於保持訪問較頻繁的WEB對象,容量最好爲4的倍數,單位爲MB,建議設爲物理內存的1/4
reply_body_max_size 10 MB   #容許用戶下載的最大文件大小,以字節爲單位。默認設置0表示不進行限制
maximum_object_size 4096 KB   #容許保存到緩存空間的最大對象大小,以KB爲單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶

在防火牆添加容許策略:

[root@promote run]# iptables -F              #清除防火牆filter表中規則
[root@promote run]# setenforce 0             #關閉加強安全×××
[root@promote run]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
#這句策略就是容許訪問3218端口的tcp數據包經過
[root@promote run]# service squid reload     #從新加載服務配置

客戶機的代理配置,在IE瀏覽器中,選擇「工具」->「Internet選項」,子啊彈出的「Internet選項」對話框,在「鏈接」選項中的「局域網(LAN)設置」選項組中單機「局域網設置」按鈕,彈出「局域網(LAN)設置」對話框,設置以下:

Squid-4.1(最新)安裝及構建代理服務器
開啓web服務器的httpd服務。
Squid-4.1(最新)安裝及構建代理服務器
使用192.168.58.130這臺虛擬機訪問192.168.58.156,訪問成功,查看web服務器的訪問日誌,查看是那個ip地址訪問的,若是是代理服務器ip訪問的話,說明傳統代理部署成功。
Squid-4.1(最新)安裝及構建代理服務器
的確是代理服務器訪問的,說明傳統代理部署成功。
Squid-4.1(最新)安裝及構建代理服務器

透明代理

透明代理提供的服務功能與傳統代理一致的,可是其「透明」的實現依賴於默認路由和防火牆重定向策略。所以更適用於爲局域網主機服務,而不適合Internet中的客戶機提供服務。針對下面的拓撲,透明代理的關鍵在於Linux網關服務器,對於客戶機僅須要正確配置網絡地址和默認網關,並不須要指定代理服務器,拓撲圖以下:

首先設置Squid代理服務器的雙網卡配置。
Squid-4.1(最新)安裝及構建代理服務器
而後修改squid配置文件,主要修改http_port,這裏和4.1版本前的修改方法不太同樣,若和之前同樣,服務會沒法啓動,並且查看/usr/local/squid/var/logs/cache.log日誌,會發現會有報錯。
Squid-4.1(最新)安裝及構建代理服務器
Squid-4.1(最新)安裝及構建代理服務器
這裏須要換種方式,由於可能4.1版本透明代理默認就是3128,那麼3128端口就會被佔用,沒法再作透明代理,這裏的方法就是從新使用一個端口,專門用來作透明代理,配置方法以下圖,而後重啓服務。
Squid-4.1(最新)安裝及構建代理服務器
Squid-4.1(最新)安裝及構建代理服務器
開啓防火牆路由轉發功能以及重定向策略。路由轉發功能只須要在/etc/sysctl寫入net.ipv4.ip_forward=1,再刷新配置文件便可。

[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# !v
vim /etc/sysctl.conf

Squid-4.1(最新)安裝及構建代理服務器
接着設置iptables重定向策略。

[root@localhost ~]# iptables -F
#清空防火牆filter表中策略
[root@localhost ~]# iptables -F -t nat
#清空防火牆nat表中策略
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3129
#將80端口(http)的請求從新定向到3128端口
[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3129
#將443端口(https)的請求從新定向到3128端口
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3129 -j ACCEPT
#容許來自192.168.100.0網段來自3129端口的tcp數據包經過

配置Web服務器的網卡信息。(配置好網關)
Squid-4.1(最新)安裝及構建代理服務器
配置客戶端網卡信息。(必定要配置好網關)
Squid-4.1(最新)安裝及構建代理服務器
都配置完後,驗證效果,訪問成功,咱們再查看web服務器的access.log日誌,檢查究竟是哪一個ip對web服務器訪問的。能夠看到是12.0.0.1這個IP對即代理服務器的訪問記錄。
Squid-4.1(最新)安裝及構建代理服務器
Squid-4.1(最新)安裝及構建代理服務器本篇先介紹到這裏,下篇介紹Squid 4.1版本的額ACL控制訪問、日誌分析和反向代理。就這樣!

相關文章
相關標籤/搜索