...

Redisのセキュリティ:開いているポートや保護されていないインスタンスを避ける

開いているポートや保護されていないインスタンスは、~に関して最も一般的な侵入経路であり、 Redisのセキュリティ その方法について説明します。ポートを閉じ、インスタンスを保護し、redis.conf をわずかに変更するだけでリスクを大幅に低減する方法を、具体的に示します。.

中心点

すぐに始められるよう、最も重要なポイントを簡潔にまとめ、まず何から着手すべきかを優先順位付けします。ポートが開いたままになってしまう典型的な設定ミスを指摘し、安全な本番環境を実現するための実用的な設定例を紹介します。 さらに、攻撃を無力化するために、認証、暗号化、そして厳格なネットワーク制限を重視します。詳細や具体例について掘り下げる前に、以下の要点を「クイックスタートプラン」としてご紹介します。.

  • ネットワーク 隔離:Redisを絶対に外部に公開せず、プライベートネットワークからのみアクセスできるようにする。.
  • 構成 härten:bind、protected-mode、Ports、Rename-Commands を適切に設定する。.
  • 認証 強制する:requirepass と ACL を活用して、きめ細かな権限設定を行う。.
  • 暗号化 有効化:トランスポートにはTLS、パーシステンスにはOS暗号化。.
  • モニタリング & 更新:ログ、アラート、バックアップ、定期的なバージョンの適用。.

まずは未解決の案件の解決を優先します 港湾, 、次に認証、そして暗号化を行います。その後、セキュリティ対策が持続的に機能するよう、ログ記録、バックアップ、更新に対応します。これにより、攻撃対象領域を最小限に抑え、インスタンスをあなたの管理下に保つことができます。.

開いているポート:リスクと典型的な攻撃経路

開いている標準ポート6379は、まるで「こちらを検査してください」と書かれた看板のようなものです。攻撃者はインターネットを自動でスキャンし、保護されていない インスタンス わずか数秒で。認証なしにデータを読み取ったり、鍵を設定したり、モジュールを読み込んだりすることが可能です。実際には、これが原因でデータ漏洩や暗号通貨マイニングの開始につながることがよくあります。私は、アクセス可能性を厳格に制限し、定義済みの送信元アドレスのみを許可することで、このリスクを排除しています。.

ネットワークの切断とバインディングを適切に設定する

Redisを接続します ローカルホスト あるいは内部サブネット内のプライベートIPアドレス宛てに送信されます。このようにして、ネットワークアーキテクチャは、サービスがパブリックインターネットに直接接続されるのを防ぎます。 分散型構成では、ノードをプライベートVLANまたはVPCにまとめ、VPNまたは内部ピアリング接続を介してのみアクセスを許可します。これにより、すべてのパケットが管理されたセグメント内に留まります。この単純な分離により、リスクを大幅に低減できます。.

redis.conf での設定:bind、Port、protected-mode

から始める。 redis.conf, 、ほんの数行の記述が、しばしば決定的な違いを生むからです。bind 127.0.0.1 または bind 127.0.0.1 10.0.x.y と指定することで、インターフェースを制限しています。 単純なスキャンを困難にするため、デフォルトのポートを変更し、protected-mode yes を有効にしておきます。さらに、危険なコマンドの名前を変更するか、無効にします。よくある設定ミスについては、以下の表が参考になります。.

セッティング 設定ミスのリスク 推奨される措置
bind 公共の アクセシビリティ 各ホストについて localhost/プライベートIPのみにバインドする bind 127.0.0.1 10.0.1.50
port 簡単にスキャンして 6379 代替ポートの設定 ポート 6389
protected-mode オープン状態での無制限アクセス アイピー アクティブのままにする protected-mode yes
rename-command 批判的な意見の悪用 コマンド 名称を変更するか、停止するか rename-command CONFIG 「」„
tls-port/port 平文-トラフィック アクセス可能 TLSポートのみを使用する tls-port 6379 / port 0

設定ミスの詳細な背景については、以下の概要をご参照ください。 設定ミスを防ぐ. 将来的な監査をスムーズに進められるよう、ファイルにはコメントを追加して追跡可能な状態にしています。整然とした設定は時間を節約し、障害を未然に防ぎます。わずかな強化でも大きな効果をもたらします。これはすぐに元が取れます。.

認証とACLを一貫して活用する

私は強い 認証 社内ネットワークであっても常にこの措置を徹底しています。「requirepass」を使用してAUTHハンドシェイクを強制し、パスワードも定期的に変更しています。 Redis 6 以降、アクセス制御リスト(ACL)を活用しています。これにより、ユーザーを作成し、必要なコマンドのみを許可し、キーの範囲を制限することができます。これにより、本番環境、管理、分析へのアクセスを明確に分離できます。権限を制限することで、万が一の事態における被害を最小限に抑えることができます。.

危険なコマンドを無力化する

多くの攻撃は、強力な コマンド CONFIG、MODULE LOAD、SLAVEOF/REPLICAOFなどです。ACLを使用して一般ユーザーのアクセス権を制限し、rename-commandを使って問題のあるコマンドを空の文字列に設定することで無効化しています。これにより、攻撃経路そのものを排除しています。 機能が本当に必要な場合は、その機能を文書化し、管理者アカウントのみに制限しています。そうすることで、インスタンスの管理しやすさと安全性を確保しています。.

TLS による転送暗号化を有効にする

TLSを有効にします。そうすれば、誰も トラフィック 読み取ったり改ざんしたりできないようにします。設定では、tls-port を設定し、port 0 で平文ポートを無効化し、証明書、鍵、CA を登録します。オプションとして、クライアント証明書を検証し、マシンへのアクセスをさらに正当化します。 最新のクライアントは、特別な手間をかけずにTLSに対応しています。これにより、すべての接続が安全なチャネルを経由するようになります。.

休止状態のデータを復号できないようにする

永続化ファイルについては、私は以下を採用しています 暗号化 ファイルシステム上です。これにより、たとえ誰かがストレージを読み出そうとしても、RDBとAOFはディスク上で保護された状態になります。機密性の高い値については、Redisに渡す前にアプリケーション側で追加で暗号化しています。これにより、キャッシュ内に平文を保持する必要がなくなります。その結果、盗難や不適切なバックアップが発生した場合のリスクを低減できます。.

実務におけるネットワークセキュリティとファイアウォール

ホストのファイアウォールを有効にし、Redisのポート 定義されたIP範囲にのみ許可しています。クラウド環境では、プロトコル、ポート、送信元ネットワークを厳密に指定するセキュリティグループを用いて、これを補完しています。 さらに、見落とされた開放ポートを見つけるために、定期的にポートスキャンを実行しています。不要なサービスは無効化し、シャドウポートが開いたままにならないようにしています。実践的な手順については、こちらをご覧ください: ファイアウォールの設定.

監視、ログ記録、および更新を定着させる

Redisのログを一元的に分析し、 アラート ログインの失敗や不審なコマンドがないかを確認します。「Connections」や「1秒あたりのコマンド数」、「レイテンシ」といったメトリクスを常に監視することで、異常を早期に検知できます。バックアップは定期的にスケジュールし、復元テストも実施しています。 セキュリティアップデートは、重大な脆弱性を修正することが多いため、速やかに適用しています。さらに、設定を定期的に確認し、異常があれば記録しています。.

役割、権限、および業務プロセス

Redisを次のように起動します。 サービス利用者 ルート権限を持たせないことで、侵入があってもシステム全体に影響が及ばないようにしています。役割は厳格に分離しており、管理者、開発者、運用担当者は、それぞれに必要な権限のみを付与されています。 アプリケーションアカウントは個別のACLプロファイルに配置され、自身のキープレフィックスのみを参照できるようにしています。変更内容は追跡可能な形で記録し、監査が容易に行えるようにしています。この枠組みにより秩序が保たれ、操作ミスのリスクが低減されます。.

ホスト環境を安全に選択する

マネージドサービスについては、ファイアウォール機能や、, ネットワークの分離, 、TLSおよびACLはデフォルトで有効になっています。また、更新の一貫性と信頼性の高い監視にも注意を払っています。より高いパフォーマンスや制御性を必要とする場合は、次のようなオプションを検討すべきです。 Shared Redis 対 Dedicated Redis 確認する。適切なプラットフォームを利用することで、手間を省き、よくある課題を解消できます。これにより、アプリケーションとデータに集中することができます。.

レプリケーション、クラスター、およびセンチネルを安全に運用する

私は、レプリケーションやクラスタ間の通信についても、クライアントからのアクセスと同様に厳格にセキュリティ対策を講じています。これには、認証、暗号化、およびエンドポイントの適切な通知が含まれます。.

  • 複製:私は~を置きます replica-read-only yes, 、レプリカが書き込みアクセスを許可しないようにするためです。認証については、次のように設定します masteruser そして masterauth レプリカ上で実行し、その際には権限を最小限に制限した独自のACLユーザーを使用する。.
  • 古いデータ:~で replica-serve-stale-data no これにより、孤立したレプリカが古いデータを配信することを防ぎます。これにより、整合性が確保され、パーティション内の攻撃対象領域が縮小されます。.
  • クラスター:有効化します tls-cluster yes, これによりGossipバスが暗号化されて動作するようになります。また、私は cluster-announce-ip, クラスタ通知ポート そして クラスター・アナウンス・バス・ポート 内部アドレス/ポートに対して。これにより、ノードが自身のパブリックIPをアナウンスすることを防ぐことができます。.
  • Sentinel:Sentinelもプライベートネットワーク上でのみ動作します。監視対象のマスターについては、私は sentinel auth-user そして sentinel auth-pass. 。管理画面は外部に公開せず、定義済みのオペレーター用IPアドレス範囲からのみアクセスを許可しています。.
  • 可用性対セキュリティ:キャリブレーションを行う min-replicas-to-write そして min-replicas-max-lag, 、これにより、部分的な障害が発生した場合に書き込みアクセスが慎重に制限されるようにする。これは主に一貫性を確保するための措置であるが、ネットワーク障害時の不正利用も防止する。.

設定におけるDoSおよびリソース保護

認証やネットワーク制限に加え、Redisが過負荷やメモリ攻撃に対して耐性を持つよう強化しています。これにより、クライアントに不具合や悪意のある動作があった場合でも、サービスは安定して稼働し続けます。.

  • maxclients: 同時接続数を、余裕を持たせた現実的な値に制限しています。これにより、接続スパムによってシステムが過負荷になるのを防いでいます。.
  • クライアント出力バッファ制限について 通常, pubsub そして レプリカ 私は厳しい制限を設けています。これにより、利用頻度の低いユーザーによるストレージ容量の無制限な増加を防ぐことができます。.
  • タイムアウト そして tcp-keepalive: ゾンビ接続がリソースを占有しないように、非アクティブな接続は自動的に切断しています。.
  • latency-monitor-threshold そして スローログ: 不正利用のパターン(KEYSスキャンなど)を早期に検知するため、監視ポイントを有効にしています。コマンドの実行時間が異常に長い場合に発せられるアラートが、早期検知に役立ちます。.
  • maxmemory およびポリシー:私は maxmemory- 制限と適切なエヴィクションポリシー。これはそれ自体がセキュリティ機能というわけではありませんが、環境全体をOOMや緊急再起動から保護します。.

ACLデザイン:実用的なレイアウトと安全な収納

私はACLをシンプルで、再現性があり、バージョン管理が可能なものにしています。ルールは実行時にのみ設定するのではなく、ファイルに保存し、そのファイルに厳格なアクセス権を設定しています。.

  • ベース: デフォルトユーザーをログアウトさせます(user default off). アプリケーション用には、本当に必要なコマンドカテゴリのみを割り当てられた専用のユーザーを作成します(+@read, +@write, -@dangerous).
  • スコープ: 主要な領域にはプレフィックスを付けて区切っています。例えば、. ~app:*. これにより、アプリケーションが誤って他の名前空間にアクセスしてしまうことを防ぐことができます。.
  • : user app on >S3cur3P@ss ~app:* +@read +@write -@dangerous -config -module -eval -evalsha および、以下の権限を持つ別の管理者ユーザー +@全員, 、これはBastionホスト経由でのみアクセス可能です。.
  • 永続性: 私は利用しています aclfile /etc/redis/users.acl そして、そのファイルに600の権限を設定します。変更は次のように保存します。 ACL SAVE そして、それらをチェンジログに記録する。.
  • ローテーション: パスワードは定期的に変更し、ACLの変更にはバージョン管理を施して、インシデントが発生した際に迅速に元に戻せるようにしています。.

スクリプトとモジュールの確認

私は、の攻撃対象領域を縮小しています。 Luaスクリプト そして モジュール 徹底的だ。不要な機能は排除され、アプリユーザーにとっては危険なコマンドは一切使用できない。.

  • EVALは必要な場合のみ: 管理者以外のユーザーによる以下のアクセス権を無効にします EVAL そして EVALSHA. そうでなければ、スクリプトは呼び出したユーザーの権限で実行され、大量のデータを移動させてしまう可能性があります。.
  • Luaの制限lua-time-limit これにより、不具合のあるスクリプトがサーバーを長時間占有するのを防ぎます。必要に応じて、 SCRIPT KILL より。
  • モジュールの硬化: モジュールの読み込み 以下で無効にします rename-command あるいは、管理者のみに許可する。モジュールは、起動時に信頼できる書き込み禁止のパスからのみ読み込む。.
  • 危険なカテゴリー: 個々のコマンドをブロックする代わりに、私は -@dangerous リスクグループ全体(例:DEBUG、CONFIG、MODULE、SHUTDOWN)。これは見やすく、堅牢です。.

コンテナおよびKubernetesの運用を安全に構築する

コンテナとKubernetesでは、プラットフォームの制御が追加されたものの、同じ原則が適用されます。私は、外部への露出を防ぎ、権限を最小限に抑え、データパスに規制を設けています。.

  • ネットワークポリシー: ポッド間の通信は、共有されているネームスペース/デプロイメント間でのみ許可しています。Redis用のサービスは内部で実行されており、インターネットへのNodePortやロードバランサーは設定されていません。.
  • Podのセキュリティ: Redisが動作中 runAsNonRoot, とともに 読み取り専用ルートファイルシステム そして、Linuxの機能を最小限に抑えます。Seccomp/AppArmorプロファイルを有効にし、リソース制限を設定します。.
  • 秘密: パスワードと証明書は シークレット- アクセス権が制限されたボリューム – コンテナイメージ内にもログにも含まれません。ローテーションは自動化されています。.
  • 巻数: データと設定は明確に分離しています。書き込み可能なのはデータボリュームのみであり、設定マウントは読み取り専用に保たれています。.
  • 稼働状況/準備状況: ヘルスチェックでは、(例えば、読み取り専用権限を持つACLユーザーなどを通じて)認証を行うことで、プローブがバックドアとならないようにしています。.

自動化、Systemdサンドボックス化、および安全なデプロイ

自動化に確実性を組み込むことで、すべてのインスタンスが同一かつ安全に展開されるようにしています。そうすれば、差異があればすぐに気づくことができます。.

  • テンプレート: redis.conf, ACLファイルとsystemdユニットはコードとしてバージョン管理されています。各ロールアウトの前に、bind、Ports、TLS、ACLを自動でチェックしています。.
  • systemdのセキュリティ強化: ユニット内で、私は NoNewPrivileges=yes, PrivateTmp=yes, プロテクトシステム=ストリクト, ProtectHome=yes そして UMask=027. これにより、ファイルへのアクセスや実行時の権限が効果的に制限されます。.
  • CICD-Gates: ポートが外部に公開されていたり、証明書が欠けていたり、リスクの高いコマンドの名前が変更されていなかったりすると、パイプラインが中断されます。このようにして、リグレッションを防いでいます。.
  • 画像とパッケージ: コンテナイメージとOSパッケージの脆弱性をスキャンしています。アップデートは段階的に展開し、その際にメトリクスやエラー許容範囲を測定しています。.

インシデントへの備え:体系的な対応計画

私は、緊急事態が発生する前にその対策を立てておきます。そうすることで、迅速に対応し、被害を最小限に抑え、円滑に業務を再開させることができます。.

  • 抑制する: 直ちにネットワークパス(セキュリティグループ、ファイアウォール)をブロックし、パブリックエクスポージャーを停止させ、証拠を確保するために不審なインスタンスを凍結します。.
  • 特定するINFO クライアント, ACLリスト, 役割, CONFIG GET そして モジュール一覧 状態、アクティブなユーザー、レプリケーション、および読み込まれたモジュールを確認します。.
  • 認証情報のローテーション: 新しいパスワードやACLキーを設定し、不審なユーザーをブロックします(ACL SETUSER user off) そして、事態が明らかになるまで権利を剥奪する。.
  • 後片付け: 許可されていないキー領域をプレフィックス戦略を用いて特定し、悪意のあるモジュールをオフラインで削除した上で、その構成を目標状態と比較します。.
  • 修復: 検証済みのバックアップから復元を行い、アップデートを適用し、セキュリティ強化済みの設定を展開します。その後、明確な対策を盛り込んだ事後分析を行います。.

実践的な実施:文章によるチェックリスト

まずは未解決のものをスキャンすることから始めます 港湾 そして、6379番ポートが外部から見える状態になったら、直ちにアクセスを制限します。その後、RedisをlocalhostまたはプライベートIPにバインドし、ホストおよびクラウドのファイアウォール設定を適用します。次のステップとして、requirepassを有効にし、パスワードをローテーションさせ、ユーザーおよびワークロード向けのACLを設定します。 その後、扱いにくいコマンドを無効化または名前を変更し、TLSを有効にして、平文ポートを無効にします。最後に、ロギング、アラート、バックアップ、定期的な更新、および定期的な設定チェックを確立します。.

簡単にまとめると

私が アタック・サーフェス 規模を小さく保ち、アクセス権を制限し、通信を暗号化します。ネットワークの分離、強力な認証、および厳格なコマンド権限の組み合わせにより、一般的な攻撃を効果的に阻止できます。 TLSで通信を保護し、OSの暗号化機能でデータの永続性を確保します。監視、バックアップ、および更新により、日常の運用を確実に支えます。これらの対策を徹底して実施することで、開放されたポートを回避し、機密データを保護し、インスタンスを確実に管理下に置くことができます。.

現在の記事

ホスティング向けの、CloudLinux LVE制限が可視化されたサーバー環境
サーバーと仮想マシン

安定した共有ホスティングを実現するためのCloudLinux LVE制限の正しい理解

共有ホスティングにおけるCloudLinux LVEのリミットを適切に設定する方法:CloudLinux LVEを使用してCPU、RAM、I/O、プロセスのリミットを最適に設定し、すべてのアカウントで安定したホスティングリソース制限と公平なパフォーマンスを実現する方法を学びましょう。.