Cài đặt Squid Proxy Server trên Ubuntu 20.04 LTS Linux

Làm cách nào để cài đặt Squid Proxy Server trên máy chủ Ubuntu 20.04 LTS Linux cho web clients? Làm cách nào để lọc lưu lượng truy cập Internet cho người dùng mạng LAN, chẳng hạn như blocking domains, URL không mong muốn, giờ làm việc để truy cập Internet, v.v. bằng cách sử dụng Squid chạy trên máy chủ Ubuntu?

Máy chủ proxy Squid là một proxy web miễn phí và mã nguồn mở bộ nhớ đệm hiệu suất cao và proxy web HTTP chuyển tiếp. Nó chủ yếu được sử dụng để tăng tốc máy chủ web bằng cách lưu vào bộ nhớ đệm các yêu cầu lặp đi lặp lại, bộ nhớ đệm DNS và web lookup cho một mạng được chia sẻ. Nó cũng bổ sung một chính sách bảo mật để lọc ra những lưu lượng truy cập không mong muốn cho người dùng web hoặc văn phòng.
Đầu tiên, cập nhật hệ thống bằng lệnh apt:

sudo apt update
sudo apt upgrade

Chúng ta có thể tìm kiếm gói squid như sau: apt show squid

Output:
Package: squid
Version: 4.10-1ubuntu1
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Luigi Gangitano <luigi@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 8,792 kB
Provides: squid3
Pre-Depends: adduser
Depends: libc6 (>= 2.29), libcap2 (>= 1:2.10), libcom-err2 (>= 1.43.9), libdb5.3, libecap3 (>= 1.0.1), libexpat1 (>= 2.0.1), libgcc-s1 (>= 3.0), libgnutls30 (>= 3.6.6), libgssapi-krb5-2 (>= 1.17), libkrb5-3 (>= 1.10+dfsg~), libldap-2.4-2 (>= 2.4.7), libltdl7 (>= 2.4.6), libnetfilter-conntrack3 (>= 1.0.7), libnettle7, libpam0g (>= 0.99.7.1), libsasl2-2 (>= 2.1.27+dfsg), libstdc++6 (>= 9), libxml2 (>= 2.7.4), netbase, logrotate (>= 3.5.4-1), squid-common (>= 4.10-1ubuntu1), lsb-base, libdbi-perl, ssl-cert
Recommends: libcap2-bin, ca-certificates
Suggests: squidclient, squid-cgi, squid-purge, resolvconf (>= 0.40), smbclient, ufw, winbind, apparmor
Homepage: http://www.squid-cache.org
Download-Size: 2,556 kB
APT-Sources: http://mirrors.linode.com/ubuntu focal/main amd64 Packages
Description: Full featured Web Proxy cache (HTTP proxy)
Squid is a high-performance proxy caching server for web clients, supporting
FTP, gopher, ICY and HTTP data objects.

Cài đặt Squid 4

Bây giờ phần mềm hệ thống đã được cập nhật, hãy cài đặt máy chủ Squid, hãy nhập:

sudo apt install squid

Cấu hình máy chủ Squid

Tệp cấu hình squid được đặt tại thư mục /etc/squid/squid.conf /etc/squid/conf.d/. Chỉnh sửa /etc/squid/squid.conf bằng editor. Tạo một bản sao lưu của tệp gốc để có thể quay lại nếu có sự cố bằng cách sử dụng lệnh cp: sudo cp -v /etc/squid/squid.conf{,.factory}

Lệnh trên có nghĩa là sao lưu một bản như sau: /etc/squid/squid.conf' -> '/etc/squid/squid.conf.factory'


Mở file /etc/squid/squid.conf:

sudo nano /etc/squid/squid.conf
## Hoặc ##
sudo vim /etc/squid/squid.conf

Thay đổi cổng squid và danh sách địa chỉ IP. Theo mặc định, squid lắng nghe tất cả các địa chỉ IP trên tất cả các interface. Cổng mặc định là TCP 3128. Tìm dòng: http_port 3128

Thay đổi nó như sau hoặc theo nhu cầu của bạn: http_port 10.8.0.1:3128

Thiết lập ACL cho các cổng

ACL có nghĩa là một sơ đồ kiểm soát truy cập (access control scheme) và chúng tôi có thể sử dụng nó để từ chối hoặc cho phép truy cập theo nhu cầu của mình. Ví dụ: time acl cho phép bạn thiết lập thời gian duyệt internet trong ngày và ngày trong tuần cho người dùng của mình. Bạn không thích các domain truyền thông xã hội? Chúng tôi có thể chặn miền như Facebook và các domain khác bằng máy chủ proxy Squid. 
Xác định SSL và các cổng an toàn mà bạn muốn cho phép

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

Điều chỉnh danh sách các mạng IP (nội bộ) từ nơi duyệt web được phép

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

Xác định địa chỉ mạng LAN của bạn như sau

acl mylan src 10.8.0.1/24 với 10.8.0.1 là địa chỉ IP của máy

Xác định các miền khác mà bạn muốn chặn:

acl baddomain1 dstdomain www-bad-guys-domain-name-here

Sử dụng http_access cho phép các client HTTP như trình duyệt truy cập vào cổng HTTP. Đây là danh sách kiểm soát truy cập chính.

# Block access to all Unsafe ports i.e. only allow Safe_ports defined in acl above #
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
# Block domains #
http_access deny baddomain1
# only allow cachemgr access from localhost #
http_access allow localhost manager
http_access deny manager
# Allow internet access to localhost and mylan sub/net #
http_access allow localhost
http_access allow mylan
# and finally deny all other access to this proxy server #
http_access deny all

Giả sử nếu bạn có nhiều địa chỉ IP được chỉ định cho máy chủ của mình, chúng tôi có thể thay đổi địa chỉ IP gửi đi của máy chủ proxy như sau:

tcp_outgoing_address 139.1.2.3 với địa chỉ 139.1.2.3 là địa  chỉ IP mà bạn muốn thay thế

Đặt kích thước bộ nhớ đệm theo nhu cầu của bạn: cache_mem 256 MB

Ẩn địa chỉ IP thực của người dùng trên Squid 

forwarded_for delete
via off
forwarded_for off
follow_x_forwarded_for deny all
request_header_access X-Forwarded-For deny all
forwarded_for delete

Chỉ định danh sách các máy chủ định danh DNS để sử dụng: dns_nameservers 127.0.0.1 10.8.0.1
Squid có nhiều tùy chọn. Tôi đã đề cập đến vấn đề cơ bản ở đây. Do đó, hãy xem trang này, nơi bạn tìm thấy tất cả các chỉ thị cấu hình Squid.

Xác minh rằng các tùy chọn cấu hình là hợp lệ: sudo /usr/sbin/squid -k check

Start/stop/restart Squid

Đầu tiên, hãy bật dịch vụ Squid tại thời điểm khởi động bằng lệnh systemctl:

sudo systemctl enable squid.service

Khởi động máy chủ Squid: sudo systemctl start squid.service
Stop máy chủ Squid: sudo systemctl stop squid.service hoặc sudo squid -k shutdown
Khởi động lại máy chủ Squid: sudo systemctl restart squid.service
Hiển thị status Squid: sudo systemctl status squid.service
Bất cứ khi nào bạn thực hiện thay đổi đối với squid.conf, hãy tải lại nó như sau: sudo squid -k reconfigure Hoặc sudo systemctl reload squid.service

Block domains

Chặn twitter.com và facebook.com:

acl socialsite dstdomain .twitter.com
acl socialsite dstdomain .facebook.com
http_access deny socialsite

Block URLs sử dụng keywords
Giả sử nếu có bất kỳ url nào chứa từ khóa như "foo" hoặc "browse.php?u=", hãy chặn nó bằng cách sử dụng url_regex acl:

acl urlkeywordsblocks url_regex -i "/etc/squid/blocked-urls-keyword.conf"
http_access deny urlkeywordsblocks

Tạo một tệp có tên /etc/squid/blockd-urls-keyword.conf như sau: 

sudo vim /etc/squid/blocked-urls-keyword.conf

Thêm các urls/keywords:

foo
browse.php?u=

Block file extensions

Chặn các phần mở rộng tệp không mong muốn bằng proxy Squid:

acl blockedexentions urlpath_regex -i "/etc/squid/blocked-file-externsions.conf"    
http_access deny blockedexentions

Thêm các nội dung dưới đây vào /etc/squid/blocked-file-externsions.conf:

.exec
.mp4
.mp3
.zip
.pdf


Chỉ cho phép truy cập Internet trong khoảng thời gian từ 9:00 sáng đến 18:00 các ngày trong tuần

acl official_hours time M T W H F 09:00-18:00
http_access deny all
http_access allow official_hours

Cấu hình trình duyệt web

Cài đặt kết nối để sử dụng proxy có thể được đặt trong Firefox Preferences như sau:
  • Nhấp vào nút menu và chọn Preferences
  • Trong General, chuyển đến phần Network Settings bằng cách cuộn xuống trang tùy chọn.
  • Nhấp vào Settings.... Hộp thoại Cài đặt Kết nối sẽ mở ra và đặt địa chỉ máy chủ proxy chẳng hạn như 10.8.0.1 và cổng 3128