アクセス制御したい(.htaccess
)
1# 特定のIPからのアクセスを拒否
2Order Allow,Deny
3Deny from 192.168.1.1
4Allow from all
5
6# WordPress管理画面へのアクセスを限定
7<Files wp-login.php>
8 Order Deny,Allow
9 Deny from all
10 Allow from 許可IPアドレス
11</Files>
12
13# .htaccessファイルへのアクセス禁止
14# 外部(=ブラウザ経由)のアクセスを禁止
15# 内部(=ssh経由)のアクセスは可能
16<Files .htaccess>
17 Order Allow,Deny
18 Deny from all
19</Files>
20
21# Basic認証
22AuthType Basic
23AuthName "Restricted Area"
24AuthUserFile /path/to/.htpasswd # .htpasswdのパス
25Require valid-user
26
27# リダイレクトの設定
28Redirect 301 古いURL 新しいURL
.htaccess
を使って、ウェブサイトに対するアクセスやレスポンスを制御できます。
ファイル/ディレクトリに対するアクセス制限やリダイレクト、パスワード認証などを設定できます。
ディレクトリごとに設置できるため、研究室サーバーの個人スペースなどでにも設置できます。
httpd.conf
などのサーバー設定ファイルの編集権限がないケースで活躍します。
アクセス制御を有効にしたい(AllowOverride
)
// httpd.confのパスを確認
$ find . -name httpd.conf
1<Directory "該当のパス">
2 AllowOverride All
3 Require all granted
4</Directory>
.htaccess
を使ってアクセス制御したい場合、
該当ディレクトリに対してAllowOverride
ディレクティブが有効になっている必要があります。
アクセス制御したい(Required
)
1# 一括許可/一括拒否
2Require all granted # Allow from all に相当
3Require all denied # Deny from all に相当
4
5# IPアドレス/ドメインを指定して許可
6Require ip 許可IPアドレス # Allow from 許可IPアドレスに相当
7Require host 許可ドメイン名 # Allow from 許可IPドメイン名に相当
8
9# IPアドレス/ドメインを指定して拒否
10Require not ip 拒否IPアドレス # Deny from 拒否IPアドレスに相当
11Require not host 拒否ドメイン名 # Deny from 拒否IPアドレスに相当
Require
ディレクティブを使って、アクセス制限を設定しています。
注釈
Require
ディレクティブはApache2.4で追加(改善?)されたディレクティブです。
Apache 2.4からはRequire
ディレクティブを使うことが推奨されています。
Apache 2.2まではOrder
、Allow
、Deny
ディレクティブが使われていましたが、
将来的に廃止される予定だそうです。
1Require ip 許可IPアドレス/サブネットマスク
2Require ip 192.168.1.1/8 # => 192. 0.0.0 - 192.255.255.255
3Require ip 192.168.1.1/16 # => 192.168.0.0 - 192.168.255.255
4Require ip 192.168.1.1/24 # => 192.168.1.0 - 192.168. 1.255
IPアドレスはサブネットマスクを使って範囲指定できます。
注釈
サブネットマスクは、 IPアドレス(IPv4)をネットワーク部とホスト部に分けることで、 巨大なIPアドレス空間を分割・管理するための仕組みです。
サブネットマスクが
255.255.0.0
(/16
)の場合は、65534個のホスト、
255.255.255.0
(/24
)の場合は、254個のホスト、
がそのネットワーク内で利用できることを表しています。
複数条件したい(RequireAny
)
1<Files "wp-login.php">
2 <RequireAny>
3 Require all denied
4 Require ip 許可IPアドレス1/サブネットマスク
5 Require ip 許可IPアドレス2/サブネットマスク
6 </RequireAny>
7</Files>
RequiredAny
ディレクティブで、複数の条件を設定できます。
上記のサンプルは、WordPressの管理画面へのアクセスを制御しています。
Files
ディレクティブを使ってwp-login.php
を指定し、
指定したIPアドレスからのアクセスを許可しています。
パスワード保護したい(Basic認証)
1AuthType Basic
2AuthName "Restricted Area"
3AuthUserFile /path/to/htpasswd
4Require valid-user
特定のディレクトリに設置して、パスワード保護できます。 HTTPSが有効なウェブサイトであれば、Basic認証でよいそうです。
// .htpasswdが存在しない場合
$ htpasswd -c /var/www/etc/.htpasswd ユーザー名
// パスワードを入力
// パスワードを入力(確認)
// .htpasswdに追記する場合
$ htpasswd /var/www/etc/.htpasswd ユーザー名
サーバー内でhtpasswd
コマンドを使って.htpasswd
ファイルを作成します。
パスワードファイルは、ウェブで公開されるディレクトリの外に作成し、
AuthUserFile
で指定したパスに配置します。
パスワードはハッシュ化されて、このファイルに保存されます。
注釈
パスワード保護の手法としてBasic認証
とDigest認証
という方式があります。
HTTPSが有効なサイトでは、通信が暗号化されているのでBasic認証
でOKです。
リダイレクトしたい(Redirect
)
1# 301: 恒久的リダイレクト
2Redirect 301 古いURL 新しいURL
3
4# 302: 一時的リダイレクト
5Redirect 302 古いURL 新しいURL
Redirect
ディレクティブを使ってURLのリダイレクトを設定できます。
HTTPSリダイレクトしたい(RewriteRule
)
1<IfModule mod_rewrite.c>
2RewriteEngine On
3RewriteCond %{HTTPS} off
4RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
5</IfModule>
RewriteRule
ディレクティブを使って、HTTPSリダイレクトを設定できます。
RewriteEngine
、RewriteCond
ディレクティブを合わせて使います。
また、リダイレクトにはmod_rewrite
モジュールが有効になっている必要があります。