一、suqid的介紹
1.1、squid是什么?
Squid 是一個高性能的http代理服務器和web緩存服務器,可以很好的實現HTTP和FTP以及DNS查詢、SSL等應用的緩存代理。
-
1、代理用戶向web服務器請求數據並進行緩存,可以過濾流量幫助網絡安全。
-
2、可以作為代理服務器鏈中的一環,向上級代理轉發數據或直接連接互聯網。
-
3、可以用在局域網中,使局域網用戶通過代理上網。
-
4、可以將數據緩存在內存中,同時也緩存DNS查詢的結果,還支持非模塊化的DNS查詢,對失敗的請求進行消極緩存。
-
5、Squid支持SSL,支持ACL訪問控制。
Web代理的工作機制
- 緩存網頁對象,減少重復請求
1.2、squid的優勢
- 1、提高客戶端訪問速度。
- 2、隱蔽內部主機的ip地址。
- 3、部署簡單,可以實現訪問控制。
1.3、squid的作用
- 1、代理上網 (傳統代理,透明代理)
- 2、網站靜態頁面緩存加速(反向代理)
二、squid的代理類型
-
1、傳統代理又叫做正向代理,適用於Internet,需明確指定服務端。
-
2、透明代理,客戶機不需要指定代理服務器的地址和端口,而是通過默認路由、防火牆策略將Web訪問重定向給代理服務器處理
-
3、反向代理
三、squid傳統代理的部署
傳統代理模式
- 客戶端必須在自己的瀏覽器里指定服務器的ip地址和監聽的端口號,才能通過squid代理服務器**上網。
3.1、 案例介紹
如上圖所示,在服務器B上構建Squid代理服務器,允許客戶機指定squid代理服務器作為Web代理,訪問網站服務器,但禁止通過代理下載超過10MB的文件,超過4MB的文件不進行緩存。
- 環境介紹
主機 | 系統 | IP地址 | 主要軟件 |
---|---|---|---|
squid代理服務器 | CentoS7.6 | 20.0.0.10 | squid-3.5.27.tar.gz |
WEB服務器 | CentoS7.6 | 20.0.0.20 | Apache |
客戶機 | win10 | 20.0.0.30 | 自帶的瀏覽器 |
先修改主機名,方便實驗效果
[root@server1 ~]# hostnamectl set-hostname squid [root@server1 ~]# bash [root@squid ~]#
[root@server2 ~]# hostnamectl set-hostname web [root@server2 ~]# bash [root@web ~]#
3.2、部署過程
1、在squid服務器部署squid服務
1、解壓squid的安裝包 tar zxvf squid-3.4.6.tar.gz -C /opt/ cd /opt/squid-3.4.6/ #先安裝編譯包 yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel perl #配置編譯 ./configure --prefix=/usr/local/squid \ ##自定義安裝路徑 --sysconfdir=/etc \ ##單獨將配置文件修改到/etc目錄下 --enable-arp-acl \ ##可在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 ##支持GNU正則表達式 make && make install #創建鏈接文件,優化路徑 ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #創建程序用戶、組 useradd -M -s /sbin/nologin squid #改變目錄屬主 chown -R squid.squid /usr/local/squid/var/
2、修改配置文件,編寫腳本優化服務啟動項
vim /etc/squid.conf //增添下句並注釋deny http_access allow all #http_access deny all //在端口port下增添兩行代碼 http_port 3128 cache_effective_user squid cache_effective_group squid coredump_dir /usr/local/squid/var/cache/squid squid -k parse #檢查配置文件語法 squid –k rec ##重新加載配置文件 squid -z #初始化緩存目錄 squid #啟動服務 netstat -ntap | grep 3128 #查看服務是否啟動 //編寫優化腳本 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 chkconfig --level 35 squid on #設置為開機自啟動 service squid stop service squid start netstat -ntap | grep 3128
3、配置squid傳統模式
vim /etc/squid.conf http_port 3128 cache_mem 64 MB #內存空間大小 reply_body_max_size 10 MB #允許下載最大文件大小 maximum_object_size 4096 KB #允許保存緩存的空間最大對象大小 http_access deny all #前面兩行需要放在這行之上才生效 iptables -F #清空防火牆規則 iptables -t nat -F iptables -I INPUT -p tcp --dport 3218 -j ACCEPT #-I:插入input鏈 -p:協議 允許3128端口訪問外網的WEB服務器 //重新加載squid服務 service squid reload netstat -ntap | grep 3128
4、配置web服務器
[root@Web ~]# systemctl stop firewalld [root@Web ~]# setenforce 0 [root@Web ~]# yum -y install httpd
5、驗證
看客戶機能否成功訪問Apache首頁
查看日志,還是客戶自身的IP
設置Squid代理,查看來訪IP變化
1、先清除瀏覽器緩存
2、在瀏覽器中設置代理
再次訪問后查看日志
成功變成代理ip