目錄linux
緩存代理概述
c++
代理工做機制web
代理基本類型正則表達式
正向代理實戰vim
squid簡介windows
Squid做爲應用層的服務軟件,主要提供緩存加速和應用層過濾控制功能。緩存
代理工做機制bash
(1)Squid服務器中有緩存服務器
當客戶機經過代理來請求Web頁面時,指定的代理服務器會先檢查本身的緩存,若是緩存中已經有客戶機須要的頁面,網絡
則直接將緩存中的頁面內容反饋給客戶機
(2)Squid服務器中沒有緩存
若是緩存中沒有客戶機要訪問的頁面,則由代理服務器向Internet發送訪問請求,當得到返回的Web頁面之後,
將網頁數據保存到緩存中併發送給客戶機
代理基本類型
正向代理
某臺電腦經過一臺服務器來上Internet網的方式,其中這臺電腦就叫客戶機,這臺服務器就叫正向代理服務器也就是
一般所說的代理服務器,網站那裏不能獲得你的真實ip地址。
(1)傳統模式
首先必須在客戶機上手動設置代理服務器的地址和端口,而後才能使用代理服務來訪問網絡。對於網頁瀏覽,
訪問網站時域名解析的請求也會發給指定的代理服務器。
(2)透明模式
提供與傳統模式相同的功能和服務,區別在於不須要指定代理服務器的地址和端口而是經過默認路由、
防火牆策略將web訪問重定向,實際上仍然交給代理服務器處理。
反向代理
網站經過一臺服務器發佈到公網,供用戶訪問。用戶直接訪問那臺反向代理服務器,而後經過那臺服務器訪問到網站,
用戶沒法獲得網站的真實IP地址。
正向代理實戰
實驗安裝包:
連接:https://pan.baidu.com/s/1vQyPUzmi2KBrMQTTZBAkjw 密碼:lob4
實驗過程:
1、squid的編譯安裝及運行
(1)手工編譯安裝
一、安裝編譯環境
yum install gcc gcc-c++ make -y
二、解壓squid包
tar zxf squid-3.4.6 -C /opt
三、手工編譯
cd /opt/squid-3.4.6
./configure --prefix=/usr/local/squid \ #指定安裝路徑
--sysconfdir=/etc \ #配置地址
--enable-arp-acl \ #MAC地址管控
--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 #支持正則表達式
make && make install
(2)優化squid
四、建立軟鏈接
ln -s /usr/local/squid/sbin/* /usr/local/sbin #使系統可直接識別命令
五、建立管理用戶squid
useradd -M -s /sbin/nologin squid
六、修改目錄權限
chown -R squid.squid /usr/local/squid/var/
(3)squid配置文件
七、修改配置文件
vim /etc/squid.conf
(4)squid運行控制
八、squid服務啓動
squid -k parse #檢查配置文件語法
squid -z #初始化緩存目錄
squid #啓動服務
補充:此外,能夠編寫squid啓動腳本進行控制
vim /etc/init.d/squid
#!/bin/bash
#chkconfig:2345 90 25
PID="/usr/local/squid/var/run/squid.pid" #pid文件位置
CONF="/etc/squid.conf" #配置文件位置
CMD="/usr/local/squid/sbin/squid" #命令文件位置
case "$1" in
start)
netstat -ntap | grep squid &>/dev/null
if [ $? -eq 0 ]
then
echo "squid is runing"
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 -ntap | 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 /etc/init.d/squid
chkconfig --add squid #可使用service命令操做
chkconfig --level 35 squid on
2、傳統代理:(拓撲以下)
實驗環境:
主 機 | 操做系統 | IP地址 | 角色 |
web服務器 | CentOS-7-x86_64 | 192.168.37.130 | http網站服務 |
squid代理服務器 | CentOS-7-x86_64 | 192.168.37.128 | 緩存代理服務 |
客戶機client | windows7 | 192.168.37.100 | 結果測試 |
(1)配置squid代理服務器
一、修改squid配置文件
vim /etc/squid.conf
二、制定防火牆策略,重載squid服務
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #指定端口3128容許轉發
service squid restart
(2)web服務器:搭建httpd網頁服務
yum install httpd -y
systemctl stop firewalld.service
setenforce 0
systemctl start httpd.service
(3)客戶機測試
方式一:直接訪問web服務器IP地址:在/etc/httpd/logs/access_log 日誌中查看
http://192.168.37.130
vim /etc/httpd/logs/access_log
方式二:設置代理服務,再次訪問
工具--Internet--鏈接--局域網設置--代理服務器打勾--輸入IP、端口
vim /etc/httpd/logs/access_log
傳統代理實驗部分完成!
3、透明代理(拓撲以下)
實驗環境:
主 機 | 操做系統 | IP地址 | 角色 |
web服務器 | CentOS-7-x86_64 | 12.0.0.12 | http網站服務 |
squid代理服務器 | CentOS-7-x86_64 | ens33:192.168.100.1 ens36:12.0.0.1 |
緩存代理服務(做網關) |
客戶機client | windows7 | 192.168.100.10 | 結果測試 |
(1)squid服務器配置雙網卡,squid做網關
一、 squid的IP:
web服務器IP:
clientIP:
二、開啓路由模式
echo "1" > /proc/sys/net/ipv4/ip_forward #開啓路由,可轉發
(2)配置squid支持透明模式
vim /etc/squid.conf
(3)設置防火牆策略
清空防火牆規則
iptables -F
iptables -t nat -F
setenforce 0
對防火牆進行重定向操做,將訪問本機的80、443端口重定向到3128端口
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
(4)驗證透明代理
http://12.0.0.12
vim /etc/httpd/logs/access_log
透明代理實驗部分完成!