○ apache_tips

httpd-2.2.xでのアクセス制限
DNSの逆引きをを無効にする
.htaccessファイルについて
<Files>コンテナについて
Refererによる画像ファイルへの直リンクの禁止
ディレクトリオプションIndexesについて
別のページに自動でジャンプ
403 error ( access denied ) への対処
Server Tokens と Server Signature の扱いについて
LogFileの肥大化の抑制とworm_logについて

○httpd-2.2.xでのアクセス制限

Apacheの全てのディレクトリを対象とする<Directory>の設定は下記のように記述されて
います。

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

これに対して、Webサイト内の全てのディレクトリへのアクセスを拒否する設定にします
Orderディレクティブの評価で、デフォルトでアクセスは許可されます
"Deny from all"を設定して、アクセスを拒否します

<Directory />
    Options None
    AllowOverride None
        Order deny,allow
        Deny from all
</Directory>

特定のディレクトリへのアクセスを許可するには<Directory>コンテナにAllow指示子を
指定します。サブディレクトリにも有効になります。
Orderディレクティブの評価で、デフォルトでアクセスは拒否されます。
"Allow from all"を設定してアクセスを許可します。

<Directory "/home/www/htdocs">
    Options MultiViews SymLinksifOwnerMatch IncludesNoExec
    AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

サブディレクトリにさらにアクセス制限をかけます。1つのブロックの後に適用範囲の狭い
別のブロックを指定すると、オーバーライドされます。
Orderディレクティブの評価で、デフォルトでアクセスは拒否されます。
Allowディレクティブで許可されたアドレスを除く、他のアクセスは拒否されます。

<Directory "/home/www/htdocs/nouse">
    Options MultiViews SymLinksifOwnerMatch IncludesNoExec
    AllowOverride None
        Order allow,deny
        Allow from 192.168.0.0/255.255.255.0
</Directory>

Orderディレクティブ:モジュール(mod_authz_host 2.1以前はmod_access)

Order ディレクティブはデフォルトのアクセスの状態とAllow ディレクティブと
Deny ディレクティブが評価される順番を制御します。

Deny,Allow

Deny ディレクティブが最初に評価され、次に Allow ディレクティブが評価されます。
デフォルトでアクセスは許可されます。Deny ディレクティブに合わないか、
Allow ディレクティブに合うクライアントはアクセスを許可されます。

Allow,Deny

Allow ディレクティブが最初に評価され、次に Deny ディレクティブが評価されます。
デフォルトでアクセスは拒否されます。Allow ディレクティブに合わないか、
Deny ディレクティブに合うクライアントはアクセスを拒否されます。

マージの順番(より緩やかな設定でオーバーライドしないように注意)

1. <Directory> (正規表現無し) と .htaccess を同時に
2. <DirectoryMatch> と <Directory ~>
3. <Files> と <FilesMatch> を同時に
4. <Location> と <LocationMatch> を同時に



○DNSの逆引きをを無効にする

Allow From または Deny from指示子を指定すると、Apacheは一度逆引きをしてから、
再度順引きをしてIPアドレスが一致するか確かめますのでパフォーマンスが落ちます。
ログファイルにもホスト名は記録されなくなりますが、必要な場合は別にログファイル
を解析する事で良しとします。

HostnameLookups  Off



○.htaccessファイルについて

AllowOverride指示子にNone以外を指定すると、AccessFileNameに指示されているファイル
(.htaccess)を探します。個人の場合ユーザディレクトリごとに管理する必要がないので、
httpd.conf内に全て記述する方が、パフォーマンスが上がります。

<Directory />
    Options None
    AllowOverride None
        Order deny,allow
        Deny from all
</Directory>



○<Files>コンテナについて

・公開ディレクトリの中に不要なファイルを置かない
・\記号は\(半角バックスラッシュ)を意味します

ディレクトリ内に拡張子に関わらずtextファイルが存在すれば、リクエストに応じて
表示されてしまいます。ユーザーディレクトリで重要な役割をする.htaccessファイルも
textファイルなのでそのままでは表示されてしまいます。<Files>コンテナのなかでは、
ファイル名と一致したものに、処理の方法を設定できます。
この例では、正規表現を使って行頭から.htで始まるファイル名に対して、アクセス拒否の
設定をしています。
Orderディレクティブの評価でアクセスはデフォルトで拒否されますが、
明示的に"Deny from all"を記述しています

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>



○Refererによる画像ファイルへの直リンクの禁止

・ \記号は\(半角バックスラッシュ)を意味します

他のサイトから画像などに直リンクを貼られると、他のサイトのために帯域を使うことに
なります。SetEnvIfディレクティブを使い、HTTPリクエストのRefererヘッダに"528p.com"
が含まれるものには、環境変数「link_auth」を設定します。
<FilesMatch>ディレクティブでは、指定された拡張子のファイルのリクエストに対して
環境変数「link_auth」が設定されているか否かを調べ、設定されている場合のみ
レスポンスを返します。

SetEnvIf Referer 528p\.com link_auth

<FilesMatch "\.(gif|jpe?g|png)$">
    order deny,allow
    Deny from all
    Allow from env=link_auth
</FilesMatch>



○ディレクトリオプションIndexesについて

httpd.confではデフォルトで下記のように記述されています。

<Directory "/home/www/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

DirectoryIndex index.html index.html.var

この場合、DirectoryIndexで指定されたファイルがないとディレクトリーリストが表示
されディレクトリの中が丸見えになります。セキュリティの面から、中身を公開してよい
フォルダを除き、許可を与えないようにすることが賢明です。

<Directory "/home/www/htdocs">
    Options  FollowSymLinks
    AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

DirectoryIndex index.html index.html.var

こうすると、指定されたファイルがない場合、ファイルがないと返されますのでスマートに
他のディレクトリやファイルへジャンプするindex.htmlを作って配置します。

○別のページに自動でジャンプ

・HTML <meta>タグを使用します (絶対URLの例)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="1; URL=//ja.528p.com/">
<title>index</title>
</head>
<body>
<br>
</body>
</html>

: 説明

<meta http-equiv="refresh" content="●●; URL=■■">

●● 他のページにジャンプするまでの秒数
■■ ジャンプ先のURL 絶対URLまたは相対URLで指定します

・JavaScriptを使用します (絶対URLの例)
・JavaScriptの機能をオフにしていると動作しません

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>index</title>
</head>
<body>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function autoLink()
    {
    location.href="//ja.528p.com/";
    }
    setTimeout("autoLink()",3000);
    // -->
    </SCRIPT>
</body>
</html>

: 説明

location.href="リンク先のURL";
setTimeout("autoLink()",1000); で1秒になります。



○403 error (access denied) への対処

403 error (access denied) が出た場合に、独自のhtmlファイルを表示し、
自動的に正式なサイトへ誘導します

:httpd.conf

・省略

ErrorDocument 403 /lead2home.html

・省略

:lead2home.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 <title>lead2home.html</title>
</head>
<body>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function autoLink()
    {
    location.href="//ja.528p.com/";
    }
    setTimeout("autoLink()",3000);
    // -->
    </SCRIPT>
 <p>Access Denided!</p>
 <p>ページが自動的に更新されない場合は <a 
 href="//ja.528p.com/">ここ</a> をクリックしてください</p>
</body>
</html>



○Server Tokens と Server Signature の扱いについて

Server Tokens と Server Signature の扱いについて2タイプ、例を挙げます。
目的にあった設定を選択して下さい。

:Server Tokens Prod , Server Signature On の場合

Forbidden

You don't have permission to access /cgi-bin/ on this server.
Apache Server at ja.528p.com Port 80

:Server Tokens Prod , Server Signature Off の場合

Forbidden

You don't have permission to access /cgi-bin/ on this server.



○LogFileの肥大化の抑制とwarm_logについて

画像ファイルへのアクセスを無視することで、access_log の肥大化を抑制できます。
windowsワームのアクセスを分離して、access_logの肥大化を抑制し、別にworm_logを
取ります。mod_setenvif モデュールを使って、LogFormatの環境変数を変更します。

・画像ファイルのログを環境変数 ignorelogに設定します

SetEnvIf Request_URI "\.(gif|jpe?g|(png)$" ignorelog

・windowsワームのログを環境変数 wormlog ignorelogに設定します

SetEnvIf Request_URI "^/scripts/" wormlog ignorelog
SetEnvIf Request_URI "^/c/" wormlog ignorelog
SetEnvIf Request_URI "^/d/" wormlog ignorelog
SetEnvIf Request_URI "^/_vti_bin/" wormlog ignorelog
SetEnvIf Request_URI "^/_mem_bin/" wormlog ignorelog
SetEnvIf Request_URI "^/default\.ida" wormlog ignorelog
SetEnvIfNoCase Request_URI "^/msadc/" wormlog ignorelog

・access_logでcombinedで設定されたものから、ignorelogを除く設定

CustomLog /var/log/httpd/access_log combined env=!ignorelog

・worm_logでcombinedで設定されたもので、wormlogだけログを取る設定

CustomLog /var/log/httpd/worm_log combined env=wormlog



○ Copyright(c) 528p.com All Rights Reserved.