一、什麼是squid
- Squid(Squid cache,簡稱Squid)是Linux系統中最常用的一款開源代理服務軟件
- 可以很好地實現HTTP和FTP,以及DNS查詢、SSL等應用的緩存代理,功能十分強大
- squid的官方網站爲http://www.squid-cache.org
二、緩存代理概述
1、 Web代理的工作機制,緩存網頁對象,減少重複請求
- Squid是一個緩存Internet數據的一個軟件,它接收用戶的下載申請, 並自動處理所下載的數據。
- 也就是說,當一個用戶想要下載一個主頁時,它向Squid發出一個申請,要Squid替它下載,然後Squid連接所申請網站並請求該主頁,接着把該主頁傳給用戶同時保留一個備份
- 當別的用戶申請同樣的頁面時,Squid把保存的備份立即0傳給用戶,減少了向Internet提交重複的Web請求的過程,提高了用戶下載網頁的速度,隱藏了客戶機的真實IP
如圖:
2、代理的基本類型
- 傳統代理:適用於Internet,需明確指定服務端
- 透明代理: 客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將Web訪問重定向給代理服務器處理
3、使用代理的好處
- 提高Web訪問速度
- 隱藏客戶機的真實IP地址
三、squid傳統代理搭建
環境介紹
squid服務器:192.168.100.10/24
web服務器:192.168.100.20/24
客戶機:192.168.100.30/24
實驗目的
- 通過客戶機訪問web頁面,不做代理時,web服務器的訪問日誌顯示的是客戶機IP,
- 當做了傳統代理後,web服務器的訪問日誌顯示的是squid服務器IP。
squid服務器配置
- 安裝編譯工具,解壓squid軟件包到opt
yum install gcc gcc-c++ -y
tar zxvf squid-3.5.27.tar -C /opt
- 進入解壓目錄執行configure
./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--enable-poll \
--enable-gnuregex
- 編譯並安裝
make && make install
- 創建軟連接,創建squid用戶,更改squid屬組
ln -s /usr/local/squid/sbin/* /usr/local/sbin
useradd -M -s /sbin/nologin squid
chown -R squid:squid /usr/local/squid/var/
- 修改squid配置文件,
vi /etc/squid.conf
###在第56行添加參數
56 #http_access deny all
57 http_access allow all
58 http_port 3128 ###在下面新增
59 visible_hostname 192.168.100.10
60 cache_mem 64 MB
61 cache_swap_low 80
62 cache_swap_high 97
63 cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256
64 cache_effective_user squid ##緩存用戶squid
65 cache_effective_group squid ##緩存組squid
- 檢查squid相關配置,並初始化
squid -k parse ##檢查配置文件
squid –k rec ##重新加載配置文件
squid -zX ##初始化緩存目錄
- 編寫squid服務腳本,直接放到service中管理
vi /etc/init.d/squid
#!/bin/bash
#chkconfig: 35 90 25
#config: /etc/squid.conf
#pidfile: /usr/local/squid/var/run/squid.pid
#Description: Squid - Internet Object Cache
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"
case "$1" in
start)
netstat -utpln | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "Squid is running"
else
$CMD
fi
;;
stop)
$CMD -k kill &>/dev/null
rm -rf $PID &>/dev/null
;;
status)
[ -f $PID ] &>/dev/null
if [ $? -eq 0 ]
then
netstat -utpln | 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
;;
*)
esac
- 賦予腳本相關權限
chmod +x /etc/init.d/squid
chkconfig --add squid ##加入service列表
chkconfig squid on
- 啓動squid服務
service squid restart
正在啓動Squid...
netstat -anpt | grep squid ##確認squid服務處於正常監聽狀態
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
- 編輯防火牆規則
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允許3128端口
service iptables save ##保存規則
- 重載配置文件
service squid reload
web服務器配置
- 關閉防火牆
systemctl stop firewalld.service ##關閉防火牆
setenforce 0 ##增強型安全功能
- 安裝httpd服務,並啓動(作爲web頁面)
yum install httpd -y ##安裝web服務
systemctl start httpd.service
客戶端配置
驗證傳統squid模式
- 當客戶端不配置代理時,訪問web界面
- 進入web服務器,查看web服務器訪問日誌,可以看見訪問源地址爲客戶機地址
cat /var/log/httpd/access_log
- 當客服端配置代理後,再次訪問web界面
- 並查看web服務器訪問日誌,可以看見訪問源地址爲squid服務器
cat /var/log/httpd/access_log
四、squid透明代理搭建
- 簡介:需要在squid上配置雙網卡,內網卡ens33作爲客戶機的網關
環境介紹
squid服務器:雙網卡。ens33爲192.168.100.1/24,
ens36爲192.168.5.100/24
web服務器:192.168.5.200/24
客戶機:192.168.100.30/24
實驗目的
- 客戶機訪問web服務器時顯示的訪問地址爲squid服務器地址
squid服務器配置
- 添加一塊網卡,輸入nmcli con查看網卡連接情況
nmcli con
NAME UUID TYPE DEVICE
ens33 71ca8422-bf5e-4d2c-a919-e0cd02bbd979 802-3-ethernet ens33
有線連接 1 d20a6283-76b7-3da1-a3ca-ac91adf7a653 802-3-ethernet ens36
- 配置ens36網卡
cd /etc/sysconfig/network-scripts
cp -p ifcfg-ens33 ifcfg-ens36
vi /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36 ###改網卡名字
UUID=71ca8422-bf5e-4d2c-a919-e0cd02bbd979
DEVICE=ens36 ###改網卡名字
ONBOOT=yes
IPADDR=192.168.5.100
NETMASK=255.255.255.0
GATEWAY=192.168.5.2
- 配置ens33網卡
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=71ca8422-bf5e-4d2c-a919-e0cd02bbd979
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.1
NETMASK=255.255.255.0
- 添加路由轉發
vim /etc/sysctl.conf
##末尾加入
net.ipv4.ip_forward=1
sysctl -p ##重新加載
net.ipv4.ip_forward = 1
- 修改squid配置文件
vim /etc/squid.conf
##將剛纔的傳統模式的58行監聽端口改爲監聽192.168.100.1:3128
58 http_port 192.168.100.1:3128 transparent ###支持透明模式
- 重新加載配置文件
service squid reload
netstat -anpt | grep squid ##確認squid服務處於正常監聽狀態
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
- 編輯防火牆規則,增加nat轉換規則
iptables -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
###客戶機請求http80端口時重定向到3128端口
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
###請求https443端口時重定向到3128端口
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
##允許3128端口進行轉發
service iptables save ##保存規則
web服務器配置
修改web服務器IP地址爲192.168.5.200
- 添加一條靜態路由到客戶機192.168.100.0/24網段
route add -net 192.168.100.0/24 gw 192.168.5.100
客戶機配置
- IP地址不變,關掉代理
驗證
- 客戶機訪問web服務器,然後進入web服務器看訪問日誌
- 查看web服務器訪問日誌,可以看見源地址爲squid的ens36地址
cat /var/log/httpd/access_log
五、squid反向代理搭建
- 當squid做反向代理時就不是緩存服務器了 , 變爲web 服務器
實驗環境介紹
squid服務器:192.168.100.100/24
web1:192.168.100.110/24
web2:192.168.100.120/24
客戶機:192.168.30/24
實驗目的
- squid服務器配置反向代理,客戶機添加squid代理,然後訪問squid服務器域名時跳轉到web服務器頁面。
- 以輪詢的方式依次顯示web1、web2
squid服務器配置
- 修改IP地址爲192.168.100.100/24
- 跟傳統模式一樣安裝squid軟件,修改配置文件
vim /etc/squid.conf
###在第56行添加參數
56 #http_access deny all
57 http_access allow all
58 http_port 192.168.100.100:80 accel vhost vport
##將squid服務器變爲web server,並監聽80端口
59 visible_hostname 192.168.100.100
60 #cache_mem 64 MB
61 #cache_swap_low 80
62 #cache_swap_high 97
63 #cache_dir ufs /usr/local/squid/var/cache/squid 512 16 256
64 cache_effective_user squid ##緩存用戶squid
65 cache_effective_group squid ##緩存組squid
66 cache_peer 192.168.100.110 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
##節點服務器1最大訪問30,權重1,別名web1
67 cache_peer 192.168.100.120 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
68 cache_peer_domain web1 wb2 www.yun.com ##訪問yun.com匹配web1,
- 檢查squid相關配置,並初始化
squid -k parse ##檢查配置文件
squid –k rec ##重新加載配置文件
squid -zX ##初始化緩存目錄
- 修改防火牆規則
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ##允許3128端口
service iptables save ##保存規則
- 重啓服務
service squid restart
netstat -anpt | grep squid ##確認squid服務處於正常監聽狀態
tcp6 0 0 :::3128 :::* LISTEN 6699/(squid-1)
web1服務器配置
- 修改IP地址爲192.168.100.110/24
- 在web頁面插入相關內容
echo "this is test1 web" >> /var/www/html/index.html
- 重啓httpd服務
systemctl restart httpd
web2配置
- 修改IP地址爲192.168.100.120/24
- 在web頁面插入相關內容
echo "this is test2 web" >> /var/www/html/index.html
- 重啓httpd服務
systemctl restart httpd
客戶機配置
- 配置IP地址,啓動代理
- 進入c盤Windows/System32/drivers/etc目錄
- 修改客戶機host文件(需要切換到管理員)
驗證
- 通過客戶機訪問www.yun.com,發現以輪詢的方式顯示web界面。
- 點擊刷新變爲test2頁面