手工編譯squid服務,詳解squidACL訪問控制,日誌分析和反向代理(內含源碼包)


我的上一篇博客中介紹了squid服務的傳統代理和透明代理,用的安裝方式是yum在線安裝,這一篇中我將採用手工編譯的方式來介紹一下其他功能

實驗環境:

角色名稱     系統環境     IP地址

squid          CentOS7     192.168.199.129

Apache1    CentOS7      192.168.199.128

Apache2    CentOS7      192.168.199.130

客戶機        win7             192.168.199.133


squid3.5源碼包鏈接 :https://pan.baidu.com/s/1Il8z8QNCa-F4CIuDhvkjxQ     提取碼:f1m2

sarg2.3.7源碼包鏈接:https://pan.baidu.com/s/1YninQTO0lyLgalujQKO77Q    提取碼:ca7l

一、手工編譯安裝squid

yum install gcc gcc-c++ make -y  #安裝編譯環境

tar zxvf squid-3.5.23.tar.gz -C /opt   #解壓軟件包

image.png

上述選項含義如下:

./configure --prefix=/usr/local/squid \   #安裝目錄

 --sysconfdir=/etc \   #配置文件目錄

 --enable-arp-acl \   #MAC地址管理

 --enable-linux-netfilter \    #使用內核過濾

 --enable-linux-tproxy \    #支持透明模式

 --enable-async-io=100 \   #異步I/O,提升儲存性能

 --enable-err-language="Simlify_Chinese" \   #錯誤信息的顯示語言

 --enable-underscore \   #允許URL中有下劃線

 --enable-poll \    #使用Poll()模式,提升性能

 --enable-gnuregex   #使用GNU正則表達式


make && make install   #編譯安裝


ln -s /usr/local/squid/sbin/* /usr/local/sbin/   #建立軟鏈接

useradd -M -s /sbin/nologin squid    #創建管理用戶

chown -R squid.squid /usr/local/squid/var/ 

  

vim /etc/squid.conf

image.png

cache_effective_user squid   #這一項指定squid的程序用戶,用來設置初始化,否則啓動不成功

cache_effective_group squid   #默認爲cache_effective_user基本組


squid -z   #-z選項用來初始化緩存目錄

squid   #開啓squid服務

二、創建squid的啓動腳本

image.png

#!/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 -ntap | 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 -ntap | 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


chmod +x squid

chkconfig --add squid

chkconfig --level 35 squid on

service squid check       #檢查語法

squid服務安裝完成後就可以配置代理功能了,具體配置過程我在上一篇博客中有詳細講解。

image.png


三、ACL訪問控制

squid提供了強大的代理控制機制,通過合理設置ACL並進行限制,可以針對源地址,目標地址,訪問的URL路徑,訪問的時間等各種條件進行過濾

在配置文件squid.conf中,ACL訪問控制通過以下兩個步驟來實現:其一,使用acl配置項定義需要控制的條件;其二,通過http_access配置項對已定義的列表做“允許”或“拒絕”的訪問控制。

1 定義訪問控制列表,格式如下:

acl 列表名稱 列表類型 列表內容 ...

 常用的訪問控制列表類型



列表類型用途
src源IP地址,網段,IP地址範圍
dst目標IP地址,網段,主機名
port目標端口
dstdomain目標域,匹配域內所有站點
time使用代理服務的時間段字母表示一星期中各天的英文縮寫,星期一到星期天分別爲M T WH F A S
maxconn每個客戶機的併發連接數
url_regex目標資源的URL地址,-i表示忽略大小寫
urlpath_regex目標資源的整個URL地址,-i表示忽略大小寫

2 設置訪問權限

定義好各種訪問控制列表後,需要使用http_access配置項來進行控制。需要注意的是,http_access必須放在對應的acl配置行之後。每一行http_access配置確定一條訪問控制規則,格式如下:

http_access allow或deny 列表名 ......

下面我通過實驗來說明:

     (1)基於源地址進行控制


vim /etc/squid.conf

#在配置文件中添加acl配置行,名稱爲test,內容爲我的客戶機地址

image.png

#在配置行下面我定義了禁止192.168.199.133進行訪問

image.png


service squid stop

service squid start  #重新啓動squid服務

#再次訪問Apache已經是無法訪問了

image.png

(2)創建相應的列表進行限制

  當需要限制的同一類對象較多時,可以使用獨立的文件來存放,在ACL配置行的列表內容處指定相應的文件位置即可。

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

[root@promote init.d]# mkdir /etc/squid

[root@promote init.d]# vim /etc/squid/list01    #指定一個名單

192.168.199.0/24

acl list01 src "/etc/squid/list01"   #在列表中指定文件的路徑

 

http_access allow list01   #設置訪問權限

在配置ACL時,以下兩種默認情況需要注意一下:

     #沒有設置任何規則時:squid服務將拒絕客戶端的請求

     #有規則但找不到相匹配的項:squid將採用與最後一條規則相反的權限,即如果最後一條規則是allow,就拒絕客戶端的請求,否則允許該請求


四、squid日誌分析

sarg是一款squid日誌分析工具,採用HTML格式,詳細列出每一位用戶訪問Internet的站點信息,時間佔用信息,排名,連接次數和訪問量等。

部署過程如下:

1 安裝GD庫和Apache


yum install gd gd-devel -y   #安裝GD

yum install httpd -y   #安裝Apache

systemctl start httpd.service   #開啓Apache

2 安裝sarg


tar zxvf sarg-2.3.7.tar.gz -C /opt   #解壓sarg軟件包

cd /opt/sarg-2.3.7/   #到sarg的目錄下

 

./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection

--prefix=/usr/local/sarg   #指定安裝目錄

--sysconfdir=/etc/sarg    #配置文件目錄

--enable-extraprotection   #添加額外的安全保護

make && make install 

3 配置


vim /etc/sarg/sarg.conf

7 access_log /usr/local/squid/var/logs/access.log    #指定squid的訪問日誌文件

25 title "Squid User Access Reports"    #網頁標題

120 output_dir /var/www/html/squid-reports   #sarg報告輸出目錄

178 user_ip no     #使用用戶名顯示

206 exclude_hosts /usr/local/sarg/noreport   #指定不計入排序的站點列表文件

183 topuser_sort_field connect reverse       #在top排序中,指定連接次數,訪問字節數,採用降序排序

189 user_sort_field connect reverse          #對於用戶訪問記錄,連接次數按降序排列

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

288 mail_utility mailq.postfix               #發送郵件報告的命令

433 charset UTF-8    #使用字符集                     

517 weekdays 0-6     #指定top排序時的星期週期

522 hours 7-12,14,16,18-20   #指定top排序是的時間週期

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

4 運行

上述配置中,添加了不計入排序的站點,所以需要創建下面這個文件


touch /usr/local/sarg/noreport     #創建不計入排序的站點

ln -s /usr/local/sarg/bin/sarg  /usr/local/bin/   #建立軟鏈接

sarg   #開啓服務

  

5 驗證

輸入squid地址,指定sarg的報告輸出目錄即可進行訪問

image.png

image.png



五、squid反向代理

原理:1 squid反向代理服務器位於本地WEB服務器和Internet之間,客戶端請求訪問WEB服務器時,DNS將訪問的域名解析爲squid反向代理服務器的IP地址,客戶端將訪問squid代理服務器

           2 如果squid反向代理服務器中緩存了該請求的資源,則將該請求的資源返回給客戶端,否則反向代理服務器將向後臺的WEB服務器請求資源,然後將應答資源返回給客戶端,同時也將該資源緩存在本地,供下一個請求者使用


(1)修改配置文件實驗過程:

image.png

vim /etc/squid.conf

http_port 192.168.199.129:80 accel vhost vport   #監聽本地的80端口,啓用加速模式,開啓虛擬主機和虛擬端口

cache_peer 192.168.199.128 parent 80 0 no-query originserver round-robin weight=1 name=web1   #指定節點服務器的真實IP,端口爲80,不開啓ICP端口,不進行查詢,採用輪詢機制,權重爲1,別名爲web1

cache_peer 192.168.199.130 parent 80 0 no-query originserver round-robin weight=1 name=web2

cache_peer_domain web1 web2 www.yun.com   #定義域名爲www.yun.com


systemctl stop httpd.service    #需要關閉squid服務器的80端口,不然會出現衝突

service squid stop

service squid start

(2)設置兩臺Apache首頁爲不同界面便於區分

image.png

image.png


(3)修改代理服務器的端口,因爲在配置文件中,我已經將端口改爲80

image.png


(4)在客戶機上使用域名進行訪問

image.png

image.png


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