1. 程式人生 > >企業應用——構建Squid服務的傳統代理和透明代理

企業應用——構建Squid服務的傳統代理和透明代理

ice 安裝完成 初始 dev 關閉防火墻 ase tro 火墻 代理模式

=============Squid服務==============

Squid簡介:

Squid是一個高性能的代理緩存服務器,主要提供緩存加速和應用層過濾控制的功能。Squid支持FTP、gopher、HTTPS和HTTP協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。
代理的工作機制
當客戶機通過代理來請求web頁面時,指定的代理服務器會先檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則由代理服務器向Internet發送訪問請求,當獲得返回的Web頁面以後,將頁面數據保存到緩存中並發送給客戶機。

技術分享圖片


傳統代理:使用傳統代理的特點在於,客戶機的相關程序(如IE瀏覽器、qq聊天軟件等)必須指定代理服務器的地址、端口等基本信息。

技術分享圖片

-

透明代理:客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向給代理服務器處理。
技術分享圖片

============安裝Squid服務===============

一、 Squid 3.4.6源碼包

百度網盤鏈接:https://pan.baidu.com/s/198CbzyEFmh9MyVCdn1GKzA 密碼:9h6a

二、安裝步驟

Squid服務器操作:

1.環境安裝:

yum install gcc gcc-c++ make -y

2.解壓縮包:

tar zxvf squid-3.4.6.tar.gz -C /opt

3.編譯安裝squid

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

詳解如下
./configure --prefix=/usr/local/squid \ //編譯安裝時目錄設置為/usr/local/squid
--sysconfdir=/etc //單獨將配置文件修改到此目錄下
--enable-arp-acl //可以在規則中設置直接通過客戶端MAC進行管理,防止客戶端使用IP欺騙
--enable-linux-netfilter //使用內核過濾
--enable-linux-tproxy //支持透明模式
--enable-async-io=100 //異步I/O,提升存儲性能
--enable-err-language="Simplify_Chinese" //錯誤信息的顯示語言
--enable-underscore //允許URL中有下劃線
--enable-poll //使用Poll() 模式,提升性能
--enable-gnuregex // 使用GUN正則表達式

make && make install

4.安裝完成後創建鏈接文件、創建用戶和組。

ln -s /usr/local/squid/sbin/* /usr/local/sbin/

useradd -M -s /sbin/nologin squid

chown -R squid.squid /usr/local/squid/var/

5.Squid配置文件

vim /etc/squid.conf

找到下面這行,進行添加:

#And finally deny all other access to this proxy
http_access allow all                               #只添加這行,代表允許所有   
http_access deny all

找到下面這行,進行添加:

#Squid normally listens to port 3128
http_port 3128
cache_effective_user squid          #添加這行    代表指定程序用戶
cache_effective_group squid         #添加這行     代表指定賬號基本組

#包含了程序運行時的內存,寄存器狀態,堆棧指針,也可以認為是當時程序的狀態時生成一個儲存文件
coredump_dir /usr/local/squid/var/cache/squid

6.編輯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 -anpt | 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未啟動"
        fi
        ;;
restart)
        $0 stop &> /dev/null
                echo "正在關閉 squid..."
        $0 start &> /dev/null
                echo "正在啟動 squid..."
        ;;
        reload)
                $CMD -k reconfigure
        ;;
        check)
                $CMD -k parse
        ;;
        *)
                echo "請輸入正確參數{start|stop|reload|restart|check|status}"
        ;;
esac

編輯完腳本後保存退出,並賦予執行權限:

[root@localhost squid-3.4.6]# cd /etc/init.d/
[root@localhost init.d]# ls
functions  netconsole  network  README  squid
[root@localhost init.d]# chmod +x squid
[root@localhost init.d]# chkconfig --add squid 
[root@localhost init.d]# chkconfig --level 35 squid on

7.因為修改過配置文件,所以重新開啟Squid服務

service squid restart
squid的命令:
[root@localhost ~]# squid -k parse      #檢查配置文件語法,只要不出現error報錯,就沒有問題
[root@localhost ~]# squid -z       #初始化緩存目錄
[root@localhost ~]# squid          #啟動服務

=============傳統代理==============

一、傳統代理環境拓撲

1.一臺Centos 7 作為Squid服務器,ip:192.168.233.128
2.一臺Centos 7 作為提供web服務的http服務器,ip:192.168.233.6
3.一臺Windows 作為客戶端 ,ip:192.168.233.200
技術分享圖片

二、操作步驟

1.修改配置文件

vim /etc/squid.conf

找到下面的端口號,插入以下的內容

http_port 3128
cache_mem 64 MB         #指定緩存功能所使用的內存空間大小,便於保持訪問頻繁的web對象,容量最好為4的倍數,單位為MB,建議設為物理 內存的1/4
reply_body_max_size 10 MB        #允許用戶下載的最大文件大小,以字節為單位。默認設置為0表示不進行設置。
maximum_object_size 4096 KB      #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶

修改完成後保存退出

2.設置防火墻,以便訪問

[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

3.因為修改配置文件,所以需要重新啟動服務

[root@localhost ~]# service squid restart

三、驗證傳統代理

1)Centos 7 作為提供web服務的http服務器操作:

關閉防火墻,搭建並開啟web服務:

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd.service

2)Windows客戶端設置代理操作:

在Windows 系統中開啟瀏覽器
Internet選項--》連接--》局域網設置—— ip:squid服務器地址 端口:3128

技術分享圖片
設置完成後,在地址欄輸入訪問web服務器的地址
技術分享圖片

訪問成功後,我們來查看web服務器的日誌文件,是否是Squid服務器地址訪問的。

技術分享圖片
技術分享圖片

================透明代理================

一、透明代理環境拓撲

1.一臺Centos 7 作為Squid服務器,設置透明代理,
作為網卡,設置兩個網關地址:
(1)內網 ens33:192.168.130.1
(2) 外網 ens36:12.0.0.1
2.一臺Centos 7 作為內網端,ip:192.168.130.130【因為實驗,所以只使用一臺作為內網端】
3.一臺Windows 作為外網端,ip:12.0.0.12

原理圖如下:
技術分享圖片

二、操作步驟

1.一臺Centos 7 作為Squid服務器,設置透明代理,

作為網卡,設置兩個網關地址:
  (1)內網 ens33:192.168.130.1
  (2)  外網 ens36:12.0.0.1

技術分享圖片
因為squid服務器是作為網關的,所以需要開啟路由功能。
啟用路由功能:

[root@localhost ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

進行修改配置主配置文件:

 [root@localhost ~]# vim /etc/squid.conf

 http_port 192.168.130.1:3128 transparent      #修改    設置透明代理模式

技術分享圖片
修改完成後保存退出,並重啟squid服務:

[root@localhost ~]# service squid restart

設置防火墻的規則:

[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.130.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

[root@localhost ~]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.130.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

[root@localhost ~]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT 

2.一臺Centos 7 作為內部web服務器,ip:192.168.130.130

設置web服務地址IP
技術分享圖片
關閉防火墻,搭建並開啟web服務:

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y
[root@localhost ~]# systemctl start httpd.service

3.一臺Windows 作為外網端,ip:12.0.0.12,並去訪問Web服務器192.168.130.130

技術分享圖片
技術分享圖片

3.進入Web服務器,查詢http訪問日誌,確認是否是squid服務器訪問的

 [root@localhost ~]# tail /var/log/httpd/access_log 

技術分享圖片

由上圖可知是由Squid服務器的網關訪問的web網站,證明是透明代理模式。

企業應用——構建Squid服務的傳統代理和透明代理