sql >> データベース >  >> NoSQL >> MongoDB

MongoDBレプリカセットのAppArmorを構成する方法は?

    データベースの強化について話している場合、セキュリティには多くのセクションとレイヤーがあります。これは、基盤となるストレージディスクの暗号化、データベースアクセス権限、認証、ネットワークアクセス制御、SSL / TLSを使用した送信中のデータ、およびオペレーティングシステム自体の強化から始まります。

    オペレーティングシステムの強化には、使用および利用されないサーバーサービスの無効化または削除、SSHルートログインの無効化、rsyslogの有効化、rootsアカウントを使用したアクセスの制限など、多くのチェックリストが含まれる場合があります。コンソール、システム監査の有効化、およびSELinuxの有効化。

    セキュリティチェックリストのもう1つの部分は、AppArmorサービスです。 Apparmorは、セキュリティを目的とした強制アクセス制御(MAC)システムであり、デフォルトでUbuntuおよびDebianベースのオペレーティングシステムに含まれています。また、RedhatまたはCentOSベースのオペレーティングシステムのSELinuxにも似ています。 AppArmorの目的は、オペレーティングシステムの脆弱なプロセスをロックダウンし、セキュリティの脆弱性の被害を制限することです。

    たとえば、MongoDBデータベースが誤ってインターネットに公開され、データベースサーバーに感染し、MongoDBが実行しようとしている悪意のあるコードをトリガーしたマルウェアがあった場合、AppArmorはそのような実行を防止します。 MongoDBプロファイルは、特定のMongoDBファイルでのみ読み取り、実行、および書き込みを行うように既に構成されています。

    このブログでは、MongoDBレプリカセットのAppArmor実装について説明します。

    データベースの展開

    MongoDBレプリカセットをデプロイする場合、ClusterControlを使用すると作業が楽になります。 2つのデプロイメントページを通過するだけで、ClusterControlはMongoDBレプリカセットをデプロイする準備が整います。以下に示すように、デプロイ中にSELinux/AppArmorを無効にするオプションがあります。

    AppArmor/SELinuxのオプションを無効にすることができます。次に、データベースノードのIPアドレス、管理者パスワード、およびデプロイするMongoDBバージョンを入力します。

    MongoDBレプリカセットがデプロイされたら、各ノードサーバーにジャンプできますAppArmorの構成用。

    AppArmorの設定

    すべてのプロセスは、AppArmorのプロファイルによって制限されています。プロファイルを実行できるオプションには、強制モードと苦情モードの2つがあります。強制モードが使用されている場合、アプリケーションが制限されたアクションを実行するのを防ぎ、苦情モードの場合、アプリケーションが制限されたアクションを実行してログエントリを作成できるようにします。各プロファイルはディレクトリ/etc/apparmor.d

    に保存されます

    次のコマンドを実行して、AppArmorサービスのステータスを確認できます。

    [email protected]:/etc/apparmor.d# apparmor_status
    apparmor module is loaded.
    15 profiles are loaded.
    15 profiles are in enforce mode.
       /sbin/dhclient
       /usr/bin/lxc-start
       /usr/bin/man
       /usr/lib/NetworkManager/nm-dhcp-client.action
       /usr/lib/NetworkManager/nm-dhcp-helper
       /usr/lib/connman/scripts/dhclient-script
       /usr/lib/snapd/snap-confine
       /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
       /usr/sbin/tcpdump
       lxc-container-default
       lxc-container-default-cgns
       lxc-container-default-with-mounting
       lxc-container-default-with-nesting
       man_filter
       man_groff
    0 profiles are in complain mode.
    0 processes have profiles defined.
    0 processes are in enforce mode.
    0 processes are in complain mode.
    0 processes are unconfined but have a profile defined.

    ロードされたプロファイルのリスト、苦情モードおよび強制モードのプロファイルとプロセスの数に関する情報が表示されます。 apparmor_parserコマンドを使用して、プロファイルをカーネルにロードできます:

    [email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

    プロファイルを無効にするには、ディレクトリ/etc/apparmor.d/disableへのシンボリックリンクを作成する必要があります。

    [email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable

    プロファイルを再度有効にするには、シンボリックリンクを削除して、プロファイルを再度リロードします。

    [email protected]:  rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a

    MongoDBレプリカセットのAppArmorを有効にする

    MongoDBレプリカセットでAppArmorを使用する前に、MongoDBのプロファイルを定義し、mongodbバイナリサービス、データディレクトリ、ログファイルを登録し、ネットワークとオペレーティングシステムへのアクセスを許可する必要があります。各ディレクトリ、バイナリ、およびファイルのアクセス許可を定義することもできます。以下は、MongoDBサービスのサンプルプロファイルです。

    #include <tunables/global>
    
    /usr/sbin/mongod {
      #include <abstractions/base>
      #include <abstractions/nameservice>
      #include <abstractions/user-tmp>
      #include <abstractions/winbind>
    
    # Allow system resource access
      /sys/devices/system/cpu/ r,
      /sys/devices/system/node/ r,
      /sys/devices/system/node/** r,
      /proc/*/status r,
      capability sys_resource,
      capability dac_override,
      capability setuid,
      capability setgid,
      capability sys_nice,
    
    # Allow network access
      network tcp,
      /etc/hosts.allow r,
      /etc/hosts.deny r,
    
    # Allow config access
      /etc/mongod.conf r,
    
    # Allow pid, socket, socket lock file access
      /var/run/mongod.pid rw,
    
    # Allow systemd notify messages
      /{,var/}run/systemd/notify w,
    
    
    # Allow execution of server binary
      /usr/sbin/mongo mr,
      /usr/sbin/mongod mr,
      /usr/sbin/mongos mr,
      /usr/sbin/mongotop mr,
      /usr/sbin/mongorestore mr,
      /usr/sbin/mongoimport mr,
      /usr/sbin/mongofiles mr,
      /usr/sbin/mongodump mr,
    
    # Allow data files dir access
      /var/lib/mongodb/ r,
      /var/lib/mongodb/** rwk,
    
    # Allow log file access
      /var/log/mongodb/ r,
      /var/log/mongodb/** rw,
    
    # Allow access to openssl config
      /etc/mongo-cluster.key r,
    
      # Site-specific additions and overrides. See local/README for details.
    }

    上記のMongoDBプロファイルを/etc/apparmor.d/usr.bin.mongodファイルに入れてから、apparmor_parserを実行してプロファイルをロードできます。

    [email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a

    apparmor_statusを使用して確認すると、ロードされたMongoDBプロファイルに関する情報が表示されます:

    [email protected]:/etc/apparmor.d# apparmor_status
    apparmor module is loaded.
    
    57 profiles are loaded.
    19 profiles are in enforce mode.
       /sbin/dhclient
       /usr/bin/lxc-start
       /usr/bin/man
       /usr/lib/NetworkManager/nm-dhcp-client.action
       /usr/lib/NetworkManager/nm-dhcp-helper
       /usr/lib/chromium-browser/chromium-browser//browser_java
       /usr/lib/chromium-browser/chromium-browser//browser_openjdk
       /usr/lib/chromium-browser/chromium-browser//sanitized_helper
       /usr/lib/connman/scripts/dhclient-script
       /usr/lib/snapd/snap-confine
       /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
       /usr/sbin/mongod
       /usr/sbin/tcpdump
       lxc-container-default
       lxc-container-default-cgns
       lxc-container-default-with-mounting
       lxc-container-default-with-nesting
       man_filter
       man_groff
    38 profiles are in complain mode.
       /usr/bin/mongod
       /usr/lib/chromium-browser/chromium-browser
       /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
       /usr/lib/chromium-browser/chromium-browser//lsb_release
       /usr/lib/chromium-browser/chromium-browser//xdgsettings

    これで、MongoDBレプリカセットの各ノードで上記の手順を繰り返して、MongoDBプロセスをAppArmorによって制限および保護することができます。


    1. RedisSYNCおよびEXEC

    2. LaravelRedisの構成

    3. クラスターフェイルオーバー

    4. ノードredisパブリッシャーがメモリを消費しすぎています