web-dev-qa-db-ja.com

公開Webサーバーを保護するためのベストプラクティスは?

私は、一般に公開されているUnix Webサーバーを保護するための「最低限」のチェックリストを作成しようとしています。 LAMPスタック(または類似)であると想定します。このリストは、実装する必要のある最低限のものでなければなりません。トラフィックの多いサイト(DDoS保護、高可用性など)の要件は明らかに高くなりますが、私はそれを心配していません。 ApacheまたはNGINXを実行し、基本的なオンサーバーのMySQLまたはMariaDBデータベースとシンプルなPHPアプリケーションを備えています。 AWS、DigitalOceanなど。いくつかのアイデアは次のとおりです。

  • 国別のIP範囲のブラックリスト/ホワイトリスト
  • Rootによるリモートログインを無効にする
  • Fail2banを有効にする(ログインに何度も失敗した後、IPを無効にします)
  • 関連するポートの受信のみを許可するようにファイアウォールを構成します(例:ssh、sftp、https)
  • HTTPSのみを許可し、Qualys SSL Labsテストツール( https://www.ssllabs.com/ssltest/ )を使用して証明書とサーバー構成の有効性をテストする
  • アマゾン/デジタルオーシャンなど、一般に公開されているあらゆる場所で多要素認証を有効にします。アカウント、サーバーへの資格情報など.
  • Rootのパスワードを、特殊文字を含む英数字の16文字以上に変更します。
  • ほかに何か?
5
wubs

マーカス・ミュラーはポイントを持っています、これは非常に広い質問です。

最高のセキュリティポリシーに重点が置かれています。一部の有名な将軍(フレデリック大王?)はかつて「すべてを保護することは何も保護することではない」と述べました。 「脅威プロファイル」を確立することから始めて、何を防御しているのかを理解し、次にthoseの脅威を防御するためのベストプラクティスを特定します。明らかに、特定の攻撃が発生した場合は常に脅威プロファイルを修正してください。

すでに言われていることに加えて、以下を追加します。

  • Sshdを非標準ポートに移動します。スクリプトキディはポート22を攻撃します。sshdがそこにない場合、より賢い攻撃者だけがそれを見つけます。

  • すべての非パブリックリスニングポート(sshd、SNMP、rsyslogdなど)をVPNの背後に配置することを検討してください。これらのサービスへのアクセス(人間またはサーバー間の)は、セットアップが少し面倒ですが、これにより強力な保護が提供されます。直接のパブリックアクセスを必要としないサーバー(データベースサーバーやメッセージキューサーバーなど)に特に推奨されるVPNのみのアクセス。

  • 受信ルールだけでなく、ファイアウォールの下りルールを定義します。特に、ブラックハットがサーバーをゾンビ化したときに悪用したいサービス(SMTPなど)の場合は特にそうです。どういうわけかサーバーが危険にさらされても、ハイジャッカーがpingまたはSMTPまたはSFTPを外側に向けることができない場合...それはあなたを攻撃する時間を購入する追加の防衛線です。

  • (労働集約的ですが、それだけの価値があります)サーバーファーム全体をIPv6にアップグレードすることを検討してください(誰でもhaveとにかく十分にすぐに実行できます)。 fail2banはIPv4でのみ機能するため、あまり価値がなくなります。 IPSecはIPv6に組み込まれています。

SSHはパスワード認証だけを許可するのではなく、公開鍵(および/またはいくつかの2番目のトークン)を許可するべきであることを間違いなく付け加えます。

個人的には、有効にするseLinux(またはappArmor)をリストに追加し、auditdを有効にして構成し、Sudoの使用を義務付けます。

最小限を超えたい場合は、他にもできることはたくさんありますが、これら3つのことは、必要なベースの一部であると考えます。

もう少し正式なものが必要な場合は、CISベンチマーク( https://benchmarks.cisecurity.org/downloads/benchmarks/ )を確認できます。それらはおそらく最小ではありませんが、ある程度の認識があります(CISについてのあなたの意見が何であれ)。

CentOS(そして私はRedHatが好きだと思います)にはSCAPのためのいくつかのツール( https://scap.nist.gov/ )もあります。

3