Thiết lập máy chủ Proxy dùng Squid trên Linux Image Thiết lập máy chủ Proxy dùng Squid trên Linux

Bài viết này sẽ giới thiệu với các bạn về cách thiết lập máy chủ Proxy dùng Squid trên hệ điều hành Linux. Từ đây giúp chúng ta học Linux một cách dể dàng hơn. Các proxy web đã xuất hiện từ khá lâu và được người sử dụng với một số mục đích phổ biến nhất là ẩn danh trực tuyến, nhưng có nhiều cách để sử dụng proxy như là:

  • Online ẩn danh.
  • Cải thiện bảo mật trực tuyến.
  • Cải thiện thời gian tải.
  • Chặn truy cập độc hại.
  • Lưu trữ hoạt động trực tuyến của chúng ta.
  • Làm giảm việc sử dụng băng thông.

1. Cách hoạt động của Proxy

Cách hoạt động của Proxy

Proxy server là máy chủ trung gian giữa client và server thực hiện nhiệm vụ chuyển dữ liệu giữa client với server. Ví dụ chúng ta có một client yêu cầu truy cập mọt trang web thì đầu tiên client phải kết nối với proxy server.

Ngay sau khi được yêu cầu thì proxy server sẽ kiểm tra bộ đệm của nó xem có dữ liệu trong đó, nó sẽ trả lại dữ liệu cho client, nếu không có trên bộ nhớ đệm, nó sẽ thực hiện yêu cầu thay cho client và gửi lại dữ liệu cho client.

Proxy server sẽ lưu trữ dữ liệu mới và sẽ sử dụng cho các yêu cầu trong tương lai được thực hiện cho cùng một máy chủ.

2. Giới thiệu Squid Proxy

Squid Proxy

Squid là một caching proxy cho web nó hỗ trợ HTTP. HTTPS, FTP... giúp chúng ta cải thiện thời gian phản hồi và làm giảm việc sử dụng băng thông.

3. Cài đặt squid trên CentOS 7/8

Squid không có yêu cầu tối thiểu nào, nhưng lượng sử dụng RAM có thể thay đổi tùy thuộc vào các client truy cập internet thông qua máy chủ proxy.

Thực thi lệnh bên dưới để cài Squit trên CentOS 7/8:

[root@blogd-net-lab01 ~]# yum -y install squid
Extra Packages for Enterprise Linux 8 - x86_64                                               9.7 kB/s | 9.5 kB     00:00
Dependencies resolved.
=============================================================================================================================
 Package                      Architecture      Version                                           Repository            Size
=============================================================================================================================
Installing:
 squid                        x86_64            7:4.4-8.module_el8.1.0+197+0c39cdc8               AppStream            3.6 M
...

Sau khi cài đặt thành công thì chúng ta thực hiện khởi động squid và kích hoạt nó khởi động cùng với hệ thống:

[root@blogd-net-lab01 ~]# systemctl start squid
[root@blogd-net-lab01 ~]# systemctl enable squid
Created symlink /etc/systemd/system/multi-user.target.wants/squid.service → /usr/lib/systemd/system/squid.service.

Ngay lúc này thì squid đã được chạy chúng ta có thể kiểm tra trạng thái của squid bằng lệnh sau:

[root@blogd-net-lab01 ~]# systemctl status squid
● squid.service - Squid caching proxy
   Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 20:14:08 +07; 20s ago
     Docs: man:squid(8)
 Main PID: 81698 (squid)
    Tasks: 3 (limit: 11362)
   Memory: 14.6M
   CGroup: /system.slice/squid.service
           ├─81698 /usr/sbin/squid -f /etc/squid/squid.conf
           ├─81700 (squid-1) --kid squid-1 -f /etc/squid/squid.conf
           └─81722 (logfile-daemon) /var/log/squid/access.log

Mar 02 20:13:53 blogd-net-lab01 systemd[1]: Starting Squid caching proxy...
Mar 02 20:14:08 blogd-net-lab01 systemd[1]: Started Squid caching proxy.
Mar 02 20:14:08 blogd-net-lab01 squid[81698]: Squid Parent: will start 1 kids
Mar 02 20:14:08 blogd-net-lab01 squid[81698]: Squid Parent: (squid-1) process 81700 started

Một số tệp quan trọng sau khi cài đặt squid:

  • File configuration của squid: /etc/squid/squid.conf
  • File Accesss log của squid: /var/log/squid/access.log
  • File Cache log của squid: /var/log/squid/cache.log

File configuration chứa một số nội dung như sau:

[root@blogd-net-lab01 ~]# cat /etc/squid/squid.conf
#
# Recommended minimum configuration:
#

# 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

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
...

4. Cấu hình Squid

Tại đây, chúng ta sẽ định cấu hình squid làm HTTP proxy chỉ sử dụng địa chỉ IP của client để xác thực.

Thêm Squid ACLs:

Nếu chúng ta cho phép địa chỉ IP truy cập web thông qua proxy server thì chúng ta cần thêm một dòng ACL mới trong file cấu hình /etc/squid/squid.conf. Dòng chúng ta cần thêm vào có cấu trúc như sau:

acl localnet src X.X.X.X

Torng đó X.X.X.X là địa chỉ IP của client chúng ta cần thêm vào. Dòng này nên được thêm vào đầu file nơi ACL được xác định.

Lưu ý: Nếu Squid nằm ngoài internet thì chúng ta nên thêm địa chỉ IP public của client.

Bây giờ chúng ta sẽ khởi động lại squid để những thay đổi mới có thể có hiệu lực:

[root@blogd-net-lab01 ~]# systemctl restart squid

Mở squid proxy port

Trong file cấu hình chúng ta thấy một số cổng nhất định được phép kết nối. Chúng ta có thể thêm nhiều hơn bằng cách chỉnh sữa file cấu hình:

Cấu trúc khi cần mở squid port thêm vào file cấu hình:

acl SSL_ports port X

Trong đó X là số port thực tế chúng ta muốn tải. Để thay đổi có hiệu lực chúng ta cần khởi động lại squid:

[root@blogd-net-lab01 ~]# systemctl restart squid

5. Xác thực squid client authentication

Trong một số trường hợp chúng ta cần client của chúng ta xác thực trước khi sử dụng proxy. Để đáp ứng nhu cầu đó, chúng ta có thể kích hoạt xác thực HTTP. Nó rất dễ và cấu hình nhanh chóng.

Trước tiên, chúng ta cần cài đặt httpd-tools:

[root@blogd-net-lab01 ~]# yum -y install httpd-tools
CentOS-8 - AppStream                                                                         2.4 kB/s | 4.3 kB     00:01
CentOS-8 - Base                                                                              7.4 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                                                            3.0 kB/s | 1.5 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64                                       6.5 kB/s | 9.1 kB     00:01
Extra Packages for Enterprise Linux 8 - x86_64                                                11 kB/s | 9.7 kB     00:00
Dependencies resolved.
=============================================================================================================================
 Package                     Architecture      Version                                            Repository            Size
=============================================================================================================================
Installing:
 httpd-tools                 x86_64            2.4.37-16.module_el8.1.0+256+ae790463              AppStream            103 k
...

Bây giờ chúng ta cần tạo một file lưu tên người dùng để xác thực. squid chạy với người dùng squid vì vậy file nên được sở hữu bởi người dùng đó:

[root@blogd-net-lab01 ~]# touch /etc/squid/passwd
[root@blogd-net-lab01 ~]# chown squid: /etc/squid/passwd

Tiếp theo chúng ta cần tạo một user mới có tên blogdclient và đặt password cho nó:

[root@blogd-net-lab01 ~]# htpasswd /etc/squid/passwd blogdclient
New password:
Re-type new password:
Adding password for user blogdclient

Sau đó chúng ta cần mở file configuration để thêm dòng sác thực vào. Sau đoạn mở port và ACLs chúng ta thêm đoạn sau vào:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users

Tiếp theo chúng ta lưu file configuration và thực hiện khởi động lại squid để thực hiện các thay đổi:

[root@blogd-net-lab01 ~]# systemctl restart squid

6. Block website với squid proxy

Tại đây chúng ta sẽ tạo môt ACLs cuối cùng để giúp chúng ta chặn các trang web không mong muốn. Đầu tiên cần tạo một file lưu trữ các web trogn danh sách đen:

[root@blogd-net-lab01 ~]# touch /etc/squid/blacklist_site.acl

Sau đó chúng ta thêm các domain cần block:

.test1.com
.test2.vn
.test3.net

Trong đó dấu chấm dầu tiên giúp chúng ta loại bỏ www, cũng như các subdomain của domain đó.

Bây giờ chúng ta mở file configuration /etc/squid/squid.conf để thêm 2 dòng sau vào:

acl bad_urls dstdomain "/etc/squid/blacklist_site.acl"
http_access deny bad_urls

Cuối cùng chúng ta thực hiện lưu file và khởi động lại squid:

[root@blogd-net-lab01 ~]# systemctl restart squid

7. Lời kết

Qua bài trên, giúp cho chúng ta cách cách thiết lập máy chủ Proxy dùng Squid trên CentOS 8 của hệ điều hành Linux. Từ đây giúp chúng ta có thể tạo proxy cho máy chủ của chúng ta. Dể dành quản lý các client trong hệ thống của chúng ta.