Linux Webサーバーをセットアップするときのチェックリスト/ルーチンは何ですか?
最大のセキュリティを実現するために何をお勧めしますか?
繰り返しメンテナンスを行う方法はありますか?
まず、Apacheのスクリプト機能(php、cgi、Rubyなど)は、スクリプトを実行するユーザーの権限を持つシェルアカウントに相当する可能性があることに注意してください。
サーバーが複数のユーザーと共有されている場合、suexec(-または ITK MPM -の使用を検討することをお勧めします David Schmitt)なので、すべてのスクリプトが同じApacheユーザーとして実行されるわけではありません。
Apacheを仮想化またはchrootします。これにより、あらゆる妥協が追加のセキュリティ層に少なくともある程度含まれます。 Apacheをchrootすると、最終的にjailなどにライブラリを移動するため、メンテナンスが難しくなる可能性があることに注意してください。FreeBSDを使用している場合は、代わりにjailを使用できます。 portsから、そしてその中からportauditを実行します。ライブラリの依存関係を心配したり、手動でファイルを移動したりする必要はありません。これは常に醜い混乱になります。 BSD jailを使用すると、パッケージ管理システム(ポート)を使い続けることができます。 (GNU/Linuxでは、仮想化に VServer を使用することもできます。-David Schmitt)
(明らかに)Apacheだけでなく、PHP、Ruby、Perlなどのアップデートやパッチにも対応します。OSを信頼してすべてのアップデートを提供するのではありません。一部のディストリビューションは、パッチが非常に遅いです。公開時間をできる限り0日間の脆弱性に制限します。 milw0rm フィードをRSSリーダーに貼り付け、 insecure.org メーリングリストなどに登録します。それだけでなく、 OSがパッチをリリースする前に脆弱性について学ぶのに役立ちます。たとえば、OSによってまったく管理またはパッチされていない可能性がある特定のphp cmsアプリケーションなどの脆弱性についても学びます。
tripwire/aide、audit、mtree(BSDの場合)などを使用して、ファイルシステムの変更を追跡します。 これは非常に重要です。変更を定期的にメールで送信し、手動で毎日確認します。変更すべきでないファイルの変更がある場合は、その理由を調査します。何らかの悪意のあるJavaScriptが何らかの方法でページに挿入された場合、この方法で捕捉します。自分のWebページが悪用されて訪問者に感染する可能性があるため、サーバーだけでなくユーザーも節約できます。 (これは非常に一般的な戦術です。攻撃者は多くの場合、サーバーを気にしません。発見されるまで、できるだけ多くの訪問者に感染させたいと思っています。これらの攻撃者は、通常、トラックを隠すことさえしません。このような妥協点をできるだけ迅速に捉えることは非常に重要です。)
suhosin のようなものを使用してphpのヘルプを保護します。しかし、それを理解することも学び、アプリケーションの予期されるパラメーターに合わせて構成を調整します。
PaX などのカーネルパッチを使用すると、多くのバッファオーバーフローの脆弱性から保護することができます。ソフトウェアが脆弱であっても。 (これはあなたを不死身にしないわけではありません、それはまだ別のマイナーなレイヤーです)
一部のセキュリティツールを使用する場合は、自信を持たないでください。使用するツールを理解し、常識を使用してください。読み、学び、できる限りの最新情報を入手してください。
必須のアクセス制御の使用を検討してください(例: SELinux )。アプリケーションごとに、実行を許可する内容を詳細に指定できます。アクセスが許可されているファイル。カーネルが何を呼び出すことが許可されているかなどです。これは非常に複雑なプロセスであり、多くの理解が必要です。一部のディストリビューションは、パッケージに事前に作成されたSELinuxポリシーを提供しています(例: Gentoo )。この提案は、以下の提案とは少し矛盾していますが、それでもなお有効です。
物事をシンプルに保つ。複雑なセキュリティ戦略がうまくいかない場合があります。
Apacheで、非常に制限の厳しいデフォルトルール(オプションなし、すべて拒否など)を設定し、必要に応じて特定の仮想ホストに上書きします。
すべてのドットファイルへのアクセスを拒否します(.htaccessファイルもすぐにカバーされます)
何らかのパスワード認証がある場所では常にhttpsを使用します。
ファイアウォールはデフォルトで拒否するポリシーにする必要があります。ファイアウォールに特定のルールを作成して、特定のトラフィックをログに記録します。
ログ解析スクリプトを設定して、ログに異常がないかスキャンします。 ( プレリュードIDS スイートでこれを行うことができますが、正直なところ、独自のスクリプトを構築することをお勧めします。独自のスクリプトとツールを理解するのに役立つためです。)
サーバーに、最後にログインしたユーザー、アクティブな接続、使用帯域幅などに関するレポートを毎日メールで送信してもらいます。
Cronでsuidバイナリ、世界中の書き込み可能なファイルなどをスキャンし、メールで送信してもらいます。
メールで届くように設定したものについては、時間の経過に伴う例外のリストを作成する必要があります。 (ファイルシステムの変更を無視するフォルダ、許可する777ファイル、許可するsuidバイナリ)発生してはならないことについてのみ通知を受けることが重要です。些細なことを毎日メールで受け取ると、それらを無視し始め、無意味になります。
優れた堅固なレイヤー化された冗長バックアップ戦略を持っている。そして、すべてのイメージまたはコピーを作成することがうまくいくと仮定しないでください。たとえば、MySQLがバックアップ中にテーブルへの書き込みの最中である場合、バックアップを復元すると、MySQLバイナリファイルが破損する可能性があります。ですから、mysqldumpでデータベースを通常のイメージや毎晩のtarballやバージョン管理などの設定の上に置くcronが必要になります。バックアップ戦略について考えてください。つまり、本当にそれについて考えます。
セキュリティのためにこのようなリストに依存しないでください:)真剣に!インターネット上でこれらの多くを見つけ、それらをすべて読み、すべての提案を調査し、常識と経験を使って自分の心を作り上げます。結局、経験と常識があなたを救う唯一のものです。リストもツールもありません。読んでください、しかし理解せずに単にコピーしないでください。
SANから Linuxセキュリティチェックリスト をお勧めします。私はこれに加えて、別の社内手順を使用しています。チェックリストは少し古くなっているかもしれませんが、重要な点の多くは本当です。
〜/ .ssh/configを編集します
permit_root_login no
これは
ssh root@server
応答しないが
ssh user@server
user$ su
rootとしてログインする場合に機能します。
チェックする無数の権限、無数のチェックリストが常に存在し、新しいバグ/脆弱性の発見に終わりはありません。セキュリティあなたがオンまたはオフにするものではないと思いますが、それはあなたが常に行うものです。
ソフトウェアの「必然的な失敗」を考えると、SELinuxはいくつかの心配を解消するのに役立ちます(これもセキュリティに関する特効薬ではありません)。ユーザースペースアプリケーションが危険にさらされていると想定すると、正しいSELinuxポリシーにより、通常の(つまり、SELinuxが無効または許可されている)権限でのアプリケーションの動作が妨げられます。もちろん、これには、監査ログを監視し、インストールされたポリシーを分析して、アプリケーションが機能するように必要に応じて変更する必要があります。
デフォルトのポリシーは役に立たないと言っていませんが、私はそれが何を許可するかを個人的に知りたいです。