day11-squid

運行&維護    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

本站公眾號
   歡迎關注本站公眾號,獲取更多信息