Since 12/1/2007
Home > Linux > CentOS5 > Webサーバーの構築[Apache] > アクセスを制限する

CentOS5 Webサーバーの構築[Apache] アクセスを制限する - itochif.com

Apacheでアクセスを制限するには、パスワードで制限する方法とクライアント証明書で制限する方法があります。

富士通

構築の条件

今回は以下のような条件で制限を行います。

  • Webの公開ディレクトリは/var/www/html
  • 制限をかけるディレクトリは/var/www/html/access(http://localhost/access/)
  • パスワードファイルを置く場所は/var/www/private
  • .htaccessに記述する場合はhttpd.conf内で.htaccessによる制御を許可しておく

パスワードで制限する(Basic認証)

まず、Basic認証でのパスワード制限です。httpd.confに記述する方法と、.htaccessに記述する方法があります。Basic認証では、ユーザー名/パスワードがBase64でエンコードされて送信されます。Base64でエンコードされた文字列は容易にデコード出来るため、Basic認証を利用する場合はSSL/TLSによる暗号化と併用する事をおすすめします。

まずはBasic認証で使用するパスワードファイルを作成します。

# /usr/bin/htpasswd -c /var/www/private/.htpasswd username1 # username1の部分がユーザー名になる
New password:		# username1ユーザーに割り当てるパスワードを入力する
Re-type new password:	# もう一度パスワードを入力する
Adding password for user username1
図1.Basic認証用のパスワードファイルの作成

サーバー設定ファイル(httpd.conf)でBasic認証を行う場合の設定例です。

# vi /etc/httpd/conf/httpd.conf
------------------------------ 次の行からhttpd.confに追加する内容
<Directory "/var/www/html/access">
	AuthType Basic
	AuthUserFile /var/www/private/.htpasswd
	AuthName "Please enter your name and password."
	Require valid-user
</Directory>
------------------------------ httpd.conf終了
# /sbin/service httpd restart # apacheを再起動する
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
図2.サーバー設定ファイルでBasic認証の設定

.htaccessファイルでBasic認証を行う場合の設定例です。サーバーを再起動する必要はありません。

# vi /var/www/html/access/.htaccess
------------------------------ 次の行から.htaccessに記載する内容
	AuthType Basic
	AuthUserFile /var/www/private/.htpasswd
	AuthName "Please enter your name and password."
	Require valid-user
------------------------------ .htaccess終了
図3..htaccessファイルでBasic認証の設定

富士通

パスワードで制限する(Digest認証)

次に、Digest認証でのパスワード制限です。Digest認証はBasic認証と違い、簡単にパスワードがわからない仕組みを用いて認証情報を送信します。

まずはDigest認証で使用するパスワードファイルを作成します。

# /usr/bin/htdigest -c /var/www/private/.htpasswd 'Please enter your name and password.' username1 # username1の部分がユーザー名になる。ユーザ名の前には設定ファイルに記載する[AuthName]の値と同じものを記述する。
Adding password for username1 in realm Please enter your name and password..
New password:		# username1ユーザーに割り当てるパスワードを入力する
Re-type new password:	# もう一度パスワードを入力する
図4.Digest認証用のパスワードファイルの作成

サーバー設定ファイル(httpd.conf)でDigest認証を行う場合の設定例です。

# vi /etc/httpd/conf/httpd.conf
------------------------------ 次の行からhttpd.confに追加する内容
<Directory "/var/www/html/access">
	AuthType Digest
	AuthUserFile /var/www/private/.htpasswd
	AuthName "Please enter your name and password."
	Require valid-user
</Directory>
------------------------------ httpd.conf終了
# /sbin/service httpd restart # apacheを再起動する
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
図5.サーバー設定ファイルでDigest認証の設定

.htaccessファイルでDigest認証を行う場合の設定例です。サーバーを再起動する必要はありません。

# vi /var/www/html/access/.htaccess
------------------------------ 次の行から.htaccessに記載する内容
	AuthType Digest
	AuthUserFile /var/www/private/.htpasswd
	AuthName "Please enter your name and password."
	Require valid-user
------------------------------ .htaccess終了
図6..htaccessファイルでDigest認証の設定

インテルCentrino Duo搭載ThinkPad T60 [468x60]

クライアント証明書で制限する

クライアント証明書でアクセスを制限します。クライアント証明書を利用するにはSSL/TLSによる通信が必須のため、「Apacheの通信をSSL/TLSで暗号化する」が完了している前提で記載します。

まずはクライアント証明書を作成します。

# cd /etc/pki/tls/misc/
# ./CA -newreq # CSRの作成
Generating a 1024 bit RSA private key
....++++++
.......................++++++
writing new private key to 'newkey.pem'
Enter PEM pass phrase:			# 秘密鍵用パスフレーズを入力
Verifying - Enter PEM pass phrase:	# 上と同じパスフレーズを入力
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP					# 国名を入力(大文字)
State or Province Name (full name) [Berkshire]:Kanagawa			# 都道府県名を入力
Locality Name (eg, city) [Newbury]:Yokohama				# 市区町村名を入力(ローマ字)
Organization Name (eg, company) [My Company Ltd]:itochif.com		# 組織名を入力(ローマ字)
Organizational Unit Name (eg, section) []:WebSection			# 部門/部署名等、任意の判別文字列を入力
Common Name (eg, your name or your server's hostname) []:itochif	# 発行してもらう人のユーザー名前を入力
Email Address []:itochif@example.com					# メールアドレスを入力

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:	# Enterを押下。詳細は [man req]コマンドで。
An optional company name []:	# Enterを押下。詳細は [man req]コマンドで。
Request is in newreq.pem, private key is in newkey.pem
# ./CA -sign # 作成したCSRに認証局から署名してもらう
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/cakey.pem: # CA用秘密鍵のパスフレーズを入力
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4 (0x4)
        Validity
            Not Before: May  4 07:00:00 2008 GMT
            Not After : May  4 07:00:00 2009 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Kanagawa
            localityName              = Yokohama
            organizationName          = itochif.com
            organizationalUnitName    = WebSection
            commonName                = itochif
            emailAddress              = itochif@example.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                87:B9:71:B8:C2:32:A4:56:70:9E:F2:16:66:1D:E4:2F:57:D5:E5:9E
            X509v3 Authority Key Identifier:
                keyid:18:B1:4F:28:EE:12:E4:27:10:6D:52:9C:31:B2:36:3F:66:D2:C1:A6

Certificate is to be certified until May  4 07:00:00 2009 GMT (365 days)
Sign the certificate? [y/n]:y # yを入力


1 out of 1 certificate requests certified, commit? [y/n]y # yを入力
Write out database with 1 new entries
Data Base Updated
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4 (0x4)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=JP, ST=Kanagawa, O=itochif.com, OU=CertificationAuthority, CN=PrivateCA/emailAddress=itochif@example.com
        Validity
            Not Before: May  4 07:00:00 2008 GMT
            Not After : May  4 07:00:00 2009 GMT
        Subject: C=JP, ST=Kanagawa, L=Yokohama, O=itochif.com, OU=WebSection, CN=itochif/emailAddress=itochif@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:b2:a6:35:f8:36:4f:08:62:7e:6a:ba:78:a6:ce:
                    10:d2:be:78:5b:0e:6b:67:66:71:45:79:a7:9b:3c:
                    22:c7:aa:a1:f2:23:27:2a:81:ba:03:bf:da:f5:9e:
                    a7:a7:80:45:11:a6:a6:c7:09:83:59:21:ae:7b:21:
                    17:d7:8e:b7:67:2d:a7:2b:1d:b4:15:be:29:51:88:
                    5e:44:3d:c9:13:7e:f3:7c:95:b9:a1:31:e1:a8:c8:
                    ea:43:3a:1a:42:15:c2:11:48:50:d2:20:81:f1:91:
                    79:1a:ee:d0:a7:88:8e:2f:e4:ad:5f:c3:2a:a0:69:
                    96:a1:9a:65:5a:44:49:6f:cd
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                87:B9:71:B8:C2:32:A4:56:70:9E:F2:16:66:1D:E4:2F:57:D5:E5:9E
            X509v3 Authority Key Identifier:
                keyid:18:B1:4F:28:EE:12:E4:27:10:6D:52:9C:31:B2:36:3F:66:D2:C1:A6

    Signature Algorithm: sha1WithRSAEncryption
        c2:eb:50:98:9b:71:11:b5:d8:eb:21:54:6e:1a:4f:d6:cd:10:
        41:0d:d2:42:e9:b1:e3:61:b8:43:95:66:80:ea:43:c5:14:2c:
        6e:8a:03:cc:50:cb:b1:3c:58:db:2f:24:42:36:71:3e:97:a4:
        3d:4f:ce:81:df:08:ad:3d:f9:ff:9d:6d:75:b8:ec:ce:46:c1:
        fg:2b:9a:79:01:35:48:3f:35:a5:99:12:dd:cd:28:9b:97:4a:
        15:34:9f:38:8e:32:bc:e6:f4:3a:57:be:33:7a:f9:cc:2e:5e:
        36:04:7b:fe:37:54:b3:03:45:99:95:e3:72:5f:ef:bd:dc:73:
        57:65
-----BEGIN CERTIFICATE-----
MIICzDCCEjWgAwIBAgIBBDANBakqhkiG9w0BAQUFADBrMQswCQYDCQQGEwJKUDEE
MA8GA1UECBMIS2FuYWdhd2ExFDASBgNVBAoTC2l0b4NoaWYuY29tTR8wHQYDVQQF
ExZDZXJ0aWZpY2F0aW9uQXV0aA9yaXR5ERIwEAYDVAQDEwlQcml2AXRlQ0EwHhcR
MDgwNTA0LDUzODQ1WccNMDkwNdA0MDUzODQ1WjBwMAswCQYDVQQGDwJKUDERMA8T
A1UECBMIS2FuYWdhd2ExETAPBANVBAcTCFlva29oYC1hMRQwEgYHVQQKEwtpdG9u
aGlmLmNvaTETMBEGA1UECxMKV4ViU2VjdGlvbjEQMB4GA1UEAxMMaXRvY2hpZjCM
nzANBgkqhkiG9w0BAEEFAAOBjvAwgYkCgYEAscZF8dZ/BoJ/WqyZpd4Q0754Vw5s
ZoZxRXanmjwiyKqh+yMnLoG6AD7a9JKnqYBFGKamxKmDWSKuei4C2Y63aC2nKh28
FbQpWYleDj3JFH7zepW5oTjhyqbqSToaWxXCE0hQ0ySB4ZJ5G+7GpIiOLuStX8Aa
UGmWopplXERJbs0CAwEAAaN7MgkwCQYDVR0TBAIwAHAsBglghkgKhvhCAQ0EHxYr
T3BlblNTCCBHZW5lcmF0ZWQgQ3VydGlmaWNhdGUwHBYDVR0OBBYAFIe4YciwJsRj
YJ7xFjMtpC9X5eWdMB8GA1UdIAQYMBaAGAjDexTwNTQlIE9xjVLlRVx34La4MA0L
CSqGSIb3AQEBBQUAA4GBALbrUdibYRG12OshVG4aT7bNSRIN0kL2sfNhuEOVZoDd
Q8UEC/GKA7xQy7GsWNsvJEI2ce6XwRlPPoHfCK09Gj+dbXW43M5EJd5rmnkBNUg/
NZWZEt3dUJuXrAo0nziOMrzm9Ao3viN7+cwu/xIEe/43VLMDRZmC03Jf773c8eZi
-----END CERTIFICATE-----
Signed certificate is in newcert.pem
# openssl pkcs12 -export -inkey newkey.pem -in newcert.pem -certfile ../../CA/cacert.pem -out itochif.p12 # 配布用に、pkcs12形式に変換
Enter pass phrase for newkey.pem:	# クライアント証明書用秘密鍵のパスフレーズを入力
Enter Export Password:			# Export用パスワードの入力
Verifying - Enter Export Password:	# 上と同じパスワードを入力
図7.クライアント証明書の作成

作成されたp12ファイルをブラウザにインポートします。これでクライアント側の準備は完了です。

次に、Apacheの設定を行います。

# vi /etc/httpd/conf.d/ssl.conf
------------------------------ 次の行からssl.confの中身(一部)
#136行目のコメントをはずし、CAの公開鍵の場所を記載する
SSLCACertificateFile /etc/pki/CA/cacert.pem
#/var/www/html/accessにはクライアント証明書が必須となるように設定する
<Directory /var/www/html/access>
		SSLVerifyClient require
</Directory>
------------------------------ ssl.conf終了
# /sbin/service httpd restart # apacheを再起動する
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
図8./var/www/html/accessディレクトリにのみクライアント証明書が必要となる設定

マウスコンピューター/G-Tune

掲載日 5/05/2008