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

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

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

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

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

7432閲覧

.htaccessでIP制限が出来ない

starsecond

総合スコア13

Apache

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

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/01/27 03:27

.htaccessという言葉も初めて聞く初心者です。
HPを公開しようとしていますが、特定のIPだけ許可したいので検索したところ.htaccessが出てきました。
HP自体はPHPで作成し、AWS上にアップしています。

参考にしたサイト:
https://ex1.m-yabe.com/archives/2154
https://dev.classmethod.jp/cloud/aws/access-limit-behind-elb/

.htaccessはエディタで作成
まずはテストとして自分のIPを拒否してエラーになるかどうか試しましたが閲覧できてしまいます。

Apacheのバージョン:Server version: Apache/2.4.41 (Amazon)

RemoteIPHeader X-Forwarded-For DocumentRoot /var/www/html <Location /php/test2.php> Require not ip 自分のグローバルIP(確認くんで検索) </Location>

.htaccessファイルはTeratermでSSH SCPで/var/www/htmlにアップロードしています。
参考ページを真似しながら記述しましたが、何か記入漏れや間違いなどがあればお教えいただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

amura

2020/01/27 03:36

.htaccessは、httpd.confにて利用可能な設定になっていますでしょうか
退会済みユーザー

退会済みユーザー

2020/01/27 03:38

AWSの access_log でIPを確認してください
starsecond

2020/01/27 03:51

httpd.confのDirectory内がAllowOverride noneになっていたのでAllowOverride ALLに変更してApacheを再起動させましたがまだ閲覧できてしまいます。
amura

2020/01/27 04:01

そうですか次に考えられるのはユーザ権限でしょうか(httpdユーザ)
starsecond

2020/01/27 04:12

sudo chown -R ec2-user /var/www/html で許可しているのが問題ですか?
amura

2020/01/27 07:32

.htaccess に一文deny from 219.111.65.200としても.htaccessが有効かを調べられます。自分のIPに変えてみてください。
starsecond

2020/01/27 08:15

お教えいただいた一文を記述してアップしましたが変化ありませんでした。 .htaccessの有効無効の確認はhttpd.conf以外にはないのでしょうか ディレクトリは以下のようになっています。 <Directory /> AllowOverride All Require all denied </Directory>
amura

2020/01/27 08:21

自例ですみません。 フルパスで指定しています <Directory "/var/www/html"> AllowOverride All    で.htaccess を /var/www/htmlに置いてみました
starsecond

2020/01/27 08:29

同じようにフルパスにしてApacheを再起動しましたが変化ありませんでした。
starsecond

2020/01/27 09:13

amuraさん、長々とお付き合いいただきありがとうございます。 回答でAWS上のセキュリティグループで制限した方がよいという意見があったのでそちらを採用しました。 結果、特定のIPのみ接続させるということが出来ました。 .htaccessについては謎ですがこれで解決と致します。 本当にありがとうございましたm(_ _)m
amura

2020/01/27 14:49

解決策が見つかって良かったです。色々と勉強になりました。
guest

回答2

0

ベストアンサー

DirectoryディレクティブやLocationディレクティブはhttpd.confの中でしか使えません。

参考サイト

述例としていろいろなブログ等に書かれているが、これらのディレクティブは基本的に httpd.conf で使用し、.htaccess では使えない。 VPS等root権限が使えるサーバーを除く多くのレンタルサーバーでは .htaccess しか編集できず、そこに <Directory><Location> を書いても Internal Server Error になるので注意する。

RemoteIPHeaderでX-Forwarded-Forを確認しているのはELB配下にある場合で、なぜかと言うと接続元IPが特定できないからです。(接続元IPだけ見るとELBのIPになってしまうため)
ELBを使っていない場合はその設定は不要でしょう。

なので.htaccessを使うのであれば多分こんな感じの.htaccessを制御したいディレクトリに置いてやればいいでしょう。

<Require All> Require all granted Require not ip 自分のグローバルIP </Require All>

記載方法についてはこちらをご参照ください
こちらも参考になるかも

その他ハマりそうなところはこちらとかも。

個人的には、.htaccessを使わずにhttpd.confに書く方(もっというと、conf.dの中にファイルを分割して配置する)を推します。
設定がいろんなディレクトリにバラけてしまうのはイマイチなので。
参考になりそうなのはこの辺

以下は参考情報として書いておきます。

質問の回答にはなってないですが、せっかくAWSを使っているのならApacheではなくセキュリティグループで制限することを勧めます。
ApacheでIP制限するとApacheのリソースを使ってアクセス制御するので、アクセス制限の条件にかかるような大量のアクセスが有ったときにサーバリソースを消費します。
一方でセキュリティグループでIP制限すると、サーバにアクセスが届く前にリクエストが弾かれるのでサーバリソースを消費せずに済みます。

EC2のみで行う場合はセキュリティグループだとファイルやディレクトリごとにアクセス制限のやり方を変えるのは難しいですが、ALBを使う場合はより柔軟に設定できます。

投稿2020/01/27 06:36

yu_1985

総合スコア7447

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

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

starsecond

2020/01/27 08:05

確かに最終的にはAWS上でアクセス制御した方がよさそうですね! しかし頂いたコードを記述したファイルを/var/www/html に置いても変化ありませんでした。 httpd.confのDerectory設定が下記のようになっていますが、適用されてれば全てのアクセスが拒否されるはず? <Directory /> AllowOverride All Require all denied </Directory> 基本的に.htaccessが有効になっていない気がします・・・
Y.H.

2020/01/27 08:11

.htaccessを編集した後の確認時は、ブラウザのキャッシュはクリアしてから確認されてますよね?
yu_1985

2020/01/27 08:17

> Require all denied これが効いてるときはRequire not ip〜が効かないような気がします。
starsecond

2020/01/27 08:18

はい。Apacheを再起動させてCtrl+f5で確認しています。 念のためChromeの設定からキャッシュをクリアしても変化ありませんでした。
starsecond

2020/01/27 08:21

Require all deniedを#でコメントアウト?しましたが変化ありませんでした。 httpd.confの場所はsudo vim /etc/httpd/conf/httpd.conf で編集していますが問題ないでしょうか。
yu_1985

2020/01/27 09:02

よくよく見たら <Directory /> ではなく <Directory /var/www/html> のような気がします。
starsecond

2020/01/27 09:11

フルパスで指定しましたが変化ありませんでした。 yu_1985さんの最初の回答の通り、AWS上のセキュリティグループで制限(インスタンスのインバウンド編集で社内IPだけ許可して、Wi-fi切った状態でスマホからアクセス)したら接続出来ませんでしたのでこれで解決と致します。 最初からこうすればよかったのですが、無知すぎて検索した結果.htaccessを使用しようとして紛らわしくなって申し訳ございませんでした。 今回もありがとうございましたm(_ _)m
yu_1985

2020/01/27 09:15

うーん、もしかしたらApacheの他の設定がどこかバッティングしてるかもしれませんね。 このくらいならいいですが、Apacheに複雑なことをやらせようとするとスケールしたときに管理が面倒になるので、可能であれば避けたほうがいい、というのが個人的な見解です。 ただこの質問の回答にはなってないですね、すいません。
guest

0

.htaccessファイルを下記としたら如何でしょう

<RequireAll> Require all granted Require not ip 自分のグローバルIP </RequireAll>

投稿2020/01/27 06:35

yukky1201

総合スコア2751

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

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

starsecond

2020/01/27 08:08

だめでした。 httpd.confの設定をAllowOverride noneからAllに変えたのですが、.htaccessが有効になっていない気がします。 httpd.confのディレクトリ設定は以下です。 <Directory /> AllowOverride All Require all denied </Directory>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問