squid: 實現網絡全局代理


wechat: Linux系統通過Squid配置實現代理上網

Squid本質上是一種用來緩沖Internet數據 + 服務器代理的軟件。

  • 用來做前置的Web緩存,加快用戶訪問Web的速度
  • 代理內網用戶訪問互聯網資源
  • 設置訪問控制策略,控制用戶的上網行為
  • 主要支持http、ftp等應用協議

代理工作的機制和好處

  • 緩存網頁對象,減少重復請求
  • 訪問速率提高
  • 隱藏客戶機真是ip地址

1. 代理的基本類型

  • 傳統代理

    適用於internet ,需要指定服務端,開啟代理ip地址。

  • 透明代理

    客戶機不需要指定代理服務器的地址和端口,而通過默認路由,防火牆策略將web訪問定向給代理服務器處理。

  • 反向代理

    squid反向代理服務器中緩存了該請求的資源,則將該請求直接返回給客戶端;否則反向代理服務器將向后台的web服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。

  1. 客戶端設置代理IP
  2. 客戶請求的IP地址仍是WEB頁面 ,不是squid代理服務器,因為客戶端設置了一個代理IP。
  3. 客戶端正常訪問,但是會優先找代理服務器拿資源
  4. 如果緩存空間有資源,則不用找WEB拿資源
    如果緩存空間沒有資源squid去找WEB拿資源

2. 安裝與部署

環境安裝:

yum install squid  # 由於squid_v4.0+需要依賴c++11,centos7提供的是v3.5版本
# 或者
apt install squid

添加squid運行的用戶及組

echo 'cache_effective_user squid' >> /usr/local/squid/etc/squid.conf
echo 'cache_effective_group squid' >> /usr/local/squid/etc/squid.conf

定義配置文件 /etc/squid.conf/etc/squid.d/squid.conf:

  • 訪問控制:acl+http_access來實現

    Replay_body_max_size 10 MB  # 允許下載最大文件大小
    http_access allow all  # 允許所有客戶機訪問,放在deny(拒絕)前
    
  • 監聽端口:TCP/3128

2.1. 修改默認端口

http_port 3128 這行中的3128修改為期望的端口號,比如8080,或是非常用端口,這樣可以避免服務被 shodan 之類的搜索引擎探測到。

2.2. 設置訪問密碼

為了安全,我們通常會給代理服務器設置密碼。

先安裝htpasswd工具,使用如下命令:

apt install apache2-utils -y

創建密碼文件:

htpasswd -c /etc/squid/passwd proxy_username

在squid.conf中添加以下內容:

auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd

2.3. 允許外部訪問

squid默認只能從本地訪問,是因為它設置了 http_access allow localhost

但正常情況下,我們都是需要從外部訪問的,這就需要添加以下兩行配置:

acl net src 0.0.0.0/0
http_access allow net

2.4. squid的運行與控制:服務管理(啟動、停止、重啟)

  • 語法檢查: squid -k parse
  • 初始化緩存目錄: squid -z
  • 啟動: sudo squid 或者 systemctl start squid
  • 停止: killall -9 squid

2.5. 允許CONNECT所有端口

squid默認只可以CONNECT443端口,如果要開放所有端口,需要注釋掉 http_access deny CONNECT !SSL_ports 這行。

2.6. 修改安全端口

squid默認策略只允許代理訪問以下端口:

acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
acl Safe_ports port 70        # gopher
acl Safe_ports port 210        # wais
acl Safe_ports port 1025-65535    # unregistered ports
acl Safe_ports port 280        # http-mgmt
acl Safe_ports port 488        # gss-http
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http

因此,會有部分端口無法訪問,直接返回403 Forbidden。如果需要訪問這些端口,可以增加以下配置:

acl Safe_ports port 1-1024

2.7. 允許所有訪問

如果覺得以上操作過於繁瑣,在不考慮安全性的情況下,也可以修改 http_access deny allhttp_access allow all

3. 配置文件詳解

3.1. 創建傳統代理

# And finally deny all other access to this proxy
http_access allow all       #在deny all前添加allow all
http_access deny all

# Squid normally listens to port 3128
http_port 3128              #squid對外端口
cache_mem 128 MB            #指定緩存功能所使用的內存空間大小,便於保持訪問較頻繁的WEB對象,容量最好為4的倍數,單位為MB,建議設為物理內存的1/4
reply_body_max_size 10 MB   #允許用戶下載的最大文件大小,以字節為單位。默認設置0表示不進行限制
maximum_object_size 4096 KB #允許保存到緩存空間的最大對象大小,以KB為單位,超過大小限制的文件將不被緩存,而是直接轉發給用戶
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /usr/local/squid/var/cache/squid

#
# Add any of your own refresh_pattern entries above these.
#
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320
cache_effective_user squid  #squid運行用戶
cache_effective_group squid #squid運行組

4. 客戶端連接到代理服務器

Windows設置

Linux配置

export all_proxy="http://192.168.0.191:3128"
export proxy="http://192.168.0.191:3128"
export http_proxy="http://192.168.0.191:3128"
export https_proxy="http://192.168.0.191:3128"
export ftp_proxy="http://192.168.0.191:3128"

以上為臨時設置代理,如需默認執行,將其添加到 .profile 文件中即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM