CentOS5 Webサーバーの構築[Apache] アクセスを制限する - itochif.com
構築の条件
今回は以下のような条件で制限を行います。
- 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認証の設定
クライアント証明書で制限する
クライアント証明書でアクセスを制限します。クライアント証明書を利用するには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ディレクトリにのみクライアント証明書が必要となる設定

![インテルCentrino Duo搭載ThinkPad T60 [468x60]](http://www.ibm.com/jp/pc/campaign/affiliate/10000001.gif)

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