13 ApacheWebサーバーのセキュリティと強化のヒント


私たちは皆、Apache Webサーバーに精通しています。これは、WebファイルまたはWeb上のWebサイトをホストするための非常に人気のあるWebサーバーです。 LinuxボックスでApacheWebサーバーを構成するのに役立つリンクをいくつか示します。

  1. Install Apache Web Server
  2. Setup Your Website in Your Linux Box

このチュートリアルでは、Webサーバーを保護するための主なヒントをいくつか取り上げます。これらの変更をWebサーバーに適用する前に、Apacheサーバーのいくつかの基本を理解しておく必要があります。

  1. Document root Directory: /var/www/html or /var/www
  2. Main Configuration file: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) and /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Default HTTP Port: 80 TCP
  4. Default HTTPS Port: 443 TCP
  5. Test your Configuration file settings and syntax: httpd -t
  6. Access Log files of Web Server: /var/log/httpd/access_log
  7. Error Log files of Web Server: /var/log/httpd/error_log

1.ApacheのバージョンとOSIDをエラーから隠す方法

ソースまたはyumなどの他のパッケージインストーラーを使用してApacheをインストールすると、サーバーにインストールされているApache Webサーバーのバージョンが、サーバーのオペレーティングシステム名とともに[エラー]で表示されます。また、サーバーにインストールされているApacheモジュールに関する情報も表示されます。

上の図では、ApacheがサーバーにインストールされているOSでそのバージョンを示していることがわかります。これは、WebサーバーだけでなくLinuxボックスにとっても重大なセキュリティ上の脅威となる可能性があります。 Apacheがこれらの情報を世界に表示しないようにするには、Apacheのメイン構成ファイルにいくつかの変更を加える必要があります。

vimエディターで設定ファイルを開き、「ServerSignature」を検索します。デフォルトではオンです。これらのサーバー署名をオフにする必要があり、2行目の「ServerTokensProd」は、すべてのページ要求のサーバー応答ヘッダーで製品としてApacheのみを返すようにApacheに指示します。これにより、OS、メジャーおよびマイナーバージョン情報が抑制されます。

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

2.ディレクトリリストを無効にする

デフォルトでは、Apacheは、インデックスファイルがない場合にドキュメントルートディレクトリのすべてのコンテンツを一覧表示します。下の画像をご覧ください。

特定のディレクトリの構成ファイルでOptionsディレクティブを使用して、ディレクトリリストをオフにすることができます。そのためには、httpd.confまたはapache2.confファイルにエントリを作成する必要があります。

<Directory /var/www/html>
    Options -Indexes
</Directory>

3.Apacheを定期的に更新し続ける

Apache開発者コミュニティは、セキュリティの問題に継続的に取り組んでおり、新しいセキュリティオプションを備えた更新バージョンをリリースしています。したがって、Webサーバーとして最新バージョンのApacheを使用することを常にお勧めします。

Apacheのバージョンを確認するには:httpd-vコマンドを使用して現在のバージョンを確認できます。

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

次のコマンドでバージョンを更新できます。

# yum update httpd
# apt-get install apache2

特定のOSまたはカーネルでのみ動作する特定のアプリケーションを実行していない場合は、カーネルとOSを最新の安定したリリースに更新しておくこともお勧めします。

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

Web攻撃の被害者になる可能性を軽視することは常に良いことです。したがって、現在使用されていないすべてのモジュールを無効にすることをお勧めします。次のコマンドを使用して、Webサーバーのコンパイル済みモジュールをすべて一覧表示できます。

# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
....

上記は、デフォルトで有効になっているが、多くの場合不要なモジュールのリストです:mod_imap、mod_include、mod_info、mod_userdir、mod_autoindex。特定のモジュールを無効にするには、その行の先頭に「#」を挿入して、サービスを再起動します。

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

デフォルトのインストールでは、Apacheはユーザーnobodyまたはdaemonでプロセスを実行します。セキュリティ上の理由から、Apacheを独自の非特権アカウントで実行することをお勧めします。例:http-web。

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

次に、この新しいユーザーで実行するようにApacheに指示する必要があります。そのためには、/ etc/httpd/conf/httpd.confにエントリを作成し、サービスを再起動する必要があります。

/etc/httpd/conf/httpd.confをvimエディターで開き、キーワード「User」と「Group」を検索します。そこで、使用するユーザー名とグループ名を指定する必要があります。

User http-web
Group http-web

6.許可と拒否を使用して、ディレクトリへのアクセスを制限します

httpd.confファイルの「Allow」および「Deny」オプションを使用して、ディレクトリへのアクセスを制限できます。この例では、httpd.confファイルで次のように設定することにより、ルートディレクトリを保護します。

<Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>
  1. Options “None” – This option will not allow users to enable any optional features.
  2. Order deny, allow – This is the order in which the “Deny” and “Allow” directives will be processed. Here it will “deny” first and “allow” next.
  3. Deny from all – This will deny request from everybody to the root directory, nobody will be able to access root directory.

7.mod_securityおよびmod_evasiveモジュールを使用してApacheを保護します

これらの2つのモジュール「mod_security」と「mod_evasive」は、セキュリティの観点からApacheの非常に人気のあるモジュールです。

mod_securityがWebアプリケーションのファイアウォールとして機能し、トラフィックをリアルタイムで監視できるようにします。また、ブルートフォース攻撃からWebサイトまたはWebサーバーを保護するのにも役立ちます。デフォルトのパッケージインストーラーを使用して、サーバーにmod_securityをインストールするだけです。

$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
# yum install mod_security
# /etc/init.d/httpd restart

mod_evasiveは非常に効率的に機能し、1つのリクエストで処理し、非常にうまく処理します。 DDOS攻撃がそれほど多くのダメージを与えるのを防ぎます。 mod_evasiveのこの機能により、HTTPブルートフォースおよびDoSまたはDDos攻撃を処理できます。このモジュールは、3つの方法で攻撃を検出します。

  1. If so many requests come to a same page in a few times per second.
  2. If any child process trying to make more than 50 concurrent requests.
  3. If any IP still trying to make new requests when its temporarily blacklisted.

mod_evasiveは、ソースから直接インストールできます。ここに、これらのモジュールのインストールおよびセットアップガイドがあり、LinuxボックスでこれらのApacheモジュールをセットアップするのに役立ちます。

  1. Protect Apache using Mod_Security and Mod_evasive

8.Apacheのシンボリックリンクのフォローを無効にします

デフォルトでは、Apacheはシンボリックリンクをたどりますが、FollowSymLinks withOptionsディレクティブを使用してこの機能をオフにすることができます。そのためには、メインの構成ファイルに次のエントリを作成する必要があります。

Options -FollowSymLinks

また、特定のユーザーまたはWebサイトでFollowSymLinksを有効にする必要がある場合は、そのWebサイトの「.htaccess」ファイルにルールを書き込むだけです。

# Enable symbolic links
Options +FollowSymLinks

注:「。htaccess」ファイル内の書き換えルールを有効にするには、「AllowOverrideAll」がメイン構成にグローバルに存在する必要があります。

9.サーバーサイドインクルードとCGI実行をオフにします

必要がなければ、サーバーサイドインクルード(mod_include)とCGIの実行をオフにすることができます。そのためには、メインの構成ファイルを変更する必要があります。

Options -Includes
Options -ExecCGI

Directoryタグを使用して、特定のディレクトリに対してもこれを行うことができます。この例では、「/ var/www/html/web1」ディレクトリのインクルードとCgiファイルの実行をオフにしています。

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

オプションディレクティブでオンまたはオフにできる他の値を次に示します。

  1. Options All – To enable All options at once. This is the default value, If you don’t want specify any values explicitly in Apache conf file or .htaccess.
  2. Options IncludesNOEXEC – This option allows server side includes without the execute permission to a command or cgi files.
  3. Options MultiViews – Allows content negotiated multiviews with mod_negotiation module.
  4. Options SymLinksIfOwnerMatch – It’s similar to FollowSymLinks. But, this will follow only when the owner is the same between the link and the original directory to which it is linked.

10.リクエストサイズの制限

デフォルトでは、ApacheはHTTPリクエストの合計サイズに制限がありません。つまり、無制限であり、Webサーバーで大きなリクエストを許可すると、サービス拒否攻撃の被害者になる可能性があります。ディレクトリタグを使用して、Apacheディレクティブ「LimitRequestBody」のリクエストサイズを制限できます。

リクエスト本文で許可されている値は、0(無制限)から2147483647(2GB)までのバイト単位で設定できます。サイトのニーズに応じてこの制限を設定できます。アップロードを許可するサイトがあり、特定のディレクトリのアップロードサイズを制限するとします。

この例では、user_uploadsは、ユーザーによってアップロードされたファイルを含むディレクトリです。これには500Kの制限を設けています。

<Directory "/var/www/myweb1/user_uploads">
   LimitRequestBody 512000
</Directory>

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

確かに、WebサイトをDDos攻撃から完全に保護することはできません。これは、制御するのに役立ついくつかのディレクティブです。

  1. TimeOut : This directive allows you to set the amount of time the server will wait for certain events to complete before it fails. Its default value is 300 secs. It’s good to keep this value low on those sites which are subject to DDOS attacks. This value totally depends on kind of request you are getting on your website. Note: It could pose problems with come CGI scripts.
  2. MaxClients : This directive allows you to set the limit on connections that will be served simultaneously. Every new connection will be queued up after this limit. It is available with Prefork and Worker both MPM. The default value of it is 256.
  3. KeepAliveTimeout : Its the amount of time the server will wait for a subsequent request before closing the connection. Default value is 5 secs.
  4. LimitRequestFields : It helps us to set a limit on the number of HTTP request’s header fields that will be accepted from the clients. Its default value is 100. It is recommended to lower this value if DDos attacks are occurring as a result of so many http request headers.
  5. LimitRequestFieldSize : It helps us to set a size limit on the HTTP Request header.

12.Apacheログを有効にします

Apacheを使用すると、OSのログとは独立してログを記録できます。 Apacheロギングを有効にすることをお勧めします。これは、Webサーバーと対話したユーザーが入力したコマンドなど、より多くの情報を提供するためです。

これを行うには、mod_log_configモジュールを含める必要があります。 Apacheで利用できる3つの主要なロギング関連のディレクティブがあります。

  1. TransferLog: Creating a log file.
  2. LogFormat : Specifying a custom format.
  3. CustomLog : Creating and formatting a log file.

また、仮想ホスティングを行っている特定のWebサイトに使用することもできます。そのためには、仮想ホストセクションで指定する必要があります。たとえば、これはロギングが有効になっている私のWebサイトの仮想ホスト構成です。

<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

13.SSL証明書を使用したApacheの保護

最後になりましたが、SSL証明書を使用すると、インターネットを介したすべての通信を暗号化された方法で保護できます。ログイン資格情報を証明してログインするWebサイトがある場合、または製品を購入するために銀行の詳細またはデビット/クレジットカードの詳細を提供するEコマースWebサイトがあるとします。デフォルトでは、Webサーバーはこれらの詳細をプレーンテキストで送信します。ただし、SSL証明書をWebサイトに使用すると、Apacheはこのすべての情報を暗号化されたテキストで送信します。

SSl証明書は、namecheap.comなどのさまざまなSSLプロバイダーから購入できます。非常に小規模なWebビジネスを運営していて、SSL証明書を購入したくない場合でも、自己署名証明書をWebサイトに割り当てることができます。 Apacheは、mod_sslモジュールを使用してSSL証明書をサポートします。

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

証明書が作成され、署名されたら。次に、これをApache構成に追加する必要があります。 vimエディターでメイン設定ファイルを開き、次の行を追加してサービスを再起動します。

<VirtualHost 172.16.25.125:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/example.com.crt
        SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
        SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
        ServerAdmin [email protected]
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog /var/log/httpd/example.com-error_log
        CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>

ブラウザを開き、https://example.comと入力すると、新しい自己署名証明書が表示されます。

これらは、ApacheWebサーバーのインストールを保護するために使用できるいくつかのセキュリティのヒントです。より有用なセキュリティのヒントとアイデアについては、ApacheHTTPサーバーの公式オンラインドキュメントを参照してください。