1. 程式人生 > >squid緩存服務器 ACL訪問控制 傳統代理 透明代理 squid日誌分析 反向代理

squid緩存服務器 ACL訪問控制 傳統代理 透明代理 squid日誌分析 反向代理

process httpd tex 訪問日誌 單獨 bin 雙網卡 客戶機 requests

緩存代理概述
  • Squid提供了強大的代理控制機制,通過合理的設置ACL,並進行限制,可以針對源地址、目標地址、訪問的URL路徑、訪問的時間等條件進行過濾。
    作為應用層的代理服務器軟件,Sqiod主要提供了緩存加速和引用層過濾控制能力
  • 代理的工作機制

當客戶機通過代理來請求 Web 頁面時,指定的代理服務器,會先檢查自己的緩存如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則用代理服務器向Internet 發送訪問請求。

由於客戶機的Web 訪問請求實際上時由代理服務器來代替完成的,從而可以隱藏用戶的真是IP地址,起到一定的保護作用。另一方面,代理服務器承擔這類似經紀人人的角色,所以有機會針對要訪問的目標,客戶機,訪問的時間段等進行過濾控制。

  • 代理的基本類型
    1. 傳統代理:也就是普通的代理服務,首先必須在客戶機的瀏覽器,QQ聊天工具消災軟件過程中手動設置代理服務器地址和端口,然後才能使用代理武器來訪問網絡,
    2. 透明服代理:提供傳統意義上的代理,區別在於客戶機不需要指定代理服務器的地址和端口,而是通過默認路由,防火墻策咯將Web訪問重定向,實際上仍然交給代理服務器,來處理。使用透明代理網頁瀏覽器訪問的網站的域名解析請求將有限交給DNS服務器
  • 安裝及運行控制
    mount.cifs //192.168.100.1/squid /abc/ #掛在共享目錄
    tar zxvf squid-3.4.6.tar.gz -C /opt/  #解壓
    cd /opt/squid-3.4.6
    yum install gcc gcc-c++ make cmake -y //由於時手工編譯安裝所以需要安裝一些需要的環境
    ./configure --prefix=/usr/local/squid \  #安裝目錄
    --sysconfdir=/etc \  #單獨將配置文件修改到其他目錄
    --enable-arp-acl \    #可在規則中設置為直接通過客戶端MAC進行管理,放置客戶端使用IP欺騙
    --enable-linux-netfilter \ # 使用內核過濾
    --enable-linux-tproxy \    # 支持透明模式
    --enable-async-io=100 \    #異步I/O提升存儲性能,相當於 --enable-pthreads --enable-storeio=ufs,aufs 
    --enable-err-language="Simplify_Chinese" \ #錯誤信息的顯示語言
    --enable-underscore \   #允許URL中有下劃線
    --enable-poll \         #使用poll()模式提升性能
    --enable-gnuregex       #使用GNU正則表表達式
    manke && 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 #修改配置文件
http_access allow all
http_access deny all
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為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶
cache_effective_user squid        #添加   指定程序用戶
cache_effective_group squid       #添加   指定賬號基本組
coredump_dir /usr/local/squid/var/cache/squid

squid -k parse   //檢查配置文件語法
squid -z   //初始化緩存目錄
squid    //啟動服務

cd /etc/init.d/
vim 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)
     $CMD -k kill &> /dev/null
     rm -rf $PID &> /dev/null
   ;;
   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
chmod +x squid  #提升執行權限
chkconfig --add squid  #加如到被系統所管理
chkconfig --level 35 squid on #實現開機自啟動
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
    整對於 INPUT鏈  指定 tcp 目標端口 3218 允許轉發
service squid reload

技術分享圖片
技術分享圖片技術分享圖片

透明代理

配置雙網卡內網ens33  外網ens36
echo "1" > /proc/sys/net/ipv4/i[_forward  //開啟路由轉發功能
vim /etc/squid.conf

http_port 192.168.100.1:3128 transparent //只在其中一個IP地址上提供代理

service squid reload  

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

iptables -I INPUT -p tcp --dport 3218 -j ACCEPT

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片
技術分享圖片技術分享圖片

ACL訪問控控制
  • squid 提供了強大的代理控制機制,通過合理設置ACL訪問控制列表,並進行限制,可以針對源地址、目標地址、訪問的URL路徑,訪問的是時間各種條件進行過濾。
  • 在配置文件squid.confACL訪問控制通過以下兩個步驟實現:其一,使用acl配置的定義需要控制的條件;其二通過http access 配置項對已定義的列表做“允許”或拒絕訪問控制
  • squid預定義的列表類型有和多種,常用的包括源地址,目標地址,訪問時間,訪問端口。
列表類型 列表內容實列 含義\通途
src 192.168.1.168/192.168.1.0/24、192.168.1.0-192.168.3.0/24 源IP地址,網段、IP地址範圍
dst 216.163.137.3、61.135.167.0/24、www.playboy.com 目標IP地址、網段、主機名
por 80 443 8080 20 21 目標端口
dstdomain .qq.com 目標域,匹配域的所在站點
time MTWHF 8:30-17:30 12:00-13:00 AS 使用代理服務器的時間段 字母表示一個星期隔天的英文所縮寫
maxconn 20 每個客戶機的並非連接數 最大連接數
url_regex url_regex-i^rtsp:// url_regex-i^emule:// 目標資源的URL地址,-i表示忽略大小寫^以什麽開頭
urlpath_regex urlpath_regex -i sex adult urlpath_regex-i.mp3$ 目標資源的真個URL路徑,-i表示忽略大小寫
  • 在定義訪問控制列表時。因該結合當前往網絡環境真確的分析用戶發文需求
    當需要限制的同一類型比較多時,可以通過使用獨立的文件來存放。在acl配置行的列表內容處指定對應的文件位置即可
    沒有設置任何規則時:squid服務將拒絕客戶端的請求
    有規則但是漲找不到想匹配的選項squid 將采取與最後一條規則相反的權限,即如果最後一條規則時allow,就拒絕客戶端請求,否則允許該請求,建議采用,先拒絕後允許,或者先允許在拒絕,的方式最後一條規則設為默認策略,可以為http_access allow all 或者http_access deny all
  • 實驗部署
名稱 IP地址
squid服務器 192.168.100.7
wed1服務器 192.168.100.8
wed2服務器 192.168.100.9
客戶端W7 192.168.100.10
  • 修改定義配置文件內
vim /etc/squid.conf
# Deny requests to certain unsafe ports 對於端口進行控制
# Only allow cachemgr access from localhost 對於列表進行控制
acl localhost src 192.168.175.136/32   #基於源地址
acl MYLAN src 192.168.175.0/24         #基於源網段
acl destionhost dst 192.168.175.130/32 #基於目標地址
acl MC20 maxconn 20                    #基於端口
acl BURL url_regex -i ^rtsp:// ^emule:// #目標資源的URL地址,-i表示忽略大小寫(以什麽什麽開頭)
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ #目標資源的整個URL路徑,-i表示忽略大小寫(以什麽什麽結尾)
acl work time MTWHF 08:30-17:30 #基於時間段禁止訪問
mkdir /etc/squid     #啟用對象列表管理
vim dest.list  #創建如都在統一網段或者定義大部分禁止訪問的地址
192.168.100.10 #客戶端W7
vim /etc/squid.conf  
acl destionhost dst "/etc/squid/dest.list"  
#寫入前面創建的的文件路徑到需要添加或者刪除只需要在前面創建的文件裏定義就可以不用在請主配置文件修改
http_access deny destionhost   #拒絕列表(註意置頂)
service squid restart  

技術分享圖片
技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

日誌分析

yum install -y gd gd-devel    #圖像處理 httpd -y   

mkdir /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

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

ln -s /usr/local/sarg/bin/sarg /usr/local/bin/

[root@localhost sarg]# sarg 
SARG: 紀錄在文件: 242, reading: 100.00%
SARG: 成功的生成報告在 /var/www/html/squid-reports/2018Jul21-2018Jul21

yum install httpd -y

http://192.168.175.128/squid-reports

#周期性計劃任務執行每天生成報告
sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/squid-reports/ -z -d $(date -d "1 day ago" +%d/%m/%Y)-$(date +%d/%m/%Y)

技術分享圖片
技術分享圖片技術分享圖片技術分享圖片

squid反向代理
vim /var/www/html/index.html  #wed1 添加首頁內容 test01 
vim /var/www/html/index.html  #wed2 添加首頁內容 test02
vim /etc/squid.conf
# Squid normally listens to port 3128 #下添加
http_port 192.168.100.7:80 accel vhost vport
(// 本地地址   accel:加速代理  虛擬主機  虛擬端口)
cache_peer 192.168.100.8 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.100.9 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
(//指定負向服務器  ICP端口不開啟設為0   不進行查詢  指向真實服務器  輪詢   最大連接30   權重1   名字)
cache_peer_domain web1 web2 www.yun.com
(//指定web1,web2的域名為www.yun.com )

技術分享圖片
技術分享圖片
技術分享圖片

squid緩存服務器 ACL訪問控制 傳統代理 透明代理 squid日誌分析 反向代理