Hướng dẫn thiết lập bảo mật máy chủ MongoDB

MongoDB là gì?

MongoDB là một cơ sở dữ liệu được sử dụng trong nhiều ứng dụng, web,… Nó là cơ sở dữ liệu NoSQL vì không dựa trên cấu trúc cơ sở dữ liệu quan hệ dựa trên bảng truyền thống. Thay vào đó, nó sử dụng các tài liệu giống JSON với các lược đồ động.

Theo mặc định MongoDB không bật xác thực theo mặc định, có nghĩa là bất kỳ người dùng nào có quyền truy cập vào máy chủ cơ sở dữ liệu được cài đặt đều có thể thêm và xóa dữ liệu mà không bị hạn chế. Để bảo mật lỗ hổng này, hướng dẫn này sẽ hướng dẫn bạn cách tạo người dùng quản trị và kích hoạt xác thực.

1. Cấu hình chỉ cho phép user quản trị truy vấn Mongodb

Bước 1: Tạo User quản trị

Để tạo user quản trị, đăng nhập vào MongoDB shell, hãy chạy lệnh sau bên dưới.
#mongosh

Tại đây, bạn có thể xem toàn bộ các database hiện có trên hệ thống với lênh:
#show dbs

Kết quả trả về:

admin 0.000GB
config 0.000GB
local 0.000GB

User quản trị sẽ được khởi tạo trong database admin, bạn thực hiện tiếp lệnh khởi tạo như sau:
>use admin #truy cập vào database admin

>db.createUser(
  {
      user: "adminperry",
      pwd: passwordPrompt(),
      roles: [ { role: "userAdminAnyDatabase", db: "admin" },"readWriteAnyDatabase" ]
  }
)

Trong đó:

Như vậy, bạn đã khởi tạo xong user quản trị và bạn có thể lấy thông tin này để tiến hành cấu hình xác thực.

Bước 2: Bật Authentication

Để có thể bật Authentication chúng ta cần sửa file mongod.conf
#vi /etc/mongod.conf

Chuyển đến dòng #security, bỏ comment # và thêm authorization: enabled
security:
    authorization: enabled

Khởi động lại mongod

#systemctl restart mongod

Bước 3: Kiểm tra 

Tiến hành truy cập lại mongoDB shell và thực hiện truy vấn một lệnh bất kỳ. Ở bài viết này sẽ sử dụng lệnh hiển thị tất cả các bản có trong hệ thống.
#mongosh

#show dbs

Khi này bạn nhận được thông báo:

MongoServerError[Unauthorized]: Command listDatabases requires authentication

Như vậy, Authentication đã được bật thành công.

Tiếp đến ta truy cập mongoDB shell với tài khoản đã khởi tạo trước đó.
#mongosh -u <Tên_user> -p --authenticationDatabase admin

Hệ thống sẽ yêu cầu bạn nhập mật khẩu:

MongoDB shell version v5.0.9
Enter password:

Từ đây chúng ta có thể thoải mái thực thi các câu lệnh truy vấn dữ liệu mà không lo gì về xác thực nữa.

2. Thay đổi port mặc định mongoDB

Cũng giống như bất kỳ cơ sở dữ liệu khác, theo mặc định, MongoDB sẽ lắng nghe các kết nối trên một cổng đó là 27017. Chúng ta có thể sử dụng lệnh bên dưới để kiểm tra cỗng mà MongoDB đang lắng nghe.
# sudo ss -lnpt | grep mongod

Để thay đổi cổng mặc định của mongoDB, chúng ta tuỳ chỉnh phần net trong file /etc/mongod.conf:
net:
   port: 21244

Chúng ta có thể thay đổi sang port khác phù hợp theo nhu cầu của cá nhân.

Sau đó lưu lại file và khởi động lại mongoDB để cấu hình đươc cập nhật.
#systemctl restart mongod

3. Cấu hình MongoDB để truy cập từ xa

Tại thời điểm này, mặc dù cổng đang mở, MongoDB hiện đang bị ràng buộc với 127.0.0.1, giao diện mạng vòng lặp cục bộ. Điều này có nghĩa là MongoDB chỉ có thể chấp nhận các kết nối bắt nguồn từ máy chủ nơi nó được cài đặt.

Để cho phép kết nối từ xa, bạn phải chỉnh sửa tệp cấu hình MongoDB /etc/mongod.conf để liên kết thêm MongoDB với một địa chỉ IP mà máy tính từ xa đáng tin cậy của bạn có thể truy cập được. Bằng cách này, MongoDB của bạn sẽ có thể lắng nghe các kết nối được tạo tới máy chủ MongoDB của bạn từ các máy từ xa.

Bạn mở file /etc/mongod.conf, tìm đến bindIP và thêm địa chỉ IP.

net:
     port: 27017
     bindIp: 127.0.0.1, <IP_address>

Lưu ý rằng đây phải là địa chỉ IP của máy chủ mà bạn đã cài đặt MongoDB, không phải địa chỉ IP của máy từ xa đáng tin cậy của bạn.

Cuối cùng lưu file và khởi động lại mongoDB để cấu hình đươc cập nhật.
#systemctl restart mongod

Nếu UFW (tường lửa của máy chủ) đang được bật, hãy chạy lệnh sau để cho phép các kết nối đến từ máy từ xa.

#ufw allow 27017/tcp hoặc #ufw allow from 10.3.2.11 to any port 27017

Reload lại UFW

#ufw reload

Kiểm tra kết nối:

Có một số cách để truy cập shell MongoDB từ xa. Bạn có thể sử dụng tiện ích Netcat để bắt đầu kết nối TCP tới cổng 27017, cổng mặc định mà MongoDB lắng nghe.

Trên máy khách, hãy cài đặt Netcat như sau.
# apt install netcat -y

Tiếp theo, để thiết lập kết nối với máy chủ MongoDB qua cổng 27017, hãy chạy lệnh sau:
#nc -zv 10.3.2.11 27017

Ngoài ra, bạn có thể đăng nhập bằng Mongo Shell như sau.
#mongosh "mongodb://adminperry@<IP_address>:27017"

4. Sử dụng xác thực X.509

Cấu hình xác thực TLS của máy chủ cho phép kết nối của client để xác minh danh tính của máy chủ. Trước tiên, chúng ta cần lấy chứng chỉ TLS mà máy chủ của chúng ta sẽ hiển thị cho client và chứng chỉ CA mà client sẽ sử dụng để xác minh rằng chứng chỉ đã xuất trình được ký bởi một cơ quan đáng tin cậy.

Chúng ta có thể sử dụng certbot để nhận chứng chỉ TLS miễn phí từ Let’s Encrypt hoặc chỉ cần tạo CA và ký chứng chỉ cục bộ bằng lệnh openssl.

Tiến hành tạo CA tự ký bằng cách thực hiện lệnh sau:
#openssl req -sha256 -new -x509 -days 365 -nodes \ -out server-ca.crt \ -keyout server-ca.key

Tiếp theo tạo CSR của máy chủ bằng cách thực thi lệnh bên dưới:
#openssl req -sha256 -new -nodes \ -subj "/CN=mongo-server.internal/O=ACME" \ -out mongo-server.csr \ -keyout mongo-server.key

Ký chứng chỉ máy chủ:
#openssl x509 -req -sha256 -days 365 \ -in mongo-server.csr \ -CA server-ca.crt \ -CAkey server-ca.key \ -CAcreateserial \ -out mongo-server.crt

Đối với các cụm nhiều node, hãy ký một chứng chỉ cho mỗi node. MongoDB yêu cầu chứng chỉ và khóa phải nằm trong cùng một file, vì vậy hãy đặt chúng lại với nhau trong một file PEM:
#cat mongo-server.crt mongo-server.key > mongo-server.pem

Bây giờ chúng ta có thể cập nhật cấu hình máy chủ để bật TLS. Chúng ta cũng nên tắt các phiên bản TLS cũ và buộc client sử dụng TLS 1.3, bằng cách cấu hình file /etc/mongod.conf tại phần net:
net:
   tls:
      mode: requireTLS
      certificateKeyFile: /root/mongo-server.pem
      disabledProtocols: TLS1_0,TLS1_1,TLS1_2

4. Cho phép truy cập và ghi log

Để kiểm tra chi tiết là một phần không thể thiếu trong quá trình tăng cường bảo mật của bất kỳ hệ thống. MongoDB không cung cấp khả năng ghi nhật ký kiểm tra tích hợp trong phiên bản mã nguồn mở của nó. Chúng ta có thể bật tính năng ghi log.

Hệ thống ghi log của MongoDB dựa trên thành phần:

Tiến hành bật trong cấu hình của mongoDB tại /etc/mongod.conf tại phần systemLog:

systemLog:
  component:
    accessControl:
      verbosity: 1
    network:
      verbosity: 1
    command:
      verbosity: 1
    query:
      verbosity: 1
    write:
      verbosity: 1

Chúc các bạn thành công!



Article ID: 1109
Cập nhật gần nhất: 18 Th11, 2024
Lần sửa đổi: 1
VPS (Máy chủ ảo) -> Hướng dẫn thiết lập bảo mật máy chủ MongoDB
https://kb.hostvn.net/hung-dn-thiet-lap-bao-mat-may-ch-mongodb_1109.html