內容要點:linux
1、Squid介紹c++
2、緩存代理git
3、手工編譯安裝、優化 Squidweb
4、搭建傳統代理ubuntu
5、設置透明代理vim
1、Squid介紹瀏覽器
(1)Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher、HTTPS和HTTP協議。和通常的代理緩存軟件不一樣,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理全部的客戶端請求。緩存
(2)Squid運行在什麼系統上?bash
Squid可運行在大多數Unix和OS/2版本的系統之上,已知的可工做的有:Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris服務器
(3)Squid的下載和獲取:
squid在諸多unix like系統上都有軟件庫的提供,好比在ubuntu可使用apt install squid進行安裝,也能夠到squid的官網直接下載二進制的編譯好的軟件包。
2、緩存代理
web 代理的工做機制:緩存網頁對象,減小重複請求。
一、當咱們客戶機經過squid代理去訪問web頁面時,指定的代理服務器會先檢查本身的緩存,如果緩存中有咱們客戶機須要的頁面,那麼squid服務器將直接把緩存中的頁面內容返回給客戶機,若是緩存中沒有客戶端請求的頁面,那麼squid代理服務器就會向internet發送訪問請求,得到返回的web頁面後,將網頁的數據保存到緩存中併發送給客戶機。
二、因爲客戶機的web訪問請求其實是squid代理服務器來代替完成的,因此隱藏了用戶的真實IP地址,從而起到必定的保護做用。
另外一方面,squid也能夠針對要訪問的目標、客戶機的地址、訪問的時間段進行過濾控制。
(1)代理的基本類型:
一、傳統代理:也就是普通的代理服務,須要咱們客戶端在瀏覽器、聊天工具等一些程序中設置代理服務器的地址和端口,而後才能使用代理來訪問網絡,這種方式相比較而言比較麻煩,由於客戶機還需手動指定代理服務器,因此通常用於Internet環境。
二、透明代理:與傳統代理實現的功能是同樣的,區別在於客戶機不須要手動指定代理服務器的地址和端口,而是經過默認路由、防火牆策略將web訪問重定向,實際上仍然交給代理服務器來處理,重定向的過程徹底是由squid服務器進行的,因此對於客戶機來講,甚至不知道本身使用了squid代理服務,所以呢,咱們稱之爲透明模式。
透明代理多用於局域網環境,如在Linux網關中啓用透明代理後,局域網主機無須進行額外設置就能享受更好的上網速度。
(2)使用代理的好處:
一、提升web訪問速度;
二、隱藏客戶機的真實 IP地址
3、手工編譯安裝、優化 Squid
(1)解壓縮包:
tar zxvf squid-3.4.6.tar.gz -C /opt/
(2)安裝編譯工具:
yum install gcc gcc-c++ make -y
(3)編譯:
./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
(4)安裝
install && make install
(5)方便管理,能夠建立軟鏈接
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
(6)建立用戶 squid,配置權限
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/ //受權
(7)修改配置文件
vim /etc/squid.conf 添加如下代碼: http_access allow all cache_effective_user squid //添加 指定程序用戶 cache_effective_group squid //添加 指定帳戶基本組
(8)檢查
squid -k parse //檢查配置文件語法 squid -z //初始化緩存目錄 squid //啓動服務
檢查端口查看服務是否正常開啓:
(9)編寫啓動腳本:
一、編寫腳本 目錄:/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 //便於service識別 chkconfig --level 35 squid on //設置開機自啓動
三、關閉、開啓服務
service squid stop service squid start
4、搭建傳統代理
角色 | IP地址 |
Web服務器 | 192.168.220.136 |
代理服務器 | 192.168.220.131 |
客戶機 | 192.168.220.129 |
第一步:編輯配置文件 /etc/squid.conf
cache_mem 64 MB //指定緩存功能所使用的內存空間大小 reply_body_max_size 10 MB //容許用戶下載的最大文件大小 maximum_object_size 4096 KB //容許保存到緩存空間的最大對象大小
第二步:制定防火牆規則
iptables -F //清除全部規則來暫時中止防火牆 setenforce 0 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //容許目標端口3128作轉發
第三步:客戶機瀏覽器設置代理服務
(1)打開瀏覽器 → 工具 → Internet 選項 → 鏈接 → 局域網設置
(2)瀏覽器訪問 web服務器的IP地址,多刷新幾回,因爲咱們設置了代理服務,其實訪問網站這個請求,是代理服務器幫咱們完成的,爲了驗證,能夠查看 web服務器的日誌文件,就能知道訪問的 ip地址是客戶機仍是代理服務器的。
查看 /etc/httpd/logs 中的日誌文件,access_log ,如下是部分截圖:
能夠看出都是由 代理服務器過來訪問網頁的,而非客戶機,這也起到了隱藏客戶機真實 IP地址的目的。
5、設置透明代理
角色 | IP地址 |
squid 代理服務器 | 內網:192.168.100.1;外網:12.0.0.1 |
web服務器 | 12.0.0.12 |
客戶機 | 192.168.100.50 |
第一步:用戶機瀏覽器取消局域網設置
第二步:配置代理服務器 squid
(1)開啓路由轉發功能:
echo "1" > /proc/sys/net/ipv4/ip_forward
(2)編輯配置文件 /etc/squid.conf
修改監聽地址:
http_port 192.168.100.1:3128 transparent
(3)添加防火牆策略:
iptables -F iptables -t nat -F //從新設置防火牆 iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 //端口重定向到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 //開發3128端口
(4)重啓服務:
service squid restart
第三步:驗證
一、在客戶機瀏覽器上訪問 web 服務器網站
二、在 web 服務器的日誌文件,查看是哪一個IP地址來訪的:
vim /etc/httpd/logs/access_log
能夠看出是 squid代理服務器的外網卡的ip地址。
透明代理設置成功。