squid提供了強大的代理控制機制,經過合理的設置ACL(Access Control List,訪問控制列表)並進行限制,可針對源地址、目標地址、訪問的URL路徑、訪問的時間等各類控制條件進行過濾。html
ACL訪問控制經過如下兩個步驟來實現:c++
①、使用acl配置項定義須要控制的條件;web
②、經過http_access配置項對已定義的列表作「容許」或者「拒絕」訪問的控制。vim
格式:acl 列表名稱 列表類型 列表內容 ···後端
常見的訪問控制列表類型緩存
列表類型 | 列表內容示例 | 含義、用途 |
---|---|---|
src(源地址) | 192.168.100.一、192.168.100.0/24 | 源IP地址、網段 |
dst(目標地址) | 192.168.234.五、192.168.234.0/2四、www.baidu.com | 目標IP地址、網段、主機名 |
port(目標端口) | 80、44三、 8080、20 | 目標端口 |
dstdomain(目標域) | .qq.com | 目標域,匹配域內的全部站點 |
time(訪問時間) | 12:00-13:00、AS | 使用代理服務器的時間段 |
maxconn(最大併發鏈接) | 30 | 每一個客戶機的最大併發鏈接數 |
url_regex(目標url地址) | url_regex -i ^rtsp:// | 目標資源的URL地址,-i表示忽略大小寫 |
urlpath_regex(整個目標url路徑) | urlpath_regex -i sex adult | 目標資源的整個URL路徑,-i表示忽略大小寫 |
2.設置訪問權限安全
定義好各類訪問控制列表之後,使用http_access配置項來進行控制。服務器
格式:http_access allow或deny 列表名···併發
在設置訪問權限時,須要注意兩點:dom
由於以前咱們作了squid的透明代理的實驗,因此這裏就接着那個實驗繼續作,配置好透明代理後,咱們能夠使用IP爲192.168.100.50的client(客戶端)訪問IP爲12.0.0.12的web服務器,那麼下面咱們就經過設置acl訪問控制列表使client不能訪問web服務器
vim /etc/squid.conf
acl localhost src 192.168.100.0/24 #定義訪問控制列表 http_access deny localhost #對列表作拒絕處理 service squid stop service squid start #重啓服務
squid的日誌分析功能須要藉助sarg(Squid Analysis Report Generator),首先先部署安裝sarg工具
yum -y install gcc gcc-c++ gd gd-devel httpd #這裏的dg庫是支持圖像處理的軟件
mkdir /usr/local/sarg #爲sarg建立安裝目錄 tar zxvf sarg-2.3.11.tar.gz -C /opt/ #將sarg解壓到指定目錄 cd /opt/sarg-2.3.11/ #到sarg目錄中進行編譯安裝 ./configure --prefix=/usr/local/sarg \ #這裏指定安裝目錄 --sysconfdir=/etc/sarg \ #指定配置文件目錄 --enable-extraprotection #開啓額外保護功能 配置完後,進行編譯和安裝 make && make install
vim /etc/sarg/sarg.conf
access_log /usr/local/squid/var/logs/access.log #指定訪問日誌文件(開啓) title "Squid User Access Reports" #網頁標題(開啓) output_dir /var/www/html/squid-reports #報告輸出目錄(開啓) user_ip no #使用用戶名顯示(開啓) exclude_hosts /usr/local/sarg/noreport #不計入排序的站點列表文件(開啓,刪除none,添加路徑) topuser_sort_field connect reverse #top排序中有鏈接次數、訪問字節、降序排列升序是normal (開啓,修改BYTES) user_sort_field connect reverse #用戶訪問記錄 鏈接次數、訪問字節按降序排序 (開啓,修改BYTES) overwrite_report no #同名日誌是否覆蓋(開啓) mail_utility mailq.postfix #發送郵件報告命令(開啓,修改mail) charset UTF-8 #使用字符集 (開啓) weekdays 0-6 #top排行的星期週期 (開啓) hours 0-23 #top排行的時間週期(開啓) www_document_root /var/www/html #網頁根目錄(開啓)
touch /usr/local/sarg/noreport 建立上述不計入站點文件,添加的域名將不被顯示在排序中
ln -s /usr/local/sarg/bin/sarg /usr/local/bin/
#創建軟連接,方便使用命令systemctl start httpd.service
#由於咱們要在網頁裏訪問日誌,須要咱們開啓httpd服務
而後使用client登陸網頁管理界面
squid反向代理能夠加速網站的訪問速度,可將不一樣的URL請求分發到後臺不一樣的web服務器上,同時互聯網用戶只能看到反向代理服務器的地址,增強網站的訪問安全。
squid反向代理加速的原理描述以下:
Squid反向代理服務器位於本地Web服務器和Internet之間,客戶端請求訪問Web服務器時,DNS將訪問的域名解析爲Squid反向代理服務器的IP地址,客戶端將訪問Squid代理服務器。
實驗環境
服務器 | IP地址 | 功能 |
---|---|---|
代理服務器 | 172.16.10.137 | squid代理服務 |
client | 172.16.10.131 | 負責訪問 |
真實服務器1 | 172.16.10.129 | 提供http服務 |
真實服務器2 | 172.16.10.134 | 提供http服務 |
vim /etc/squid.conf
acl web1 dstdomain www.yun.com acl web2 dstdomain www.yun.com #定義兩個個基於域名的控制列表,分別命名爲web1,web2 http_access allow web1 web2 #容許以web1,web2爲目標域名的訪問 http_port 172.16.10.137:80 accel vhost vport #將端口監聽在 172.16.10.137的80端口上,accel 指啓用加速模式,vhost,vport用於轉發請求 cache_peer 172.16.10.29 parent 80 0 no-query originserver round-robin weight=1 name=web1 #cache_peer 指定後端服務器地址,80 爲後端服務端口,0 爲 ICP 端口號(多個 Squid 時用),originserver 指定資源服務器,round-robin指使用輪詢方式,weight指的是權重,自由分配,name 指定一個別名 cache_peer 172.16.10.134 parent 80 0 no-query originserver round-robin weight=1 name=web2 #和上面的同樣
這裏記得從新啓動squid服務
這樣就實驗成功了,訪問www.yun.com,真實服務器會使用輪詢的方式,分別輪流訪問兩臺web服務器。