Trang chủ / Chuyên đề / Cấu hình remote-access cho mongodb trên Ubuntu 18.04
Thứ năm, 08/10/2020 | 00:00 GMT+7

Cấu hình remote-access cho mongodb trên Ubuntu 18.04

MongoDB , còn gọi là Mongo , là một opensource database được sử dụng phổ biến trong các ứng dụng web hiện đại. Theo mặc định, MongoDb chỉ cho phép các kết nối bắt nguồn từ cùng một server nơi nó được cài đặt. Nếu bạn muốn quản lý MongoDB từ xa hoặc kết nối với một server ứng dụng riêng, có một số thay đổi bạn cần thực hiện đối với cấu hình mặc định.

Trong hướng dẫn này, bạn sẽ cấu hình cài đặt MongoDB để cho phép truy cập an toàn từ xa. Để thực hiện việc này, bạn sẽ cập nhật các rule (luật) firewall để cung cấp quyền truy cập vào cổng mà MongoDB đang lắng nghe các kết nối và sau đó cập nhật file cấu hình của nó để thay đổi cài đặt liên kết IP của nó. Bước cuối cùng, bạn sẽ kiểm tra xem máy từ xa của bạn có thể kết nối thành công với database không.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần:

Ngoài ra, có thể tham khảo bảo mật MongoDB theo hướng dẫn về Cách bảo mật MongoDB trên Ubuntu 18.04 .

Bước 1 - Điều chỉnh firewall

Xem như bạn đã làm theo hướng dẫn cài đặt server ở trên và bật firewall UFW trên server , thì cài đặt MongoDB sẽ chưa thể truy cập được từ internet. Nếu bạn định chỉ sử dụng MongoDB local với các ứng dụng chạy trên cùng một server, thì đây là cài đặt được khuyến khích và bảo mật. Tuy nhiên, nếu bạn muốn có thể kết nối với server MongoDB của bạn từ xa, bạn phải cho phép các kết nối đến cổng mà database đang lắng nghe bằng cách thêm luật UFW mới.

Bắt đầu bằng cách kiểm tra xem cài đặt MongoDB đang nghe trên cổng nào bằng lệnh lsof . Lệnh này thường trả về một danh sách  mọi file đang mở trong hệ thống, nhưng khi kết hợp với tùy chọn -i , lệnh này chỉ liệt kê các file hoặc stream dữ liệu liên quan đến mạng.

Lệnh sau sẽ cho kết quả kết nối mongo :

  • sudo lsof -i | grep mongo

Kết quả cho thấy mongod đang lắng nghe các kết nối trên cổng mặc định của nó, 27017 :

Output
. . .
mongod    82221         mongodb   11u  IPv4 913411      0t0  TCP localhost:27017 (LISTEN)
. . .

Trong hầu hết các trường hợp, MongoDB chỉ nên được truy cập từ một số vị trí tin cậy, chẳng hạn như một server khác lưu trữ ứng dụng. Một cách để cấu hình là chạy lệnh sau trên server MongoDB của bạn, lệnh này sẽ mở ra quyền truy cập trên cổng mặc định của MongoDB cho phép địa chỉ IP của server tin cậy khác.

Chạy lệnh tiếp theo đây, đảm bảo thay đổi trusted_server_ip thành địa chỉ IP của máy từ xa tin cậy sẽ sử dụng để truy cập version MongoDB:

Lưu ý : Nếu kết quả của lệnh trước đó cho thấy cài đặt MongoDB của bạn đang nghe trên một cổng không phải mặc định, hãy sử dụng số cổng đó thay cho 27017 trong lệnh này.

  • sudo ufw allow from trusted_server_ip to any port 27017

Trong tương lai, nếu bạn muốn truy cập MongoDB từ một máy khác, hãy chạy lại lệnh này với địa chỉ IP của máy mới thay cho trusted_server_ip .

Bạn có thể kiểm tra thay đổi trong cài đặt firewall với ufw :

  • sudo ufw status

Kết quả kết quả hiển thị truy cập đến cổng 27017 từ server từ xa  đã được phép:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
27017                      ALLOW       trusted_server_ip
OpenSSH (v6)               ALLOW       Anywhere (v6)

Bạn có thể cài đặt firewall nâng cao hơn để hạn chế quyền truy cập vào các dịch vụ trong UFW Essentials: Common Firewall Rules and Commands .

Tiếp theo sẽ liên kết MongoDB với địa chỉ IP công cộng của server  có thể truy cập nó từ máy tính từ xa của bạn.

Bước 2 - Cấu hình một bindIP công khai

Đến đây, ngay cả khi cổng đang mở, MongoDB hiện đang bị ràng buộc với 127.0.0.1 , interface (giao-diện) mạng loopback local. Điều này nghĩa là MongoDB chỉ có thể chấp nhận các kết nối từ trong server nó được cài đặt.

Để cho phép kết nối từ xa, bạn phải chỉnh sửa file cấu hình MongoDB - /etc/mongod.conf - để liên kết thêm MongoDB với địa chỉ IP có thể định tuyến công khai của server. Bằng cách này, cài đặt MongoDB của bạn có thể lắng nghe các kết nối được thực hiện đến server MongoDB của bạn từ các máy từ xa.

Mở file cấu hình MongoDB trong editor bạn muốn. Ví dụ sau sử dụng nano :

  • sudo nano /etc/mongod.conf

Tìm phần network interfaces , sau đó bindIp giá trị bindIp :

/etc/mongod.conf
. . .
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

. . .

Thêm dấu phẩy vào dòng này, sau đó là địa chỉ IP công cộng của server MongoDB của bạn:

/etc/mongod.conf
. . .
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,mongodb_server_ip

. . .

Lưu file. Sau đó, khởi động lại MongoDB để thay đổi này có hiệu lực:

  • sudo systemctl restart mongod

Từ giờ, cài đặt MongoDB của bạn có thể chấp nhận kết nối từ xa từ bất kỳ máy nào bạn đã cho phép truy cập cổng 27017 . Bước cuối cùng, bạn có thể kiểm tra xem server từ xa tin cậy mà bạn đã cho phép thông qua firewall ở Bước 1 có thể tiếp cận version MongoDB đang chạy trên server hay không.

Bước 3 - Kiểm tra khả năng kết nối từ xa

Đến đây bạn đã cấu hình cài đặt MongoDB của bạn để lắng nghe các kết nối bắt nguồn từ địa chỉ IP công khai và cấp quyền truy cập máy từ xa của bạn thông qua firewall của server vào cổng mặc định của Mongo, bạn có thể kiểm tra xem máy từ xa có thể kết nối hay không.

Lưu ý : Như đã đề cập trong phần Yêu cầu, hướng dẫn này giả định máy từ xa của bạn là một server khác chạy Ubuntu 18.04. Quy trình cho phép kết nối từ xa được nêu trong Bước 1 và 2 sẽ hoạt động dù máy từ xa của bạn chạy hệ điều hành nào, nhưng các phương pháp kiểm tra được mô tả trong Bước này không hoạt động phổ biến trên các hệ điều hành.

Một cách để kiểm tra xem server từ xa tin cậy của bạn có thể kết nối với MongoDB hay không là sử dụng lệnh nc . nc , viết tắt của netcat , là một tiện ích được sử dụng để cài đặt kết nối mạng với TCP hoặc UDP. Nó hữu ích để kiểm tra trong những trường hợp như thế này vì nó cho phép chỉ định cả địa chỉ IP và số cổng.

Đầu tiên, đăng nhập vào server tin cậy của bạn bằng SSH:

  • ssh sammy@trusted_server_ip

Sau đó, chạy lệnh nc sau, bao gồm tùy chọn -z . Điều này giới hạn nc kiểm tra lắng nghe trên server đích mà không gửi bất kỳ dữ liệu nào cho nó. Nó cũng bao gồm tùy chọn v làm tăng độ dài của lệnh, khiến netcat trả về một số kết quả.

Chạy lệnh nc với IP server từ xa , thay mongodb_server_ip bằng địa chỉ IP của server mà bạn đã cài đặt MongoDB:

  • nc -zv mongodb_server_ip 27017

Nếu server tin cậy có thể truy cập daemon MongoDB, kết quả của nó sẽ cho biết kết nối đã thành công:

Output
Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!

Giả sử bạn đã cài đặt version mongo shell tương thích trên server từ xa của bạn, tại thời điểm này, bạn có thể kết nối trực tiếp với  MongoDB được cài đặt trên server.

Một cách để kết nối là sử dụng URI chuỗi kết nối , như sau:

  • mongo "mongodb://mongo_server_ip:27017"

Lưu ý : Nếu bạn đã làm theo hướng dẫn Cách bảo mật MongoDB trên Ubuntu 18.04 được khuyến nghị, bạn sẽ chặn quyền truy cập vào database đối với user chưa được xác thực. Trong trường hợp này, bạn cần sử dụng URI chỉ định tên user hợp lệ, như sau:

  • mongo "mongodb://username@mongo_server_ip:27017"

Shell sẽ tự động nhắc bạn nhập password của user.

Cùng với đó, bạn đã xác nhận server MongoDB có thể chấp nhận các kết nối từ server tin cậy.

Kết luận

Đến đây bạn có thể truy cập, quản lý MongoDB từ một server từ xa. Ngoài ra, bạn có thể cấu hình ứng dụng để chạy trên server và sử dụng database từ xa.

Nếu bạn chưa cấu hình admin-user (người-dùng-quản-trị) và cài đặt xác thực thì bất kỳ ai có quyền truy cập vào server từ xa của bạn cũng có thể truy cập cài đặt MongoDB, điều này có thể là một rủi ro bảo mật. Khi đó, bạn nên nên làm theo hướng dẫn về Cách bảo mật MongoDB trên Ubuntu 18.04 để thêm người-dùng-quản-trị để giới  hạn truy cập an toàn.



Các tin trước

Cài đặt anaconda python trên Ubuntu 18 2020-10-03

Tạo user mới và Phân quyền với Mysql 2020-09-29

Cài đặt LAMP (Apache MariaDb Php) trên CENTOS 8 2020-09-28

Cách cài đặt máy chủ Apache trên Centos 8 2020-09-28

Tổng quan sử dụng SSH, làm việc với SSH Client - Server 2020-09-28

Cách cài đặt SSH Key trên Centos 8, đăng nhập không cần password! 2020-09-27

Cài đặt bảo mật cơ bản cho Centos 8 2020-09-27

Lập lịch với Crontab trên Centos 8 2020-09-27

Bảo mật Apache với Lets Encrypt trên Centos 8 2020-09-19

Tạo chứng chỉ số tự ký trên Apache Centos 8 (self-signed-ssl-certificate) 2020-09-19