Thứ tư, 07/10/2020 | 00:00 GMT+7

Cách cấu hình quyền truy cập từ xa cho MongoDB trên CentOS 8

MongoDB , còn gọi là Mongo , là một opensource database được sử dụng trong nhiều ứng dụng web hiện đại. Theo mặc định, nó 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 nó 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 an toàn truy cập từ một máy tính từ xa tin cậy . Để thực hiện việc này, bạn sẽ cập nhật các luật firewall của bạn để cung cấp cho máy tính từ xa 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 Mongo để thay đổi cài đặt liên kết IP của nó. Sau đó, bước cuối cùng, bạn sẽ kiểm tra xem máy tính từ xa của bạn có thể kết nối thành công với database của bạn hay không.

Yêu cầu

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

  • Server chạy CentOS 8. Server này phải có admin-user không phải root và firewall được cấu hình bằng firewalld . Cài đặt điều này theo hướng dẫn cài đặt server ban đầu của ta cho CentOS 8 .
  • MongoDB được cài đặt trên server của bạn. Hướng dẫn này giả định bạn đã cài đặt MongoDB 4.4 hoặc mới hơn. Bạn có thể cài đặt version này theo hướng dẫn của ta về Cách cài đặt MongoDB trên CentOS 8 .
  • Một máy tính thứ hai mà bạn sẽ truy cập version MongoDB của bạn . Để đơn giản, hướng dẫn này giả định máy này là một server CentOS 8 khác. Giống như server MongoDB của bạn, máy này phải có admin-user không phải root và firewall được cấu hình với firewalld như được mô tả trong hướng dẫn cài đặt server ban đầu của ta cho CentOS 8 . Tuy nhiên, Bước 1 và 2, mô tả quy trình thực tế để kích hoạt kết nối từ xa trên server database , sẽ hoạt động dù máy từ xa đang chạy hệ điều hành nào.

Cuối cùng, trong khi nó không phải là cần thiết để hoàn thành hướng dẫn này, ta khuyên bạn an toàn cài đặt MongoDB của bạn bằng cách tạo một account user hành chính đối với các database và cho phép xác thực. Để thực hiện việc này, hãy làm theo hướng dẫn của ta về Cách bảo mật MongoDB trên CentOS 8 .

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

Giả sử bạn đã làm theo hướng dẫn cài đặt server ban đầu tiên quyết và cài đặt firewalld trên server của bạn , thì cài đặt MongoDB của bạn sẽ không 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 , đâ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 nơi database đang lắng nghe bằng cách thêm luật firewall mới.

Bắt đầu bằng cách kiểm tra xem cài đặt MongoDB của bạn đang nghe trên cổng nào bằng netstat . netstat là một tiện ích dòng lệnh hiển thị thông tin về các kết nối mạng TCP đang hoạt động.

Lệnh sau sẽ chuyển hướng kết quả được tạo ra bởi sudo netstat -plunt đến một grep tìm kiếm bất kỳ dòng nào chứa chuỗi mongo :

  • sudo netstat -plunt | grep mongo

Đầu ra ví dụ này cho biết MongoDB đang lắng nghe các kết nối tới 127.0.0.1 , một địa chỉ lặp lại đặc biệt đại diện cho localhost , trên cổng mặc định của nó, 27017 :

Output
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      15918/mongod     

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ữ một ứng dụng. Một cách để cấu hình điều này với firewalld là chạy lệnh firewall-cmd 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 trong khi chỉ cho phép địa chỉ IP của một server tin cậy khác.

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

Lưu ý : Nếu kết quả của lệnh trước đó cho biết 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 firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="trusted_server_ip" port protocol="tcp" port="27017" accept'

Lệnh này vĩnh viễn thêm một luật phong phú vào vùng public của firewall . Các luật phong phú là các tính năng trong firewalld cho phép bạn kiểm soát chi tiết hơn những ai có quyền truy cập vào server của bạn thông qua việc sử dụng một số tùy chọn. Luật được cung cấp trong lệnh này chỉ định rằng chỉ địa chỉ trusted_server_ip mới được phép tạo kết nối xuyên tường. Nó cũng chỉ định rằng nó chỉ có thể thực hiện bằng cách sử dụng giao thức TCP để kết nối với cổng 27017 .

Nếu luật được thêm thành công, lệnh sẽ trả về success trong kết quả :

Output
success 

Cập nhật firewall để luật mới có hiệu lực:

  • sudo firewall-cmd --reload

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 bằng cách chạy firewall-cmd với tùy chọn --list-all :

  • sudo firewall-cmd --list-all

Đầu ra sẽ bao gồm luật phong phú mới cho phép lưu lượng truy cập đến cổng 27017 từ server từ xa:

Output
public (active) . . .   rich rules:      rule family="ipv4" source address="157.230.58.94" port port="27017" protocol="tcp" accept 

Bạn có thể tìm hiểu thêm về firewalld trong Cách cài đặt firewall bằng firewalld trên CentOS 8 .

Tiếp theo, bạn sẽ liên kết MongoDB với địa chỉ IP công khai của server để bạn 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 , network interface loopback local . Điều này nghĩa là MongoDB chỉ có thể chấp nhận các kết nối bắt nguồn từ server nơi 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 của bạn. 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 và đóng file . Nếu bạn sử dụng nano , hãy làm như vậy bằng cách nhấn CTRL + X , Y , sau đó ENTER .

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

  • sudo systemctl restart mongod

Sau đó, cài đặt MongoDB của bạn có thể chấp nhận các 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 của bạn 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ó thể định tuyến 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 đang chạy CentOS 8. 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 thử nghiệm các phương pháp đượ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.

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

  • ssh sammy@trusted_server_ip

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 cá thể 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 bạn chỉ định cả địa chỉ IP và số cổng.

Nếu bạn chưa có, bạn có thể cần cài đặt nc . Phiên bản từ repository CentOS chính thức thực sự là một bản triển khai có tên ncat , được viết bởi Dự án Nmap dưới dạng bản cập nhật cho netcat.

Cài đặt ncat bằng lệnh :

  • sudo dnf install nc

Nhấn y rồi nhấn ENTER khi được yêu cầu xác nhận bạn muốn cài đặt gói.

Sau đó, chạy lệnh nc sau, bao gồm tùy chọn -z . Điều này hạn chế nc chỉ quét một daemon đang lắng nghe trên server đích mà không gửi bất kỳ dữ liệu nào cho nó. Nhớ lại từ hướng dẫn cài đặt yêu cầu rằng MongoDB đang chạy dưới dạng daemon dịch vụ, làm cho tùy chọn này hữu ích để kiểm tra kết nối. Nó cũng bao gồm tùy chọn v làm tăng độ dài của lệnh, khiến ncat trả về một số kết quả mà nếu không thì nó sẽ không.

Chạy lệnh nc sau từ server từ xa tin cậy của bạn , đảm bảo thay thế 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 nó đã tạo kết nối:

Output
Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to mongodb_server_ip:27017. Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds. 

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 version MongoDB được cài đặt trên server lưu trữ.

Một cách để kết nối là với một 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 CentOS 8 được khuyến nghị, bạn sẽ đóng quyền truy cập vào database của bạn đố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ủa bạn 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 cài đặt MongoDB của bạn từ một server từ xa. Đến đây, bạn có thể quản lý database Mongo của bạn từ xa từ server tin cậy . Ngoài ra, bạn có thể cấu hình ứng dụng để chạy trên server tin cậy và sử dụng database từ xa.

Nếu bạn chưa cấu hình admin-user và cài đặt xác thực , 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 của bạn. Nếu bạn chưa làm như vậy, ta khuyên bạn nên làm theo hướng dẫn của ta về Làm thế nào để an toàn MongoDB trên CentOS 8 để thêm một user và khóa hành chính điều xuống thấp hơn nữa.


Tags:

Các tin liên quan

Cách cài đặt MongoDB trên CentOS 8
2020-10-07
Cách bảo mật MongoDB trên CentOS 8
2020-10-07
Cách cấu hình ghi log HAProxy với Rsyslog trên CentOS 8 [Quickstart]
2020-09-22
Cách cài đặt Git trên CentOS 8
2020-04-12
Cách thiết lập và cấu hình Tổ chức phát hành chứng chỉ (CA) trên CentOS 8
2020-04-06
Cách cài đặt MariaDB trên CentOS 8
2020-04-03
Cách thiết lập firewall bằng firewalld trên CentOS 8
2020-04-03
Cách thêm và xóa người dùng trên CentOS 8
2020-04-03
Cách cài đặt Node.js trên CentOS 8
2020-04-01
Cách tạo người dùng mới hỗ trợ Sudo trên CentOS 8 [Khởi động nhanh]
2020-03-30