あなたがシステム管理者である場合は、この記事に記載されている 10 のヒントに従って、Apache Web サーバーを保護する必要があります。
1.不要なモジュールを無効にする
ソースから apache をインストールする場合は、次のモジュールを無効にする必要があります。 ./configure –help を実行すると、無効化/有効化できる利用可能なモジュールがすべて表示されます。
- userdir – ユーザー固有のディレクトリへのリクエストのマッピング。つまり、URL の ~username はサーバーのディレクトリに変換されます
- autoindex – index.html ファイルが存在しない場合にディレクトリ リストを表示します
- status – サーバーの統計を表示します
- env – ENV 変数のクリア/設定
- setenvif – ヘッダーに ENV 変数を配置する
- cgi – CGI スクリプト
- actions – リクエストでトリガーされるアクション
- ネゴシエーション – コンテンツ ネゴシエーション
- エイリアス – 異なるファイルシステム部分へのリクエストのマッピング
- include – サーバー側インクルード
- filter – リクエストのスマート フィルタリング
- version – IfVersion を使用して構成ファイル内のバージョン情報を処理する
- 現状 – 現状のファイルタイプ
./configure を行うときは、以下に示すように上記のモジュールをすべて無効にしてください
./configure \ --enable-ssl \ --enable-so \ --disable-userdir \ --disable-autoindex \ --disable-status \ --disable-env \ --disable-setenvif \ --disable-cgi \ --disable-actions \ --disable-negotiation \ --disable-alias \ --disable-include \ --disable-filter \ --disable-version \ --disable-asis
ssl を有効にして mod_setenv を無効にすると、次のエラーが発生します。
- エラー :/usr/local/apache2/conf/extra/httpd-ssl.conf の 223 行目の構文エラー:無効なコマンド 'BrowserMatch' です。スペルが間違っているか、サーバー構成に含まれていないモジュールによって定義されている可能性があります
- 解決策 :ssl を使用する場合は、setenvif を無効にしないでください。または、mod_setenvif を無効にする場合は、httpd-ssl.conf の BrowserMatch をコメントアウトします。
インストール後、httpd -l を実行すると 、インストールされているすべてのモジュールが表示されます。
# /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_log_config.c mod_ssl.c prefork.c http_core.c mod_mime.c mod_dir.c mod_so.c
この例では、次の apache モジュールがインストールされています。
- core.c – Apache コア モジュール
- mod_auth* – さまざまな認証モジュール用
- mod_log_config.c – クライアント リクエストのログ。追加のログの柔軟性を提供します。
- mod_ssl.c – SSL 用
- prefork.c – MPM (Multi-Processing Module) モジュール用
- httpd_core.c – Apache コア モジュール
- mod_mime.c – ドキュメントの MIME タイプの設定用
- mod_dir.c – ディレクトリ パスの末尾のスラッシュ リダイレクト用。 url/test/ を指定すると、url/test/index.html に移動します
- mod_so.c – 起動または再起動時のモジュールのロード用
2.別のユーザーとグループとして Apache を実行
デフォルトでは、apache は nobody またはデーモンとして実行される場合があります。非特権アカウントで apache を実行することをお勧めします。例:アパッチ。
Apache グループとユーザーを作成します。
groupadd apache useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
httpd.conf を変更し、ユーザーとグループを適切に設定します。
# vi httpd.conf User apache Group apache
この後、apache を再起動して ps -ef を実行すると、apache が「apache」として実行されていることがわかります (常にルートとして実行される最初の httpd プロセスを除く)。
# ps -ef | grep -i http | awk '{print $1}' root apache apache apache apache apache
3.ルート ディレクトリへのアクセスを制限する (許可と拒否を使用)
httpd.conf で次のように設定して、ルート ディレクトリを保護します。
<Directory /> Options None Order deny,allow Deny from all </Directory>
上記では:
- オプションなし – これを [なし] に設定すると、オプションの追加機能が有効になりません。
- 注文の拒否、許可 – これは、「拒否」および「許可」ディレクティブを処理する順序です。これにより、最初に「拒否」が処理され、次に「許可」が処理されます。
- すべて拒否 – これにより、すべてのユーザーからルート ディレクトリへの要求が拒否されます。ルート ディレクトリに対する Allow ディレクティブはありません。したがって、誰もアクセスできません。
4. conf および bin ディレクトリに適切な権限を設定します
bin および conf ディレクトリは、許可されたユーザーのみが表示する必要があります。グループを作成し、Apache 構成ファイルの表示/変更が許可されているすべてのユーザーをこのグループに追加することをお勧めします。
このグループを apacheadmin と呼びましょう
グループを作成します。
groupadd apacheadmin
このグループの bin ディレクトリへのアクセスを許可します。
chown -R root:apacheadmin /usr/local/apache2/bin chmod -R 770 /usr/local/apache2/bin
このグループの conf ディレクトリへのアクセスを許可します。
chown -R root:apacheadmin /usr/local/apache2/conf chmod -R 770 /usr/local/apache2/conf
このグループに適切なメンバーを追加します。この例では、ramesh と john の両方が apacheadmin の一部です
# vi /etc/group apacheadmin:x:1121:ramesh,john
5.ディレクトリの参照を無効にする
これを行わないと、ユーザーはルート (または任意のサブディレクトリ) の下にあるすべてのファイル (およびディレクトリ) を見ることができます。
たとえば、彼らが http://{your-ip}/images/ にアクセスし、images の下に index.html がない場合、すべての画像ファイル (およびサブディレクトリ) が次のリストに表示されます。ブラウザー (ls -1 出力と同様)。ここから、個々の画像ファイルをクリックして表示したり、サブディレクトリをクリックしてその内容を表示したりできます。
ディレクトリの参照を無効にするには、Options ディレクティブの値を「None」または「-Indexes」 に設定します。 . A - オプション名の前にあると、そのディレクトリに適用されているオプションの現在のリストから削除されます。
インデックスは、ブラウザーのディレクトリ内で使用可能なファイルとサブディレクトリのリストを表示します (そのフォルダー内に index.html が存在しない場合のみ)。したがって、インデックスは許可されるべきではありません。
<Directory /> Options None Order allow,deny Allow from all </Directory> (or) <Directory /> Options -Indexes Order allow,deny Allow from all </Directory>
6. .htaccess を許可しない
htdocs の下の特定のサブディレクトリ (または外部の任意の場所) 内の .htaccess ファイルを使用すると、ユーザーはデフォルトの apache ディレクティブを上書きできます。特定の状況では、これは良くないため、避ける必要があります。この機能を無効にする必要があります。
ユーザーが .htaccess ファイルを使用して apache ディレクティブをオーバーライドすることを許可しないでください。これを行うには、「AllowOverride None」を設定します 」をルート ディレクトリに追加します。
<Directory /> Options None AllowOverride None Order allow,deny Allow from all </Directory>
7.他のオプションを無効にする
Options ディレクティブで使用できる値は次のとおりです:
- オプション すべて – すべてのオプションが有効になっています (MultiViews を除く)。 Options ディレクティブを指定しない場合、これがデフォルト値になります。
- オプション ExecCGI – CGI スクリプトの実行 (mod_cgi を使用)
- オプション FollowSymLinks – このディレクトリにシンボリック リンクがある場合は、それがたどられます。
- オプションに含まれるもの – サーバー側インクルードを許可 (mod_include を使用)
- オプションに含まれるNOEXEC – コマンドまたは CGI を実行する機能なしで、サーバー側のインクルードを許可します。
- オプション インデックス – ディレクトリ リストを無効にする
- オプション マルチビュー – コンテンツ ネゴシエート マルチビューを許可する (mod_negotiation を使用)
- オプション SymLinksIfOwnerMatch – FollowSymLinks に似ています。ただし、これは、リンクとリンク先の元のディレクトリの所有者が同じ場合にのみ続きます。
「Options All」は絶対に指定しないでください。上記のオプションの 1 つ (または複数) を常に指定します。以下に示すように、複数のオプションを 1 行に組み合わせることができます。
Options Includes FollowSymLinks
オプション値の前の + と – は、ネストされたディレクトリがあり、親のディレクトリ ディレクティブからオプションを上書きしたい場合に役立ちます。
この例では、/site ディレクトリにインクルードとインデックスの両方があります:
<Directory /site> Options Includes Indexes AllowOverride None Order allow,deny Allow from all </Directory>
/site/en ディレクトリの場合、/site からのインデックスのみが必要な場合 (インクルードは不要)、およびこのディレクトリへの SymLink のみをフォローする場合は、次の手順を実行します。
<Directory /site/en> Options -Includes +FollowSymLink AllowOverride None Order allow,deny Allow from all </Directory>
- /site にはインクルードとインデックスがあります
- /site/en には Indexes と FollowSymLink があります
8.不要な DSO モジュールを削除
動的共有オブジェクト モジュールを apache にロードした場合、それらは「LoadModule」ディレクティブの下の httpd.conf 内に存在します。
静的にコンパイルされた apache モジュールは「LoadModule」ディレクティブとしてリストされないことに注意してください。
不要な 「LoadModules」 をコメントアウトします httpd.conf内
grep LoadModule /usr/local/apache2/conf/httpd.conf
9.特定のネットワーク (または IP アドレス) へのアクセスを制限する
特定の IP アドレスまたはネットワークからのみサイトを閲覧できるようにするには、次の手順を実行します。
特定のネットワークがサイトにアクセスできるようにするには、Allow ディレクティブでネットワーク アドレスを指定します。
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.0.0/24 </Directory>
特定の IP アドレスがサイトにアクセスできるようにするには、Allow ディレクティブで IP アドレスを指定します。
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.1.21 </Directory>
10. Apache のバージョンを表示または送信しない (ServerToken の設定)
デフォルトでは、サーバーの HTTP 応答ヘッダーには apache と php のバージョンが含まれます。次のようなもの。攻撃者に特定のバージョン番号を知られたくないため、これは有害です。
Server: Apache/2.2.17 (Unix) PHP/5.3.5
これを回避するには、httpd.conf で ServerTokens を Prod に設定します。これにより、バージョン情報なしで「Server:Apache」が表示されます。
# vi httpd.conf ServerTokens Prod
以下は可能な ServerTokens 値です:
- ServerTokens 製品 「サーバー:Apache」と表示されます
- ServerTokens Major 「サーバー:Apache/2」と表示されます
- ServerTokens マイナー 「サーバー:Apache/2.2」と表示
- ServerTokens Min 「サーバー:Apache/2.2.17」と表示
- ServerTokens OS 「サーバー:Apache/2.2.17 (Unix)」と表示されます
- ServerTokens フル 「Server:Apache/2.2.17 (Unix) PHP/5.3.5」と表示されます (ServerTokens 値を指定しない場合、これがデフォルトです)
上記の 10 のヒントすべてとは別に、UNIX / Linux オペレーティング システムを確実に保護してください。 OS が安全でない場合、Apache を保護しても意味がありません。また、Apache のバージョンは常に最新の状態に保ってください。 Apache の最新バージョンには、既知のすべてのセキュリティ問題に対する修正が含まれています。 Apache ログ ファイルを頻繁に確認してください。
Apache に関する追加情報
- Linux に SSL を使用して Apache 2 をインストールする方法 (mod_ssl、openssl を使用)
- パワー ユーザーのように Apachectl と Httpd を使用するための 9 つのヒント
- XAMPP:Apache、MySQL、PHP、Perl の簡単なインストール
- Yum を使用して LAMP スタックをインストールまたはアップグレードする方法