CentOSでApache Webサーバーを使用していますが、WebブラウザーでサーバーのIPアドレスを使用してWebサイトにアクセスする機能を無効にする必要があります。誰かがIPアドレスを参照しようとすると、禁止されたエラーメッセージが表示されるようにしたいです。
それにはどのような構成が必要ですか?
CentOSでApache Webサーバーを使用していますが、WebブラウザーでサーバーのIPアドレスを使用してWebサイトにアクセスする機能を無効にする必要があります。誰かがIPアドレスを参照しようとすると、禁止されたエラーメッセージが表示されるようにしたいです。
それにはどのような構成が必要ですか?
回答:
デフォルトの仮想ホストをセットアップするだけです。コメント付きの例があるhttpd.conf
か、次のような簡単なことを行います。
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html
</VirtualHost>
これを行うには、mod_rewriteを使用し.htaccess
ます(ファイル内、デフォルトのサーバーコンテキスト内、またはがServerName
ホストのIPアドレスである別のVirtualHost内)。
RewriteEngine On
RewriteCond %{HTTP_HOST} 1.2.3.4 # Replace with your own IP address
RewriteRule .* - [F]
これは、HTTP_HOSTヘッダーがIPアドレス1.2.3.4と一致する場合、すべての要求が403 Forbidden
。別のHTTP_HOSTヘッダー(例:IPアドレスではなく実際のドメイン名を持つもの)を持つリクエストは影響を受けません。
IPによる直接アクセスをブロックすることはできません。接続を許可する必要がありますが、それをどうするかを決定します。これは、403、404を返すか、目的のページにリダイレクトすることができます。これはmod_rewriteで実行できます。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^123\.123\.123\.123
RewriteRule ^(.*)$ - [F,L]
これは、Webクライアントから渡されたHTTP HOSTヘッダーと一致します。他のすべての要求は通過します。
ただし、SEOのためにURLを正規化することもできます。
このアプローチでは、目的の結果と一致しないものはすべて書き換えます。
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
リファレンス:https : //httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalurl
このソリューションはすべてのケースをカバーするわけではありません。
IP URLの任意の数字またはドットを%##で置き換えます。たとえば、1を%31 ... 8を%38に置き換えると、ドメインURLではなくIPに到達します。
説明を簡単にするために使用されているこの不良IPを想定します。123.45.6.789
すべての数字とドットに2つの選択肢を使用する必要があります。ドットは%2Eで、0..9は%30 ..%39です
RewriteEngine on
RewriteCond %{HTTP_HOST} (1|%31)(2|%32)(3|%33)(\.|%2E)(4|%34)(5%35)(\.|%2E)(6|%36)(\.|%2E)(7|%37)(8|%38)(9|%39)
RewriteRule . - [F]
醜いですが、{1,3}で削減して有効なIPに制限することができますが、これはあなたのIPなので、そうする必要はありません。
「:80」のようなポートを忘れないでください。HTTP_HOSTに含まれており、SERVER_NAMEは信頼できません。