sql >> Databáze >  >> NoSQL >> MongoDB

Jak zabezpečit ClusterControl Server

V našem předchozím příspěvku na blogu jsme vám ukázali, jak můžete zabezpečit své open source databáze pomocí ClusterControl. Ale co samotný server ClusterControl? Jak to zajistíme? Toto bude téma dnešního blogu. Předpokládáme, že hostitel je určen výhradně pro použití ClusterControl a neběží na něm žádné jiné aplikace.

Skupina brány firewall a zabezpečení

V první řadě bychom měli zavřít všechny nepotřebné porty a otevřít pouze nezbytné porty používané ClusterControl. Interně mezi ClusterControl a databázovými servery záleží pouze na portu netcat, kde výchozí port je 9999. Tento port je třeba otevřít pouze v případě, že chcete zálohu uložit na server ClusterControl. Jinak to můžete zavřít.

Z externí sítě se doporučuje otevřít přístup pouze k HTTP (80) nebo HTTPS (443) pro uživatelské rozhraní ClusterControl. Pokud spouštíte ClusterControl CLI s názvem 's9s', koncový bod CMON-TLS musí být otevřen na portu 9501. Na server ClusterControl je také možné instalovat aplikace související s databází, jako je HAProxy, Keepalived, ProxySQL a podobně. V takovém případě musíte také otevřít potřebné porty pro ně. Seznam portů pro jednotlivé služby naleznete na stránce dokumentace.

Chcete-li nastavit pravidla brány firewall prostřednictvím iptables, v uzlu ClusterControl proveďte:

$ 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

Výše uvedené jsou nejjednodušší příkazy. Můžete být přísnější a rozšířit příkazy tak, aby dodržovaly vaši bezpečnostní politiku – například přidáním síťového rozhraní, cílové adresy, zdrojové adresy, stavu připojení a podobně.

Podobně jako při spuštění nastavení v cloudu je zde uveden příklad pravidel příchozích bezpečnostních skupin pro server ClusterControl na AWS:

Různí poskytovatelé cloudu poskytují různé implementace bezpečnostních skupin, ale základní pravidla jsou podobná.

Šifrování

ClusterControl podporuje šifrování komunikace na různých úrovních, aby bylo zajištěno co nejbezpečnější provádění úloh automatizace, monitorování a správy.

Běží na HTTPS

Instalační skript (install-cc.sh) ve výchozím nastavení nakonfiguruje certifikát SSL s vlastním podpisem pro použití HTTPS. Pokud zvolíte tuto přístupovou metodu jako hlavní koncový bod, můžete z externí sítě zablokovat obyčejnou službu HTTP běžící na portu 80. ClusterControl však stále vyžaduje přístup k CMONAPI (starší rozhraní Rest-API), které standardně běží na portu 80 na localhost. Pokud byste chtěli zablokovat HTTP port celý, ujistěte se, že jste změnili URL ClusterControl API v Registrace clusteru stránku použít HTTPS místo toho:

Certifikát s vlastním podpisem nakonfigurovaný ClusterControl má platnost 10 let (3650 dní). Platnost certifikátu můžete ověřit pomocí následujícího příkazu (na serveru 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
...

Vezměte na vědomí, že absolutní cesta k souboru certifikátu se může lišit v závislosti na operačním systému.

Šifrování klient-server MySQL

ClusterControl ukládá data monitorování a správy v databázích MySQL v uzlu ClusterControl. Protože samotná MySQL podporuje šifrování klient-server SSL, ClusterControl je schopen tuto funkci využít k navázání šifrované komunikace se serverem MySQL při zápisu a načítání dat.

Pro tento účel jsou podporovány následující možnosti konfigurace:

  • cmondb_ssl_key - cesta ke klíči SSL pro šifrování SSL mezi CMON a CMON DB.
  • cmondb_ssl_cert - cesta k certifikátu SSL pro šifrování SSL mezi CMON a CMON DB
  • cmondb_ssl_ca - cesta k SSL CA pro šifrování SSL mezi CMON a CMON DB

Kroky konfigurace jsme před časem popsali v tomto příspěvku na blogu.

Má to však háček. V době psaní tohoto článku má uživatelské rozhraní ClusterControl omezení v přístupu k CMON DB prostřednictvím SSL pomocí uživatele cmon. Jako náhradní řešení vytvoříme dalšího uživatele databáze pro uživatelské rozhraní ClusterControl a CMONAPI ClusterControl s názvem cmonui. Tento uživatel nebude mít ve své tabulce oprávnění povoleno SSL.

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

Aktualizujte konfigurační soubory ClusterControl UI a CMONAPI umístěné na clustercontrol/bootstrap.php a cmonapi/config/database.php pomocí nově vytvořeného databázového uživatele 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>');

Tyto soubory nebudou nahrazeny, když provedete upgrade prostřednictvím správce balíčků.

Šifrování CLI

ClusterControl také přichází s rozhraním příkazového řádku s názvem 's9s'. Tento klient analyzuje možnosti příkazového řádku a odešle konkrétní úlohu službě řadiče naslouchající na portu 9500 (CMON) nebo 9501 (CMON s TLS). Poslední jmenovaný je doporučený. Instalační skript ve výchozím nastavení nakonfiguruje s9s CLI tak, aby používal 9501 jako koncový port serveru ClusterControl.

Řízení přístupu na základě rolí

ClusterControl využívá Role-Based Access Control (RBAC) k omezení přístupu ke clusterům a jejich funkcím nasazení, správy a monitorování. Tím je zajištěno, že jsou povoleny pouze požadavky oprávněných uživatelů. Přístup k funkcím je jemně zrnitý, což umožňuje definovat přístup organizací nebo uživatelem. ClusterControl používá rámec oprávnění k definování toho, jak může uživatel pracovat s funkcemi správy a monitorování poté, co k tomu získal oprávnění.

K uživatelskému rozhraní RBAC lze přistupovat přes ClusterControl -> Správa uživatelů -> Řízení přístupu :

Všechny funkce jsou samozřejmé, ale pokud chcete další popis, podívejte se na stránku dokumentace.

Pokud je do provozu databázového clusteru zapojeno více uživatelů, důrazně se doporučuje pro ně odpovídajícím způsobem nastavit řízení přístupu. Můžete také vytvořit více týmů (organizací) a přiřadit jim žádný nebo více clusterů.

Spuštění na vlastních portech

ClusterControl lze nakonfigurovat tak, aby používal vlastní porty pro všechny závislé služby. ClusterControl používá SSH jako hlavní komunikační kanál pro vzdálenou správu a monitorování uzlů, Apache pro obsluhu uživatelského rozhraní ClusterControl a také MySQL pro ukládání dat monitorování a správy. Tyto služby můžete spouštět na vlastních portech, abyste snížili útočící vektor. Obvyklými cíli jsou následující porty:

  • SSH – výchozí hodnota je 22
  • HTTP – výchozí hodnota je 80
  • HTTPS – výchozí hodnota je 443
  • MySQL – výchozí hodnota je 3306

Existuje několik věcí, které musíte změnit, aby bylo možné spouštět výše uvedené služby na vlastních portech, aby ClusterControl fungoval správně. Podrobně jsme to popsali na stránce dokumentace, Running on Custom Port.

Oprávnění a vlastnictví

Konfigurační soubory ClusterControl obsahují citlivé informace a měly by být diskrétní a dobře chráněné. Soubory musí být povoleny pouze uživateli/skupině root, bez oprávnění ke čtení ostatním. V případě, že oprávnění a vlastnictví byly nastaveny nesprávně, následující příkaz je pomůže obnovit do správného stavu:

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

U služby MySQL se ujistěte, že obsah datového adresáře MySQL je přípustný pro skupinu "mysql" a uživatel může být buď "mysql" nebo "root":

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

U uživatelského rozhraní ClusterControl musí být vlastnictví povoleno uživateli Apache, buď "apache" pro RHEL/CentOS nebo "www-data" pro OS založený na Debianu.

Klíč SSH pro připojení k hostitelům databáze je dalším velmi důležitým aspektem, protože uchovává identitu a musí být uchováván se správným oprávněním a vlastnictvím. Kromě toho SSH nedovolí použití nezabezpečeného souboru klíče při zahájení vzdáleného volání. Ověřte, zda je soubor klíče SSH používaný clusterem uvnitř vygenerovaných konfiguračních souborů v adresáři /etc/cmon.d/ nastaven na hodnotu přípustnou pro osuser pouze možnost. Zvažte například osuser je "ubuntu" a soubor klíče je /home/ubuntu/.ssh/id_rsa:

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

Používejte silné heslo

Pokud k instalaci ClusterControl používáte instalační skript, doporučujeme vám na výzvu instalačního programu použít silné heslo. Existují maximálně dva účty, které bude muset instalační skript nakonfigurovat (v závislosti na vašem nastavení):

  • Heslo MySQL cmon – Výchozí hodnota je 'cmon'.
  • Heslo root MySQL – Výchozí hodnota je 'password'.

Je na odpovědnosti uživatele, aby v těchto dvou účtech používal silná hesla. Instalační skript podporuje spoustu speciálních znaků pro zadání hesla, jak je uvedeno v průvodci instalací:

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

Ověřte obsah /etc/cmon.cnf a /etc/cmon.d/cmon_*.cnf a ujistěte se, že používáte silné heslo, kdykoli je to možné.

Změna hesla 'cmon' MySQL

Pokud nakonfigurované heslo nevyhovuje vašim zásadám hesel, ke změně hesla cmon MySQL je třeba provést několik kroků:

  1. Změňte heslo na serveru MySQL 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. Aktualizujte všechny výskyty voleb 'mysql_password' pro službu řadiče v /etc/cmon.cnf a /etc/cmon.d/*.cnf:

    mysql_password=newPass
  3. Aktualizujte všechny výskyty konstant 'DB_PASS' pro uživatelské rozhraní ClusterControl uvnitř /var/www/html/clustercontrol/bootstrap.php a /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. Změňte heslo na každém serveru MySQL monitorovaném pomocí ClusterControl:

    $ ALTER USER 'cmon'@'{ClusterControl IP address or hostname}' IDENTIFIED BY 'newPass';
    $ FLUSH PRIVILEGES;
  5. Chcete-li použít změny, restartujte službu CMON:

    $ service cmon restart # systemctl restart cmon

Ověřte, zda je proces cmon spuštěn správně, v souboru /var/log/cmon.log. Ujistěte se, že máte něco jako níže:

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.

Spuštění offline

Související zdroje Oznámení ClusterControl 1.5.1 – Funkce Backup Encryption for MySQL, MongoDB a PostgreSQL PCI Compliance pro MySQL a MariaDB s ClusterControl Jak zabezpečit servery MySQL/MariaDB

ClusterControl je schopen spravovat vaši databázovou infrastrukturu v prostředí bez přístupu k internetu. Některé funkce by v tomto prostředí nefungovaly (zálohování do cloudu, nasazení pomocí veřejných úložišť, upgrady), hlavní funkce tam jsou a fungovaly by dobře. Máte také možnost nejprve nasadit vše s internetem a poté internet vypnout, jakmile bude nastavení otestováno a připraveno k poskytování produkčních dat.

Izolací ClusterControl a databázového clusteru od vnějšího světa jste odstranili jeden z důležitých útočných vektorů.

Shrnutí

ClusterControl může pomoci zabezpečit váš databázový cluster, ale sám o sobě není zabezpečen. Operační týmy se musí ujistit, že server ClusterControl je posílen i z hlediska zabezpečení.


  1. Laravel 4:Volání nedefinované metody Redis::connection()

  2. 2 způsoby, jak odstranit sbírku v MongoDB

  3. Klonování instance MongoDB nebo sady replik

  4. Jak provést převzetí služeb při selhání do nového hlavního uzlu při použití Redis s Sentinel a redis-py?