在Ubuntu 20.04上安裝和設置Squid代理

在本教程中,我們將學習如何在Ubuntu 20.04上安裝和設置Squid Proxy。

烏賊 是功能齊全的Web代理緩存應用程序,它為HTTP,FTP,SSL請求和DNS查找提供代理和緩存服務。它還通過緩存和重用經常請求的網頁來執行透明緩存,以減少帶寬並縮短響應時間。

在Ubuntu 20.04上安裝和設置Squid代理

運行系統更新

首先,請確保您的系統軟件包是最新的。

apt update
apt upgrade

在Ubuntu 20.04上安裝Squid Proxy

Squid代理可在默認的Ubuntu 20.04存儲庫上使用。

apt-cache policy squid
squid:
  Installed: (none)
  Candidate: 4.10-1ubuntu1.1
  Version table:
     4.10-1ubuntu1.1 500
        500 http://ke.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
        500 http://ke.archive.ubuntu.com/ubuntu focal-security/main amd64 Packages
     4.10-1ubuntu1 500
        500 http://ke.archive.ubuntu.com/ubuntu focal/main amd64 Packages

因此,您可以通過運行命令進行安裝,也可以通過運行命令進行安裝。

apt install squid

在Ubuntu 20.04上運行Squid

安裝後,將啟動Squid並使其能夠在系統啟動時運行;

systemctl status squid
● squid.service - Squid Web Proxy Server
     Loaded: loaded (/lib/systemd/system/squid.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 14:00:41 UTC; 10min ago
       Docs: man:squid(8)
   Main PID: 2237 (squid)
      Tasks: 4 (limit: 2282)
     Memory: 16.3M
     CGroup: /system.slice/squid.service
             ├─2237 /usr/sbin/squid -sYC
             ├─2239 (squid-1) --kid squid-1 -sYC
             ├─2240 (logfile-daemon) /var/log/squid/access.log
             └─2241 (pinger)

May 29 14:00:41 ubuntu20 squid[2239]: Using Least Load store dir selection
May 29 14:00:41 ubuntu20 squid[2239]: Set Current Directory to /var/spool/squid
May 29 14:00:41 ubuntu20 squid[2239]: Finished loading MIME types and icons.
May 29 14:00:41 ubuntu20 squid[2239]: HTCP Disabled.
May 29 14:00:41 ubuntu20 squid[2239]: Pinger socket opened on FD 14
May 29 14:00:41 ubuntu20 squid[2239]: Squid plugin modules loaded: 0
May 29 14:00:41 ubuntu20 squid[2239]: Adaptation support is off.
May 29 14:00:41 ubuntu20 squid[2239]: Accepting HTTP Socket connections at local=[::]:3128 remote=[::] FD 12 flags=9
May 29 14:00:42 ubuntu20 squid[2239]: storeLateRelease: released 0 objects
...

檢查是否已啟用以在系統啟動時運行;

systemctl is-enabled squid.service
enabled

在Ubuntu 20.04上配置Squid代理服務器

/etc/squid/squid.conf 是默認的Squid代理配置。該配置具有建議的最小設置。但是,我們將修改此配置以進行一些更改。您還可以在下面進行其他配置 /etc/squid/conf.d/ 目錄。

備份默認配置文件。

cp /etc/squid/squid.conf{,.old}

默認情況下,Squid配置文件如下所示(已刪除注釋);

acl localnet src 0.0.0.1-0.255.255.255	# RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8		# RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10		# RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 	# RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12		# RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16		# RFC 1918 local private network (LAN)
acl localnet src fc00::/7       	# RFC 4193 local private network range
acl localnet src fe80::/10      	# RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
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
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
include /etc/squid/conf.d/*
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|?) 0	0%	0
refresh_pattern /(Packages|Sources)(|.bz2|.gz|.xz)$ 0 0% 0 refresh-ims
refresh_pattern /Release(|.gpg)$ 0 0% 0 refresh-ims
refresh_pattern /InRelease$ 0 0% 0 refresh-ims
refresh_pattern /(Translation-.*)(|.bz2|.gz|.xz)$ 0 0% 0 refresh-ims
refresh_pattern .		0	20%	4320

配置Squid訪問控制策略

如果您已經注意到,則上面的配置文件具有用於特定網絡和安全端口的ACL。您可以修改它們以包括您的安全端口以及Squid應該代理的本地網絡。

定義ACL時,每個ACL必須以一個 acl nameacl type 隨後是特定於類型的參數或從中讀取它們的帶引號的文件名;

acl aclname acltype argument ...
acl aclname acltype "file" ...

當使用“file”,文件每行應包含一項。

vim /etc/squid/squid.conf

在本教程中,我們將為我們的局域網創建一個ACL, 192.168.57.0/24。我們將此行附加在SSL端口ACL的正上方。 相應地替換ACL的名稱和源網絡。

acl localnet src fc00::/7       	# RFC 4193 local private network range
acl localnet src fe80::/10      	# RFC 4291 link-local (directly plugged) machines
# My LAN network ACL
acl kifarunix-demo-net src 192.168.57.0/24
...

在上閱讀有關ACL配置指令的更多信息 魷魚維基頁面

您可以注釋掉默認ACL(在各行的開頭添加#)。

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
#acl localnet src 10.0.0.0/8            # RFC 1918 local private network (LAN)
#acl localnet src 100.64.0.0/10         # RFC 6598 shared address space (CGN)
#acl localnet src 169.254.0.0/16        # RFC 3927 link-local (directly plugged) machines
#acl localnet src 172.16.0.0/12         # RFC 1918 local private network (LAN)
#acl localnet src 192.168.0.0/16                # RFC 1918 local private network (LAN)
#acl localnet src fc00::/7              # RFC 4193 local private network range
#acl localnet src fe80::/10             # RFC 4291 link-local (directly plugged) machines
# My LAN network ACL
acl kifarunix-demo-net src 192.168.57.0/24
...

根據定義的ACL允許或拒絕訪問

有了ACL之後,您就可以使用 http_access 指令定義允許或拒絕使用代理訪問外部網絡的ACL。因此,為了允許我們的ACL定義的網絡, kifarunix-demo-net,外部訪問,在下面添加行;

...
#http_access allow localnet
http_access allow localhost

# Allow kifarunix-demo-net
http_access allow kifarunix-demo-net

# And finally deny all other access to this proxy
http_access deny all

最後一個條目應始終為 http_access deny all

拒絕訪問特定網站

可以使用Squid Proxy限制對特定網站的訪問。例如,阻止訪問youtube,facebook,netflix;

  • 您將必須創建一個文件來定義這些網站的域,如下所示;
  • 否則,您將列出域名,在ACL語句上用空格分隔。
vim /etc/squid/denied-sites.squid
.youtube.com
.facebook.com
.netflix.com

接下來,在squid配置文件中為上述受限站點創建ACL,然後設置 拒絕 定義的ACL的規則。

acl deniedsites dstdomain "/etc/squid/denied-sites.squid"

或者,您可以列出站點域;

acl deniedsites dstdomain youtube.com facebook.com netflix.com

更新魷魚配置文件。

...
#
# My LAN network ACL
acl kifarunix-demo-net src 192.168.57.0/24
## Sites to Block access to ###
acl deniedsites dstdomain "/etc/squid/denied-sites.squid"
...
...
# Deny access to facebook, youtube, netflix
http_access deny deniedsites

# Allow kifarunix-demo-net
http_access allow kifarunix-demo-net

# And finally deny all other access to this proxy
http_access deny all

根據特定關鍵字屏蔽網站

您還可以通過使用關鍵字來限制對網站的訪問。創建具有特定關鍵字的文件,如下所示;

vim /etc/squid/banned-keywords.squid
porn
ads
movie
gamble

在squid配置文件上進行必要的更改。

...
#
# My LAN network ACL
acl kifarunix-demo-net src 192.168.57.0/24
...
acl CONNECT method CONNECT
# ACL for Sites to Block Access to
acl deniedsites dstdomain "/etc/squid/denied-sites.squid"
acl keyword-ban url_regex -i "/etc/squid/keyword-ban.squid"
...
# http_access allow localnet
http_access allow localhost
# Deny access to facebook, youtube, netflix
http_access deny deniedsites
# Deny access based on keywords
http_access deny keyword-ban
# Allow kifarunix-demo-net
http_access allow kifarunix-demo-net

# And finally deny all other access to this proxy
http_access deny all

注意http_access 條目從上到下進行處理,並根據訪問的先後順序來允許或拒絕訪問。

屏蔽外向流量

通過使用代理服務器將代理的IP地址提供給其他Web服務器來匿名化IP地址,代理服務器可能會在傳出的HTTP請求中公開您的IP地址。但是,您可以通過在squid配置文件的末尾包含以下指令來禁用此功能。

通過定位行來在請求和回復中禁用“通過標題”, # via on,取消注釋並將其值設置為 off

#Default:
# via on
via off

通過取消注釋行,將Squid配置為不在客戶端轉發的HTTP請求中附加客戶端的IP地址, # forwarded_for on,並將值設置為 off

#Default:
# forwarded_for on
forwarded_for off

刪除Squid代理標頭,以避免泄露Squid代理服務器的身份。您可以在該部分下面添加以下行, # TAG: request_header_access

request_header_access From deny all
request_header_access Server deny all
request_header_access WWW-Authenticate deny all
request_header_access Link deny all
request_header_access Cache-Control deny all
request_header_access Proxy-Connection deny all
request_header_access X-Cache deny all
request_header_access X-Cache-Lookup deny all
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
request_header_access Pragma deny all
request_header_access Keep-Alive deny all

更改魷魚默認端口

魷魚代理聽 TCP port 3128 默認。要更改此端口,請打開 /etc/squid/squid.conf 配置文件並替換 http_port 與您所需的端口號。

例如,只要沒有其他應用程序在同一端口上偵聽,就可以將默認端口更改為8888。

...
# Squid normally listens to port 3128
# http_port 3128                 << Comment the line by adding #
http_port 8888
...

您也可以將其設置為偵聽特定IP(相應地替換IP地址

http_port 192.168.57.8:3128

完成配置後,保存並退出配置文件。

檢查Squid配置文件中的錯誤

squid -k parse

如果有語法錯誤,將顯示錯誤的行。確保每次修改配置時都運行此命令。

重啟魷魚

完成配置後,保存文件並重新啟動squid。

systemctl restart squid

檢查Squid是否在定義的端口上偵聽。在這種情況下,我們沒有更改默認值。

ss -altnp | grep 3128
LISTEN    0         256           192.168.57.8:3128             0.0.0.0:*        users:(("squid",pid=3808,fd=12))

在防火牆上允許魷魚端口

如果UFW正在運行,則允許打開魷魚代理端口;

ufw allow 3128/tcp

配置客戶端以通過代理服務器連接

要配置端點通過Squid代理服務器連接到Internet,可以設置系統範圍的代理配置,將客戶端配置為使用Squid代理作為網關,或者在瀏覽器上設置代理設置。

系統範圍的代理配置

要設置系統範圍的代理配置,請在下面創建配置文件 /etc/profile.d 環境變量定義了魷魚代理服務器的詳細信息,如下所示;

vim /etc/profile.d/squid.sh

相應地替換Squid服務器的IP地址。

PROXY_URL="192.168.57.8:3128"
HTTP_PROXY=$PROXY_URL
HTTPS_PROXY=$PROXY_URL
FTP_PROXY=$PROXY_URL
http_proxy=$PROXY_URL
https_proxy=$PROXY_URL
ftp_proxy=$PROXY_URL
export HTTP_PROXY HTTPS_PROXY FTP_PROXY http_proxy https_proxy ftp_proxy

之後,獲取新的配置文件。

source /etc/profile.d/squid.sh

要對此進行測試,請嘗試從客戶端下載任何內容,同時將訪問日誌記錄在魷魚代理服務器上。

在客戶端的終端上運行;

wget google.com
--2020-06-02 21:24:08--  http://google.com/
Connecting to 192.168.57.8:3128... connected.
Proxy request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
--2020-06-02 21:24:08--  http://www.google.com/
Reusing existing connection to 192.168.57.8:3128.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.4’

index.html.4                                   [ <=>                                                                                     ]  12.36K  --.-KB/s    in 0.01s   

2020-06-02 21:24:08 (971 KB/s) - ‘index.html.4’ saved [12657]

在Squid代理服務器上;

tail -f /var/log/squid/access.log
1591122302.356      0 192.168.57.10 TCP_MEM_HIT/301 629 GET http://google.com/ - HIER_NONE/- text/html
1591122302.642    282 192.168.57.10 TCP_MISS/200 13538 GET http://www.google.com/ - HIER_DIRECT/216.58.223.100 text/html

在Firefox瀏覽器上配置代理設置。

在Firefox上,將其配置為通過Squid服務器連接外部網絡。 偏好 > l> 網絡設置>手動代理配置。校驗 將此代理服務器用於所有協議。

嘗試訪問瀏覽器上被阻止的站點。 ;

在Ubuntu 20.04上安裝和設置Squid代理

檢查日誌。

tail -f /var/log/squid/access.log
1591126191.919      0 192.168.57.11 TCP_DENIED/403 3963 CONNECT www.youtube.com:443 - HIER_NONE/- text/html

以及如何從根本上配置squid代理以阻止或拒絕對外部資源的訪問。這標誌着本教程有關如何在Ubuntu 20.04上安裝和配置Squid代理的結尾。

Sidebar