Apacheでは、誰かがWebブラウザーでIPアドレスのみを使用している場合、Webサイトへのアクセスを無効にするにはどうすればよいですか?


8

CentOSでApache Webサーバーを使用していますが、WebブラウザーでサーバーのIPアドレスを使用してWebサイトにアクセスする機能を無効にする必要があります。誰かがIPアドレスを参照しようとすると、禁止されたエラーメッセージが表示されるようにしたいです。

それにはどのような構成が必要ですか?

回答:


10

デフォルトの仮想ホストをセットアップするだけです。コメント付きの例があるhttpd.confか、次のような簡単なことを行います。

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

まあ、これは私の問題を解決しました..すべての皆さんに感謝します:)
Amr Elkhedewy 2013年

7

これを行うには、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アドレスではなく実際のドメイン名を持つもの)を持つリクエストは影響を受けません。


httpd.confでは機能しませんでした
Amr Elkhedewy 2013年

.htaccessファイルで機能しました。Apache構成から実行する必要があります。
Amr Elkhedewy、2013年

2
httpd.confを編集した後、Apacheを再起動しましたか?そうしないと、apacheは新しい構成を認識しません。これは、Apacheを再起動せずに解析される.htaccessとは異なります。
etagenklo 2013年

確かに何も変更されていません
Amr Elkhedewy 2013年

1

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

リファレンス:http : //en.wikipedia.org/wiki/URL_normalization


httpd.confでは機能しませんでした
Amr Elkhedewy 2013年

.htaccessファイルで機能しました。Apache構成から実行する必要があります。
Amr Elkhedewy、2013年

これはhttpd.confで機能しますが、必ず書き換えエンジンをオンにして、仮想ホストディレクティブ内に配置してください。それ以外の場合は、デフォルトのサーバーに適用されます。参照:httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
jeffatrackaid

1

このソリューションはすべてのケースをカバーするわけではありません。

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は信頼できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.