部署Squid 代理服务器(内含传统、透明代理服务器的配置、ACL访问控制、日志分析、反向代理)
標題
- 一、Squid 代理服務器
- 代理的工作機制
- Squid 代理的類型
- 二、安裝 Squid 服務
- 1、編譯安裝 Squid
- 2、修改 Squid 的配置文件
- 3、Squid 的運行控制
- 4、創建 Squid 服務腳本
- 三、構建傳統代理服務器
- 環境配置
- 四、構建透明代理服務器
- 1、環境配置
- 2、Squid服務器配置(192.168.80.10)
- 3、客戶機測試(12.0.0.100)
- 五、ACL訪問控制
- 1、環境配置
- 2、Squid配置(192.168.80.10)
- 3、Web1和web2的配置(192.168.80.20、192.168.80.30)
- 4、測試(192.168.80.100)
- 六、Squid日志分析
- 測試
- 添加計劃任務,每天生成報告
- 七、反向代理
- 1、環境配置
- 2、Squid配置(192.168.80.10)
- 3、web1和web2配置(192.168.80.20、192.168.80.30)
- 4、客戶機的配置
- 5、驗證
一、Squid 代理服務器
Squid 主要提供緩存加速、應用層過濾控制的功能。
代理的工作機制
- 1、代替客戶機向網站請求數據,從而可以隱藏用戶的真實IP地址。
- 2、將獲得的網頁數據(靜態 Web 元素)保存到緩存中并發送給客戶機,以便下次請求相同的數據時快速響應。
Squid 代理的類型
傳統代理:適用于Internet,需在客戶機指定代理服務器的地址和端口。
透明代理:客戶機不需指定代理服務器的地址和端口,而是通過默認路由、防火墻策略將Web訪問重定向給代理服務器處理。
反向代理:如果 Squid 反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將向后臺的 WEB 服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
二、安裝 Squid 服務
systemctl stop firewalld systemctl disable firewalld setenforce 01、編譯安裝 Squid
yum -y install gcc gcc-c++ make tar zxvf squid-3.5.28.tar.gz -C /opt/ cd /opt/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-gnuregexmake && make install#--------模塊解釋-------------------------------------------------- --prefix=/usr/local/squid #指定安裝目錄路徑 --sysconfdir=/etc #指定配置文件路徑 --enable-arp-acl #MAC地址管控,防止客戶端使用ip欺騙 --enable-linux-netfilter #使用內核過濾 --enable-linux-tproxy #支持透明模式 --enable-async-io=100 #異步1o,提升存儲性能 --enable-err-language="Simplify_Chinese" #錯誤信息的顯示語言 --enable-underscore #允許URL中有下劃線 --disable-poll \ #關閉默認使用的poll 模式 --enable-epoll \ #開啟epoll模式,提升性能 --enable-gnuregex #使用GNU正則表達式 #----------------------------------------------------------------
2、修改 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 #指定緩存文件目錄3、Squid 的運行控制
檢查配置文件語法是否正確
squid -k parse啟動 Squid
squid -z #-z 選項用來初始化緩存目錄 squid #啟動 squid 服務netstat -anpt | grep "squid"4、創建 Squid 服務腳本
vim /etc/init.d/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" 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 "用法:$0{start|stop|status|reload|check|restart}";; esac#2345是默認自啟動級別,如是-代表任何級別都不自啟動;90是啟動優先級,25是停止優先級,優先級范圍是0-100,數字越大,優先級越低。
chmod +x /etc/init.d/squid chkconfig --add squid chkconfig --level 35 squid on
三、構建傳統代理服務器
環境配置
| Squid | CentOS7 | 192.168.172.10 | squid-3.5.28.tar.gz |
| Web1 | CentOS7 | 192.168.172.20 | httpd |
| 客戶機 | Windows | 192.168.172.100 |
Squid(192.168.172.10)
vim /etc/squid.conf ...... http_access allow all http_access deny all http_port 3128 cache_effective_user squid cache_effective_group squid63行插入
cache_mem 64 MB #指定緩存功能所使用的內存空間大小,便于保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4 reply_body_max_size 10 MB #允許用戶下載的最大文件大小,以字節為單位,當下載超過指定大小的Web對象時,瀏覽器的報錯頁面中會出現“請求或訪問太大”的提示默認設置0表示不進行限制 maximum_object_size 4096 KB #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶 service squid restart netstat -natp | grep squid生產環境中還需要修改防火墻規則
iptables -F iptables -I INPUT -p tcp --dport 3128 -j ACCEPT iptables -L INPUT客戶機的代理配置(192.168.172.100)
1、配置客戶端IP地址
2、打開瀏覽器,配置代理功能
Web1(192.168.172.20)
systemctl stop firewalld.service setenforce 0 yum -y install httpd systemctl start httpd netstat -natp | grep 80
檢測
在瀏覽器輸入Web服務器IP地址訪問,查看Web服務器訪問日志,顯示的是由代理服務器替客戶機在訪問
查看Web1訪問日志的新增記錄
tail -f /var/log/httpd/access_log四、構建透明代理服務器
1、環境配置
| Squid-Server | CentOS7 | ens33:192.168.80.10 、 ens36:12.0.0.1 | squid-3.5.28.tar.gz |
| Web1 | CentOS7 | 192.168.80.20 | httpd |
| 客戶端 | Windows | 12.0.0.100 | —— |
2、Squid服務器配置(192.168.80.10)
網卡配置
關機,添加一塊網卡,開機,ifconfig查看新增網卡名稱,編輯網卡配置文件
重啟網卡,并查看
60行修改添加提供內網服務的IP地址,和支持透明代理選項 transparent
開啟路由轉發功能
修改防火墻配置規則
3、客戶機測試(12.0.0.100)
配置網卡IP
關閉代理服務
測試頁面出來了
動態檢測squid訪問日志(192.168.80.10)
Squid代理服務器則是檢測到客戶機訪問目標網站
查看web服務器上的訪問日志(192.168.80.20)
可以看到是代理服務器外網口12.0.0.1訪問的12.0.0.12
五、ACL訪問控制
在配置文件 squid.conf 中,ACL 訪問控制通過以下兩個步驟來實現:
(1)使用 acl 配置項定義需要控制的條件;
(2)通過 http_access 配置項對已定義的列表做“允許”或“拒絕”訪問的控制。
1.定義訪問控制列表
格式:acl 列表名稱 列表類型 列表內容 …
1、環境配置
| Squid-Server | CentOS7 | 192.168.80.10 | squid-3.5.28.tar.gz |
| Web1 | CentOS7 | 192.168.80.20 | httpd |
| Web2 | CentOS7 | 192.168.80.30 | httpd |
| 客戶機 | Windows | 192.168.80.100 | —— |
2、Squid配置(192.168.80.10)
iptables -F iptables -t nat -Fvim /dest.list 192.168.80.20vim /etc/squid.conf ...... acl destionhost dst "/dest.list" #調用指定文件中的列表內容 ...... http_access deny destionhost #注意,如果是拒絕列表,需要放在http_access allow all前面http_port 3128systemctl restart squid
3、Web1和web2的配置(192.168.80.20、192.168.80.30)
systemctl stop firewalld.service setenforce 0 yum -y install httpd systemctl start httpd4、測試(192.168.80.100)
打開代理服務
訪問192.168.80.20和192.168.80.30
六、Squid日志分析
squid服務器(192.168.80.10)
安裝圖像處理軟件包
需要使用在線源,出現報錯,將網卡配置文件中的dns和網關修改回原樣即可
vim /etc/sarg/sarg.conf
添加不計入站點文件,添加的域名將不被顯示在排序中
touch /usr/local/sarg/noreportln -s /usr/local/sarg/bin/sarg /usr/local/bin/sarg --help
運行
驗證
yum install httpd -y systemctl start httpd
啟動服務
測試
瀏覽器訪問 http://192.168.80.10/squid-reports ,查看sarg報告網頁
添加計劃任務,每天生成報告
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/squid-reports -z -d $YESTERDAY-$TODAY &> /dev/null exit 0 chmod +x /usr/local/sarg/report.shcrontab -e 0 0 * * * /usr/local/sarg/report.sh七、反向代理
如果 Squid 反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端;否則反向代理服務器將向后臺的 Web 服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
工作機制:
●緩存網頁對象,減少重復請求
●將互聯網請求輪訓或按權重分配到內網Web服務器
●代理用戶請求,避免用戶直接訪問Web服務器,提高安全
1、環境配置
| Squid-Server | CentOS7 | 192.168.80.10 | squid-3.5.28.tar.gz |
| Web1 | CentOS7 | 192.168.80.20 | httpd |
| Web2 | CentOS7 | 192.168.80.30 | httpd |
| 客戶機 | Windows | 192.168.80.100 | —— |
2、Squid配置(192.168.80.10)
清空防火墻
iptables -F #清空防火墻規則 iptables -t nat -Fvim /etc/squid.conf ......60行修改,插入
http_port 192.168.80.10:80 accel vhost vport cache_peer 192.168.80.20 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1 cache_peer 192.168.80.30 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2 cache_peer_domain web1 web2 www.chen.comhttp_port 80 accel vhost vport #squid從一個緩存變成了一個Web服務器使用加速模式,這個時候squid在80端口監聽請求,同時和web server的請求端口(vhost vport)綁定,這個時候請求到了squid,squid是不用轉發請求的,而是直接要么從緩存中拿數據要么向綁定的端口直接請求數據。
| 80 | HTTP_PORT |
| 0 | ICP_PORT |
| no-query | 不做查詢操作,直接獲取數據 |
| originserver | 指定是源服務器 |
| round-robin | 指定 squid 通過輪詢方式將請求分發到其中一臺父節點 |
| max_conn | 指定最大連接數 |
| weight | 指定權重 |
| name | 設置別名 |
關閉httpd服務,在啟動squid服務。防止端口沖突
systemctl stop httpd systemctl restart squid3、web1和web2配置(192.168.80.20、192.168.80.30)
都有的操作
systemctl stop firewalld.service setenforce 0 yum install -y httpd systemctl start httpdweb1(192.168.80.20)
echo "this is chen" >> /var/www/html/index.htmlweb2(192.168.80.30)
echo "this is qian" >> /var/www/html/index.html4、客戶機的配置
修改 C:\Windows\System32\drivers\etc\hosts 文件 192.168.80.10 www.chen.com
客戶機的代理也要打開
5、驗證
瀏覽器訪問www.chen.com
總結
以上是生活随笔為你收集整理的部署Squid 代理服务器(内含传统、透明代理服务器的配置、ACL访问控制、日志分析、反向代理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存揭秘:8GB内存实际只有4GB?维修
- 下一篇: Redis数据库(一)——介绍、配置与优