1. 程式人生 > >Squid代理--經典緩存代理服務器(實現正向代理配置、ACL各種訪問控制、日誌分析)

Squid代理--經典緩存代理服務器(實現正向代理配置、ACL各種訪問控制、日誌分析)

ply tput client img 連接 dst term prefix 內存空間

  • Squid是Linux系統中常用的一款開源代理服務軟件官方網站http://www.squid-cache.org , 可以很好的實現http、ftp、dns查詢,以及ssl等應用的緩存代理。
  • 一、Squid服務概述

    緩存代理概述

    1、代理的工作機制

    • 當客戶機通過代理來請求web頁面時,指定的代理服務器會先檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面反饋給請求的客戶端。如果緩存中沒有,則由代理服務器向web服務器發起訪問請求,當獲得返回的web頁面後,緩存服務器首先將數據保存到自己本身的緩存中,然後再發送給客戶端。
    • 代理服務器的緩存機制如圖所示:

    技術分享圖片

    • HTTP代理的緩存加速對象主要是文字、圖像等靜態web元素。

    2、代理類型

    正向代理:
    ①傳統代理,在所用軟件中設置代理服務器地址及端口。
    ②透明代理,通過默認路由或者服務器iptables設置將請求交給代理服務器,實現用戶無感知代理。

    • 正向代理常常存在於企業內部,當企業采用正向代理可實現如下優點:
    • 1)由於客戶端的訪問請求由代理服務器未完成訪問,一定程度上起到保護作用。
    • 2)針對於企業內部多臺機器訪問相同web頁面等,提升網絡訪問速度,減少公司網絡擁堵。
    • 3)可控的內部網絡訪問控制,可以針對要訪問的目標、客戶機地址、訪問時間段等進行過濾控制。

    反向代理:
    存在於企業服務提供端,實現將客戶端請求接收分發給後面的web服務器群集

    • squid反向代理存在於服務提供端,可實現如下優點:
    • 1)加速客戶端來訪網站的訪問速度。
    • 2)可將不同的URL請求分發到後臺不同的web服務器上,實現負載均衡。
    • 3)同時互聯網上的客戶端只能訪問到代理服務器的地址,並不知道後面web服務器真實地址,加強了安全功能。

    Squid代理服務器安裝

    • squid代理緩存服務器安裝方式有多種,可以選擇去官網選擇最新版本軟件包,自行解壓手動編譯安裝,也可選擇yum直接安裝。
    • 本文選擇安裝方式為yum自動安裝方式,並進行後續實驗。

    yum install squid -y

    • 註,此處代理服務器中防火墻策略不用關閉,需要通過規則鏈實現訪問。

    二、構建傳統代理

    實驗環境

    服務器 操作系統 IP地址 使用軟件
    squid代理服務器 centos7.3 192.168.144.136 squid
    web服務器 centos7.3 192.168.144.116 http
    client windows7 192.168.144.117 IE瀏覽器

    實驗拓撲展示

    技術分享圖片

    傳統代理設置過程

    1、設置配置文件

    vim /etc/squid/squid.conf

    http_port 3128    //在服務監聽端口下添加如下內容
    cache_mem 64 MB                   //指定緩存功能所使用的內存空間大小,便於保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4
    reply_body_max_size 10 MB         //允許用戶下載的最大文件大小,以字節為單位。默認設置0表示不進行限制
    maximum_object_size 4096 KB       //允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶
    
    • 清空防火墻規則,添加filter表規則連,允許3128端口通過

    iptables -F
    setenforce 0
    iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    systemctl restart squid.service

    2、客戶端訪問設置

    • 客戶端訪問時只需要設置代理服務器的IP地址即可,然後直接訪問web服務器地址即可。實驗模擬的情況下,客戶端與web服務器本身處於同一網段,因此直接訪問web服務器也能訪問,那麽如何區分是否是通過代理服務器訪問的還是客戶端本身去訪問的,需要通過查看web服務器的日誌判斷。
      技術分享圖片
      技術分享圖片
      技術分享圖片

    技術分享圖片

    技術分享圖片

    3、web服務器端檢測是否為代理服務器訪問

    vim /var/log/httpd/access_log

    • 當查看到如下圖所示,即訪問原地址是代理服務器地址,即表示代理服務器設置成功。

    技術分享圖片

    三、ACL訪問控制

    • squid提供了強大的代理控制機制,通過合理設置ACL(訪問控制列表)並進行限制,可以針對源地址、目標地址、訪問的URL路徑。

    • 註,本實驗ACL訪問控制建立在傳統正向代理服務器中。

    控制方式

    • squid配置文件中,一使用acl配置項定義需要控制的條件;
    • 二:通過http_access配置項對已定義的列表做“允許”或者“拒絕”實現訪問控制。

    常用的訪問控制類型

    如圖:

    技術分享圖片

    1、基於源地址src的訪問控制

    vim /etc/squid.conf

    acl localnet1 src 192.168.100.100/24   //設置原地址訪問控制ACL策略名稱為localnet1,設置地址為客戶端地址
    acl localnet1 src 192.168.175.0/24     //禁止源地址目標段訪問,切記,此處需要添加子網掩碼的位數
    ...
    http_access deny localnet1         //設置策略為拒絕通過
    • 重啟服務

    service squid restart

    • 客戶端訪問驗證效果則訪問禁止。

    如圖

    技術分享圖片

    2、基於訪問目標地址的訪問控制

    vim /etc/squid.conf

    acl destionhost dst 192.168.100.130/32   //訪問目標地址策略
    ...
    http_access deny destionhost         //設置策略為拒絕通過
    • 重啟服務

    service squid restart

    • 客戶端訪問驗證效果則訪問禁止。

    3、基於最大連接數的訪問控制

    vim /etc/squid.conf

    acl MC20 maxconn 20   //最大鏈接數策略
    ...
    http_access deny MC20         //設置策略為拒絕通過
    • 重啟服務

    service squid restart

    4、基於URL的訪問控制

    vim /etc/squid.conf

    acl BURL url_regex -i ^rtsp:// ^emule://   //以rtsp等開頭的URL
    acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$   //以mp3等為結尾的URL
    ...
    http_access deny BURL         //設置策略為拒絕通過
    http_access deny PURL         //設置策略為拒絕通過
    • 重啟服務

    service squid restart

    5、基於時間段的訪問控制

    vim /etc/squid.conf

    acl work time MTWHF 08:30-17:30   //時間段訪問控制策略
    ...
    http_access deny work         //設置策略為拒絕通過
    • 重啟服務

    service squid restart

    創建獨立訪問控制列表文件

    • 假如說針對某一些或者某一批量的進行訪問控制,每條都寫入配置文件中,這樣會針對以後的修改以及查詢都不方便,因此我們需要在配置文件中聲明,可創建獨立的配置訪問控制配置文件。
    • 下面以訪問目標地址為例,創建獨立配置文件進行訪問控制。

    vim /etc/squid/dest.list

    192.168.100.100
    192.168.100.110
    192.168.100.120
    192.168.100.130   //添加目標IP
    • 創建完成獨立文件後,需要在squid配置文件中聲明。
    • 此處需要註意,不論是修改主配置文件還是修改獨立配置文件,想讓修改後的服務生效,必須要重啟squid服務。

    vim /etc/squid.conf

    acl destination dst "/etc/squid/dest.list"   //設置為dst目標地址訪問控制,取名destination
    
    ...
    http_access deny destination   //拒絕列表(註意置頂)

    service squid restart

    • 重啟服務後,再用客戶端訪問會發現想要訪問目標網址的服務器被拒絕。

    四、squid日誌分析

    • squid日誌分析為了幫助管理員更加直觀與方便管理服務器,可以通過日誌分析進行處理。
    • 由於日誌分析是在web頁面中以圖形化界面顯示,因此需要打開squid代理服務器的httpd服務。
    • 註意,此處日誌分析建立在傳統正向代理服務當中。

      1、日誌分析軟件環境包安裝

    yum install gd gd-devel
    mkidr /usr/local/sarg
    tar zxvf sarg-2.3.7.tar.gz -C /opt
    cd /opt/sarg-2.3.7

    • 執行安裝程序

    ./configure --prefix=/usr/local/sarg \
    --sysconfdir=/etc/sarg \
    --enable-extraprotection //額外安全防護

    make && make install

    cd /etc/sarg/

    vim sarg.conf

    • 在sarg的配置文件中找到如下部分,按照實際情況按如下方式修改,並打開相應功能
    access_log /usr/local/squid/var/logs/access.log    //指定訪問日誌文件
    
    title "Squid User Access Reports"      //網頁標題
    
    output_dir /var/www/html/squid-reports    //報告輸出目錄
    
    user_ip no          //使用用戶名顯示
    
    exclude_hosts /usr/local/sarg/noreport   //不計入排序的站點列表文件
    
    topuser_sort_field connect reverse   //top排序中有連接次數、訪問字節、降序排列 升序是normal
    
    user_sort_field reverse    //用戶訪問記錄 連接次數、訪問字節按降序排序
    
    overwrite_report no   //同名日誌是否覆蓋
    
    mail_utility mailq.postfix   //發送郵件報告命令
    
    charset UTF-8   //使用字符集
    
    weekdays 0-6   //top排行的星期周期
    
    hours 0-23   //top排行的時間周期
    
    www_document_root /var/www/html  //網頁根目錄
    • 創建不計入站點文件,添加的域名將不被顯示在排序中

    touch /usr/local/sarg/noreport
    yum install httpd -y
    systemctl start httpd.service

    • 日誌分析安裝完成後,使用客戶端網址訪問http://192.168.100.110/squid-reports
    • 出現如下圖所示,即日誌分析完成。

    技術分享圖片

    Squid代理--經典緩存代理服務器(實現正向代理配置、ACL各種訪問控制、日誌分析)