天天看點

代理服務squid-----傳統模式與透明模式

Squid概述

代理服務squid-----傳統模式與透明模式
  • Squid是一個高性能的代理緩存internet資料的軟體,Squid通過接受人們需要下載下傳的目标(object)的請求并且适當地處理這些請求。即如果一個人想要下載下傳一些web頁面,他請求Squid為他取得這個頁面。Squid随之連接配接到遠端伺服器并向這個頁面送出請求。然後,squid顯式地聚集資料到用戶端,而且同時複制一份,當下一次有人需要同一頁面時,Squid可以簡單地從磁盤中讀到它,那樣資料就會迅速的傳輸到客戶機上。目前的Squid可以處理HTTP、FTP、SSL、WAIS等協定,但是不能處理POP、NNTP、RealAudio以及其他類型的東西

squid工作機制

  • 當客戶機通過squid代理去通路web頁面時,指定的代理伺服器會檢查自己的緩存,若是緩存中有客戶機需要的頁面,那麼squid伺服器将直接把緩存中頁面内容傳回給客戶機。如果緩存中沒有用戶端請求的頁面,那麼squid代理伺服器就會向internet發送通路請求,獲得傳回的web頁面後,将網頁的資料庫儲存到緩存中發送給客戶機
  • 由于客戶機的web通路請求實際上是squid代理伺服器來代替完成的,是以隐藏了使用者的真實IP位址,進而起到了一定的保護作用,此外,squid也可以針對要通路的目标、客戶機的位址、通路的時間段進行過濾控制
  • 根據實作的方式不同,基本可以分為傳統代理和透明代理兩種方式
  • 傳統代理:也就是普通的代理服務,需要用戶端在浏覽器、聊天工具等一些程式設定代理伺服器的位址和端口,然後才能使用代理來通路網絡,這種方式相比較而言比較麻煩,因為客戶機還需要手動指定代理伺服器,是以一般用于internet環境
  • 透明代理:與傳統代理實作的功能是一樣,差別在于客戶機不需要手動指定代理伺服器的位址和端口,而是通過靜态路由、防火牆政策将web通路重定向,實際上仍然交給代理伺服器來處理,重定向的過程完全是由squid伺服器進行的,是以對于客戶機來說,甚至不知道自己使用了squid代理服務,是以呢,我們稱之為透明模式。透明模式多用于區域網路環境,如在Linux網關中啟用透明代理,區域網路主機無需進行額外的設定就能享受更好的上網速度

搭建Squid傳統模式

實驗環境

分類 IP位址 系統 軟體包
squid 192.168.179.249 Centos7 squid-3.4.6.tar.gz
web服務 192.168.179.128 Centos7
用戶端 192.168.179.248 Centos7

Squid服務配置

//安裝環境依賴包
yum install gcc gcc-c++ -y

//解壓縮包
tar zxvf squid-3.4.6.tar.gz -C /opt/

//配置
cd /opt/squid-3.4.6

./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服務指令
ln -s /usr/local/squid/sbin/* /usr/local/sbin/

//建立使用者,無家目錄,不可登入系統
useradd -M -s /sbin/nologin squid

//更改屬主屬組
chown -R squid.squid /usr/local/squid/var

//修改主配置檔案
vim /etc/squid.conf

http_access allow all                     //注釋掉deny,添加此,允許所有通路該終端
cache_effective_user squid           //添加  指定程式使用者
cache_effective_group squid        //添加   指定賬戶基本組
coredupm_dir /usr/local/squid/var/cache/squid

//檢查配置檔案文法
squid -k parse

//初始化緩存目錄
squid -z

//啟動服務
squid

//建立腳本,便于service管理服務
cd /etc/init.d
vim 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
chmod +x squid
chkconfig --add squid


           
代理服務squid-----傳統模式與透明模式

squid傳統代理模式

vim /etc/squid.conf

http access allow all                 //允許所有客戶通路該終端  
http access deny all                 //拒絕所有客戶通路該終端
http port 3128
cache_mem 64 MB                        //指定緩仔功能所使用的記憶體空間大少。便于保特訪間較額繁的WEB對象,容量最好為4的倍數,機關
reply_body_max_size 10 MB         //允許使用者下我的最 大檔案大示,以位元組為機關。歡認設定0表示不進行限制
maximum_object_size 4096 KB    //允許儲存到緩存空間的最大對象大小,以KB為機關,超過大小限制的檔案将不被緩存,而是直接轉

//防火牆規則設定
iptables -F
iptables -t nat -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

//重新開機服務
service squid restart

//用戶端WEB服務
yum install httpd -y

//關閉防火牆
sysconfig stop firewalld.service
setenforce 0

//啟動服務
systemctl start httpd

//設定浏覽器手動代理伺服器:設定為squid IP位址,端口為3128
           
代理服務squid-----傳統模式與透明模式
代理服務squid-----傳統模式與透明模式
代理服務squid-----傳統模式與透明模式

從用戶端通路192.168.179.194(Squid代理)

代理服務squid-----傳統模式與透明模式

在web伺服器上檢視日志資訊

代理服務squid-----傳統模式與透明模式

搭建Squid的透明模式

配置雙網卡
ens33NAT模式

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
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
           
  • 重新開機網卡
代理服務squid-----傳統模式與透明模式
  • 配置路由轉發功能
vim /etc/sysctl.conf

net.ipv4.ip_forward=1
sysctl -p
           
  • 修改squid配置檔案
vim /etc/squid.conf

http_port 192.168.100.1:3128 transparent
           
  • 重新開機squid服務
代理服務squid-----傳統模式與透明模式
  • 配置防火牆規則
iptables -t nat -F
iptables -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
           
  • 配置WEB服務
yum install httpd -y

route add -net 192.168.100.0/24 gw 192.168.179.249     //添加靜态路由

systemctl stop firewalld.service 

setenforce 0
           
  • 配置用戶端網卡為僅主機模式
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="8cc20295-c5e2-4d15-bb50-bb6478794acf"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.100.11
NETMASK=255.255.255.0
GATEWAY=192.168.100.1
           
  • 驗證服務,客戶機通路WEB服務
代理服務squid-----傳統模式與透明模式
代理服務squid-----傳統模式與透明模式