- PR -

Apache SourceIPアドレスによってアクセスさせるディレクトリを変えたい

1
投稿者投稿内容
おぺのうと
常連さん
会議室デビュー日: 2005/08/16
投稿数: 33
投稿日時: 2007-11-29 11:04
Apacheにて、
SourceIPアドレスによってアクセスさせる
ディレクトリを変えたい場合の方法

192.168.0.0/24 -> /usr/local/apache/htdoc
10.0.0.0/24 -> /usr/local/apache/htdoc2

192.168.0.0/24のクライアントからは、htdocsへはアクセス不可。
10.0.0.0/24のクライアントからは、htdocs2へはアクセス不可。
URLは、どちらも同一としたい。

httpd.confに、DocumentRoot?というところの設定で
可能なのでしょうか。
@ITの右上のボックスで検索しました、mod_rewirteという
キーワードも出てきましたが、りライトすると、URLが
変わってしまうと思われ、正しいやり方がわかり兼ねて
おります。

よろしくお願い致します。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-11-29 11:53
SourceIPで・・というのはやったことがありませんね。各々のクライアントからはどういうアクセスになるんでしょう?TargetIPもしくはホスト名が違うようであればVirtualHostで可能でしょうけど。

http://httpd.apache.org/docs/2.0/ja/vhosts/
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2007-11-29 12:25
Web検索とか を利用する時に 困りませんか
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-11-29 14:34
こんにちは。
引用:
URLは、どちらも同一としたい。


というのは、例えば、
 192.168.0.XX から、http://example.com/test.html にアクセス
  → /usr/local/apache/htdoc/test.html の内容が返る
 10.0.0.XX から、http://example.com/test.html にアクセス
  → /usr/local/apache/htdoc2/test.html の内容が返る
ということでしょうか?
Apacheのみで解決したいなら、mod_rewriteで十分でしょう。
設定例としては、ドキュメントrルートを /usr/local/apache にして、
REMOTE_ADDR を見て、192.168.0.XX からの接続であれば、
 /test.html → /htdoc/test.html
というように rewrite するルールを書くような形がとれるでしょう。
詳しくは、mod_rewrite のドキュメントの RewriteCond と RewriteRule をご参照ください。
※もっと上手い設定もあるかもしれません
引用:
りライトすると、URLが変わってしまうと思われ


…これは、何を心配されているのでしょうか?

なお、Linuxであれば、netfilter/iptables の併用という手もありそうです。
ポート80番と8080番で動作するApache ( 2インスタンス、もしくは1インスタンスでバーチャルホスト ) を用意しておき、netfilter の機能で、10.0.0.XX からのポート80番宛ての接続は、8080番へNATしてしまうのです。
※192.168.0.XX からの接続の場合はNATしない。
これにより、クライアントは80番ポート宛に接続しているにも関わらず、処理するApacheは8080番で動作しているもの、という状況が作り出せます。
後は、それぞれのApacheで設定を別々に持っておけばO.K.という具合です。
おぺのうと
常連さん
会議室デビュー日: 2005/08/16
投稿数: 33
投稿日時: 2007-11-29 22:20
shimixさま

ご返答ありがとうございます。
バーチャルホストというものあるのですね。
今回は、ホスト名、IPは同じを予定しております。
情報ありがとうございました。

MMXさま

ご返答ありがとうございます。
Web検索をするとき。。これは、どういう
場合の事でしょうか。一般検索エンジンに
同じ記事が、2重に登録されてしまうということでしょうか。

angelさま

ご返答ありがとうございます。

>というのは、例えば、
> 192.168.0.XX から、http://example.com/test.html にアクセス
>  → /usr/local/apache/htdoc/test.html の内容が返る
> 10.0.0.XX から、http://example.com/test.html にアクセス
>  → /usr/local/apache/htdoc2/test.html の内容が返る
>ということでしょうか?

はい、そのとおりです。
ファイルサーバのメインコンテンツにアクセスさせる場合と
スナップショットデータ(バックアップして複製したデータ)に
アクセスさせる場合とを、クライアントのIPによって分けたいと
思っており、今回の要望を書かせて頂きました。

早速下記のとおり書いてみたところ、動作しましたが、

DocumentRoot "/var/www/html"

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.
RewriteRule ^/.*$ /index.html
</IfModule>


DocumentRoot "/var/www/html2"

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^10\.0\.0\.
RewriteRule ^/.*$ /index.html
</IfModule>

192.168.0.x → /var/www/html/
10.0.0.x → /var/www/html2/

へ、アクセスし意図する動作をしましたが
10.0.0.xのネットワーク上のPCからでも
/var/www/html/test/index.html
へアクセスできてしまいました。

アクセス制御を方法は、一般的には何で
行うのでしょうか。

もしご存知でしたらお教え願います。
1

スキルアップ/キャリアアップ(JOB@IT)