目錄:
二、Squid 代理安裝
三、搭建傳統代理
四、搭建透明代理
五、ACL訪問控制
六、Squid日誌分析
七、反向代理
一、Squid 代理伺服器
Squid 主要提供快取加速、應用層過濾控制的功能。
代理的工作機制
1、代替客戶機向網站請求資料,從而可以隱藏使用者的真實IP地址。
2、將獲得的網頁資料(靜態 Web 元素)儲存到快取中併發送給客戶機,以便下次請求相同的資料時快速響應。
Squid 代理的型別
傳統代理:適用於Internet,需在客戶機指定代理伺服器的地址和埠。
透明代理:客戶機不需指定代理伺服器的地址和埠,而是通過預設路由、防火牆策略將Web訪問重定向給代理伺服器處理。
反向代理:如果 Squid 反向代理伺服器中快取了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理伺服器將向後臺的 WEB 伺服器請求資源,然後將請求的應答返回給客戶端,同時也將該應答快取在本地,供下一個請求者使用。
二、Squid 代理安裝
1 [編譯安裝Squid]
2 #安裝依賴環境
3 yum -y install gcc gcc-c++ make
4 #上傳軟體包squid-3.5.27. tar到/opt目錄下
5 cd /opt
6 #解壓
7 tar zxvf squid-3.5.27.tar.gz
8 #配置
9 cd squid-3.5.27/
10 ./configure --prefix=/usr/local/squid \
11 --sysconfdir=/etc \
12 --enable-arp-acl \
13 --enable-linux-netfilter \
14 --enable-linux-tproxy \
15 --enable-async-io=100 \
16 --enable-err-language="Simplify_Chinese" \
17 --enable-underscore \
18 --enable-poll \
19 --enable-gnuregex
20
21 # 編譯安裝
22 make && make install
23
24 -----------------------------------------------
25 ####_上述指令碼解釋###
26
27 ./configure --prefix=/usr/local/squid
28 ##安裝目錄
29 --sysconfdir=/etc/
30 ##單獨將配置檔案修改到/etc目錄下
31 -- enable-arp-acl
32 ##可在ACL中設定通過MAC地址進行管理,防止IP欺騙
33 --enable-1inux-netfilter
34 ##使用核心過濾
35 --enable-linux-tproxy
36 ##支援透明模式
37 --enable-async-io=100
38 ##非同步I/O,提升儲存效能,值可修改
39 --enable-err-language="Simplify_Chinese"
40 ##錯誤資訊的顯示語言
41 --enable-underscore
42 ##允許URL中有下劃線
43 -enable-poll
44 ##使用Poll () 模式,提升效能
45 --enable-gnuregex
46 ##使用GNU正則表示式
47 -------------------------------------------
48
49
50 ln -s /usr/local/squid/sbin/* /usr/local/sbin
51 ##建立連結檔案,優化路徑
52 useradd -M -s /sbin/nologin squid
53 ###建立程式使用者、組
54 chown -R squid:squid /usr/local/squid/var/
55 ##改變目錄屬主
56
57
58 [修改Squid的配置檔案]
59 vi /etc/squid.conf
60 #放在http access deny all
61 之前,允許任意客戶機使用代理服務,控制規則自.上而下匹配
62 vim /etc/squid.conf
63 ......
64 -56行--插入--
65 http_access allow all
66 #放在http access deny all之前,允許任意客戶機使用代理服務,控制規則自.上而下匹配
67 http_access deny all
68 http_port 3128
69 #用來指定代理服務監聽的地址和埠(預設的埠號為3128)
70 -----61行--插入------
71 cache_effective_user squid
72 #新增,指定程式使用者,用來設定初始化、執行時快取的賬號,否則啟動不成功
73 cache_effective_group squid
74 #新增,指定賬號基本組
75 coredump_dir /usr/local/squid/var/cache/squid
76 #指定快取檔案目錄
77 ---------------------------------------------
78 ##上述指令碼解釋
79 ##配置硬碟快取,開啟#.快取目錄512M,其中一級目錄16個,二級256個
80 cache_effective_user squid
81 cache_effective_group squid
82 ---------------------------------------------
83
84
85 squid -k parse
86 ##檢查配置檔案
87 squid -k rec
88 ##重新載入配置檔案
89 squid -zX
90 ##初始化快取目錄
91
92 squid
93 ##啟動squid服務
94
95 netstat -anpt | grep squid
96 ##確認squid服務處於正常監聽狀態
97 tcp6 0 0 :::3128 :::* LISTEN
98 6699/ (squid-1)
99
100 [編寫squid服務指令碼]
101 -------------------------------------------------
102 #!/bin/bash
103 #chkconfig: 2345 90 25
104 PID="/usr/local/squid/var/run/squid.pid"
105 CONF="/etc/squid.conf"
106 CMD="/usr/local/squid/sbin/squid"
107
108 case "$1" in
109 start)
110 netstat -natp | grep squid &> /dev/null
111 if [ $? -eq 0 ]
112 then
113 echo "squid is running"
114 else
115 echo "正在啟動 squid..."
116 $CMD
117 fi
118 ;;
119 stop)
120 $CMD -k kill &> /dev/null
121 rm -rf $PID &> /dev/null
122 ;;
123 status)
124 [ -f $PID ] &> /dev/null
125 if [ $? -eq 0 ]
126 then
127 netstat -natp | grep squid
128 else
129 echo "squid is not running"
130 fi
131 ;;
132 restart)
133 $0 stop &> /dev/null
134 echo "正在關閉 squid..."
135 $0 start &> /dev/null
136 echo "正在啟動 squid..."
137 ;;
138 reload)
139 $CMD -k reconfigure
140 ;;
141 check)
142 $CMD -k parse
143 ;;
144 *)
145 echo "用法:$0{start|stop|status|reload|check|restart}"
146 ;;
147 esac
148 ----------------------------------------------
149
150
151 chmod +x /etc/init.d/squid
152 chkconfig --add squid
153 chkconfig --squid on
三、搭建傳統代理
1 **環境準備**
2
3 Squid 伺服器:192.168.91.5
4 web1 伺服器: 192.168.91.10
5 win10:192.168.91.178
6
7 ####搭建傳統代理###
8 案例:構建Squid代理伺服器,允許客戶機指定squid代理伺服器作為Web代理
9 訪問網站伺服器,但禁止通過代理下載超過10MB的檔案,超過4MB的檔案不進行快取
10 伺服器:
11
12 1.squid伺服器
13
14 vim /etc/squid.conf
15 ......
16 http_access allow all
17 http_access deny all
18 http_port 3128
19 cache_effective_user squid
20 cache_effective_group squid
21 ---63行,插入----
22 cache_mem 64 MB #指定快取功能所使用的記憶體空間大小,便於保持訪問較頻繁的WEB物件,容量最好為4的倍數,單位為MB,建議設為實體記憶體的1/4
23 reply_body_max_size 10 MB #允許使用者下載的最大檔案大小,以位元組為單位,當下載超過指定大小的Web物件時,瀏覽器的報錯頁面中會出現“請求或訪問太大”的提示預設設定0表示不進行限制
24 maximum_object_size 4096 KB #允許儲存到快取空間的最大物件大小,以KB為單位,超過大小限制的檔案將不被快取,而是直接轉發給使用者
25
26 iptables -F
27 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
28 iptables -nL INPUT
29
30 2.web1配置
31
32 systemctl stop firewalld.service
33 setenforce 0
34 yum -y install httpd
35 systemctl start httpd
36 netstat -natp | grep 80
37
38 測試:在win10 瀏覽器輸入Web1伺服器IP地址訪問,檢視Web1伺服器訪問日誌,顯示的是由代理伺服器替客戶機在訪問
39 http://192.168.91.10
40
41 檢視Web1訪問日誌的新增記錄
42 tail -f /var/log/httpd/access_log
squid伺服器配置
web伺服器配置
win10配置
測試:在win10 瀏覽器輸入Web1伺服器IP地址訪問,檢視Web1伺服器訪問日誌,顯示的是由代理伺服器替客戶機在訪問
四、搭建透明代理
1 1、Squid伺服器配置
2 cd /etc/sysconfig/network-scripts/
3 cp ifcfg-ens33 ifcfg-ens36
4 vim ifcfg-ens37
5 systemctl restart network
6
7 #60行修改新增提供內網服務的IP地址,和支援透明代理選項transparent
8 vim /etc/squid.conf
9 ......
10 http_access allow all
11 http_access deny all
12 http_port 192.168.100.100:3128 transparent
13 systemctl restart squid
14
15 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
16 sysctl -p
17
18 iptables -F
19 iptables -t nat -F
20 # 新增防火牆規則(將來源為100網段:80/443埠的流量重定向到3128埠)
21 iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
22 iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
23 #如果要進行重啟,則需要配置以下規則
24 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
25
26 2.web1伺服器
27 systemctl stop firewalld.service
28 setenforce 0
29 yum -y install httpd
30 systemctl start httpd
31 netstat -natp | grep 80
32
33 # 新增一條靜態路由
34 route add -net 192.168.100.0/24 gw 192.168.91.5
35
36 3.客戶端關閉代理,修改win10 地址為100網段
37
38 訪問web1伺服器
39
40 檢視Web1訪問日誌的新增記錄
41 tail -f /var/log/httpd/access_log
squid伺服器配置
web1伺服器新增一條靜態路由
客戶端關閉代理,修改win10 地址為100網段
五、ACL訪問控制
在配置檔案squid.conf中,ACL訪問控制通過以下兩個步驟來實現:
使用acl配置項定義需要控制的條件:
通過http_access配 置項對已定義的列表做“允許"或“拒絕”訪問的控制
定義訪問控制列表
- • 格式: acl列表名稱 列表型別 列表內容
- • 列表名稱: 名稱自定義,相當於給acl起個名字
- • 列表型別: 必須使用squid預定義的值,對應不同類別的控制條件
- • 列表內容: 是要控制的具體物件,不同型別的列表所對應的內容也不一樣,可以有多個值(以空格為分隔,為“或"的關係)
1 方法一:
2 vim /etc/squid.conf
3 ......
4 acl localhost src 192.168.100.178/24 #源地址為192.168.100.178
5 acl MYLAN src 192.168.100.0/24 #客戶機網段
6 acl destinationhost dst 192.168.226.129/32 #目標地址為192.168.184.20
7 acl MC20 maxconn 20 #最大併發連線20
8 acl PORT port 21 #目標埠21
9 acl DMBLOCK dstdomain .qq.com #目標域,匹配域內所有站點
10 acl BURL url_regex -i ^rtsp:// ^emule:// #以rtsp://.emule://開頭的URL,-i表示忽略大小寫
11 acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ #以.mp3、.mp4、.rmvb結尾的URL路徑
12 acl WORKTIME time MTWHF 08:30-17:30 #時間為週一--至週五8:30~17:30,"MTWHF"為每個星期的英文首字母
13
14 第一條插入:
15 http_access deny host
16
17
18 方法二:
19 #啟動物件列表管理
20 mkdir /etc/squid
21 vim /etc/squid/dest.list
22 192.168.226.129 #Squid伺服器IP
23 192.168.226.0/24 #任意需要的網段
24
25 vim /etc/ squid.conf
26 .......
27 acl destinationhost dst "/etc/squid/dest.list" #呼叫指定檔案中的列表內容
28 http access deny(或allow) destinationhost #注意,如果是拒絕列表,需要放在http_access allow all前面
29
30 systemctl restart squid
方法一
六、Squid日誌分析
sarg ( Squid Analysis Report Generator),是一款squid日誌分析工具,採用HTML格式,詳細列出每一位使用者訪問Internet的站點資訊、時間佔用資訊、排名、連線次數、訪問量等
1 #安裝影象處理軟體包
2 yum install -y gd gd-devel pcre-devel
3 mkdir /usr/local/sarg
4
5 #將zxvf sarg-2.3.7. tar.gz壓縮包上傳到/opt目錄下
6 tar zxvf sarg-2.3.7.tar.gz -C /opt/
7
8 cd /opt/sarg-2.3.7
9 ./configure --prefix=/usr/local/sarg \
10 --sysconfdir=/etc/sarg \ #配置檔案目錄,預設是/usr/loca/etc
11 --enable-extraprotection #額外安全防護
12
13 -----------------------------------------------------------------------------------------------
14 ./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
15 --------------------------------------------------------------------------------------------------
16
17 make && make install
18
19 vim /etc/sarg/sarg.conf
20 --7行--取消註釋
21 access_log /usr/local/squid/var/logs/access.1og #指定訪問日誌檔案
22 --25行--取消註釋
23 title "Squid User Access Reports" #網頁標題
24 -- 120行--取消註釋,修改
25 output_dir /var/www/html/sarg #報告輸出目錄
26 --178行--取消註釋
27 user_ip no #使用使用者名稱顯示
28 --184行--取消註釋,修改
29 topuser_sort_field connect reverse #top排序中,指定連線次數採用降序排列,升序是normal
30 -- 190行--取消註釋,修改
31 user_sort_field connect reverse #對於使用者訪問記錄,連線次數按降序排序
32 --206行--取消註釋,修改
33 exclude_hosts /usr/local/sarg/noreport #指定不計入排序的站點列表的檔案
34 --257行--取消註釋
35 overwrite_report no #同名同日期的日誌是否覆蓋
36 --289行--取消註釋,修改
37 mail_utility mailq.postfix #傳送郵件報告命令
38 --434行--取消註釋,修改
39 charset UTF-8 #指定字符集UTF-8
40 --518行--取消註釋
41 weekdavs 0-6 #top排行的星期週期
42 --525行--取消註釋
43 hours 0-23 #top排行的時間週期
44 --633行--取消註釋
45 www_document_root /var/www/html #指定網頁根目錄
46
47 #新增不計入站點檔案,新增的域名將不被顯示在排序中
48 touch /usr/local/sarg/noreport
49
50 ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
51
52 sarg --help #獲取幫助
53
54 #執行
55 sarg #啟動一次記錄
56
57 #驗證
58 yum install httpd -y
59 systemctl start httpd
60 在squid伺服器上使用瀏覽器訪問http://192.168.91.5/sarg, 檢視sarg報告網頁。
61 date -s
62 #新增計劃任務,執行每天生成報告
63 vim /usr/local/sarg/report.sh
64 #/bin/bash
65 #Get current date
66 TODAY=$(date +%d/%m/%Y)
67 #Get one week ago today
68 YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)
69 /usr/local/sarg/bin/sarg -l /usr/1ocal/squid/var/logs/access.log -o /var/www/html/sarg
70 -z -d $YESTERDAY-$TODAY &> /dev/null
71 exit 0
72
73 chmod +x /usr/local/sarg/report.sh
74
75 crontab -e
76 0 0 * * * /usr/1ocal/sarg/report.sh
在squid伺服器上使用瀏覽器訪問http://192.168.91.5/sarg, 檢視sarg報告網頁
七、反向代理
如果Squid反向代理伺服器中快取了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理伺服器將向後臺的Web伺服器請求資源,然後將請求的應答返回給客戶端,同時也將該應答快取在本地供下一個請求者使用
工作機制:
- 快取網頁物件,減少重複請求
- 將網際網路請求輪詢或按權重分配到內網web伺服器
- 代理使用者請求,避免使用者直接訪問Web伺服器,提高安全
1 開啟防火牆、本地關閉HTTPD
2 systemctl start firewalld
3 systemctl stop httpd
4
5 iptables -F
6 iptables -t nat -F
7 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
8
9 vim /etc/ squid.conf
10 60行--修改,插入-------
11 http_port 192.168.91.5:80 accel vhost vport
12 cache_peer 192.168.91.10 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
13 cache_peer 192.168.91.15 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
14 cache_peer_domain web1 web2 www.sdy.com #表示對www.sdy.com的請求,squid向192.168.91.10和192.168.91.1580埠發出請求
15 ---------------------------------------------------------------------------------------------------------------------------------------------------------
16 http_port 80 accel vhost vport
17 #squid從一個快取變成了一個Web伺服器反向代理加速模式,這個時候squid在80埠監聽請求,同時和webserver的請求埠(vhost vport)繫結,這個時候請求到了squid, squid是不用轉發請求的,而是直接要麼從快取中拿資料要麼向,繫結的埠直接請求資料。
18 accel:反向代理加速模式
19 vhost:支援域名或主機名來表示代理節點
20 vport:支援IP和埠來表示代理節點
21 parent:代表為父節點,上下關係,非平級關係
22 80:代理內部web伺服器的80埠
23 0:沒有使用icp,表示就一臺squid伺服器
24 no-query:不做查詢操作,直接獲取資料
25 originserver:指定是源伺服器
26 round-robin:指定squid 通過輪詢方式將請求分發到其中一-臺父節點
27 max_conn:指定最大連線數
28 weight:指定權重
29 name:設定別名
30 -------------------------------------------------------------------------------------------------------------------------------------------------------------------
31
32 systemctl stop squid
33 service squid reload
34
35 #後端web2節點伺服器設定
36 yum install -y httpd
37 systemctl start httpd
38
39 #節點1(web1):
40 echo "this is test web1" >> /var/www/html/index.html
41 #節點2(web2):
42 echo "this is test web2" >> /var/www/html/index.html
43
44 #客戶機的域名對映配置
45 修改C: \Windows\System32 \drivers\etc\hosts 檔案
46 192.168.91.5 www.kgc.com
47
48 #客戶機的代理配置
49 開啟瀏覽器,工具-->Internet選項-->連線-->區域網設定-->開啟代理伺服器(地址: Squid伺服器IP地址,埠:80)
50
51 瀏覽器訪問http://www.sdy.com
squid伺服器
web1/web2伺服器:
win10 客戶端 進行測試