構建Squid傳統代理及透明代理
阿新 • • 發佈:2018-07-20
gre $1 火墻 .com ima bin sys 代理服務 maximum 什麽是Squid
Squid是一種用來緩沖Internet數據的軟件。它是這樣實現其功能的,接受來自人們需要下載的目標(object)的請求並適當地處理這些請求。也就是說,如果一個人想下載一web頁面,他請求Squid為他取得這個頁面。Squid隨之連接到遠程服務器(比如:http://squid.nlanr.net/) 並向這個頁面發出請求。然後,Squid顯式地聚集數據到客戶端機器,而且同時復制一份。當下一次有人需要同一頁面時,Squid可以簡單地從磁盤中讀到它,那樣數據迅即就會傳輸到客戶機上。當前的Squid可以處理HTTP,FTP,GOPHER,SSL和WAIS等協議。
- 代理的基本類型
傳統代理:即為普通的代理服務,一般以提供HTTP、ftp代理為主,需要客戶端在瀏覽器中指定代理服務器地址和端口(默認為3128)。
- 透明代理:客戶不需要指定代理服務器的地址和端口,而是通過網關,由防火墻的重定向策略將用戶的請求交給代理服務器處理;域名解析有客戶機完成
-
安裝及運行控制
- 編譯安裝squid
-
編譯安裝時目錄設置為/usr/local/squid
# tar zxvf squid-3.5.28.tar.gz -C /opt/ # yum install gcc gcc-c++ cmake -y # cd /opt/squid-3.5.28 # ./configure --prefix=/usr/local/squid --sysconfdir=/etc //單獨將配置文件修改到此目錄下 --enable-arp-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 // 使用GUN正則表達式 # 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 (添加下面3行) cache_effective_user squid #添加 指定程序用戶 cache_effective_group squid #添加 指定賬號基本組 coredump_dir /usr/local/squid/var/cache/squid
# squid -k parse //檢查配置文件語法 # squid -z //第一次啟動 先初始化緩存目錄 # squid //啟動服務 # netstat -anpt | grep "squid"
? - 使用Squid服務腳本
-
為了更方便控制服務的 啟動、停止、重載
# 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
- 構建傳統代理
主機 | IP | 主要軟件服務 |
---|---|---|
Squid代理服務器 | 192.168.100.20 | squid |
Web服務器 | 192.168.100.30 | httpd |
windows7 | 192.168.100.50 | IE瀏覽器 |
如圖:
- web服務器
- 關閉防火墻
-
安裝httpd服務並且開啟
# systemctl stop firewalld.service # systemctl restart httpd # yum install -y httpd # systemctl start httpd
-
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為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶 # service squid restart
-
添加防火墻策略
# iptables -F # setenforce 0 # iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
-
在Linux系統中設置代理
# vim /etc/profile (在末尾添加) HTTP_PROXY=http://192.168.100.20:3128 HTTPS_PROXY=http://192.168.100.20:3128 FTP_PROXY=http://192.168.100.20:3128 NO_PROXY=192.168.10.,192.168.20. export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY # source /etc/profile
- 客戶機的代理設置
- Internet選項---》連接----》局域網設置----ip:squid服務器地址 端口:3128
- 在瀏覽器中輸入 web網頁測試地址:192.168.100.30
- 驗證代理
-
在squid服務器上查看訪問記錄
# tail /usr/local/squid/var/logs/access.log
-
在web服務器上查看訪問記錄
# tail /var/log/httpd/access_log
- 構建透明代理
- 配置雙網卡內網ens33 外網ens36
主機 | IP | 主要軟件服務 |
---|---|---|
Squid代理服務器 | ens33:192.168.100.1 / ens36:12.0.0.1 | squid |
Web服務器 | 12.0.0.1 | httpd |
windows7 | 192.168.100.50 | IE瀏覽器 |
- 配置透明代理
-
在http_port配置後面加上 transparent(透明)的選項
# vim /etc/squid.conf http_port 192.168.100.1:3128 transparent # service squid restart
-
設置iptables的重定向策略
# 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 # 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
- 客戶端驗證
- 透明代理要取消之前IE瀏覽器設置的代理地址和端口
- 清空緩存 在瀏覽器輸入地址:12.0.0.12
- 驗證代理
- 在squid服務器上查看訪問記錄
-
可以看到是192.168.100.50(客戶機)請求訪問12.0.0.12(web服務器)
# tail /usr/local/squid/var/logs/access.log
- 在web服務器上查看訪問記錄
- 可以看是12.0.0.1(代理服務器)訪問了12.0.0.12(web服務器)
-
可以看出代理配置成功
# tail /var/log/httpd/access_log
構建Squid傳統代理及透明代理