個人整理
- 前言
- 代理作業機制和好處
- 代理的基本型別
- ACL訪問控制
- 反向代理
- 一,安裝squlid部署環境:
- 二,搭建傳統代理服務器
- 三,搭建透明代理
- 四,ACL訪問控制
- 五,squid日志分析,sarg工具
- 六,squid 反向代理
前言
代理作業機制和好處
- 快取網頁物件,減少重復請求
- 訪問速率提高
- 隱藏客戶機真是ip地址
代理的基本型別
- 傳統代理
適用于internet ,需要指定服務端,開啟代理ip地址 - 透明代理
客戶機不需要指定代理服務器的地址和埠,而通過默認路由,防火墻策略將web訪問定向給代理服務器處理
ACL訪問控制
- 控制方式
根據源地址,目標URL,檔案型別等定義串列
acl 串列名稱 串列型別 串列內容…
再針對定義的串列做限制
http_access allow或deny 串列名
- 規則優先級
用戶訪問代理服務器時,squid會從上往下匹配,順序匹配定義所有規則串列,
一旦匹配成功,立即停止匹配,!!
相反,如果都不匹配,squid會使用最后一條相反的規則
最后一條是允許,相反:則是拒絕
最后一條是拒絕,相反:則是允許
常用ACL 串列型別
src 源地址
dst 目標地址
port 目標地址
dstdomain 目標域
time 訪問時間
maxconn 最大并發連接
url_regex 目標URL地址
urlpath_regex 整個目標URL路徑
反向代理
- squid反向代理服務器中快取了該請求的資源,則將該請求直接回傳給客戶端;
- 否則反向代理服務器將向后臺的web服務器請求資源,然后將請求的應答回傳給客戶端,同時也將該應答快取在本地,供下一個請求者使用
squid反向代理服務器:我有我直接給你,我沒有我跟后面web要,我給你,我也留一份,方便給下一個;
- 作業機制和優點
快取網頁物件,減少重復請求
將外網(互聯網)請求,按照策略輪詢或權重分配到內網web服務器
安全,隱藏,避免用戶直接訪問web服務器;
| squid代理服務器 | 20.0.0.16 |
| web | 20.0.0.17 centos7.4 |
| web2 | 20.0.0.18 centos7.4 |
| 客戶端 | 20.0.0.1 /192.168.100.10 |
一,安裝squlid部署環境:
-
安裝底層編譯環境
yum -y install gcc gcc-c++ make -
將軟體包拖到/opt/目錄,
解壓:
tar zxf squid-3.4.6.tar.gz //解壓到當前目錄下就行了
編譯安裝:
cd squid-3.4.6/ //到軟體目錄下
./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-arp-acl --enable-linux-netfilter --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll --enable-gnuregex
make && make install //編譯有一會時間
編譯安裝的解釋:
1.指定安裝路徑;
2.組態檔存放目錄;
3.啟用acl訪問控制串列;通過客戶端的MAC地址進行管理,防止客戶使用arp欺騙,
4.內核過濾機制
5.支持透明模式功能
6.呼叫I/O執行緒優化
7.報錯提示簡體中文提示
8.url支持下劃線
9.字符設備去驅動中的函式,檔案指標掛載到當前等待佇列
10.支持正則運算式
3.將軟體squid命令能夠被系統命令能識別
//查看squid啟動命令是在那個目錄,是/bin 還是/sbin/
//在/sbin/下面,放到系統可以使用的/sbin/下,或者/bin
ln -s /usr//local/squid/sbin/squid /usr/local/sbin/
4.創建一個程式賬戶;
useradd -M -s /sbin/nologin squid
//更改屬賬戶權限, var目錄下有兩個目錄run,cahe當中都有squid的目錄
chown -R squid.squid /usr/local/squid/var
5.更改組態檔
vim /etc/squid.conf
56 #http_access deny all
57 http_access allow all //設定為允許所有
60 http_port 3128
61 cache_effective_user squid //添加主賬戶
62 cache_effective_group squid //添加組賬戶
68 coredump_dir /usr/local/squid/var/cache/squid //在第一個快取目錄中保留coredump,容災目錄,出現問題故障可以通過目錄還原;
6.檢查組態檔語法:
[root@as squid]#squid -k parse
.....省略部分.....
正確的話會顯示很快
[root@as squid]# squid -z
[root@as squid]# 2020/10/30 12:19:23 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2020/10/30 12:19:23 kid1| Creating missing swap directories
2020/10/30 12:19:23 kid1| No cache_dir stores are configured.
^C
[root@as squid]# squid
[root@as squid]# netstat -antp|grep squid
tcp6 0 0 :::3128 :::* LISTEN 55371/(squid-1)
7.配置squid啟動腳本;
vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid" ##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
echo "啟動完成!"
fi
;;
stop)
$CMD -k kill &> /dev/null ##關閉squid
rm -rf $PID &> /dev/null ##洗掉PID檔案
;;
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|reload|status|check|restart}"
;;
esac
驗證腳本:
[root@as init.d]# chmod +x /etc/init.d/squid //腳本執行權限
[root@as init.d]# chkconfig --add /etc/init.d/squid //添加到啟動項
[root@as init.d]# service squid stop
[root@as init.d]# netstat -antp|grep squid
[root@as init.d]# service squid start
正在啟動 squid....
啟動完成!
[root@as init.d]# netstat -antp|grep squid
tcp6 0 0 :::3128 :::* LISTEN 56348/(squid-1)
二,搭建傳統代理服務器
手動指定代理服務器; 指定代理服務器;
- 更改squid配置,添加優化
[root@squid init.d]# vim /etc/squid.conf
http_port 3128
cache_effective_user squid
cache_effective_group squid
63 cache_mem 64 MB '//自定義快取空間大小,容量最好為4的倍數'
64 reply_body_max_size 10 MB '//允許下載最大檔案大小,以位元組為單位,默認設定0表示不進行限制'
65 maximum_object_size 4096 KB ' //允許保存到快取空間的最大物件的大小,以KB為單位,超過限制不會快取,直接轉到用戶端的快取'
[root@squid ~]# service squid reload '//多載服務'
[root@squid ~]# netstat -antp |grep squid
tcp6 0 0 :::3128 :::* LISTEN 56799/(squid-1)
- 防火墻設定
[root@squid ~]# iptables -F ‘//清空防火墻表內容’
[root@squid ~]# iptables -L ‘//查看防火墻表內容’
[root@squid ~]# setenforce 0 ‘//關閉防火墻增強型功能’
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ‘//新增規則,允許3128埠’
- (真機或win10虛擬機)瀏覽器驗證:
使用瀏覽器不同,配置代理服務地址也不同;(我用的是firefox火狐)
設定-----網路----選擇手動配置代理ip

第一次:沒配置代理ip前
第二次:配置代理ip后
web節點查看httpd訪問正確日志: cat /var/log/httpd/access.log

問題:
1.如果訪問web網站,頁面顯示錯誤資訊,無法獲取URL資訊,解決方法如下:
//代理服務器組態檔,拒絕了acl訪問策略;
56 #http_access deny all //查看是不是忽略了這個,注釋掉
添加http_access allow all //允許所有,訪問策略
2.防火墻問題,是否關閉firewalld,iptables訪問策略清空,從新添加!!
三,搭建透明代理
關閉傳統代理的,客戶端代理ip
- 添加一個網卡ens36 做代理網關;
識別不到新添加網卡:systemctl start networkmanager 網路管理服務;
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
//檔案之前的ens33改成ens36
//uuid洗掉去掉
//ip地址為192.168.100.1 網關地址
//重啟下網路服務
systemctl restart network
-------------
- 做路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@squid network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
- 更改squid組態檔,改為透明代理模式
vim /etc/squid.conf
60 http_port 192.168.100.1:3128 transparent
//地址是新建網卡的網關地址;
-
重啟服務;
service squid restart -
防火墻策略設定:
iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 //定義入口規則 網卡名稱 源地址 協議 http80埠重定向到3128埠
iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 //定義入口規則 網卡名稱 源地址 協議 https443埠重定向到3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT //新增規則,允許3128埠
- web節點、
1.做靜態路由,指向squid代理服務器地址;
[root@web httpd]# route add -net 192.168.100.0/24 gw 20.0.0.16 //添加路由到路由表
[root@web httpd]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 20.0.0.2 0.0.0.0 UG 100 0 0 ens33
20.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.100.0 20.0.0.16 255.255.255.0 UG 0 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
- 客戶端驗證:
將之前的網卡更換,與squid代理服務網關網卡一致
更改為192.168.100.10地址,網關指向代理服務網關192.168.100.1

win10 打開瀏覽器訪問web地址,輸入20.0.0.17
//顯示登陸界面;
- web端查看日志檔案
tail /vat/log/httpd/access.log

四,ACL訪問控制
- 修改squid組態檔
vim /etc/squid.conf
acl mygw src 192.168.100.0/24 //訪問串列控制原地址某個網段;
acl localip src 192.168.100.10/32 //訪問串列控制具體地址‘,固定ip地址是32位
acl desthost dst 20.0.0.17/32 //訪問串列控制目標地址
acl mc20 maxconn 20 //訪問數量,最大訪問
acl burl url_regex -i ^rtsp:// ^cmule:// //正則運算式,以什么協議為開頭
acl purl urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ //以什么為結尾
acl work time MTWHF 08:30-17:30 //對某段時間做限制,MTWHF是周一到周五,AC是周六周日
//拒絕localip串列;以上往下的順序
http_access deny localip
- acl訪問控制的ip地址,也可以放在一起串列管理
方便,靈活,減少組態檔的代碼量
mkdi /etc/squid/ //創建目錄,存放物件地址
vim /etc/squid/dest.ip //輸入web目標地址
20.0.0.17
20.0.0.18
.....
- 組態檔內
vim /etc/squid.conf
acl desthost dst "/etc/squid/dest.ip"
-
重啟squid
service squid restart -
客戶端訪問
做訪問串列控制前:

做訪問串列控制后:

五,squid日志分析,sarg工具
-
安裝準備環境
yum -y install gd gd-devel //影像處理擴展庫gd -
創建編譯安裝準備目錄
mkdir /usr/local/sarg -
將軟體拖到/opt 解壓
cd /opt
tar zxvf sarg-2.3.7.tar.gz -
編譯安裝
cd sarg-2.3.7/
./configure --prefix=/usr/local/sarg --sysconfdir=/etc/sarg --enable-extraprotection
//–enable-extraprotection //額外安全防護
make && make install
- 將sarg配置備份,修改組態檔
cd /etc/sarg/
cp sarg.conf sarg.conf.bak
編輯配置
vim sarg.conf
7 access_log /usr/local/squid/var/logs/access.log
25 title "Squid User Access Reports"
120 output_dir /var/www/html/squid-reports
178 user_ip no
184 topuser_sort_field connect reverse
206 exclude_hosts /usr/local/sarg/noreport
257 overwrite_report no
289 mail_utility mailq.postfix
434 charset UTF-8
518 weekdays 0-6
525 hours 0-23
633 www_document_root /var/www/html
//配置解釋:
7:指定訪問日志檔案
25:網頁標題,可自定義
120:報告輸出目錄,存放目錄
178:使用用戶名顯示
184:top排序中有連接次數,訪問位元組,降序排列,升序是normal
206:不計入排序的站點串列檔案
257:同名日志是否覆寫
289:發送郵件報告命令
434:使用字符集
518:top排序的星期周期
525:top排序的時間周期
633:網頁根目錄
-
創建串列檔案
touch /usr/local/sarg/noreport -
將sarg命令能夠被系統識別
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
-
安裝httpd
yum -y install httpd -
開啟sarg工具,生成報告
[root@as sarg]# sarg
SARG: 紀錄在檔案: 81, reading: 100.00%
SARG: 成功的生成報告在 /var/www/html/squid-reports/2020Nov01-2020Nov01
- 執行每天生成報告
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)
前一天的時間 - 今天的時間 = 就是一天的生成報告時間
[root@as squid-reports]# date -d "1 day ago" +%d/%m/%Y
31/10/2020
[root@as squid-reports]# date +%d/%m/%Y
01/11/2020
六,squid 反向代理
20.0.0.17 網頁檔案修改
vi /var/www/html/index.html
<h1> this is web1 </h1>
- 新添加 web2節點 20.0.0.18
//安裝httpd
yum -y install httpd
//開啟服務,做站點目錄網頁檔案,
vi /var/www/html/index.html
<h1> this is web2 </h1>
systemctl enable httpd
systemctl start httpd
netstat -antp|grep 80
//添加路由表,靜態路由指向代理服務器ip
route add -net 192.168.100.0/24 gw 20.0.0.16
route -n //查看路由表
ping 192.168.100.10 測驗客戶端的連通性
- squid端 修改squid配置,改為反向代理
vim /etc/squid.conf
http_port 20.0.0.16:80 accel vhost vport //監聽squid代理地址,埠為80
cache_peer 20.0.0.17 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web //訪問后面web節點服務,重定向,定位到80埠,采用輪詢機制,最大訪問量30 , 權重為1 ,別名web
cache_peer 20.0.0.18 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 //訪問后面web節點服務,重定向,定位到80埠,采用輪詢機制,最大訪問量30 , 權重為1 ,別名web
cache_peer_domain web web2 www.as.com //匹配,如果訪問的域名是www.as.com 就訪問到兩個web節點;
//停止httpd服務;埠沖突
systemctl stop httpd
//重啟squid服務,過濾埠
[root@squid ~]# service squid restart
正在關閉 squid...
正在啟動 squid...
[root@squid ~]# netstat -antp |grep squid
tcp 0 0 20.0.0.16:80 0.0.0.0:* LISTEN 60392/(squid-1)
- 防火墻策略
[root@squid ~]# iptables -F //清除之前的所有規則
[root@squid ~]# iptables -t nat -F //清除之前表內的所有策略
[root@squid ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //新添加入規則,允許埠3128
[root@squid ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:squid
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
- 客戶端
驗證:
//開啟代理ip

如果不想做域名,輪詢,可以去掉這個配置,直接通過ip就可以
cache_peer_domain web web2 www.as.com
//做hosts主機映射
C:\Windows\System32\drivers\etc 下的 hosts檔案中-------添加20.0.0.16 www.as.com-----驗證

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/201859.html
標籤:其他
