apache2

  1. 概要

  2. インストール

  3. 従来の nice.kaze.com は apache 2.2 で動作しています。 今回は apache 2.4 ですが、設定ファイルが全然違う。

  4. 設定方針

    種別 ユーザ名 DocumentRoot CGI SSI Indexes 備考
    web 管理者 www-kun /home/www-kun/public_html × × www-kun は説明用の仮のユーザ名。
    本名は内緒。
    ユーザ www-kun 以外 /home/(ユーザ名)/public_html × ×

  5. apache2 の設定

    手順 内容 備考
    1 [cgid] [headers] モジュールを有効化します。
    # a2enmod cgid
    # a2enmod headers
    # service apache2 restart
    
    デフォールトでは [cgid] [headers] モジュールは無効になっています。
    2 /etc/apache2/apache2.conf を変更します。
    #ServerRoot "/etc/apache2"
    Mutex file:${APACHE_LOCK_DIR} default
    PidFile ${APACHE_PID_FILE}
    Timeout 300
    KeepAlive On
    MaxKeepAliveRequests 100
    KeepAliveTimeout 5
    User ${APACHE_RUN_USER}
    Group ${APACHE_RUN_GROUP}
    HostnameLookups Off
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    IncludeOptional mods-enabled/*.load
    IncludeOptional mods-enabled/*.conf
    Include ports.conf
    
    <Directory />
        Options None
        AllowOverride None
        Require all denied
    </Directory>
    
    <Directory "/usr/share/apache2/icons/">
        Require all granted
    </Directory>
    
    <Directory /home/*/public_html>
        Options MultiViews SymLinksIfOwnerMatch Indexes
        IndexOptions +FancyIndexing +FoldersFirst +IgnoreCase
          AddIcon /icons/binary.gif .GIF .dat .DAT .ini .INI .dll .DLL .EXE
          AddIcon /icons/compressed.gif .lzh .LZH .ZIP
          AddIcon /icons/layout.gif .xml .XML
          AddIcon /icons/script.gif .js .JS
          AddIcon /icons/text.gif .log .LOG
        AllowOverride FileInfo AuthConfig Limit
        <Limit GET POST OPTIONS PROPFIND>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS PROPFIND>
            Require all denied
        </LimitExcept>
    </Directory>
    
    <Directory "/home/www-kun/public_html">
        Options MultiViews SymLinksIfOwnerMatch ExecCGI
        AllowOverride FileInfo AuthConfig Limit
        AddHandler cgi-script .pl .cgi
        <Limit GET POST OPTIONS PROPFIND>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS PROPFIND>
            Require all denied
        </LimitExcept>
    </Directory>
    
    AccessFileName .htaccess
    
    <FilesMatch "^\.ht">
        Require all denied
    </FilesMatch>
    
    LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
    LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %O" common
    LogFormat "%{Referer}i -> %U" referer
    LogFormat "%{User-agent}i" agent
    
    IncludeOptional conf-enabled/*.conf
    IncludeOptional sites-enabled/*.conf
    
    DocumentRoot /home/www-kun/public_html
    
    ServerTokens Prod
    Header unset X-Powered-By
    RequestHeader unset Proxy
    Header append X-Frame-Options SAMEORIGIN
    Header set X-XSS-Protection "1; mode=block"
    Header set X-Content-Type-Options nosniff
    TraceEnable Off
    ServerSignature Off
    FileETag MTime Size
    LimitRequestBody 10485760
    LimitRequestFields 20
    RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
    
    
    変更部分は赤字で表示しました。


    Directory タグの設定順番はこの通りにしてください。 最初に全否定をしてから、徐々に必要なものを肯定する順番になっています。 後着優先となるので、順番を変えると設定の意味も変わります。


    Directory タグにある Options パラメータの意味
    Options 内容
    None 制御オプションを全て無効にする
    All 制御オプションを全て有効にする
    ExecCGI CGI プログラムの実行を許可
    FollowSymLinks シンボリックシンクがあるとき、それを辿ることを許可
    Includes SSI を許可
    IncludesNoExec SSI を許可するが、#exec、#cmd、#include によるプログラムの実行は禁止
    Indexes ディレクトリインデックスの作成を許可
    MultiViews Content negotiated MultiViews を許可
    SymLinksIfOwnerMatch シンボリックリンクとリンク先が同じ所有者である場合のみ、それを辿ることを許可


    Directory タグにある AllowOverride パラメータの意味
    AllowOverride 内容
    None オーバーライドを全て無効にする
    All 全てのディレクティブを有効にする
    AuthConfig 認証に関連するディレクティブを有効にする (.htaccess が有効となる)
    FileInfo ドキュメントタイプを指定するディレクティブを有効にする
    Indexes ディレクトリインデックスを指定するディレクティブを有効にする。ディレクトリ丸見え状態となるため非奨励
    Limit アクセス制御を行うディレクティブを有効にする。対象のディレクティブは allow、deny、order の3つ
    Options 機能を制御するディレクティブを有効にする


    DocumentRoot を設定して、/ をアクセスすると /home/www-kun/public_html/ が表示されるようにしています。 http://nice.kaze.com/ と http://nice.kaze.com/~www-kun/ は同じページが表示されるということ。


    最後の12行はセキュリティを確保するための設定です。 Apache セキュリティ設定 の記述を参考にしました。
    3 /usr/share/apache2/icons/ ディレクトリにある [README] [README.html] が第三者から見られないようパーミッションを変えてガードします。
    # chmod 600 /usr/share/apache2/icons/README*
    # ll /usr/share/apache2/icons/README*
    -rw------- 1 root root  5108 Aug 28  2007 /usr/share/apache2/icons/README
    -rw------- 1 root root 36057 Aug 28  2007 /usr/share/apache2/icons/README.html
    
    これらのファイルが覗かれると apache2 のバージョンが知られてしまい、セキュリティで心配です。

  6. 設定に問題がないか脆弱性診断します

    手順 内容 備考
    1 Nikto をインストールします。
    # cd /usr/local/src
    # wget http://cirt.net/nikto/nikto-2.1.5.tar.gz
    # tar xvfz nikto-2.1.5.tar.gz
    # mv nikto-2.1.5 /usr/local
    
    Nikto は web サーバスキャナです。 悪意を持った行為とみなされる場合があるので、自分が管理するサーバ以外には実行しないこと。
    2 プラグインとデータベースを更新します。
    # cd /usr/local/nikto-2.1.5
    # perl ./nikto.pl -update
    
     
    3 構築した apache2 を診断します。
    # cd /usr/local/nikto-2.1.5
    # perl ./nikto.pl -h 127.0.0.1
    
    基本的なコマンドフォーマットは以下の通り
    perl ./nikto.pl -h [診断対象ホスト]
    
    4 脆弱性診断結果を確認します。 以下のような結果であれば問題ありません。
    - Nikto v2.1.5
    ---------------------------------------------------------------------------
    + Target IP:          127.0.0.1
    + Target Hostname:    localhost
    + Target Port:        80
    + Start Time:         2017-06-16 18:59:41 (GMT9)
    ---------------------------------------------------------------------------
    + Server: Apache
    + Server leaks inodes via ETags, header found with file /, fields: 0x195e 0x551d6ab10d4bb
    + Uncommon header 'x-frame-options' found, with contents: SAMEORIGIN
    + Uncommon header 'x-content-type-options' found, with contents: nosniff
    + Uncommon header 'x-xss-protection' found, with contents: 1; mode=block
    + Allowed HTTP Methods: GET, HEAD, POST, OPTIONS
    + Uncommon header 'tcn' found, with contents: choice
    + OSVDB-3092: /new: This may be interesting...
    + OSVDB-3092: /news: This might be interesting...
    + 6545 items checked: 0 error(s) and 8 item(s) reported on remote host
    + End Time:           2017-06-16 19:00:11 (GMT9) (30 seconds)
    ---------------------------------------------------------------------------
    + 1 host(s) tested
    
    最初のほうで問題 (version 等、想定外の情報が見えている) があれば、apache2 の設定が間違っていないかチェックします。

    [+ OSVDB-] で始まる行には脆弱性の可能性のあるフォルダやファイルが表示されます。 例えば、ここに /abunai と表示されていたら http://[診断対象ホスト]/abunai をアクセスすると確認できます。 確認した結果、見えても構わない情報であれば放置しても大丈夫です。 Nikto さんは興味があると言ってるだけなので。