Squid代理服务器应用及配置(图文详解)
Squid緩存代理
- Squid代理服務器
- 代理的工作機制
- 代理的基本類型
- 傳統代理
- 透明代理
- 反向代理
- 使用代理的好處
- 實驗
- 環境部署
- squid代理安裝
- 關閉防護墻
- 安裝依賴環境
- 編譯安裝Squid
- 腳本解釋
- 創建軟連接及用戶,改組
- 修改Squid的配置文件
- squid檢查啟動
- 編寫Squid服務腳本
- 服務啟動,檢查
- 搭建傳統代理
- 環境部署
- squid服務器
- 重啟squid服務
- 修改防火墻規則
- Web1配置
- 關閉防火墻
- 安裝httpd軟件包
- 客戶端配置(添加代理)
- 查看網絡是否通暢
- 谷歌瀏覽器設置代理
- 使用win10訪問web1IP
- squid服務器查看訪問日志信息
- web1服務器查看訪問日志信息
- 透明代理
- 環境部署
- Squid服務器配置
- 添加網卡并修改
- 配置squid服務器
- 重啟服務并查看
- 開啟路由轉發
- 添加防火墻規則
- web1服務器添加一條靜態路由
- 訪問web1服務器
- ACL訪問控制
- 定義訪問控制列表
- ACL訪問控制配置方法一
- 驗證
- ACL訪問控制配置方法二
- 啟動對象列表管理
- 驗證
- Squid 日志分析
- 安裝圖像處理軟件包
- 壓縮包上傳到/opt目錄下解壓編譯安裝
- 修改sarg配置文件
- 添加不計入站點文件,添加的域名將不被顯示在排序中
- sarg命令
- 驗證
- 計劃性日志添加
- 反向代理
- 工作機制
- 反向代理實操
- 環境部署
- 開啟防火墻、本地關閉HTTPD
- 修改squid配置文件
- 代碼解釋
- 啟動squid服務
- 后端web2節點服務器設置
- 節點1 (web1)
- 節點2(web2)
- 客戶機的域名映射配置
- 客戶機的代理配置
Squid代理服務器
Squid主要提供緩存加速、應用層過濾控制的功能。
代理的工作機制
代替客戶機向網站請求數據,從而可以隱藏用戶的真實IP地址。
將獲得的網頁數據(靜態Web元素)保存到緩存中并發送給客戶機,以便下次請求相同的數據時快速響應。
代理的基本類型
傳統代理
適用于Internet,需在客戶機指定代理服務器的地址和端口。
透明代理
客戶機不需指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向給代理服務器處理。
反向代理
如果Squid反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將
向后臺的WEB服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存(靜態)在本地,供下一個請求者使用。
使用代理的好處
1.提高Web訪問速度
2.隱藏客戶機的真實IP地址
實驗
環境部署
| Squid服務器 | CENTOS 7 | 192.168.154.30 | squid-3.5.28.tar.gz |
| web1服務器 | CENTOS 7 | 192.168.154.40 | httpd |
| web2服務器 | CENTOS 7 | 192.168.154.50 | httpd |
| 客戶機Win10 | Windows 10 | 192.168.154.128 |
squid代理安裝
關閉防護墻
systemctl stop firewalld systemctl disable firewalld setenforce 0安裝依賴環境
yum -y install gcc gcc-c++ make編譯安裝Squid
上傳軟件包squid-3.5.28.tar到/opt目錄下cd /opt tar zxvf squid-3.5.28.tar.gzcd 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 \ --enable-poll \ --enable-gnuregex make && make install
腳本解釋
./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/ #改變目錄屬主修改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 #指定緩存文件目錄###_上述腳本解釋
visible hostname 192.168.226.129
設置squid主機名或者ip地址
cache_mem 64 MB
cache_swap_low 80
cache_swap_high 97
cache_dir_ufs /usr/local/squid/var/cache/squid 512 16 256
##配置硬盤緩存,打開#. 緩存目錄512M,其中一級目錄16個,二級256個
cache_effective_user squid
cache_effective_group squid
squid檢查啟動
squid -k parse ##檢查配置文件squid -k rec ##重新加載配置文件 squid -zX ##初始化緩存目錄 squid ##啟動squid服務 netstat -anpt | grep squid ##確認squid服務處于正常監聽狀態
編寫Squid服務腳本
vim /etc/init.d/squid #!/bin/bash #chkconfig: 35 90 25 #config:/etc/squid.conf #pidfile:/usr/local/squid/var/run/squid.pid # Description: Squid - Internet Object Cache PID="/usr/local/squid/var/run/squid.pid" CONF="/etc/squid.conf" CMD="/usr/local/squid/sbin/squid" case "$1" instart)netstat -natp | grep squid &> /dev/nullif [ $? -eq 0 ]thenecho "squid is running"elseecho "正在啟動 squid..."$CMDfi;;stop)$CMD -k kill &> /dev/nullrm -rf $PID &> /dev/null;;status)[ -f $PID ] &> /dev/nullif [ $? -eq 0 ]thennetstat -natp | grep squidelseecho "squid is not running"fi;; restart)$0 stop &>/dev/nullecho "正在關閉Squid.. . "$0 start &>/dev/nullecho "正在啟動Squid...";; reload)$CMD -k reconfigure;; check)$CMD -k parse;; *) echo "用法:{start|stop|restart|reload|check|status}" esac服務啟動,檢查
chmod +x /etc/init.d/squid chkconfig --add squid chkconfig squid on chkconfig --list squid #查看squid服務在哪些級別中自啟 service squid restart ##測試正常
搭建傳統代理
案例:如上圖所示,在服務器B.上構建Squid代理服務器,允許客戶機指定squid代理服務器作為Web代理
訪問網站服務器,但禁止通過代理下載超過10MB的文件,超過4MB的文件不進行緩存
環境部署
| squid-server | centos 7 | 192.168.154.30 | squid-3.5.28.tar.gz |
| web | centos 7 | 192.168.154.40 | httpd |
| 客戶機 | windows 10 | 192.168.154.128 |
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 ---------------解釋--------------------------- #指定緩存功能所使用的內存空間大小,便于保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4reply_body_max_size 10 MB ---------------解釋--------------------------- #允許用戶下載的最大文件大小,以字節為單位,當下載超過指定大小的web對象時,瀏覽器的報錯頁面中會出現“請求或訪問太大”的提示默認設置0表示不進行限制maximum_object_size 4096 KB ---------------解釋--------------------------- #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶重啟squid服務
service squid restart 或 systemctl restart squid修改防火墻規則
iptables -F iptables -I INPUT -p tcp --dport 3128 -j ACCEPTWeb1配置
關閉防火墻
systemctl stop firewalld.service systemctl enable firewalld.service setenforce 0安裝httpd軟件包
yum -y install httpd systemctl start httpd netstat -natp| grep 80客戶端配置(添加代理)
查看網絡是否通暢
ping 192.168.154.30 ping 192.168.154.40谷歌瀏覽器設置代理
設置–》高級–》系統–》打開代理設置–》設置代理
使用win10訪問web1IP
squid服務器查看訪問日志信息
tail -f /usr/local/squid/var/logs/access.logweb1服務器查看訪問日志信息
tail -f /var/log/httpd/access_log透明代理
環境部署
| squid服務器 | centos 7 | 192.168.154.30 | squid-3.5.28.tar.gz |
| web服務器 | centos 7 | 192.168.154.30 | httpd |
| 客戶機 | windows 10 | 192.168.154.128 |
Squid服務器配置
添加網卡并修改
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens37 vim ifcfg-ens37 systemctl restart network配置squid服務器
#60行修改添加提供內網服務的IP地址,和支持透明代理選項transparent
vim /etc/squid.conf http_access allow all http_access deny allhttp_port 12.0.0.1:3128 transparent重啟服務并查看
systemctl restart squid netstat -natp | grep squid開啟路由轉發
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 或 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p添加防火墻規則
將來源為12.0.0.0網段:80/443端口的流量重定向到3128端口
iptables -F iptables -t nat -Fiptables -t nat -I PREROUTING -i ens37 -s 12.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 iptables -t nat -I PREROUTING -i ens37 -s 12.0.0.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #若進行重啟,則需要配置以下規則 iptables -I INPUT -p tcp --dport 3128 -j ACCEPTiptables -t nat -nvL iptables -nvLweb1服務器添加一條靜態路由
route add -net 12.0.0.0/24 gw 192.168.154.30訪問web1服務器
客戶端關閉代理,修改win10地址為12.0.0.0網段
ACL訪問控制
在配置文件squid.conf中,ACL訪問控制通過以下兩個步驟來實現:
使用acl配置項定義需要控制的條件;
通過httpaccess配置項對已定義的列表做"允許”或“拒絕”訪問的控制。
定義訪問控制列表
格式
acl列表 名稱 列表類型 列表內容
| 列表名 | 名稱自定義,相當于給acl起個名字 |
| 列表類型 | 必須使用squid預定義的值,對應不同類別的控制條件 |
| 列表內容 | 是要控制的具體對象,不同類型的列表所對應的內容也不一樣,可以有多個值(以空格為分隔,為“或"的關系) |
ACL訪問控制配置方法一
vim /etc/squid.conf acl localhost src 12.0.0.12/24 #源地址為12.0.0.12 acl MYLAN src 12.0.0.0/24 #客戶機網段 acl destinationhost dst 12.0.0.1/32 #目標地址為12.0.0.1 acl MC20 maxconn 20 #最大并發連接20 acl PORT port 21 #目標端口21 acl DMBLOCK dstdomain.qq.com #目標域,匹配域內所有站點 acl BURL url_regex -i ^rtsp://^emule:// #以rtsp://. emule://開頭的URL,-i表示忽略大小寫 acl PURL urlpath_regex -i \.mp3$\.mp4$\.rmvb$ #以.mp3、.mp4、.rmvb結尾的URL路徑 acl WORKTIME time MTWHF 08:30-17:30 #時間為周一至周五8:30~17:30,"MTWHF"為每個星期的英文首字母第一條插入: http_access deny localhost驗證
ACL訪問控制配置方法二
啟動對象列表管理
mkdir /etc/squid vim /etc/squid/dest.list 192.168.154.40/24 #目標服務器IP 192.168.154.0/24 #任意需要的網段 vim /etc/squid.conf acl destinationhost_dst "/etc/squid/dest.list" #調用指定文件中的列表內容 http_access deny (或allow) destinationhost #注意,如果是拒絕列表,需要放在http_access allow all前面 systemctl restart squid
驗證
Squid 日志分析
sarg ( Squid Analysis ReportGenerator),是一款squid日志分析工具,采用HTML格式,詳細列出每一位用戶訪問Internet的站點信息、時間占用信息、排名、連接次數、訪問量等
安裝圖像處理軟件包
yum install -y gd gd-devel pcre-devel mkdir /usr/local/sarg壓縮包上傳到/opt目錄下解壓編譯安裝
cd /opt tar zxvf sarg-2.3.7.tar.gz cd /opt/sarg-2.3.7 ./configure --prefix=/usr/local/sarg \ --sysconfdir=/etc/sarg \ #配置文件目錄,默認是/usr/loca/etc --enable-extraprotection #額外安全防護./configure --prefix=/usr/local/sarg \ --sysconfdir=/etc/sarg \ --enable-extraprotection make && make install
修改sarg配置文件
vim /etc/sarg/sarg.conf --7行--取消注釋 access_log /usr/local/squid/var/logs/access.log #指定訪問日志文件 -- 25行--取消注釋 title "Squid User Access Reports" #網頁標題 --120行--取消注釋,修改 output_dir /var/www/html/sarg #報告輸出目錄 --178行--取消注釋 user_ip no #使用用戶名·顯示 --184行--取消注釋,修改 topuser_sort_field connect reverse #top排序中,指定連接次數采用降序排列,升序是normal --190行--取消注釋,修改 user_sort_field connect reverse #對于用戶訪問記錄,連接次數按降序排序 --206行--取消注釋,修改 exclude_hosts /usr/local/sarg/noreport #指定不計入排序的站點列表的文件 --257行--取消注釋 overwrite_report no #同名同日期的日志是否覆蓋 --289行--取消注釋,修改 mail_utility mailq.postfix #發送郵件報告命令 --434行--取消注釋, 修改 charset UTF-8 #指定字符集UTF-8 -518行--取消注釋 weekdays 0-6 #top排行的星期周期 --525行--取消注釋 hours 0-23 #top排行的時間周期 --633行--取消注釋 www_document root /var/www/html #指定網頁根目錄
添加不計入站點文件,添加的域名將不被顯示在排序中
touch /usr/local/sarg/noreport ln -s /usr/local/sarg/bin/sarg /usr/local/bin/sarg命令
sarg --help #獲取幫助 #運行 sarg #啟動一次記錄驗證
yum install httpd -y systemctl start httpd在squid服務器上使用瀏覽器訪問http://192.168.154.30/squid-reports/ #查看sarg報告網頁。 /sarg
計劃性日志添加
date -s #添加計劃任務,執行每天生成報告vim /usr/local/sarg/report.sh #/bin/bash #Get current date TODAY=$(date +%d/%m/%Y) #Get one week ago today YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y) /usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null exit 0chmod +x /usr/local/sarg/report.sh crontab -e 0 0 * * * /usr/1ocal/sarg/report.sh
反向代理
如果Squid反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將向后臺的Web服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地
,供下一個請求者使用。
工作機制
1.緩存網頁對象,減少重復請求
2.將互聯網請求輪詢或按權重分配到內網web服務器
3.代理用戶請求,避免用戶直接訪問Web服務器,提高安全
反向代理實操
環境部署
| Squid服務器 | CENTOS 7 | 192.168.154.30 | squid-3.5.28.tar.gz |
| web1服務器 | CENTOS 7 | 192.168.154.40 | httpd |
| web2服務器 | CENTOS 7 | 192.168.154.50 | httpd |
| 客戶機 | Windows 10 | 192.168.154.128 |
開啟防火墻、本地關閉HTTPD
systemctl stop firewalld systemctl stop httpd iptables -F iptables -t nat -F iptables -I INPUT -p tcp --dport 3128 -j ACCEPT修改squid配置文件
vim /etc/squid.conf 64行--修改,插入------- http_port 192.168.154.30:80 accel vhost vport cache_peer 192.168.154.40 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 cache_peer 192.168.154.50 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 cache_peer_domain web1 web2 www.sun.com #表示對www.sun.com的請求squid向192.168.154.40和192.168.154.50的80端口發出請求 http_port 80 accel vhost vport #squid從一個緩存變成了一個Web服務器反向代理加速模式,這個時候squid在80端口監聽請求,同時和web server的請求端口(vhostvport)綁定,這個時候請求到了squid, squid是不用轉發請求的,而是直接要么從緩存中拿數據要么向綁定的端口直接請求數據。代碼解釋
| accel | 反向代理加速模式 |
| vhost | 支持域名或主機名來表示代理節點 |
| vport | 支持IP和端口來表示代理節點 |
| parent | 代表為父節點,上下關系,非平級關系 |
| 80 | 代理內部web服務器的80端口 |
| 0 | 沒有使用icp,表示就一臺squid服務器 |
| no-query | 不做查詢操作,直接獲取數據 |
| oriqinserver | 指定是源服務器 |
| round-robin | 指定squid通過輪詢方式將請求分發到其中一臺父節點 |
| max connn | 指定最大連接數 |
| weight | 指定權重 |
| name | 設置別名 |
啟動squid服務
systemctl stop httpd service squid reload后端web2節點服務器設置
yum install -y httpd systemctl start httpd節點1 (web1)
echo "this is web1" >> /var/www/html/index.html節點2(web2)
echo "this is web2" >> /var/www/html/index.html客戶機的域名映射配置
修改C:\Windows\System32\drivers\etc\hosts 文件
194.168.154.30 www.sun.com
客戶機的代理配置
打開瀏覽器,工具–>Internet選項–>連接–>局域網設置–>開啟代理服務器(地址: Squid服務器IP地址,端口: 80)
瀏覽器訪問http://www.sun.com
總結
以上是生活随笔為你收集整理的Squid代理服务器应用及配置(图文详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM GCC浮点相关总结
- 下一篇: 点点点运算符