Squid代理伺服器應用
- 一、Squid 代理伺服器
-
- 1、代理的工作機制
- 2、Squid 代理的類型
- 二、安裝 Squid 服務
-
- 1、編譯安裝 Squid
- 2、修改 Squid 的配置檔案
- 3、Squid 的運作控制
- 4、建立 Squid 服務腳本
- 三、建構傳統代理伺服器
-
- 環境配置
- Squid-Server(192.168.28.10)
-
- 1、首先先編譯安裝squid,然後修改配置檔案
- 2、生産環境中還需要修改防火牆規則
- 客戶機的代理配置(192.168.28.15)
-
- 1、配置用戶端IP位址
- 2、打開浏覽器,配置代理功能
- Web1(192.168.28.20)
- 客戶機的代理配置(192.168.28.15)
-
- 檢測
- 檢視Web1通路日志的新增記錄(192.168.28.20)
- 四、建構透明代理伺服器
-
- 環境配置
- Web1(12.0.0.12)
- Squid伺服器配置(ens33、ens36)
- 客戶機測試(192.168.28.15)
-
- 檢視 Squid 通路日志的新增記錄
- 檢視 Web 通路日志的新增記錄,顯示的是由代理伺服器的外網口代替客戶機在通路
一、Squid 代理伺服器
Squid 主要提供緩存加速、應用層過濾控制的功能。
1、代理的工作機制
1、代替客戶機向網站請求資料,進而可以隐藏使用者的真實IP位址。
2、将獲得的網頁資料(靜态 Web 元素)儲存到緩存中并發送給客戶機,以便下次請求相同的資料時快速響應。
2、Squid 代理的類型
- 傳統代理:适用于Internet,需在客戶機指定代理伺服器的位址和端口。
- 透明代理:客戶機不需指定代理伺服器的位址和端口,而是通過預設路由、防火牆政策将Web通路重定向給代理伺服器處理。
- 反向代理:如果 Squid 反向代理伺服器中緩存了該請求的資源,則将該請求的資源直接傳回給用戶端;否則反向代理伺服器将向背景的 WEB 伺服器請求資源,然後将請求的應答傳回給用戶端,同時也将該應答緩存在本地,供下一個請求者使用。
二、安裝 Squid 服務
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1、編譯安裝 Squid
yum -y install gcc gcc-c++ make
把壓縮包squid-3.5.28.tar.gz放到/opt目錄下
cd /opt
tar zxvf squid-3.5.28.tar.gz
cd /opt/squid-3.5.28
./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 \
--disable-poll \
--enable-epoll \
--enable-gnuregex
#--------子產品解釋--------------------------------------------------
--prefix=/usr/local/squid #指定安裝目錄路徑
--sysconfdir=/etc #指定配置檔案路徑
--enable-arp-acl #MAC位址管控,防止用戶端使用ip欺騙
--enable-linux-netfilter #使用核心過濾
--enable-linux-tproxy #支援透明模式
--enable-async-io=100 #異步1o,提升存儲性能
--enable-err-language="Simplify_Chinese" #錯誤資訊的顯示語言
--enable-underscore #允許URL中有下劃線
--disable-poll \ #關閉預設使用的poll 模式
--enable-epoll \ #開啟epoll模式,提升性能
--enable-gnuregex #使用GNU正規表達式
#----------------------------------------------------------------
make && make install #編譯安裝,這裡可能需要較長的時間
ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #建立軟連接配接至路徑環境變量,便于系統識别squid
useradd -M -s /sbin/nologin squid #建立程式使用者squid,保證系統安全性
chown -R squid:squid /usr/local/squid/var/ #為/usr/local/squid/var目錄遞歸指定屬組和屬主
#/usr/local/squid/var/ 此目錄是用于存放緩存檔案
2、修改 Squid 的配置檔案
vim /etc/squid.conf
......
#---------56行,插入----------------
http_access allow all #放在 http_access deny all 之前,允許任意客戶機使用代理服務,控制規則自上而下比對
http_access deny all
http_port 3128 #用來指定代理服務監聽的位址和端口(預設的端口号為 3128)
#---------61行插入-----------------
cache_effective_user squid #添加,指定程式使用者,用來設定初始化、運作時緩存的賬号,否則啟動不成功
cache_effective_group squid #添加,指定賬号基本組
coredump_dir /usr/local/squid/var/cache/squid #指定緩存檔案目錄
3、Squid 的運作控制
- 檢查配置檔案文法是否正确
squid -k parse
- 啟動 Squid,第一次啟動squid服務時,會自動初始化緩存目錄
squid -z #-z 選項用來初始化緩存目錄
squid #啟動 squid 服務
netstat -anpt | grep "squid" #檢視squid服務是否開啟
4、建立 Squid 服務腳本
vim /etc/init.d/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
2345是預設自啟動級别,如是-代表任何級别都不自啟動;90是啟動優先級,25是停止優先級,優先級範圍是0-100,數字越大,優先級越低。
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on
#檢視squid服務在哪些級别中自啟
chkconfig --list squid
三、建構傳統代理伺服器
環境配置
主機 | 作業系統 | IP位址 | 軟體、安裝包、工具 |
---|---|---|---|
Squid-Server | CentOS7 | 192.168.28.10 | squid-3.5.28.tar.gz |
Web1 | CentOS7 | 192.168.28.20 | httpd |
客戶機 | Windows | 192.168.28.15 | ----- |
Squid-Server(192.168.28.10)
1、首先先編譯安裝squid,然後修改配置檔案
vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
#---------63行插入-----------------------------------------------
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB
#---------添加内容解釋------------------------------------------
cache_mem 64 MB #指定緩存功能所使用的記憶體空間大小,便于保持通路較頻繁的WEB對象,容量最好為4的倍數,機關為MB,建議設為實體記憶體的1/4
reply_body_max_size 10 MB #允許使用者下載下傳的最大檔案大小,以位元組為機關,當下載下傳超過指定大小的Web對象時,浏覽器的報錯頁面中會出現“請求或通路太大”的提示預設設定0表示不進行限制
maximum_object_size 4096 KB #允許儲存到緩存空間的最大對象大小,以KB為機關,超過大小限制的檔案将不被緩存,而是直接轉發給使用者
#-------------------------------------------------------------------
service squid restart
#或systemctl restart squid
netstat -antp | grep squid
2、生産環境中還需要修改防火牆規則
iptables -F #清空IP tables的規則
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #允許所有通過3128端口的tcp協定的入棧資料博愛通過
iptables -L INPUT #列出入站資料鍊裡的所有規則
客戶機的代理配置(192.168.28.15)
1、配置用戶端IP位址
2、打開浏覽器,配置代理功能
Web1(192.168.28.20)
systemctl stop firewalld.service
setenforce 0
yum -y install httpd
systemctl start httpd
netstat -natp | grep 80
客戶機的代理配置(192.168.28.15)
檢測
在浏覽器輸入Web伺服器IP位址通路,檢視Web伺服器通路日志,顯示的是由代理伺服器替客戶機在通路。
http://192.168.28.20
檢視Web1通路日志的新增記錄(192.168.28.20)
tail -f /var/log/httpd/access_log
四、建構透明代理伺服器
環境配置
主機 | 作業系統 | IP位址 | 服務、安裝包、工具 |
---|---|---|---|
Squid-Server | CentOS7 | ens33:192.168.28.10 、 ens37:12.0.0.1 | squid-3.5.28.tar.gz |
Web1 | CentOS7 | 12.0.0.12 | httpd |
客戶機 | Windows | 192.168.28.15 | ----- |
Web1(12.0.0.12)
先把網卡的IP位址改掉
systemctl stop firewalld.service
setenforce 0
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
ifconfig
yum -y install httpd
systemctl restart httpd.service
Squid伺服器配置(ens33、ens36)
關機,添加一塊網卡,開機,ifconfig檢視新增網卡名稱,編輯網卡配置檔案
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens33
IPADDR=192.168.28.10
NETMASK=255.255.255.0
#GATEWAY=192.168.28.2
#DNS1=192.168.28.2
vim ifcfg-ens36
NAME=ens36
#UUID=..... #把UUID注釋掉
DEVICE=ens36
IPADDR=12.0.0.1
NETMASK=255.255.255.0
#GATEWAY=192.168.28.2
#DNS1=192.168.28.2
systemctl restart network
ifconfig
vim /etc/squid.conf
60行修改添加提供内網服務的IP位址,和支援透明代理選項 transparent
......
http_access allow all
http_access deny all
http_port 192.168.28.10:3128 transparent
systemctl restart squid #重新開機服務
開啟路由轉發,實作本機中不同網段的位址轉發
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf #開啟IP轉發功能
sysctl -p #加載核心配置檔案
修改防火牆規則
iptables -F
iptables -t nat -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.28.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.28.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
客戶機測試(192.168.28.15)
關閉客戶機的浏覽器之前設定的代理伺服器的功能後通路 http://12.0.0.12
檢視 Squid 通路日志的新增記錄
tail -f /usr/local/squid/var/logs/access.log
Squid代理伺服器則是檢測到客戶機通路目标網站
檢視 Web 通路日志的新增記錄,顯示的是由代理伺服器的外網口代替客戶機在通路
tail -f /var/log/httpd/access_log
可以看到是代理伺服器外網口12.0.0.1通路的12.0.0.12