ウェブサイト検索

18 Apache Web サーバーのセキュリティと強化に関するヒント


Apache Web サーバーは、ファイルや Web サイトをホストするために最も人気があり、広く使用されている Web サーバーの 1 つです。ホスティングのニーズを満たすようにインストールして構成するのは簡単です。ただし、デフォルト設定は、サイトに必要な保護を提供するには安全ではありません。

このガイドでは、Web サーバーのセキュリティを強化するために実装できる Apache サーバー強化のヒントとコツをいくつか紹介します。

1. ApacheのバージョンとOSの情報を非表示にする方法

デフォルトでは、Web サイトの間違った URL を閲覧した場合に備えて、Apache Web サーバーはそのバージョンを表示します。以下は、サイト上でページが見つからないことを示すエラー ページの例です。最後の行は、Apache のバージョン、ホスト OS、IP アドレス、および Apache がリッスンしているポートを示します。

Web サーバーの情報を表示することは、偵察任務中のハッカーにとって良い贈り物になる可能性があるため、決して良い考えではありません。セキュリティ層を追加してハッカーの攻撃を困難にするために、Web サーバー情報を非表示にすることをお勧めします。

これを行うには、Debian ベースのディストリビューションでデフォルトの Apache 構成ファイルを開きます。

sudo vim /etc/apache2/apache2.conf

RHELFedoraCentOSRockyAlmaLinux

sudo vim /etc/httpd/conf/httpd.conf

ファイルの最後に次の行を追加します。

ServerTokens Prod
ServerSignature Off

変更を保存し、Apache Web サーバーを再起動します。

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

ここでサイトをリロードすると、今度は Web サーバー情報が表示されなくなります。

2. Apache でのディレクトリ一覧の無効化

デフォルトでは、Apache ではディレクトリの一覧表示が許可されており、ドキュメント ルート ディレクトリにあるファイルやディレクトリが訪問者に表示される可能性があります。

これを実証するために、test というディレクトリを作成します。

sudo mkdir -p /var/www/html/test

次に、ディレクトリに移動して、いくつかのファイルを作成します。

cd /var/www/html/test
sudo touch app.py main.py

ここで、URL http://localhost/test にアクセスすると、ディレクトリのリストを表示できるようになります。

ディレクトリのリストを無効にするには、Apache のメイン設定ファイルに移動し、「ディレクトリ」属性を検索します。図のように、「オプション」パラメータを 「-Indexes」 に設定します。

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Apache をリロードすると、今度は URL にアクセスすると、ディレクトリが表示されなくなります。

3. Apacheを定期的に更新する

最新のアプリケーションには、古いソフトウェア バージョンに存在する根本的な脆弱性に対処するバグ修正とセキュリティ パッチが含まれているため、すべてのアプリケーションを常に最新の状態に保つことをお勧めします。

そのため、アプリケーションを定期的に最新バージョンにアップグレードすることをお勧めします。

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Apache で HTTPS 暗号化を使用する

Apache はデフォルトで HTTP プロトコルを使用します。これは脆弱で安全性が低く、盗聴されやすいプロトコルです。サイトのセキュリティを向上させ、さらに Google SEO ランキングを向上させるには、SSL 証明書を使用してサイトを暗号化することを検討してください。

これにより、デフォルトの HTTP プロトコルがHTTPS に切り替わり、サーバーから送受信される通信を傍受したり解読したりすることが困難になります。

Linux で Let’s Encrypt SSL を使用して Apache Web サーバーを保護する方法を確認してください。

  • RHEL で Let’s Encrypt SSL 証明書を使用して Apache を保護する方法
  • Ubuntu および Debian で無料の Let’s Encrypt SSL 証明書を使用して Apache を保護する方法

5. Apache の HTTP Strict Transport Security (HSTS) を有効にする

TLS/SSL 証明書を使用して Web サイトを暗号化することに加えて、HTTPS 上に HSTS Web セキュリティ メカニズムを実装することを検討してください。

HTTP Strict Transport Security (HSTS) は、中間者攻撃や Cookie ハイジャックから Web サイトを保護するポリシー メカニズムです。これは、攻撃者が HTTPS プロトコルを安全でない HTTP プロトコルにダウングレードした場合に発生します。

HSTS を使用すると、Web サーバーは、Web ブラウザが HTTPS 経由でのみサーバーと通信し、HTTP プロトコル経由では決して通信しないことを厳密に宣言できます。

HSTS を有効にするには、Web サイトで HTTPS が実行されており、有効なTLS/SSL 証明書があることを確認してください。

次に、Apache のヘッダー モジュールを有効にします。

sudo a2enmod headers

次に、Apache をリロードして変更を適用します。

sudo systemctl restart apache2

次に、ドメインの仮想ホスト構成ファイルにアクセスします。

sudo vim /etc/apache2/sites-available/mydomain.conf

次に、次の行を ブロック内に追加します。

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

これは次のようになります。

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

max-age パラメータは、今後 1 年間 (31536000=1 年) は HTTPS を使用してのみサイトにアクセスするように Web ブラウザに指示します。

最後に、HSTS ポリシーを有効にするために Apache を再起動します。

sudo systemctl restart apache2

6. Apache で HTTP/2 を有効にする

2015 年にHTTP/2 がリリースされました。これは、HTTP/1.1 の作成者が予期していなかった複数の問題に対処または解決することを目的とした HTTP プロトコルの新しいバージョンです。

HTTP/1.1 は依然として広く使用されていますが、ブラウザからの複数のリクエストを処理するために複数の TCP 接続を使用することに関連するパフォーマンスの問題があり、クライアント側でリソースのオーバーヘッドが高くなります。ネットワークパフォーマンスの低下につながります。

アプリケーションの複雑さと機能が増大するにつれて、長い HTTP ヘッダー、Web ページの読み込み速度の遅さ、一般的なパフォーマンスなどの HTTP/1.1 の欠点を解決するために HTTP/2 が作成されました。劣化。

HTTP/2 は、以前のものよりも保護とプライバシーを強化します。同様に重要なのは、多重化されたデータ ストリームの使用によるパフォーマンスの向上です。 HTTP/2 では、複数のデータ ストリームを送信する場合でも、単一の TCP 接続で帯域幅を効果的に利用できます。

以下を使用して、Apache Web サーバーで HTTP/2 を有効にする方法を確認してください。

  • Ubuntu 上の Apache で HTTP/2 を有効にする方法

7. Apache の機密ディレクトリへのアクセスを制限する

講じることができるもう 1 つのセキュリティ対策は、ユーザー データ、ログ、構成ファイルなどの機密情報が含まれる可能性のあるディレクトリへのアクセスを制限することです。

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

上記の設定では、すべて拒否する により、/sensitive_directory 内のファイルにアクセスしようとするユーザーのアクセスが拒否されます。

変更を保存してファイルを終了します。次に、変更を有効にするために Apache を再起動します。

8. Apache で ServerSignature ディレクティブを無効にする

Apache 設定ファイルの ServerSignature ディレクティブは、Web サーバーのバージョンや実行中の OS などの設定に関する情報を含む、サーバー生成ドキュメントにフッターを追加します。 Web サーバーに関する重要な詳細を悪意のある攻撃者に公開すると、攻撃の可能性が大幅に高まります。

このような情報の公開を防ぐには、Apache 設定ファイルでこのディレクティブを無効にする必要があります。

ServerSignature Off

変更を保存し、Apache を再度再起動して変更を有効にします。

sudo systemctl restart apache2

9. 「ServerTokens」ディレクティブを「Prod」に設定します

ServerTokens」 ディレクティブは、Apache バージョン (メジャー バージョンとマイナー バージョン)、OS、実行中の Web サーバーの種類など、サーバーが送信する情報を制御します。

一般に公開したくない情報は、Web サーバーが Apache であるということだけです。それ以外の場合は、サーバーが潜在的な攻撃にさらされるだけです。したがって、Apache 設定ファイルの「ServerTokens」ディレクティブを「prod」に設定することをお勧めします。

ServerTokens Off

いつものように変更を保存し、必ず Apache を再起動してください。

10. Fail2ban で Apache を保護する

Fail2ban は、DoS 攻撃やブルート フォース攻撃などの外部脅威から Linux システムを保護するオープンソースの侵入防御アプリケーションです。これは、システム ログを継続的に監視して不正なアクティビティを検出し、攻撃動作を模倣するパターンに一致するホストを禁止することで機能します。

Fail2ban は、失敗したログイン試行の Apache ログを常に監視し、問題のある IP を一時的に禁止することで、Apache を DoS 攻撃から保護するように設定できます。

以下を使用して Linux にFail2ban をインストールする方法を確認してください。

  • Fail2ban を使用して Linux サーバーを保護する方法

11. 不要なモジュールを無効にする

Apache モジュールは、Web サーバーの機能を拡張するために読み込まれる単純なプログラムです。モジュールによって拡張される機能には、基本認証、コンテンツ キャッシュ、暗号化、セキュリティなどが含まれます。

攻撃の被害に遭う可能性を最小限に抑えるために、現在使用されていないモジュールをすべて無効にすることを常にお勧めします。

有効なモジュールをすべて表示するには、次のコマンドを実行します。

apache2ctl -M

特定のモジュール (rewrite モジュールなど) が有効かどうかを確認するには、次のコマンドを実行します。

apache2ctl -M | grep rewrite

モジュールを無効にするには、次のコマンドを実行します。

sudo a2dismod rewrite 

12. mod_security モジュールと mod_evasive モジュールを使用して Apache を保護する

mod_security モジュールと mod_evasive モジュールを有効にして、ブルート フォース攻撃や DDoS 攻撃から Apache を保護できます。

  • mod_security モジュールは Web アプリケーション ファイアウォール (WAF) のように機能し、サイトへの不審なトラフィックや不要なトラフィックをブロックします。
  • mod_evasive モジュールは、ブルート フォース攻撃やサービス拒否攻撃 (DoS) からサーバーを保護します。

mod_security モジュールと mod_evasive モジュールを使用して Apache を保護する方法の詳細を参照してください。

13. Apache の不要なサービスの制限

Apache のセキュリティをさらに強化するには、現在必要でない場合は、シンボリック リンクや CGI 実行などの特定のサービスを無効にすることを検討してください。デフォルトでは、Apache はシンボリックリンクをたどります。この機能だけでなく、-includes 機能と CGI も 1 行でオフにすることができます。

これを行うには、「ディレクトリ」セクションの「オプション」 ディレクティブに 「-ExecCGI -FollowSymLinks -includes」 という行を追加します。

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

これはディレクトリ レベルでも実現できます。たとえば、ここでは「/var/www/html/mydomain1」 ディレクトリに対するインクルードと Cgi ファイルの実行をオフにしています。

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

変更を保存し、Apache を再起動します。

14. Apache でのファイルアップロードサイズの制限

Web サーバーを保護するもう 1 つの方法は、クライアントから Web サーバーに送信される HTTP リクエスト本文の合計サイズを制限することです。サーバー、ディレクトリごと、ファイルごと、または場所ごとに設定できます。

たとえば、特定のディレクトリ (/var/www/domain.com/wp-uploads ディレクトリなど) へのファイルのアップロードを許可し、アップロードされるファイルのサイズを 4M に制限する場合は、=4194304 バイトの場合、次のディレクティブを Apache 設定ファイルまたは.htaccess ファイルに追加します。

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

変更を保存し、忘れずに Apache を再起動してください。

サーバー、ディレクトリごと、ファイルごと、または場所ごとに設定できます。このディレクティブは、サービス拒否 (DoS) 攻撃の一種となる可能性がある異常なクライアント要求の動作を回避します。

15. Apache でのログインの有効化

ログには、クライアント要求に関するすべての詳細と、Web サーバーのパフォーマンスに関するその他の情報が提供されます。これにより、何か問題が発生した場合に役立つ情報が得られます。特に仮想ホスト ファイルで Apache ログを有効にすると、Web サーバーで問題が発生した場合に問題を特定できます。

ログ記録を有効にするには、2 つの主要なログ記録ディレクティブを提供する mod_log_config モジュールを含める必要があります。

  • ErrorLog – エラー ログ ファイルのパスを指定します。
  • CustomLog – ログ ファイルを作成してフォーマットします。

仮想ホスト セクションの仮想ホスト ファイルでこれらの属性を使用して、ログ記録を有効にすることができます。

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Debian システムの {APACHE_LOG_DIR} ディレクティブは、/var/log/apache2 パスとして定義されます。

16. Apache を別のユーザーおよびグループとして実行する

Apache を別のユーザーおよびグループとして実行することは、一般的なセキュリティ手法です。これにより、Web サーバー プロセスを他のシステム プロセスから分離し、Web サーバーが侵害された場合の潜在的な損害を最小限に抑えることができます。

まず、Apache 専用の新しいユーザーとグループを作成します。

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

次に、Apache 構成ファイルを編集して、新しいユーザーとグループを指定する必要があります。

User apacheuser
Group apachegroup

Apache が実行するユーザーとグループを変更するので、Web ディレクトリとファイルの所有権を更新して、Apache が引き続き読み取ることができるようにする必要がある場合があります。

sudo chown -R apacheuser:apachegroup /var/www/html

これらの変更を加えた後、Apache を再起動して変更を適用します。

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. DDOS 攻撃と強化を保護する

確かに、Web サイトを DDoS 攻撃から完全に保護することはできません。ただし、これらを軽減し、管理するのに役立つガイドラインをいくつか紹介します。

  • TimeOut – このディレクティブを使用すると、サーバーがエラーを返す前に特定のイベントが完了するまで待機する時間を指定できます。デフォルト値は 300 秒です。 DDoS 攻撃の影響を受けやすいサイトの場合は、この値を低く保つことをお勧めします。ただし、適切な設定は、Web サイトが受け取るリクエストの性質に大きく依存します。注: タイムアウトが短いと、一部の CGI スクリプトで問題が発生する可能性があります。
  • MaxClients – このディレクティブは、同時に処理できる接続数の制限を設定します。この制限を超える新しい接続はキューに入れられます。これはプリフォークワーカーMPMの両方で利用できます。デフォルト値は256です。
  • KeepAliveTimeout – このディレクティブは、サーバーが接続を閉じる前に後続のリクエストを待機する時間を指定します。デフォルト値は 5 秒です。
  • LimitRequestFields – このディレクティブは、クライアントが受け入れる HTTP リクエスト ヘッダー フィールドの数に制限を設定します。デフォルト値は 100 です。過剰な数の HTTP リクエスト ヘッダーが原因で DDoS 攻撃が発生している場合は、この値を減らすことをお勧めします。
  • LimitRequestFieldSize – このディレクティブは、HTTP リクエスト ヘッダーのサイズ制限を設定します。

18. 定期的な脆弱性スキャンの実行

Web サーバーを保護するもう 1 つの方法は、定期的に脆弱性スキャン テストを実行することです。これは、ハッカーが機密ファイルにアクセスしたり、マルウェアを注入したりするために悪用される可能性のある潜在的なセキュリティの抜け穴を特定するのに役立ちます。

脆弱性スキャン ツールは、安全でない構成設定を指摘し、コンプライアンスの監査にも役立ちます。人気のある脆弱性スキャン ツールには、Acutenix、Nessus、Nexpose、Sucuri などが含まれます。

結論

これらは、追加の保護層を提供して侵入を防ぐために Web サーバーに実装できる Apache 強化のヒントの一部です。