1. Dockerのセキュリティ問題Docker自身の脆弱性 アプリケーションとして、Docker 自体の実装にはコード欠陥があります。 CVE は、Docker の過去のバージョンにおける 20 件を超える脆弱性を公式に記録します。ハッカーが使用する一般的な攻撃方法には、コード実行、権限昇格、情報漏洩、権限バイパスなどがあります。現在、Docker のバージョンは非常に速く更新されるため、Docker ユーザーは Docker を最新バージョンにアップグレードすることをお勧めします。 Docker ソースコードの問題 Docker は、ユーザーが作成したイメージをアップロードして他のユーザーがそれをダウンロードし、環境をすばやく構築できるようにする Docker ハブを提供します。しかし、セキュリティ上の問題も生じます。 (2)イメージには脆弱なソフトウェアが使用されている。Docker Hubでダウンロード可能なイメージのうち、75%に脆弱なソフトウェアがインストールされています。したがって、イメージをダウンロードした後、その中のソフトウェアのバージョン情報をチェックして、対応するバージョンに脆弱性がないかを確認し、適時に更新してパッチを適用する必要があります。 (3)中間者攻撃:送信中にイメージの改ざんが発生する可能性があります。新しいバージョンのDockerでは、この問題を防ぐための検証メカニズムが用意されています。 2. Dockerアーキテクチャの欠陥とセキュリティメカニズムハッカーがホストマシン上の一部のコンテナを制御したり、パブリッククラウド上でコンテナを構築する方法にアクセスしてホストマシンや他のコンテナを攻撃したりする攻撃シナリオなど、Docker 自体のアーキテクチャとメカニズムから問題が発生する可能性があります。 コンテナ間のLAN攻撃 ホスト上のコンテナはローカル エリア ネットワークを形成できるため、ローカル エリア ネットワークに対する ARP スプーフィング、スニッフィング、ブロードキャスト ストームなどの攻撃を使用できます。したがって、ホスト上に複数のコンテナを展開するには、適切なネットワーク構成と iptable ルールの設定が必要です。 DDoS攻撃はリソースを消耗する cgroups セキュリティ メカニズムは、このような攻撃を防ぐように設計されています。この問題は、単一のコンテナにあまり多くのリソースを割り当てないことで回避できます。 脆弱なシステムコール Docker と仮想マシンの重要な違いは、Docker とホストマシンが同じオペレーティング システム カーネルを共有することです。ホストカーネルに権限昇格や特権エスカレーションにつながる脆弱性があると、Docker を通常のユーザーとして実行したとしても、コンテナが侵入されたときに、攻撃者はカーネルの脆弱性を悪用してホストマシンにジャンプし、さらに多くのことを行うことができます。 共有ルートユーザー権限 コンテナをルート ユーザー権限で実行すると、コンテナ内のルート ユーザーにはホスト マシン上のルート権限も付与されます。 3. Dockerコンテナと仮想マシンの違い隔離と共有 仮想マシンは、ネットワーク カード、メモリ、CPU などの仮想ハードウェアを仮想化するためのハイパーバイザー レイヤーを追加し、その上に仮想マシンを作成します。各仮想マシンには独自のシステム カーネルがあります。 Docker コンテナは、ファイル システム、プロセス、デバイス、ネットワークなどのリソースを分離し、権限や CPU リソースなどを制御することで、コンテナが互いに影響を及ぼさず、ホスト マシンにも影響を与えないようにします。コンテナはカーネル、ファイルシステム、ハードウェア、その他のリソースをホストと共有します。 パフォーマンスと損失 仮想マシンと比較すると、コンテナは消費するリソースが少なくなります。 同じホストマシン上で作成できるコンテナの数は、仮想マシンの数より多くなります。ただし、仮想マシンのセキュリティはコンテナよりもわずかに優れています。仮想マシンからホストマシンや他の仮想マシンに侵入するには、まずハイパーバイザー層に侵入する必要があり、これは非常に困難です。 Docker コンテナはカーネル、ファイル システム、その他のリソースをホスト マシンと共有するため、他のコンテナやホスト マシンに影響を与える可能性が高くなります。 Docker セキュリティ ベースライン標準以下は、カーネル、ホスト、ネットワーク、イメージ、コンテナなどの 6 つの側面から Docker セキュリティ ベースライン標準をまとめたものです。 カーネルレベル (1)カーネルを適時に更新する。 ホストレベル (1)コンテナごとに独立したパーティションを作成する。 (ファイル記述子: カーネルはファイル記述子を使用してファイルにアクセスします。ファイル記述子は負でない整数です。既存のファイルを開いたり、新しいファイルを作成したりすると、カーネルはファイル記述子を返します。ファイルの読み取りと書き込みでも、読み取りと書き込みの対象となるファイルを指定するためにファイル記述子を使用する必要があります) (6)rootユーザー権限でのDocker関連ファイルのアクセス権限は644以下にしてください。 ネットワークレベル (1)iptablesを通じてコンテナ間のネットワークトラフィックを禁止または許可するルールを設定します。 画像レベル (1)ローカルイメージリポジトリサーバーを作成します。 コンテナレベル (1)コンテナと最小限のオペレーティングシステムイメージセットを最小化する。 その他の設定 (1)ホストシステムとコンテナのセキュリティ監査を定期的に実施する。 Docker-TLS暗号化通信 Docker 通信中にリンク ハイジャック、セッション ハイジャック、その他の問題によって中間者攻撃が発生するのを防ぐには、c/s の両端で暗号化された方法で通信する必要があります。 フォルダを作成し、ホスト名を変更する(後で使用するため) [root@server1 ~]# mkdir /tls [root@server1 ~]# cd /tls [root@server1 tls]# hostnamectl set-hostname マスター [root@server1 tls]# bash [ルート@マスター tls]# クライアントの追加: [root@client ~]# vim /etc/hosts CAキーを作成し、キーパスワードを設定する [root@master tls]# openssl genrsa -aes256 -out ca-key.pem 4096 RSA秘密鍵の生成、4096ビット長の係数 ...............................................++ .............................................................................................................................................................................................................++ eは65537(0x10001) ca-key.pem のパスフレーズを入力してください: 検証中 - ca-key.pem のパスフレーズを入力してください: CA証明書を作成する [root@master tls]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=liuwei" -out ca.pem ca-key.pem のパスフレーズを入力してください: ### パスワードを入力してください サーバーの秘密鍵を作成する [root@master tls]# openssl genrsa -out server-key.pem 4096 RSA秘密鍵の生成、4096ビット長の係数 ...............................++ ..................................++ eは65537(0x10001) 署名秘密鍵 [root@master tls]# openssl req -subj "/CN=lw" -sha256 -new -key server-key.pem -out server.csr 署名にはCA証明書と秘密鍵証明書を使用します。123456と入力します。 [root@master tls]# openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem 署名OK 件名=/CN=lw CA秘密鍵の取得 ca-key.pem のパスフレーズを入力してください: クライアントキーを生成する [root@master tls]# openssl genrsa -out key.pem 4096 署名クライアント [root@master tls]# openssl req -subj "/CN=client" -new -key key.pem -out client.csr 設定ファイルを作成する echo 拡張キー使用法 = clientAuth > extfile.cnf 署名証明書、123456 を入力、必須 (署名クライアント、CA 証明書、CA キー) [root@master tls]# openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf 署名OK 件名=/CN=クライアント CA秘密鍵の取得 ca-key.pem のパスフレーズを入力してください: docker設定ファイルを変更し、サービスを再起動する ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/tls/ca.pem --tlscert=/tls/server-cert.pem --tlskey=/tls/server-key.pem -H tcp://0.0.0.0:2388 -H unix:///var/run/docker.sock Dockerを再起動する [root@master tls]# systemctl daemon-reload [root@master tls]# systemctl dockerを再起動します 3つのファイル /tls/ca.pem /tls/cert.pem /tls/key.pem をクライアントにコピーします。 [root@master tls]# scp ca.pem [email protected]:/etc/docker [root@master tls]# scp cert.pem [email protected]:/etc/docker [root@master tls]# scp key.pem [email protected]:/etc/docker TLSを検証する際は、秘密鍵で設定されたIDを使用する必要があるため、上記のホスト名をlwに変更する必要があります。 ローカル認証 [root@lw tls]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://lw:2388 バージョン NGINXイメージをダウンロードする [root@lw tls]# docker pull nginx クライアント環境を展開し、TLSを検証する /etc/dockerディレクトリに入る クライアント側のDockerバージョンを確認する [root@クライアント docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://lw:2388 バージョン 展開環境、TLSの検証 クライアントの画像を見る [root@クライアント docker]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://lw:2388 イメージ DockerのセキュリティとDocker-TLS暗号化通信に関する記事はこれで終わりです。Docker TLS暗号化通信についてさらに詳しく知りたい方は、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
私たちは Web 開発者として、プロの DBA ではありませんが、データベースなしではやっていけませ...
vue+remを使用したカスタムカルーセルチャートの実装は参考までに。具体的な内容は以下のとおりです...
障害サイト: MySQL サーバーにログインし、どのコマンドを実行してもこのエラーが発生します my...
この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...
目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...
目次レムフォルクスワーゲンサードパーティのUIフレームワークに適応する結論モバイル開発における最も一...
「開発とは、単にコードを書くだけではない」というのは、3EV の Dan Frost 氏の言葉です。...
序文ヒストグラムは、RDBMS によって提供される基本的な統計情報です。最も一般的に使用されるのは、...
1. まず、VS2019とMySQLデータベースを準備します。どちらも公式サイトからダウンロードで...
目次序文1. MySQL メインストレージエンジン: 2. さまざまなストレージエンジンがテーブルを...
以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...
この記事では、例を使用して、MySQL クエリのソート関数とクエリ集計関数の使用方法を説明します。ご...
border-radius で生成できる四角形やその他の図形に影を追加する場合 (「Adaptive...
導入増分バックアップとは、完全バックアップまたは最後の増分バックアップの後、後続の各バックアップでは...
FFmpeg flacをインストールする eric@ray:~$ sudo apt install ...