Cosmos and Chaos
Eyecatch

Apache2.4でのアクセス制限方法まとめ

色々上手くいっておらず手間取りました。
覚書を兼ねて書いておきます。

基本的に.htaccessではなく、apache2.confやhttpd.confでの記載方法です。

拒否・許可の指定方法の基本

Require all denied # 全部拒否
Require all granted # 全部許可
Require hogehoge # hogehogeは許可
Require not hogehoge # hogehogeは拒否

特定のIPのみ許可・拒否

許可

Require all denied
Require ip xxx.xxx.xxx.xxx

拒否

Require all granted
Require not ip xxx.xxx.xxx.xxx

特定の言語環境のみ許可

SetEnvIf Accept-Language ja allow_lang # 日本語
Require all denied
Require env allow_lang

SetEnvIfの内容を変えれば他の条件にも応用可能。
IP等の制限と同様、notを挟めば条件に該当した場合拒否になる。

URLに対して制限

<Location /> # 全てのページに適用される
	SetEnvIf User-Agent "python-requests" block
	Deny from env=block # ここはDenyじゃないとシンタックスエラーになる
</Location>

ファイルシステムのディレクトリに対して制限

<Directory /var/www/html/>
	# 此処に指定
</Directory>

あくまでもファイルシステム内のディレクトリやファイルにアクセスがあった際に有効となる設定である。

例えばWordPressであれば、ルートディレクトリ直下に「assets」というフォルダは自分で作成しない限り存在しない。

ここで上記のDirectoryセクション内で「hogehoge.jpg」へのアクセスを制限したとする。
WordPressのシステムはサーバー内の「/var/www/html/」の直下にあるとする。

この場合、ブラウザから「/assets/hogehoge.jpg」にアクセスしても403にはならず、WordPressの404ページが呼び出されるだけである。
「/wp-content/hogehoge.jpg」にアクセスすると403になる。

ファイルに対する制限

<FilesMatch "^wp-config\.php$">
	Require all denied
</FilesMatch>

正規表現なので^等を外せば、サブディレクトリを含めて名前が一致する全てのファイルに適用される。

Sophia

DTMとかやる人。