CentOS上構建squid傳統代理,透明代理(squid3.4.6)
阿新 • • 發佈:2018-07-24
src 存放位置 pid run regex img rest roc 客戶端設置 1.1 squid服務基礎
1.1.1 緩存代理概述
1、代理的工作機制
當客戶機通過代理來請求Web頁面時,指定的代理服務器會先檢查自己的緩存,如果緩存中已經有客戶機需要訪問的頁面,則直接將緩存中的頁面內容反饋給客戶機;如果緩存中沒有客戶機需要訪問的頁面,則由代理服務器向Internet發送訪問請求,當獲得返回的Web頁面以後,將網頁數據保存到緩存中並發送給客戶機,如圖所示。
2、代理的基本類型
根據實現的方式不同,代理服務可分為傳統代理和透明代理兩種常見的代理服務。
- 傳統代理:也就是普通的代理服務,首先必須在客戶機的瀏覽器、QQ聊天工具、下載軟件等程序中手動設置代理服務器的地址和端口,然後才能使用代理服務來訪問網絡。對於網頁瀏覽器,訪問網站時的域名解析請求也會發送給指定的代理服務器。
- 透明代理:提供與傳統代理相同的功能和服務,其區別在於客戶機不需要指定代理,服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向,實際上仍然交給代理服務器來處理。重定向的過程對客戶機來說是“透明”的,用戶甚至並不知道自己在使用代理服務,所以稱為“透明代理”。使用透明代理時,網頁瀏覽器訪問網站時的域名解析請求將優先發給DNS服務器。
在實際應用中,傳統代理多見於Internet環境,如為QQ程序使用代理可以隱藏本機真實IP地址,為下載工具使用多個代理可以規避服務器的並發連接限制。而透明代理多見於局域網環境,如在Linux網關中啟用透明代理後,局域網主機無需進行額外的設置就可以享受更好的上網速度。
1.1.2 手工編譯安裝squid
1、解壓squid軟件包
tar zxvf squid-3.4.6.tar.gz -C /opt/
2、轉到解壓後的目錄下配置並安裝
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 make && make install
3、創建軟連接,創建管理用戶,修改配置文件,
ln -s /usr/local/squid/sbin/* /usr/local/sbin/ //創建軟連接
useradd -M -s /sbin/nologin squid //創建管理用戶
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
cache_effective_user squid #添加 指定程序用戶
cache_effective_group squid #添加 指定賬號基本組
4、初始化緩存目錄
squid -z //初始化緩存目錄
5、編輯啟動腳本
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 //開機自啟動
6、開啟服務
service squid start
1.2 構建代理服務器
1.2.1 傳統代理
實驗環境
1、web服務器上安裝httpd服務並開啟,關閉防火墻
yum install -y httpd
systemctl stop firewalld.service
setenforce 0
systemctl start httpd
2、squid服務器上修改配置文件
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
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為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶
3、設置防火墻策略
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
4、重啟squid服務
service squid restart
5、客戶端訪問測試
客戶端先不設置代理直接訪問web服務器,查看web服務器的日誌文件可知,是客戶端的IP地址進行訪問的
web服務器日誌存放位置
cd /etc/httpd/logs //日誌存放位置
vim access_log
客戶端設置代理
瀏覽器中Internet選項---》連接----》局域網設置----ip:squid服務器地址 端口:3128
再進行訪問之後查看web服務器日誌文件可知是由代理服務器訪問的web服務器
1.2.2 透明代理
實驗環境
1、squid服務器配置雙網卡
2、開啟路由轉發,清空防火墻規則,關閉安全功能
echo "1" > /proc/sys/net/ipv4/ip_forward //開啟路由轉發
iptables -F
iptables -t nat -F
setenforce 0
3、配置squid支持透明代理,在http_port配置行加上一個transparent(透明)選項
vim /etc/squid.conf
......
http_port 192.168.100.1:3128 transparent //只在其中一個IP地址上提供服務
4、重啟squid服務
service squid restart
5、設置iptables的重定向策略
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT //若做了傳統代理刷完這句話,則不用再刷,若直接做的透明代理,則要刷這句話
6、客戶端驗證
瀏覽器取消之前設置的Internet選項,清理緩存,訪問web服務器
查看web服務器日誌,可看到是由代理服務器的外網口網關IP進行的訪問
CentOS上構建squid傳統代理,透明代理(squid3.4.6)