Squid是Linux系統中最經常使用的一款開元代理服務軟件(官方網站:http://www.squid-cache.org) ,能夠很好的實現HTTP、FTP、DNS查詢,以及SSL等應用的緩存原理,功能十分強大。web
1.做爲應用層的代理服務軟件,經過緩存方式爲用戶提供Web加速訪問。正則表達式
- 對用戶的Web訪問請求具有進行過濾控制的功能。
1、正向代理模式有兩種類型:
1.傳統正向代理
做用:多見於Internet環境,實現代理上網、能夠隱藏本機真實IP地址,爲下載工具使用多個代理能夠規避服務器的併發鏈接限制。
2.透明代理
做用:多見於局域網環境,如在Linux網關中啓用透明代理後,對控制用戶訪問網站行爲的訪問控制列表(ACL)進行限制。局域網主機無需進行額外的設置就能夠享受更好的上網速度。
2、反向代理模式:
做用:加快用戶訪問網站的速度,下降網站資源服務器的負載壓力
3、傳統正向代理模式與透明正向代理模式的區別:
傳統正向代理模式用戶須要配置代理服務器的信息。若使用透明代理模式,則用戶感知不到代理服務器的存在。
4、正向代理和反向代理的概念理解:
正向代理:代理服務器 代理客戶端訪問後端web服務器。
應用場景:爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可使用緩衝特性減小網絡使用率。
安全性:正向代理容許客戶端經過它訪問任意網站而且隱藏客戶端自身,所以你必須採起安全措施以確保僅爲通過受權的客戶端提供服務。
反向代理:代理服務器 表明後端web服務器響應客戶端的訪問請求。
應用場景:反向代理還能夠爲後端的多臺服務器提供負載平衡,爲後端較慢的服務器提供緩衝服務。另外,反向代理還能夠啓用高級URL策略和管理技術,從而使處於不一樣web服務器系統的web頁面同時存在於同一個URL空間下。
安全性:反向代理對外都是透明的,訪問者並不知道本身訪問的是一個代理。apache
Squid提供了強大的代理控制機制,經過合理設置ACL並進行限制,能夠針對源地址、目標地址、訪問的URL路徑、訪問的時間等各類條件進行過濾。
在配置文件squid.conf中,ACL訪問控制經過兩個步驟來實現:
1.使用acl配置項定義須要控制的條件
2.經過http_access配置項對已定義的列表作「容許」或「拒絕」訪問的控制**
ACL訪問控制列表定義格式:acl 列表名稱 列表類型 列表內容
經常使用的ACL訪問控制列表類型:
注:沒有設置任何規則時,squid服務將拒絕客戶端的請求,有規則但找不到相匹配的項時,squid將採用與最後一條規則相反的權限,即若是最後一條規則是allow,就拒絕客戶端的請求,不然容許該請求,咱們要儘可能避免找不到規則的狀況出現。**vim
概述:Sarg的全名是Squid Analysis Report Generator,是一款Squid日誌分析工具,採用HTML格式,詳細列出每一位用戶訪問Internet的站點信息、時間佔用信息、排名、鏈接次數和訪問量等。後端
主機 | 操做系統 | IP地址 | 軟件版本 |
---|---|---|---|
Win7客戶端 | Windows7 | 192.168.138.131 | 系統自帶瀏覽器 |
squid代理服務器 | centos 7.5 | 192.168.138.132 | squid3.5.20 |
web服務器 | centos 7.5 | 192.168.138.128 | httpd-2.4.6 |
> Squid主要組成部分:
主程序:/usr/sbin/squid
配置目錄:/etc/squid
主配置文件:/etc/squid/squid.conf
監聽tcp端口號:3128
默認訪問日誌文件:/var/log/squid/access.logcentos
yum install -y squid #yum在線安裝squid
systemctl enable squid.service
systemctl start squid.service #開啓squid服務
netstat -tunlp | grep squid #查看監聽狀態
注:yum安裝完成後無需配置即爲標準正向代理模式。瀏覽器
在客戶端Windows7系統上對IE瀏覽器進行代理服務器設置:
緩存
接下來在另一臺centos 7.5 系統上搭建Apache服務,並在win7客戶端測試訪問,確保實驗順利進行:
yum install -y httpd #直接用yum安裝 :
在客戶端進行訪問測試(需先關閉以前設置的代理服務器配置):安全
1.只容許IP爲192.168.138.131的客戶端使用代理上網,禁止其餘主機的代理請求:
vim /etc/squid/squid.conf #編輯配置文件
1 #
2 # Recommended minimum configuration:
3 #
4
5 # Example rule allowing access from your local networks.
6 # Adapt to list your (internal) IP networks from where browsing
7 # should be allowed
8 acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
9 acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
10 acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
11 acl localnet src fc00::/7 # RFC 4193 local private network range
12 acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
13
14 acl SSL_ports port 443
15 acl Safe_ports port 80 # http
16 acl Safe_ports port 21 # ftp
17 acl Safe_ports port 443 # https
18 acl Safe_ports port 70 # gopher
19 acl Safe_ports port 210 # wais
20 acl Safe_ports port 1025-65535 # unregistered ports
21 acl Safe_ports port 280 # http-mgmt
22 acl Safe_ports port 488 # gss-http
23 acl Safe_ports port 591 # filemaker
24 acl Safe_ports port 777 # multiling http
25 acl CONNECT method CONNECT
26 acl client src 192.168.138.131 #新增規則
27 #
28 # Recommended minimum Access Permission configuration:
29 #
30 # Deny requests to certain unsafe ports
31 http_access all client # 容許client的規則
32 http_access deny all #拒絕其餘全部規則
33 http_access deny !Safe_ports
34
35 # Deny CONNECT to other than secure SSL ports
36 http_access deny CONNECT !SSL_ports
37
38 # Only allow cachemgr access from localhost
39 http_access allow localhost manager
40 http_access deny manager
41
42 # We strongly recommend the following be uncommented to protect innocent
43 # web applications running on the proxy server who think the only
44 # one who can access services on "localhost" is a local user
45 #http_access deny to_localhost
46
47 #
48 # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
49 #
iptables -F #清空防火牆規則
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
在ip爲192.168.138.131的客戶端驗證:
新開一臺客戶端進行驗證:
驗證已成功,僅限192.168.138.131客戶機訪問,其餘客戶端訪問不了。服務器
ACL訪問控制還有以下可修改參數:
vim /etc/squid.conf
acl localhost src 192.168.100.1/32 ---(src:針對源一個IP地址訪問控制)
acl MYLAN src 192.168.100.0/24 --(針對一個網段訪問控制)
acl destionhost dst 192.168.172.130.32--(針對目標地址進行控制)
acl MC20 maxconn 20 ---(最大連接數量,也就是併發數)
acl BURL url_regex -i ^rtsp:// ^emule:// (基於正則表達式,對訪問路徑好比:以 http:// 開頭的)
acl PURL urlpath_regex -i .mp3$ .mp4$ .rmv$ (以MP3 爲結尾的路徑控制)
** mkdir /etc/squid #啓用對象列表管理vim /etc/squid/dest.list
192.168.138.50
192.168.138.60
192.168.138.70 #目標web
對不少網絡的ip進行打包管理vim /etc/squid.conf
acl destionhostdst "/etc/squid/dest.list"http_access deny destionhost #拒絕列表(注意事項)
systemctl restart squid.service
vim /etc/squid/squid.conf #編輯配置文件
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd #選擇的認證方式爲basic,認證程序路徑和密碼文件路徑。
auth_param basic children 5 #認證程序的進程數
auth_param basic realm this is squid server #驗證域的提醒字符串
auth_param basic credentialsttl 2 hours #認證有效時間
auth_param basic casesensitive off
acl auth_user proxy_auth REQUIRED #設置容許認證的用戶訪問http_access deny !auth_user
http_access allow auth_user
http_access deny all
每次修改完配置文件後記得重啓服務。
接下來yum -y install httpd httpd-devel expect 使用apache的工具htpasswd生成密碼文件:
生成密碼文件:htpasswd -c /etc/squid/passwd yang:
New password: #輸入密碼
Re-type new password: #再次確認密碼
Adding password for user yang
建立成功後會生成/etc/squid/passwd密碼文件:
cat /etc/squid/passwd #查看
squid -k parse #檢查一下文件參數
記得重啓服務systemctl restart squid.service ;而後在客戶端進行訪問測試。(須要登陸用戶密碼才能訪問)
設置內存及硬盤緩衝區大小:
cache_mem 64M
cache_dir ufs /var/spool/squid 2000 16 256
systemctl restart squid.service #重啓服務
squid -z #初始化緩存
將各個主機網卡改成僅主機模式,設置成100段落的ip地址:
主機 | ip地址 |
---|---|
squid代理服務器 | ens33:192.168.100.1 |
ens36:12.0.0.1 | |
web服務器 | 12.0.0.12 |
Windows客戶端 | 192.168.100.12 |
經過SNAT技術完成數據的轉發,讓客戶端將數據發給Squid代理服務器,再由其轉發到外網
//在squid上開啓路由轉發
echo "1" > /proc/sys/net/ipv4/ip_forward//清空防火牆策略
iptables -F
iptables -t nat -F
setenforce 0//修改著配置文件
vim /etc/squid.conf//修改監聽地址,由於是內網須要訪問外網,因此監聽的是內網 transparent:意思就是透明模式
http_port 192.168.100.1:3128 transparent//定義防火牆策略:
iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128iptables -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 3218 -j ACCEPT
若是要再Linux客戶機的命令行界面中使用代理服務器(好比:elinks 網頁瀏覽器、wget 下載工具),必須經過環境變量來指定代理服務器的地址、端口等信息。
[root@localhost ~]# vim /etc/profile #添加以下內容到環境變量中
添加以下內容:
HTTP_PROXY=http:192.168.100.50:3128 #爲使用HTTP協議指定代理
HTTPS_PROXY=http:192.168.100.50:3128 #爲使用HTTPS協議指定代理
FTP_PROXY=http:192.168.100.50:3128 #爲使用FTP協議指定代理
NO_RPOXY=192.168.20.,192.168.30. #對兩個局域網段不使用代理
export HTTP_PROXY HTTPS_PROXY FRP_PROXY NO_PROXY[root@localhost ~]# source /etc/profile #從新加載