運行&維護 operation&maintancehtml
squid代理服務器linux
功能:代理、緩存、ACL(訪問控制)web
角色:正向代理、透明代理(網關)、反向代理)正則表達式
傳統代理(正向代理)vim
客戶程序(如瀏覽器)需指定代理服務器的地址、端口windows
透明代理瀏覽器
客戶端須要設置特定的網關緩存
反向代理安全
負載均衡服務器
優點
經過緩存增長訪問速度
提升網絡的安全性
Squid歷史悠久,技術積澱深厚,開源
缺點
性能不足,藉助於windows、linux等通用性操做系統才能實現上網加速等功能
#yum install squid –y
主程序:/usr/sbin/squid
主配置文件:/etc/squid/squid.conf
默認訪問日誌:/var/log/squid/access.log
默認監聽端口:TCP 3128
配置文件選項:
http_port 3128 //端口
access_log /var/log/squid/access.log //日誌文件
squidcache_mem 64 MB //內存緩存大小
cache_diir ufs /var/spool/squid 100 16 256 //本地硬盤緩存
ufs表明文件類型,(若其餘須要插件)
/var/spool/squid:實際存放緩存文件的路徑
100:表明100M(緩存容量)
16:緩存目錄下一級目錄個數
256:二級子目錄
經常使用配置
visible_hostname a //設置主機名
maximum_object_size 4096 KB //最大緩存文件的容量
reply_body_max_size 10240000 allow all //能夠給用戶返回的資源最好大容量
實驗1:傳統代理 客戶端配置代理IP及端口訪問WEB服務
A爲squid服務器、B爲HTTP服務器、C爲客戶端
A主機設置
[root@a squid]# /etc/init.d/squid start
[root@a squid]# netstat -anpt |grep "squid"
tcp 0 0 :::3128 :::* LISTEN 9833/(squid)
B主機設置
echo "this is test b"> /var/www/html/index.html
[root@b html]# /etc/init.d/httpd start
C主機訪問WEB服務的IP或域名
驗證結果
A主機查看
[root@a squid]# cat /var/log/squid/access.log
1474094876.954 5 192.168.100.1 TCP_MISS/304 236 GET http://192.168.100.101/ - DIRECT/192.168.100.101
B主機查看
[root@b ~]# tail -f /var/log/httpd/access_log
192.168.100.100 - - [17/Sep/2016:14:47:57 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36"
C主機
當文件大於10MB時就報錯
注意
# And finally deny all other access to this proxy
http_access deny all 這條規則是隻容許除本機或機網段,若需全部網絡訪問修改成http_access allow all
透明代理
工做機制
linux網關提供透明代理服務,客戶端無需配置
局域網經過代理訪問公網中的網站
須要設置防火牆策略,將客戶機的WEB訪問數據轉發給代理服務程序處理
實驗2:透明代理 客戶端配置網關,代理服務器完成轉發功能
CàAàB
A主機代理服務器
修改配置文件
http_access allow all
http_port 3128 transparent
開啓路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
網關設置轉發
iptables 語法格式
iptables –t 表名 –I 鏈 條件 –J 結果
[root@a ~]# iptables -tnat -I PREROUTING -ieth0 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
[root@a ~]# iptables -tnat -I PREROUTING -ieth0 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128
防火牆3個表,5個鏈
filter(過濾表)
INPUT(入站),OUTPUT(出站),FORWARD(轉發)
nat(地址轉換表)
mangle(管理表)
PREROUTING 路由前
POSTROUTING 路由後
源地址轉換路由後
目標地址轉換路由前
-A 插入一條規則
-I eth0 指定數據包從哪一個網卡進來(input)
-s 指定源地址
-p 指定協議
--dport 指定目標端口
B主機爲WEB——IP爲192.168.101.101
C主機客戶端配置
網關指向代理服務器主機
驗證
A主機
1474113478.315 9 192.168.100.102 TCP_MISS/200 429 GET http://192.168.101.101/ - DIRECT/192.168.101.101 text/html
B主機
192.168.101.100 - - [17/Sep/2016:19:57:58 +0800] "GET / HTTP/1.1" 200 15 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
反向代理——與傳統代理的方向相扳
代替公網用戶訪問組織內部的web服務器
部署基於地區的CND服務器
實驗3:反向代理 代理服務器至關於WEB服務器,但不是真的
parent 父級 真實的服務器上取數據
sibling 兄弟級 代理服務器上取數據
A
http_port 80 vhost
cache_peer 192.168.101.101 parent 80 0 originserver
如果1臺服務器多個虛擬主機
http_port 80 vhost
cache_peer 192.168.101.101 parent 80 0 originserver name=www
cache_peer 192.168.101.101 parent 80 0 originserver name=bbs
cache_peer_domain www www.b.com
cache_peer_domain bbs bbs.b.com
B主機
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /var/www/html/web1
ServerName www.a.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/web2
ServerName bbs.a.com
</VirtualHost>
C主機
[root@c ~]# curl http://192.168.100.100
this is test b
C客戶機驗證
192.168.100.100 b www.b.com bbs.b.com
[root@c ~]# curl www.b.com
this is test web1
[root@c ~]# curl bbs.b.com
this is test web2
Squid緩存
緩存管理機制
refresh_pattern語法格式
refresh_pattern [-i] regexp min percent max [options]
-i 忽略大小寫
regexp 正則表達式
min 是過期響應的最低時間限制 最小緩存時間
max參數是存活響應的最高時間限制 最大緩存時間
中間的百分比爲最好後修改係數
最後修改係數=響應時間/資源時間
若是定義爲20%的話,則:
20%=響應時間/資源時間
percent根據最好後爲什麼會那天係數LM-factor計算過時時間
LM-factor=(response age)/(ressource age)
resource age =對象進入cache的時間-對象的last_modified
response age =當前時間-對象進入cache的時間
清理緩存
方法一:
grep -r 資源 緩存路徑
grep -r a.html /var/spool/squid/
rf -rf xxx
grep -r $1 /var/spool/squid/ 或 for i in `cat a.txt` do grep -r $i /var/spool/squid/|awk '{print $2}' done
方法二:
vim /etc/squid/squid.conf
acl purge method PURGE
http_access allow purge locathost
squidclient -h 代理IP -p 端口 -m PURGE http://www.b.com
squidclient -h 127.0.0.1 -p 80 -m PURGE
能夠HTTPD服務配置文件里加
cachedisable /var/www/html/web1/index.html
禁止緩存這個頁面
Squid 訪問控制
注意:先定義ACL,給ACL取個名字,在容許或拒絕該ACL
定義ACL格式:
ACL ACL名稱 列表類型 列表內容
調用ACL
http_access allow acl名稱
http_access deny acl名稱
經常使用的acl列表類型
src 源地址
dst 目標地址
port 目標端口
dstdomain 目標域
time 訪問時間
maxconn 最大併發鏈接
url_regex 目標URL地址 url=http://www.b.com/a.html
uurlpath_regex 整個目標URL路徑 urlpath=/a.html
ACL規則順序:
未設置任何規則時,拒絕全部訪問請求
已設置規則時,集資進行檢查,找到匹配即中止,不然採用與最好後一條規則相反的權限
ACL WORK time MTWHF 09:00-18:00 定義一個WORK的ACL時間爲早上9點到下午18點
http_access allow MYNET WORK 啓用WORK規則
http_access deny all 拒絕全部
定義多個的IP和域名
acl ipaddress dst "/etc/squid/ip.list"
acl domainname dstdomain "/etc/squid/domainname.list"
拒絕規則
http_access ipaddress deny all
htt_domainname deny all
限制源——網段
acl lan1 src 192.168.1.0/24
限制源——單IP
acl pc1 src 192.168.1.100/24
限制目標區域——域名
acl blk_domain dstdoamin .qq.com .baidu.com
限制併發——10我的同時鏈接代理
acl max10_conn maxconn 10
限制URL——地址欄開始是XXX
acl blk_url url_regex -i ^rtsp:// ^mms://
限制URL路徑
acl blk_words urlpath_regex -i sex adult
acl fiile urlpath_regex -i \.rmvb$ \.mp4$ \.mp3$
限制MAC地址
acl aclname arp mac-address
限制端口
acl aclname port 80 0-1024...
定義從百度連接轉到XXX.COM
acl aclname referer_regex -i baidu.com
拒絕百度連接轉換
http_access deny aclname