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