文章目錄
- 一、Squid 簡介
- 1.1 Squid 一些概念性解釋
- 1.2 Squid 作業模式分類
- 正向代理與反向代理的區別
- 1.2.1 傳統模式 (標準的代理緩沖服務器)
- 1.2.2 透明模式 (透明代理緩沖服務器)
- 1.2.3 反向代理模式 (反向代理緩沖器)
- 1.3 Squid 軟體及配置說明
- 1.3.1 軟體介紹
- 1.3.2 squid 常用配置選項
- 二、實驗構建
- 2.1 傳統代理模式
- 2.1.1 內網客戶端(10.10.10.11)
- 2.1.2 網關服務器 (Squid 服務器10.10.10.12)
- 2.1.3 模擬外網 WEB 服務器 (20.20.20.13)
- 2.2 透明代理模式
- 2.2.1 內網客戶端(10.10.10.11)
- 2.2.2 網關服務器 (Squid 服務器10.10.10.12)
- 2.2.3 模擬外網 WEB 服務器 (20.20.20.13)
- 2.3.4 下載限速
- 2.3 反向代理模式
- 2.3.1 內網服務器(10.10.10.11、12)
- 2.3.2 網關服務器 (Squid 服務器10.10.10.13)
- 2.3.2 公網客戶端(20.20.20.14)
- 三、Squid ACL 設定
- 3.1 ACL 配置
- 3.2 規則總結說明
一、Squid 簡介
1.1 Squid 一些概念性解釋
??squid是一種用來快取Internet資料的軟體,接受來自人們需要下載的目標(object)的請求并適當的處理這些請求,也就是說,如果一個人想下載一web界面,他請求squid為他取得這個頁面,squid隨之連接到遠程服務器并向這個頁面發出請求,然后,squid顯式地聚集資料到客戶端機器,而且同時復制一份,當下一次有人需要同一頁面時, squid可以簡單的從磁盤中讀到它,那樣資料會立即傳輸到客戶機上,
定義: 一個快取服務器的守護行程
支持的代理協議: FTP、HTTP、SSL、套接字
存盤分類: 磁盤 > 磁區 > 目錄 > Object(快取檔案)
索引方式
- Hash Tables ???目錄?? 每個 Digest 的索引資訊
- Digest Tables ??索引 ??不同磁區對應的 Object 大概說明
squid代理的作用
- 通過快取的方式為用戶提供Web訪問加速
- 對用戶的Web訪問進行過濾控制
作業流程

當代理服務器中有客戶端需要的資料時:
a. 客戶端向代理服務器發送資料請求;
b. 代理服務器檢查自己的資料快取;
c. 代理服務器在快取中找到了用戶想要的資料,取出資料;
d. 代理服務器將從快取中取得的資料回傳給客戶端,
當代理服務器中沒有客戶端需要的資料時:
-
客戶端向代理服務器發送資料請求;
-
代理服務器檢查自己的資料快取;
-
代理服務器在快取中沒有找到用戶想要的資料;
-
代理服務器向Internet 上的遠端服務器發送資料請求;
-
遠端服務器回應,回傳相應的資料;
-
代理服務器取得遠端服務器的資料,回傳給客戶端,并保留一份到自己的資料快取中,
1.2 Squid 作業模式分類
正向代理與反向代理的區別
概念
- 正向代理: 對于原始服務器而言,就是客戶端的代言人
- 反向代理: 對于客戶端而言,就像是原始服務器
用途
- 正向代理的典型用途是為在防火墻內的局域網客戶端提供訪問Internet的途徑,正向代理還可以使用緩沖特性減少網路使用率,
- 反向代理還可以為后端的多臺服務器提供負載平衡,或為后端較慢的服務器提供緩沖服務,另外,反向代理還可以啟用高級URL策略和管理技術,從而使處于不同web服務器系統的web頁面同時存在于同一個URL空間下,
安全性
- 正向代理允許客戶端通過它訪問任意網站并且隱藏客戶端自身,因此你必須采取安全措施以確保僅為經過授權的客戶端提供服務,
- 反向代理對外都是透明的,訪問者并不知道自己訪問的是一個代理,
應用場景
- 正向和透明代理:一般用于公司內網用戶訪問互聯網,根據需求進行訪問控制
- 反向代理:一般用于公司服務器集群前做web快取,提高用戶訪問效率,同時可以起到負責均衡作用,為互聯網提供可持續端web服務,
1.2.1 傳統模式 (標準的代理緩沖服務器)
??一個標準的代理緩沖服務被用于快取靜態的網頁到本地網路上的一臺主機上(即代理服務器),當被快取的頁面被第二次訪問的時候,瀏覽器將直接從本地代理服務器那里獲取請求資料而不再向原web站點請求資料,這樣就節省了寶貴的網路帶寬,而且提高了訪問速度,但是,要想實作這種方式,必須在每一個內部主機的瀏覽器上明確指名代理服務器的IP地址和埠號,客戶端上網時,每次都把請求發送給代理服務器處理,代理服務器根據請求確定是否連接到遠程web服務器獲取資料,如果在本地緩沖區有目標檔案,則直接將檔案傳給用戶即可,如果沒有的話則先取回檔案,先在本地保存一份緩沖,然后將檔案發送給客戶端瀏覽器,
模式說明: 此類作業模式為三種模式中最簡單的構成,對客戶端配置較不友好,主要功能為加速 內網用戶的訪問速度,減少出口流量
作業架構圖

1.2.2 透明模式 (透明代理緩沖服務器)
??透明代理緩沖服務器和標準代理服務器的功能完全相同,但是,代理操作對客戶端的瀏覽器是透明的(即不需指明代理服務器的IP和埠),透明代理服務器阻斷網路通信,并且過濾出訪問外部的HTTP(80埠)流量,如果客戶端的請求在本地有緩沖則將緩沖的資料直接發給用戶,如果在本地沒有緩沖則向遠程web服務器發出請求,其余操作和標準的代理服務器完全相同,對于linux作業系統來說,透明代理使用Iptables或者Ipchains實作,因此不需要對瀏覽器作任何設定,所以,透明代理對于ISP(Internet服務器提供商)特別有用,
模式說明: 此類作業模式配置較為復雜,需要借助防火墻對埠進行重定向操作,但是,對于客 戶端來說配置較為友好無需進行任何配置即可使用代理功能,主要功能為加速內網用戶的訪問速度, 減少出口流量
作業架構圖

1.2.3 反向代理模式 (反向代理緩沖器)
??反向代理是和前兩種代理完全不同的一種代理服務,使用它可以降低原始WEB服務器的負載,反向代理服務器承擔了對原始WEB服務器的靜態頁面的請求,防止原始服務器過載,它位于WEB服務器和Internet之間,處理所有對WEB服務器的請求,組織了WEB服務器和Internet的直接通信,如果互聯網用戶請求的頁面在代理服務器上有緩沖的話,代理服務器直接將緩沖內容發送給用戶,如果沒有緩沖則先向WEB服務器發出請求,取回資料,本地快取后再發給用戶,這種方式通過降低了WEB服務器的請求數從而降低了WEB服務器的負載,
模式說明: 反向代理服務器位于本地 WEB 服務器和互聯網用戶之間,處理公網用戶發送的請求 并代理至內網服務中,有效減輕后端真實服務器壓力,增加服務并發能力
作業架構圖

1.3 Squid 軟體及配置說明
1.3.1 軟體介紹
軟體包: squid-3.1.STABLE21-6.el6
系統服務: squid
主程式: /usr/sbin/squid
配置目錄: /etc/squid
主組態檔: /etc/squid/squid.conf
默認監聽埠: TCP 3128
默認訪問日志: /var/log/squid/access.log
特別說明:Squid 在經過 3.0 版本后使用 C 語言進行重構,效率大大提升,Centos6 標配 Squid 3.0 以后版本
1.3.2 squid 常用配置選項
檔案位置 /etc/squid/squid.conf
[root@localhost ~]$ vim /etc/squid/squid.conf
# Squid 啟動埠為 3128
http_port 3128
#指定 Squid 行程能夠使用的記憶體大小(默認大小)
cache_mem 256MB
#設定squid磁盤快取最大檔案,超過4M端檔案不保存到磁盤
maximum_object_size 4MB
#設定squid磁盤快取最小檔案
minimum_object_size 0 KB
#設定squid記憶體快取最大檔案,超過4M不保存到記憶體
maximum_object_size_in_memory 4096 KB
#指定允許通過 Squid 的單個元素大小
reply_body_max_size 10 MB
#指定 Squid 物件檔案存盤路徑使用大小限制為 100MB ,一級目錄個數為 16 個,二級目錄個數為 256 個
cache_dir ufs /var/spool/squid 100 16 256
#log檔案日志格式
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
#log檔案存放路徑和日志格式
# access_log /var/log/squid/access.log squid
#設定快取日志
cache_log /var/log/suqid/cache.log
#log輪轉60天
logfile_rotate 60
#cache目錄使用量大于95%時,開始清理舊的cache
cache_swap_high 95
#cache目錄清理到90%時停止
cache_swap_low 90
#定義本地網段
acl localnet src 192.168.1.0/24
#允許本地網段使用
http_access allow localnet
#拒絕所有
http_access deny all
#指定 Squid 服務器自身的主機名
visible_hostname xxx.xxxx.xxxx
#管理員郵箱
cache_mgr 123456@qq.com
二、實驗構建
2.1 傳統代理模式
實驗結構圖

環境
可以參考之前的文章2.3章節搭建環境
https://blog.csdn.net/w918589859/article/details/111146921
client: 10.10.10.11(內網)
squid—server: 10.10.10.12(內網) 和 20.20.20.12(公網)
apache 20.20.20.13(公網)
2.1.1 內網客戶端(10.10.10.11)
#客戶端添加網關指向squid服務器
[root@localhost ~]$ echo "GATEWAY=10.10.10.12" >> /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]$ service network restart
2.1.2 網關服務器 (Squid 服務器10.10.10.12)
開啟第二塊網卡
[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #掛載本地yum源
[root@localhost ~]$ service NetworkManager stop # 關閉網卡守護行程
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
UUID=ea68e93b-9aff-4379-b5a8-abac819dcd3b
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.12
NETMASK=255.255.255.0
[root@localhost ~]$ service network restart
#報錯:彈出界面 eth1: 錯誤:沒有找到合適的設備:沒有找到可用于連接 'System eth1' 的設備,
#解決辦法
#洗掉網卡組態檔的mac地址,然后洗掉這個檔案,重啟就好了
#rm -f /etc/udev/rules.d/70-persistent-net.rules
#報錯:彈出界面 eth1: 錯誤:激活連接失敗:The connection is not for this device.
#解決辦法 關閉網卡守護行程
#service NetworkManager stop
[root@localhost ~]$ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #開啟路由轉發,0改為1
[root@localhost ~]$ sysctl -p
安裝squid服務
[root@localhost ~]$ yum -y install squid #安裝 squid 服務
[root@localhost ~]$ vim /etc/squid/squid.conf
http_port 3128
visible_hostname www.test.com
[root@localhost ~]$ service squid start
2.1.3 模擬外網 WEB 服務器 (20.20.20.13)
xshell可能連接不了,需要登錄到虛擬機操作
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=b1f0c82e-6315-4827-91f7-8a5f8fa0b929
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.13
NETMASK=255.255.255.0
[root@localhost ~]$ service network restart
[root@localhost ~]$ service httpd start
[root@localhost ~]$ echo "this is server1" >> /var/www/html/index.html
測驗
10.10.10.11 輸入init 5 啟動圖形界面,然后測驗
客戶端輸入20.20.20.13發現訪問不了,這是因為,要在瀏覽器設定代理,代理ip地址是squid服務器地址

這時候在訪問,就可以訪問到,把20.20.20.13的服務器停掉,依然可以訪問到,這就是快取
2.2 透明代理模式
實驗結構圖

環境
可以參考之前的文章2.3章節搭建環境
https://blog.csdn.net/w918589859/article/details/111146921
client: 10.10.10.11(內網)
squid—server: 10.10.10.12(內網) 和 20.20.20.12(公網)
apache 20.20.20.13(公網)
2.2.1 內網客戶端(10.10.10.11)
#客戶端添加網關指向squid服務器
[root@localhost ~]$ echo "GATEWAY=10.10.10.12" >> /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]$ service network restart
2.2.2 網關服務器 (Squid 服務器10.10.10.12)
開啟第二塊網卡
[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #掛載本地yum源
[root@localhost ~]$ service NetworkManager stop # 關閉網卡守護行程
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
UUID=ea68e93b-9aff-4379-b5a8-abac819dcd3b
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.12
NETMASK=255.255.255.0
[root@localhost ~]$ service network restart
#報錯:彈出界面 eth1: 錯誤:沒有找到合適的設備:沒有找到可用于連接 'System eth1' 的設備,
#解決辦法
#洗掉網卡組態檔的mac地址,然后洗掉這個檔案,重啟就好了
#rm -f /etc/udev/rules.d/70-persistent-net.rules
#報錯:彈出界面 eth1: 錯誤:激活連接失敗:The connection is not for this device.
#解決辦法 關閉網卡守護行程
#service NetworkManager stop
[root@localhost ~]$ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #開啟路由轉發,0改為1
[root@localhost ~]$ sysctl -p
安裝squid服務
[root@localhost ~]$ yum -y install squid #安裝 squid 服務
[root@localhost ~]$ vim /etc/squid/squid.conf
http_port 10.10.10.12:3128 transparent # transparent ip 為網關內網 IP
visible_hostname www.test.com #指定主機名稱
#相比于傳統代理,這里有變動
[root@localhost ~]$ service squid reload #重新加載組態檔
[root@localhost ~]$ service iptables start && chkconfig iptables on
[root@localhost ~]$ iptables -F && iptables -L
[root@localhost ~]$ iptables -t nat -A PREROUTING -i eth0 -s 10.10.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128 # 添加路由規則
#往nat表上添加一條資訊,當入站網卡是eth0(內網網卡),內網網段是,協議是tcp,目標埠是80的話,做一個埠重定向,重定向到3128
[root@localhost ~]$ iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 10.10.10.0/24 anywhere tcp dpt:http redir ports 3128
[root@localhost ~]$ service iptables save
2.2.3 模擬外網 WEB 服務器 (20.20.20.13)
xshell可能連接不了,需要登錄到虛擬機操作
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
UUID=b1f0c82e-6315-4827-91f7-8a5f8fa0b929
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.13
NETMASK=255.255.255.0
[root@localhost ~]$ service network restart
[root@localhost ~]$ service httpd start
[root@localhost ~]$ echo "this is server1" >> /var/www/html/index.html
2.3.4 下載限速
#在服務器(20.20.20.13)創建一個檔案
[root@localhost ~]$ cd /var/www/html
[root@localhost ~]$ dd if=/dev/zero of=1.txt bs=1M count=256
[root@localhost ~]$ vim /etc/squid/squid.conf
#添加下面一行
reply_body_max_size 500 MB
[root@localhost ~]$ service Squid reload
測驗
10.10.10.11 輸入init 5 啟動圖形界面,然后測驗
客戶端輸入20.20.20.13/1.txt訪問,會報錯
2.3 反向代理模式
實驗結構圖

環境
可以參考之前的文章2.3章節搭建環境
https://blog.csdn.net/w918589859/article/details/111146921
apache1 10.10.10.11(內網)
apache1 10.10.10.12(內網)
squid—server: 10.10.10.13(內網) 和 20.20.20.13(公網)
client: 20.20.20.14(公網)
2.3.1 內網服務器(10.10.10.11、12)
兩臺apache服務器都要操作
[root@localhost ~]$ service httpd start && chkconfig httpd on
[root@localhost ~]$ echo "this is server1" >> /var/www/html/index.html
#echo "this is server2" >> /var/www/html/index.html 10.10.10.12
#添加網關指向squid服務器
[root@localhost ~]$ echo "GATEWAY=10.10.10.13" >> /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]$ service network restart
2.3.2 網關服務器 (Squid 服務器10.10.10.13)
開啟第二塊網卡
[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #掛載本地yum源
[root@localhost ~]$ service NetworkManager stop # 關閉網卡守護行程
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
UUID=ea68e93b-9aff-4379-b5a8-abac819dcd3b
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.13
NETMASK=255.255.255.0
[root@localhost ~]$ service network restart
#報錯:彈出界面 eth1: 錯誤:沒有找到合適的設備:沒有找到可用于連接 'System eth1' 的設備,
#彈出界面 eth1: eth1 設備的 MAC 地址與預想的不符,忽略,
#解決辦法
#洗掉網卡組態檔的mac地址,然后洗掉這個檔案,重啟就好了
#rm -f /etc/udev/rules.d/70-persistent-net.rules
#報錯:彈出界面 eth1: 錯誤:激活連接失敗:The connection is not for this device.
#解決辦法 關閉網卡守護行程
#service NetworkManager stop
[root@localhost ~]$ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #開啟路由轉發,0改為1
[root@localhost ~]$ sysctl -p
安裝squid服務
[root@localhost ~]$ yum -y install squid 安裝 squid 服務
[root@localhost ~]$ vim /etc/squid/squid.conf
http_port 20.20.20.13:80 vhost
#公網ip,# squid監聽的埠,客戶訪問網站的埠,也可以只寫埠,vhost不寫也可以
visible_hostname www.test.com
#cache_peer 192.168.1.2(內網中網頁服務器 IP) parent 80 0 (網路中是否還有其他代理) originserver round-robin (節點以輪詢的方式)
cache_peer 10.10.10.11 parent 80 0 originserver round-robin
cache_peer 10.10.10.12 parent 80 0 originserver round-robin
[root@localhost ~]$ service squid start
2.3.2 公網客戶端(20.20.20.14)
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth1
TYPE=Ethernet
UUID=ea68e93b-9aff-4379-b5a8-abac819dcd3b
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.14
NETMASK=255.255.255.0
#xshell可能會斷,需要登錄到虛擬機操作
測驗
20.20.20.14 輸入init 5 啟動圖形界面,然后測驗
客戶端輸入20.20.20.13訪問,會報錯,不能訪問,這是因為acl的設定,之前的可以訪問,是因為剛好在10網段剛好在放行串列
[root@localhost ~]$ vim /etc/squid/squid.conf
#放行串列,添加20的網段
acl localnet src 20.20.20.0/24 # RFC1918 possible internal network
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
[root@localhost ~]$ service squid start
三、Squid ACL 設定
??所謂ACL(Access Control List)就是在服務器端設定特定的上網策略,哪些用戶能上網,能訪問什么網站,能下載什么檔案等等對用戶的上網行為進行約束和管理,這個企業一般都會進行ACL上網控制,對員工的上網行為進行控制,從而提高作業效率,這里要說的就是基于redhat代理服務程式squid的ACL控制,
3.1 ACL 配置
??使用訪問控制特性,可以控制在訪問時根據特定的時間間隔進行快取、訪問特定站點或一組站點等等,squid訪問控制有兩個要素:ACL元素和訪問串列,訪問串列可以允許或拒絕某些用戶對此服務的訪問,
ACL格式
為了使用控制功能,必須先設定ACL規則并應用,ACL宣告的格式如下:
如果出現acl,但沒有定義http_access,相當于沒寫
acl 串列名稱 串列型別 串列內容
acl localnet src 20.20.20.0/24
串列名稱:由管理員自行指定,用來識別控制條件
串列型別:必須使用Squid預定義的值,對應不同類別的控制條件
src: 源地址(即客戶機IP地址)
dst: 目標地址(即服務器IP地址)
port: 目標埠
srcdomain: 源名稱(即客戶機名稱)
dstdomain: 目標名稱(即服務器名稱)
time: 一天中的時刻和一周內的一天
url_regex: URL規則運算式匹配
urlpath_regex: URL-path規則運算式匹配,略去協議和主機名
proxy_auth: 通過外部程式進行用戶驗證
maxconn: 單一IP的最大連接數
串列內容:具體控制的物件,不同的型別對應的內容也不一樣,可以有多個值,用空格分隔
針對已定義的 acl 串列進行限制
http_access allow 或 deny 串列名稱 ...
3.2 規則總結說明
- 如果僅僅只有 acl 設定沒有 http_access 設定默認拒絕
- 如果 http_access deny all 未定義,并且自己定義了一個 acl 范圍,默認使用最后一條規則的反向 規則
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240922.html
標籤:其他
下一篇:centos安裝jdk
