メモ > サーバ > 構築: 攻撃からの防御 > .htaccess でアクセス制限
.htaccess でアクセス制限
※.htaccessとは、Webサーバーの基本的な動作をディレクトリ単位で制御するためのファイル。
Apacheで利用できるが、nginxでは対応していないので注意。
※複数を設定するとき、設定順に注意。
例えば「Order Deny,Allow」とした場合は「Deny → Allow」の順に設定する必要がある。混在させると正しく動作しない。
※行の途中に「#」を書いてコメントを設けると、Apacheのバージョンによってはエラーになる。
行頭から「#」を書いてコメントを設けるのが無難。
■特定IPからのみアクセスを許可
Order Deny,Allow
Deny from all
Allow from 203.0.113.1
Allow from 203.0.113.2
■特定IPからのアクセスを拒否
Order Allow,Deny
Allow from all
Deny from 203.0.113.1
Deny from 203.0.113.2
■特定IPからのアクセスを拒否(ロードバランサーを考慮)
SetEnvIf X-Forwarded-For "203.0.113.1" deny_ip
SetEnvIf X-Forwarded-For "203.0.113.2" deny_ip
Order Allow,Deny
Allow from all
Deny from env=deny_ip
Nginx と Apache の、Basic認証 と IP制限 の様々な設定方法まとめ (ELBの有無も考慮) #nginx - Qiita
https://qiita.com/hirai-11/items/c76b6890a65866905663
■特定IPからのアクセスを拒否(直接アクセスとロードバランサーの両方を考慮)
SetEnvIf X-Forwarded-For "203.0.113.1" deny_ip
SetEnvIf X-Forwarded-For "203.0.113.2" deny_ip
Order Allow,Deny
Allow from all
Deny from 203.0.113.1
Deny from 203.0.113.2
Deny from env=deny_ip
■特定範囲IPからのアクセスを拒否
※「203.0.113.0」と「10.0.0.0 〜 10.255.255.255」からのアクセスを許可。
Order Allow,Deny
Allow from all
Deny from 203.0.113.0
Deny from 10.
■特定範囲IPからのアクセスを拒否(mod_rewriteでの指定)
※未検証。
上にあるように「10.」のような書き方は有効か、なども確認したい。
apacheのRewriteCondをサブネットマスクで許可する - helen's blog
https://helen.hatenablog.com/entry/2017/03/01/173847
IPアドレスとサブネットマスクとRewriteCond - knowledge::short
https://www.km92.net/knowledge_short/2018/180222_000238.html
.htaccessで特定のIPアドレス以外をメンテナンスページへ302リダイレクトさせてみた | www.ni4.jp
https://www.ni4.jp/2018/02/17-220835.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*/news/admin.*$ [OR]
RewriteCond %{REQUEST_URI} ^.*/news/index\.php/admin.*$
# IPアドレス直接指定
RewriteCond %{REMOTE_ADDR} !=203.0.113.1
RewriteCond %{REMOTE_ADDR} !=203.0.113.2
# IPアドレス範囲指定
#RewriteCond %{REMOTE_ADDR} !=192.168.33.0/25 … この書き方は無効。
RewriteCond %{REMOTE_ADDR} !^(192\.168\.33\.([1-9]|[1-9][0-9]|1[0-1][0-9]|12[0-6])$) … 正規表現で指定する必要がある。
RewriteRule ^(.*)$ - [F,L]
</IfModule>
■特定ブラウザからのアクセスを拒否
BrowserMatch "Chrome/62.0.3202.94" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
■特定ツールからのアクセスを拒否
BrowserMatch "Wget/1.14 (linux-gnu)" bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
■特定ディレクトリは以下のアクセスを拒否するが一部のみ許可
/test/ と /sample/ へのアクセスを拒否するが、/sample/sample2/ と /sample/sample5/ のみ許可する方法
まずはディレクトリ全体に対し、アクセス制限を行う。
$ cat /var/www/mock/html/test/.htaccess
Order Deny,Allow
Deny from all
$ cat /var/www/mock/html/sample/.htaccess
Order Deny,Allow
Deny from all
部分的に許可したいディレクトリ内で、アクセス許可を行なう。
$ cat /var/www/mock/html/sample/sample2/.htaccess
Order Allow,Deny
Allow from all
$ cat /var/www/mock/html/sample/sample5/.htaccess
Order Allow,Deny
Allow from all
■その他参考ページ
【基本】.htaccessとは?何ができるの?書き方は? | カゴヤのサーバー研究室
https://www.kagoya.jp/howto/it-glossary/web/htaccess/
.htaccess の書き方 | murashun.jp
https://murashun.jp/article/programming/htaccess/htaccess-writing.html
ELB配下のApacheでのアクセス制御 | Developers.IO
http://dev.classmethod.jp/cloud/aws/access-limit-behind-elb/
X-Forwarded-Forを使用して、IPアドレスでのアクセス制限 | ゆっくりと歩んでいこう
https://ymyk.wordpress.com/2010/02/25/x-forwarded-for%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E...
nginxでは .htaccess に対応していない。
nginxに.htaccessを移行する。 - Qiita
https://qiita.com/rdonster/items/a49b1861003645e7054b
Nginxなはずのエックスサーバーで.htaccessが有効な理由 | アフィ+さぽ!
https://affi-sapo.com/1264/
htaccessを使わない方が良いとApacheとNginxの公式が言っている - suzu6の技術ブログ
https://www.suzu6.net/posts/240-htaccess-apache-vs-nginx/
【基本】.htaccessとは?何ができるの?書き方は? | カゴヤのサーバー研究室
https://www.kagoya.jp/howto/it-glossary/web/htaccess/