質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

1回答

8120閲覧

ApacheのLimitExceptが効かない

shutosg

総合スコア20

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

2クリップ

投稿2016/01/15 12:25

編集2016/01/15 12:26

VPSのApacheでウェブサイトを運営している者です。

セキュリティを高めるために、Apacheの設定のLimitExceptを用いてHTTPリクエストのGETとPOST、OPTIONS以外を拒否するように設定しようとしたのですが、上手くいきません。同じ記述(後述)で自宅のラズパイウェブサーバでは設定が有効になっているので記述にミスは無いように思えます。。。

まずVPSのApacheの設定状況です。VirtualHostを用いて複数のサイトを運営しており、全サイトに適用したいので、/var/www以下に設定します。(/var/www/以下に全てのサイトの公開ディレクトリがあります)

<Directory "/var/www"> AllowOverride None Require all granted <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory>

これをして、httpdを再起動してから

$ telnet サイトのurl 80 Trying XXX.XXX.XXX.XXX... Connected to サイトのurl. Escape character is '^]'. CONNECT 127.0.0.1:25 HTTP/1.0

とするとウェブサイトのトップページが返されてしまいます。上記設定部分に関して"全く"同じ設定をしたラズパイウェブサーバ(VirtualHost未使用)にtelnetするときちんと403 Forbiddenが返って来ます。設定が有効にならない原因が全く分からないのですが、何か考えられる原因や、見落としている箇所を教えていただきたく思います。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「全サイトに適用したいので、/var/www以下に設定します」とありますが、その理論なら"/"でもOKとなりますね。

そんな設定はしたことないのでわからないのですが、
ファイルパスはドキュメントルート以下のパスまで指定しないといけない気がします。
(ゴメンなさい。試してません)

普通はバーチャルホストごとのディレクティブ内で、そのドキュメントルートごとに設定するとおもいます。

投稿2016/01/15 12:38

kurosawa

総合スコア780

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shutosg

2016/01/15 12:46

ご回答ありがとうございます。確かに"/"でも試しましたし、ドキュメントルート以下のパスまで指定しても試しましたが、ダメでした。 ラズパイサーバも同じく"/var/www"で指定していますが、公開ドキュメントは/var/www/html/index.htmlとなっており、それでも反映されています。
kurosawa

2016/01/15 14:05

ローカルで検証してみました。 http.conf の一番最後に、8080/8081ポートで2つVirtualHostを立ち上げ、同じようにCONNECTで呼び出したら、403 Forbiddenが返って来ますね。 http.conf ------------------------------------------ <Directory "/var/www"> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> Listen 8080 <VirtualHost *:8080> DocumentRoot "/var/www/test/v1/" ServerName v1 </VirtualHost> Listen 8081 <VirtualHost *:8081> DocumentRoot "/var/www/test/v2/" ServerName v2 </VirtualHost> end ------------------------------- 検証 ------------------------------------------ $ telnet localhost 8080 : CONNECT / <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> : $ telnet localhost 8081 : CONNECT / <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> end ------------------------------- ちょっと気になったのですが、、、 VertualHostはポートベースですか?それとも名前ベースでしょうか? 検証時、ポート80に接続してから CONNECTでIPとポートを指定してますが、この検証方法であってますか? ポートベースなら、telnet接続する時の ポートを変えなければいけないかと。 ネームベースなら、"CONNECT 127.0.0.1:25 HTTP/1.0"ではなく、 ”CONNECT / HTTP/1.0"で呼んでみたらどうなりますか?
shutosg

2016/02/07 16:03

返事が大変遅れてしまい申し訳ありません。 ローカルサーバーでの検証ありがとうございます。そちらでは適切に動作しているようです。<Directory "/var/www">の行を<Directory "/var/www/v1">にするとおそらく8080ポートにCONNECTリクエストを送った時のみ403が返ってきて、8081ポートへは400 Bad Requestが返ってくるように思えます。 >VertualHostはポートベースですか?それとも名前ベースでしょうか? 私の環境では名前ベースのVirtualHostを使用しています。 >検証時、ポート80に接続してから >CONNECTでIPとポートを指定してますが、この検証方法であってますか? CONNECTメソッド自体はもともと、プロキシサーバにトンネリング(中継)させるためのリクエストで、今回の例の「CONNECT 127.0.0.1:25 HTTP/1.0」では「127.0.0.1の25番ポートへの通信を中継しろ」という意味です。もちろん127.0.0.1:25は試験的に用いた値であって本来は接続先のドメインなりIPなり、接続先ポートも記述します。その為この記述のしかたが本来正しいのだと認識しております。 >”CONNECT / HTTP/1.0"で呼んでみたらどうなりますか? 400 Bad Requestと言われてしまいます。試しに"CONNECT example.net HTTP/1.0"でやってみても同じくBad Requestでした。"CONNECT example.net:25 HTTP/1.0"のようにポート番号も指定してやると127.0.0.1:25と同じようにトップページが返ってきます。 <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> という設定を適用した時点でGETとPOSTとOPTIONS以外のメソッド(CONNECTやHEADなど)は403が返ってくるはずなのですが、やはりうまくいきません。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問