CodeGym /Các khóa học /SQL SELF /Giới hạn truy cập theo IP và cấu hình pg_hba.conf<...

Giới hạn truy cập theo IP và cấu hình pg_hba.conf

SQL SELF
Mức độ , Bài học
Có sẵn

pg_hba.conf là file cấu hình của PostgreSQL, dùng để quản lý kết nối và xác thực. HBA là viết tắt của Host-Based Authentication (xác thực dựa trên host). File này giống như một cái "barie" mạng, quyết định:

  • Ai được phép kết nối tới server (địa chỉ IP, role, database).
  • Phương thức xác thực nào được yêu cầu khi kết nối.

Nếu so sánh với đời thực, thì pg_hba.conf giống như bảo vệ ở cửa tòa nhà. Ảnh quyết định ai được vào, ai không, kiểm tra không chỉ giấy tờ (mật khẩu) mà còn cả hộ khẩu (địa chỉ IP).

Cấu trúc file pg_hba.conf

File pg_hba.conf gồm các dòng, mỗi dòng mô tả một rule truy cập. Cấu trúc dòng như sau:

<loại kết nối> <database> <người dùng> <nguồn> <phương thức xác thực>

Phân tích các thành phần:

Loại kết nối (connection type): xác định client sẽ kết nối kiểu gì.

  • local: kết nối qua Unix socket (cho user local trên server Linux).
  • host: kết nối qua TCP/IP.
  • hostssl: kết nối qua TCP/IP nhưng bắt buộc dùng SSL.
  • hostnossl: kết nối qua TCP/IP không dùng SSL.

Database: liệt kê các database được phép truy cập. Có thể chỉ định database cụ thể, nhiều database cách nhau bằng dấu phẩy, hoặc dùng từ khóa:

  • all: Cho phép truy cập tất cả database.

Người dùng: chỉ định user nào được phép kết nối.

  • Có thể ghi tên user cụ thể hoặc dùng all để cho phép tất cả.

Nguồn (address): chỉ định địa chỉ IP client hoặc dải địa chỉ.

  • Với IPv4 dùng dạng x.x.x.x hoặc x.x.x.x/y (trong đó /y là subnet mask, ví dụ /24).
  • Với IPv6 dùng dạng ::/y.
  • Từ khóa all nghĩa là cho phép tất cả IP.

Phương thức xác thực: chỉ định cách xác thực được dùng.

Ví dụ:

  • trust: cho phép kết nối không cần mật khẩu (không an toàn, chỉ dùng test).
  • md5: dùng mật khẩu (đã hash).
  • scram-sha-256: xác thực an toàn hơn với SHA-256.
  • reject: từ chối truy cập.

Ví dụ dòng trong pg_hba.conf

Cấu hình file này khá linh hoạt. Dưới đây là vài ví dụ:

  1. Cho phép kết nối local qua Unix socket

    local   all             all                                     trust
    

    Tất cả user được kết nối tới mọi database trên server local mà không cần mật khẩu.

  2. Cho phép kết nối từ một địa chỉ IP cụ thể

    host    my_database     my_user        192.168.1.100/32         md5
    

    User my_user chỉ được kết nối tới database my_database từ IP 192.168.1.100, dùng mật khẩu.

  3. Cho phép truy cập database từ cả subnet

    host    my_database     all            192.168.1.0/24           scram-sha-256
    

    Bất kỳ user nào từ subnet 192.168.1.0/24 đều có thể kết nối tới my_database, nhưng phải xác thực bằng SHA-256.

  4. Cấm kết nối từ một subnet nhất định

    host    all             all            192.168.2.0/24           reject
    

    Kết nối từ subnet 192.168.2.0/24 bị cấm hoàn toàn.

Cấu hình truy cập theo địa chỉ IP

Giờ khi đã hiểu cấu trúc file, cùng xem cách quản lý kết nối nhé.

Thử giới hạn truy cập server từ một số IP nhất định. Giả sử bạn có server PostgreSQL và muốn chỉ cho phép truy cập từ localhost (127.0.0.1) và subnet văn phòng (192.168.10.0/24). Thêm các dòng sau vào pg_hba.conf:

# Truy cập local
host    all             all            127.0.0.1/32             trust

# Truy cập từ văn phòng
host    all             all            192.168.10.0/24          md5

# Cấm tất cả còn lại
host    all             all            0.0.0.0/0                reject

Ở đây rule 0.0.0.0/0 nghĩa là "mọi IP". Bạn đang cấm truy cập từ bất kỳ đâu ngoài các địa chỉ đã chỉ định.

Cấu hình truy cập cho user từ xa

Nếu server PostgreSQL của bạn chạy trên cloud hoặc server remote, có thể bạn chỉ muốn cho phép kết nối từ một số IP ngoài nhất định. Ví dụ:

# Truy cập cho admin từ nhà
host    all             admin_user     203.0.113.10/32          md5

Trong ví dụ này chỉ user admin_user từ IP 203.0.113.10 mới kết nối được.

Reload cấu hình

Sau khi sửa file pg_hba.conf thì PostgreSQL phải áp dụng lại. Dùng lệnh này nhé:

sudo systemctl reload postgresql

Reload an toàn, không làm server sập đâu.

Nếu quên file pg_hba.conf nằm ở đâu, có thể tra đường dẫn bằng SQL:

SHOW hba_file;

Lỗi thường gặp khi làm việc với pg_hba.conf

Làm với pg_hba.conf khá đơn giản, nhưng newbie admin đôi khi vẫn mắc lỗi. Ví dụ:

  1. Quên reload server. Mọi thay đổi trong pg_hba.conf chỉ có hiệu lực sau khi reload cấu hình thôi nhé.
  2. Rule bị xung đột. PostgreSQL xử lý rule từ trên xuống. Gặp rule nào khớp là dừng, các rule sau bị bỏ qua. Rule tổng quát nên để phía dưới.
  3. Sai subnet mask. Ví dụ ghi /0 là mở toang cho tất cả, rất nguy hiểm luôn.

Ví dụ kịch bản thực tế

Test app trên server local.

Chỉ cho phép truy cập từ localhost:

local   all   all   trust

Làm việc với client từ xa.

Cho phép client từ một IP cụ thể:

host    all   client_user   203.0.113.42/32   scram-sha-256

Giới hạn truy cập từ mạng public.

Cấm kết nối từ Internet (nhưng cho phép văn phòng):

host    all   all   0.0.0.0/0   reject
host    all   all   192.168.10.0/24   md5

Đến đây chắc bạn đã hiểu cách dùng pg_hba.conf để giới hạn truy cập PostgreSQL rồi nhỉ. File này là một trong những công cụ quan trọng nhất để bảo vệ database. Hãy đảm bảo cấu hình hợp lý, kiểm tra kỹ và phù hợp với nhu cầu business. Ai mà chẳng muốn sống trong thế giới dữ liệu an toàn khỏi hacker? Tất nhiên, trừ khi bạn chính là hacker ấy :)

1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Quản lý truy cập và bảo mật
Quản lý truy cập và bảo mật
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION