MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách bảo mật máy chủ ClusterControl

Trong bài đăng trên blog trước của chúng tôi, chúng tôi đã chỉ cho bạn cách bạn có thể bảo mật cơ sở dữ liệu nguồn mở của mình với ClusterControl. Nhưng bản thân máy chủ ClusterControl thì sao? Làm thế nào để chúng tôi bảo mật nó? Đây sẽ là chủ đề cho blog của ngày hôm nay. Chúng tôi giả định rằng máy chủ lưu trữ chỉ dành cho việc sử dụng ClusterControl, không có ứng dụng nào khác chạy trên đó.

Firewall &Security Group

Trước hết, chúng ta nên đóng tất cả các cổng không cần thiết và chỉ mở các cổng cần thiết được ClusterControl sử dụng. Trong nội bộ, giữa ClusterControl và các máy chủ cơ sở dữ liệu, chỉ có cổng netcat là quan trọng, trong đó cổng mặc định là 9999. Chỉ cần mở cổng này nếu bạn muốn lưu trữ bản sao lưu trên máy chủ ClusterControl. Nếu không, bạn có thể đóng nó lại.

Từ mạng bên ngoài, bạn chỉ nên mở quyền truy cập vào HTTP (80) hoặc HTTPS (443) cho giao diện người dùng ClusterControl. Nếu bạn đang chạy ClusterControl CLI được gọi là 's9s', điểm cuối CMON-TLS cần được mở trên cổng 9501. Bạn cũng có thể cài đặt các ứng dụng liên quan đến cơ sở dữ liệu trên máy chủ ClusterControl, như HAProxy, Keepalived, ProxySQL, v.v. Trong trường hợp đó, bạn cũng phải mở các cổng cần thiết cho những cổng này. Vui lòng tham khảo trang tài liệu để biết danh sách các cổng cho từng dịch vụ.

Để thiết lập các quy tắc tường lửa qua iptables, trên nút ClusterControl, hãy thực hiện:

$ iptables -A INPUT -p tcp --dport 9999 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 443 -j ACCEPT
$ iptables -A INPUT -p tcp --dport 9501 -j ACCEPT
$ iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

Trên đây là các lệnh đơn giản nhất. Bạn có thể chặt chẽ hơn và mở rộng các lệnh để tuân theo chính sách bảo mật của mình - ví dụ:bằng cách thêm giao diện mạng, địa chỉ đích, địa chỉ nguồn, trạng thái kết nối và những gì không.

Tương tự như chạy thiết lập trên đám mây, sau đây là ví dụ về các quy tắc nhóm bảo mật gửi đến cho máy chủ ClusterControl trên AWS:

Các nhà cung cấp đám mây khác nhau cung cấp các triển khai nhóm bảo mật khác nhau, nhưng các quy tắc cơ bản là tương tự nhau.

Mã hóa

ClusterControl hỗ trợ mã hóa thông tin liên lạc ở các cấp độ khác nhau, để đảm bảo các tác vụ tự động hóa, giám sát và quản lý được thực hiện một cách an toàn nhất có thể.

Chạy trên HTTPS

Tập lệnh trình cài đặt (install-cc.sh) sẽ định cấu hình theo mặc định chứng chỉ SSL tự ký để sử dụng HTTPS. Nếu bạn chọn phương thức truy cập này làm điểm cuối chính, bạn có thể chặn dịch vụ HTTP thuần đang chạy trên cổng 80 từ mạng bên ngoài. Tuy nhiên, ClusterControl vẫn yêu cầu quyền truy cập vào CMONAPI (giao diện Rest-API kế thừa) chạy theo mặc định trên cổng 80 trên máy chủ cục bộ. Nếu bạn muốn chặn toàn bộ cổng HTTP, hãy đảm bảo rằng bạn thay đổi URL API ClusterControl trong Đăng ký theo cụm trang để sử dụng HTTPS thay thế:

Chứng chỉ tự ký được cấu hình bởi ClusterControl có hiệu lực 10 năm (3650 ngày). Bạn có thể xác minh tính hợp lệ của chứng chỉ bằng cách sử dụng lệnh sau (trên máy chủ CentOS 7):

$  openssl x509 -in /etc/ssl/certs/s9server.crt -text -noout
...
        Validity
            Not Before: Apr  9 21:22:42 2014 GMT
            Not After : Mar 16 21:22:42 2114 GMT
...

Lưu ý rằng đường dẫn tuyệt đối đến tệp chứng chỉ có thể khác nhau tùy thuộc vào hệ điều hành.

Mã hóa máy khách-máy chủ MySQL

ClusterControl lưu trữ dữ liệu giám sát và quản lý bên trong cơ sở dữ liệu MySQL trên nút ClusterControl. Vì bản thân MySQL hỗ trợ mã hóa SSL máy khách-máy chủ, ClusterControl có khả năng sử dụng tính năng này để thiết lập giao tiếp được mã hóa với máy chủ MySQL khi ghi và truy xuất dữ liệu của nó.

Các tùy chọn cấu hình sau được hỗ trợ cho mục đích này:

  • cmondb_ssl_key - đường dẫn đến khóa SSL, để mã hóa SSL giữa CMON và CMON DB.
  • cmondb_ssl_cert - đường dẫn đến chứng chỉ SSL, để mã hóa SSL giữa CMON và CMON DB
  • cmondb_ssl_ca - đường dẫn đến SSL CA, để mã hóa SSL giữa CMON và CMON DB

Chúng tôi đã đề cập đến các bước cấu hình trong bài đăng trên blog này.

Tuy nhiên, vẫn có một điểm khó khăn. Tại thời điểm viết bài, giao diện người dùng ClusterControl có một giới hạn trong việc truy cập CMON DB thông qua SSL bằng cách sử dụng người dùng cmon. Để giải quyết vấn đề này, chúng tôi sẽ tạo một người dùng cơ sở dữ liệu khác cho giao diện người dùng ClusterControl và ClusterControl CMONAPI được gọi là cmonui. Người dùng này sẽ không bật SSL trên bảng đặc quyền của họ.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'cmonui'@'127.0.0.1' IDENTIFIED BY '<cmon password>';
mysql> FLUSH PRIVILEGES;

Cập nhật tệp cấu hình ClusterControl UI và CMONAPI nằm tại clustercontrol / bootstrap.php và cmonapi / config / database.php tương ứng với người dùng cơ sở dữ liệu mới được tạo, cmonui:

# <wwwroot>/clustercontrol/bootstrap.php
define('DB_LOGIN', 'cmonui');
define('DB_PASS', '<cmon password>');
# <wwwroot>/cmonapi/config/database.php
define('DB_USER', 'cmonui');
define('DB_PASS', '<cmon password>');

Các tệp này sẽ không bị thay thế khi bạn thực hiện nâng cấp thông qua trình quản lý gói.

Mã hóa CLI

ClusterControl cũng đi kèm với một giao diện dòng lệnh được gọi là 's9s'. Máy khách này phân tích cú pháp các tùy chọn dòng lệnh và gửi một công việc cụ thể đến dịch vụ bộ điều khiển đang lắng nghe trên cổng 9500 (CMON) hoặc 9501 (CMON với TLS). Sau đó là một trong những khuyến nghị. Theo mặc định, tập lệnh trình cài đặt sẽ định cấu hình CLI s9s để sử dụng 9501 làm cổng điểm cuối của máy chủ ClusterControl.

Kiểm soát truy cập dựa trên vai trò

ClusterControl sử dụng Kiểm soát truy cập dựa trên vai trò (RBAC) để hạn chế quyền truy cập vào các cụm và các tính năng triển khai, quản lý và giám sát tương ứng của chúng. Điều này đảm bảo rằng chỉ những yêu cầu của người dùng được ủy quyền mới được phép. Quyền truy cập vào chức năng rất chi tiết, cho phép tổ chức hoặc người dùng xác định quyền truy cập. ClusterControl sử dụng khung quyền để xác định cách người dùng có thể tương tác với chức năng quản lý và giám sát, sau khi họ đã được phép làm như vậy.

Giao diện người dùng RBAC có thể được truy cập thông qua ClusterControl -> Quản lý người dùng -> Kiểm soát truy cập :

Tất cả các tính năng đều tự giải thích nhưng nếu bạn muốn mô tả bổ sung, vui lòng xem trang tài liệu.

Nếu bạn đang có nhiều người dùng tham gia vào hoạt động cụm cơ sở dữ liệu, bạn nên đặt các điều khiển truy cập cho họ cho phù hợp. Bạn cũng có thể tạo nhiều nhóm (tổ chức) và chỉ định chúng bằng 0 hoặc nhiều nhóm.

Chạy trên các cổng tùy chỉnh

ClusterControl có thể được cấu hình để sử dụng các cổng tùy chỉnh cho tất cả các dịch vụ phụ thuộc. ClusterControl sử dụng SSH làm kênh giao tiếp chính để quản lý và giám sát các nút từ xa, Apache để phục vụ giao diện người dùng ClusterControl và cả MySQL để lưu trữ dữ liệu giám sát và quản lý. Bạn có thể chạy các dịch vụ này trên các cổng tùy chỉnh để giảm véc tơ tấn công. Các cổng sau là mục tiêu thông thường:

  • SSH - mặc định là 22
  • HTTP - mặc định là 80
  • HTTPS - mặc định là 443
  • MySQL - mặc định là 3306

Có một số điều bạn phải thay đổi để chạy các dịch vụ trên trên các cổng tùy chỉnh để ClusterControl hoạt động bình thường. Chúng tôi đã trình bày chi tiết vấn đề này trong trang tài liệu, Chạy trên Cổng Tùy chỉnh.

Quyền và Quyền sở hữu

Các tệp cấu hình ClusterControl lưu giữ thông tin nhạy cảm và phải được giữ kín đáo và bảo vệ tốt. Các tệp chỉ được phép cho người dùng / root nhóm, không có quyền đọc cho người khác. Trong trường hợp quyền và quyền sở hữu bị đặt sai, lệnh sau sẽ giúp khôi phục chúng về trạng thái chính xác:

$ chown root:root /etc/cmon.cnf /etc/cmon.d/*.cnf
$ chmod 700 /etc/cmon.cnf /etc/cmon.d/*.cnf

Đối với dịch vụ MySQL, hãy đảm bảo nội dung của thư mục dữ liệu MySQL được phép cho nhóm "mysql" và người dùng có thể là "mysql" hoặc "root":

$ chown -Rf mysql:mysql /var/lib/mysql

Đối với giao diện người dùng ClusterControl, quyền sở hữu phải được cấp phép cho người dùng Apache, "apache" đối với RHEL / CentOS hoặc "www-data" đối với HĐH dựa trên Debian.

Khóa SSH để kết nối với các máy chủ cơ sở dữ liệu là một khía cạnh rất quan trọng khác, vì nó chứa danh tính và phải được giữ với quyền và quyền sở hữu thích hợp. Hơn nữa, SSH sẽ không cho phép sử dụng tệp khóa không an toàn khi bắt đầu cuộc gọi từ xa. Xác minh rằng tệp khóa SSH được sử dụng bởi cụm, bên trong các tệp cấu hình được tạo trong thư mục /etc/cmon.d/, được đặt thành được phép đối với osuser chỉ tùy chọn. Ví dụ:hãy xem xét osuser là "ubuntu" và tệp chính là /home/ubuntu/.ssh/id_rsa:

$ chown ubuntu:ubuntu /home/ubuntu/.ssh/id_rsa
$ chmod 700 /home/ubuntu/.ssh/id_rsa

Sử dụng mật khẩu mạnh

Nếu bạn sử dụng tập lệnh trình cài đặt để cài đặt ClusterControl, bạn được khuyến khích sử dụng mật khẩu mạnh khi được trình cài đặt nhắc. Có nhiều nhất hai tài khoản mà tập lệnh trình cài đặt sẽ cần phải định cấu hình (tùy thuộc vào thiết lập của bạn):

  • Mật khẩu cmon MySQL - Giá trị mặc định là 'cmon'.
  • Mật khẩu gốc MySQL - Giá trị mặc định là 'mật khẩu'.

Người dùng có trách nhiệm sử dụng mật khẩu mạnh trong hai tài khoản đó. Tập lệnh trình cài đặt hỗ trợ một loạt các ký tự đặc biệt cho việc nhập mật khẩu của bạn, như đã đề cập trong trình hướng dẫn cài đặt:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special password characters: [email protected]#$%^&*()_+{}<>?

Xác minh nội dung của /etc/cmon.cnf và /etc/cmon.d/cmon_*.cnf và đảm bảo rằng bạn đang sử dụng mật khẩu mạnh bất cứ khi nào có thể.

Thay đổi mật khẩu 'cmon' của MySQL

Nếu mật khẩu đã định cấu hình không đáp ứng chính sách mật khẩu của bạn, để thay đổi mật khẩu cmon MySQL, bạn cần thực hiện một số bước sau:

  1. Thay đổi mật khẩu bên trong máy chủ MySQL của ClusterControl:

    $ ALTER USER 'cmon'@'127.0.0.1' IDENTIFIED BY 'newPass';
    $ ALTER USER 'cmon'@'{ClusterControl IP address or hostname}' IDENTIFIED BY 'newPass';
    $ FLUSH PRIVILEGES;
  2. Cập nhật tất cả các lần xuất hiện của tùy chọn 'mysql_password' cho dịch vụ bộ điều khiển bên trong /etc/cmon.cnf và /etc/cmon.d/*.cnf:

    mysql_password=newPass
  3. Cập nhật tất cả các lần xuất hiện của hằng số 'DB_PASS' cho giao diện người dùng ClusterControl bên trong /var/www/html/clustercontrol/bootstrap.php và /var/www/html/cmonapi/config/database.php:

    # <wwwroot>/clustercontrol/bootstrap.php
    define('DB_PASS', 'newPass');
    # <wwwroot>/cmonapi/config/database.php
    define('DB_PASS', 'newPass');
  4. Thay đổi mật khẩu trên mọi máy chủ MySQL được ClusterControl giám sát:

    $ ALTER USER 'cmon'@'{ClusterControl IP address or hostname}' IDENTIFIED BY 'newPass';
    $ FLUSH PRIVILEGES;
  5. Khởi động lại dịch vụ CMON để áp dụng các thay đổi:

    $ service cmon restart # systemctl restart cmon

Xác minh xem quá trình cmon có được bắt đầu chính xác hay không bằng cách xem /var/log/cmon.log. Hãy chắc chắn rằng bạn có một cái gì đó giống như bên dưới:

2018-01-11 08:33:09 : (INFO) Additional RPC URL for events: 'http://127.0.0.1:9510'
2018-01-11 08:33:09 : (INFO) Configuration loaded.
2018-01-11 08:33:09 : (INFO) cmon 1.5.1.2299
2018-01-11 08:33:09 : (INFO) Server started at tcp://127.0.0.1:9500
2018-01-11 08:33:09 : (INFO) Server started at tls://127.0.0.1:9501
2018-01-11 08:33:09 : (INFO) Found 'cmon' schema version 105010.
2018-01-11 08:33:09 : (INFO) Running cmon schema hot-fixes.
2018-01-11 08:33:09 : (INFO) Schema auto-upgrade succeed (version 105010).
2018-01-11 08:33:09 : (INFO) Checked tables - seems ok
2018-01-11 08:33:09 : (INFO) Community version
2018-01-11 08:33:09 : (INFO) CmonCommandHandler: started, polling for commands.

Chạy ngoại tuyến

Tài nguyên liên quan Thông báo ClusterControl 1.5.1 - Có mã hóa dự phòng cho MySQL, MongoDB &PostgreSQL Tuân thủ PCI cho MySQL &MariaDB với ClusterControl Cách bảo mật máy chủ MySQL / MariaDB

ClusterControl có thể quản lý cơ sở hạ tầng cơ sở dữ liệu của bạn trong môi trường không cần truy cập Internet. Một số tính năng sẽ không hoạt động trong môi trường đó (sao lưu lên đám mây, triển khai bằng cách sử dụng repo công khai, nâng cấp), các tính năng chính ở đó và sẽ hoạt động tốt. Bạn cũng có thể lựa chọn để triển khai mọi thứ ban đầu với Internet, sau đó ngắt Internet sau khi thiết lập được kiểm tra và sẵn sàng cung cấp dữ liệu sản xuất.

Bằng cách tách ClusterControl và cụm cơ sở dữ liệu khỏi thế giới bên ngoài, bạn đã loại bỏ một trong những vectơ tấn công quan trọng.

Tóm tắt

ClusterControl có thể giúp bảo mật cụm cơ sở dữ liệu của bạn nhưng nó không được bảo mật bởi chính nó. Các nhóm hoạt động phải đảm bảo rằng máy chủ ClusterControl cũng được tăng cường theo quan điểm bảo mật.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Truy vấn Mongoose near (...) trên trường được lập chỉ mục 2dsphere không trả về kết quả hợp lệ

  2. Cách hideIndex () hoạt động trong MongoDB

  3. Cách tốt nhất để phân trang ajax với MongoDb và Nodejs là gì?

  4. Cài đặt và chạy MongoDB trên OSX

  5. Làm thế nào để thực hiện hiệu quả việc phân biệt với nhiều khóa?