1. apache2.x系の基本的な設定

    apacheの設定はhttpd.confに記入します。変更する場合はバックアップを取ってから行いましょう。

    今回は基本的な以下3点について。


    • サーバー用ユーザーアカウントの作成

    • ポートやドキュメントルート等設定

    • HTTPリクエストの制限の設定




    まず、サーバー用ユーザーアカウントの設定ですが、攻撃者がWebサーバーからサーバーに侵入しても、Webサーバーの権限だけにするためにアカウントを作成します。

    一般的なユーザー名としてhttpdかapacheが広く使われていますが、ここではhttpdを指定してログイン無効のユーザー、グループを作成します。
    $ groupadd httpd
    $ useradd httpd -g httpd -d /dev/null -s /sbin/nologin

    apacheの設定ファイルhttpd.confに記入します。
    User httpd
    Group httpd

    ついでにバイナリファイルのパーミッションも変更しておきましょう。パスは環境に合わせて変更して下さい。
    #書き込みアクセス権はrootユーザーのみにする。
    $ chown -R root:root /usr/local/apache
    $ chmod -R go-w /usr/local/apache

    #root以外のユーザーは参照も不可にする。
    $ chmod -R go-r /usr/local/apache/conf
    $ chmod -R go-r /usr/local/apache/logs

     

    続いてポートやドキュメントルート等の設定です。

    httpd.confで設定します。
    # Webサーバファイルの場所
    ServerRoot "/usr/local/apache"

    # Webサーバーツリーの場所
    DocumentRoot "/var/www/htdocs"

    # リッスンするポート
    Listen 80

    # クライアントのIPアドレスを名前に解決しない
    HostnameLookups Off

    #重要なシステムファイルを見せないようにするため、アクセス権を設定する。
    #以下の設定はドキュメントルートへのアクセスのみを許可する。
    <Directory />
    Order Deny All
    Deny from all
    </Directory>
    <Dorectory /var/www/htdocs>
    Order Allow,deny
    Allow from all
    </Dorectory>

    #Apacheが生成した電子メールアドレスを汎用アドレスに置き換える。
    ServerAdmin webmaster@apachesecurity.net

    #定義されたメールアドレスは、デフォルトではサーバーが生成するページに表示されてしまうため、無効にする。
    ServerSignature Off

    #レスポンスヘッダーにもサーバー情報は書き込まれているため書き込まないよう設定する
    ServerTokens ProductOnly

    #ファイルが誤って丸見えになる問題を防ぐには、自動インデックス機能を無効にし、正規表現で示すものと一致するファイルへのリクエストを全て拒否する。
    <FilesMatch "(^\.ht|~$|\.bak$|\.BAK$)">
    Order Allow,Deny
    Deny from all
    </FilesMatch>

    ひとまずこんなところでしょうか。

    続いてHTTPリクエストの制限に関する設定です。

    同じくhttpd.confに記入します。これは環境によって値が左右されますので説明程度に留めます。以下の設定はデフォルトです。
    # クライアントの最大待機時間(秒)
    Timeout 300

    # リクエスト間での接続の再利用を許可
    KeepAlive On

    # 接続あたりの最大リクエスト数
    MaxKeepAliveRequests 100

    # オープン接続での次のリクエストの最大待機時間(秒)
    KeepAliveTimeout 15

    接続タイムアウトのデフォルト値300秒は長過ぎるため、60秒以下に減らしても安全で、DoS攻撃への耐性を強化することができます。

    KeepAliveの設定については以下で詳しく説明されています。

    間違いだらけのWEBサーバ Keep-Alive

    keep-aliveのことをちゃんと考える

    その他の制限に関する設定。
    # リクエストの本文の制限(無制限)
    LimitRequestBody 0

    # リクエストあたりの最大ヘッダー数
    LimitRequestFields 100

    # 各ヘッダーの最大の長さ(バイト数)
    LimitRequestFiesdSize 8190

    # リクエストの1行目の最大の長さ(バイト数)
    LimitRequestLine 8190

    # XMLリクエストの本文の最大サイズ(バイト数)
    LimitXMLRequestBody 1000000

    LimitRequestBodyは実質的には2GBまでですが、ファイルアップロードをサポートする予定がなければ64KBまで減らしてもOKです。

    続いて、サーバーインスタンスの生成と配備の方法に関する設定です。

    Apache 2.xでは、マルチプロセッシングモジュール(MPM)という概念が導入されています。

    MPMは、リクエスト処理をどのように配分するかを決定する特殊なモジュールであり、一度に1つだけアクティブ化されます。こちらも環境によって値を調整する必要がありますが、一般的にデフォルト値で問題ないようです。
    # プロセスの最大数
    ServerLimit 16

    # 起動するプロセスの数
    StartServers 2

    # 1つのプロセスで生成するスレッドの数
    ThreadsPerChild 25

    # 全てのプロセスにまたがるスペアスレッドの最小数
    MinSpareThreads 25

    # 全てのプロセスにまたがるスペアスレッドの最大数
    MaxSpareThreads 75

    # クライアントの最大数
    MaxClients 150

    # サーバーに対するリクエストの最大数(無制限)
    # Apache 2.xでは 10000
    MaxRequesrPerChild 0

    MPMについての説明は以下のサイトがいい感じにまとめられています。

    ApacheのMPM、「prefork」と「worker」を切り替える方法

     

    ざっと簡単にですが以上で基本的な設定はできたと思います。

    参考文献:Apacheセキュリティ

     

     

     

    Posted by Takeya Hikage on 2014年09月02日
    Categories apache