メンテ時に社内Wifi IPのみサイトアクセス許可する

メンテ時に社内Wifi IPのみサイトアクセス許可する

備忘録です。

サイトメンテナンスする際の手順をまとめています。

手順

maintenance.html

DocumentRoot に maintenance.html を配置

.htaccess にてアクセス制限

1
2
3
4
5
6
7
8
9
10
11
12
ErrorDocument 503 /maintenance.html

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*\.(js|css|gif|jpg|png|ico)$
RewriteCond %{REQUEST_URI} !^/cron/.*$
RewriteCond %{REQUEST_URI} !=/maintenance.html
# 社内
RewriteCond %{REMOTE_ADDR} !=<社内Wifi IP>
RewriteCond %{REMOTE_ADDR} !=<社内Wifi IP>
RewriteRule ^.*$ - [R=503,L]
</IfModule>

以上です。

.htaccessが効かない、動かないときの対処

.htaccessが効かない、動かないときの対処

概要

.htaccess に設定した通りに動作しない、そもそも読み込んでいないように見える場合の対策です。

http だと mod_rewrite でリダイレクトするけど、 https だとしない、とか
ありがちな設定ミスパターンは以下基本的なことを確認して解決できます。

検証環境

  • CentOS 6.6 (Final)
  • Apache/2.2.15(Unix)

そもそも .htaccess を利用するには

/etc/httpd/conf/httpd.conf 等設定ファイル内で以下の記述が必要です。

1
AllowOverride All

mod_rewrite を利用するには

利用頻度の多い mod_rewrite を利用するには以下が必要です。

1. mod_rewrite.so インストール

2. mod_rewrite.so を Apache 設定ファイルからロード

まずは上記の確認です。

1. mod_rewrite.so インストール確認

Apache の場合、大抵 modles ディレクトリ以下に格納されてます。

1
2
$ ls -al /etc/httpd/modules/mod_rewrite.so
-rwxr-xr-x 1 root root 60464 10月 16 23:49 2014 /etc/httpd/modules/mod_rewrite.so

2. mod_rewrite.so を Apache 設定ファイルからロードされているか確認

Apache 設定ファイル
/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/*.conf で以下を設定している。

※環境によっては /etc/httpd/conf/httpd.conf に設定ファイルを置いてない場合もあるので
 あくまで一般的な例とします。

1
LoadModule rewrite_module modules/mod_rewrite.so

補足

モジュール読み込み設定は大抵、
以下のように ディレクティブ で AllowOverride All が設定されているかと思います。

以下例では「/var/www/html」ディレクトリ以下では 配置した .htaccess を優先して設定されることになります。

1
2
3
4
5
6
<Directory "/var/www/html">
AllowOverride All
Options -Indexes FollowSymLinks Includes ExecCGI
Order allow,deny
Allow from all
</Directory>

万が一 mod_rewrite.so モジュールが存在しない場合は Apache の再コンパイルが必要になります。

Apache に mod_rewrite をインストールしリコンパイル

  • リコンパイルして Apache 再起動します。
1
2
3
4
5
$ sudo su -
# cd <path to httpd source>
# ./configure –enable-ssl=shared –enable-rewrite –enable-deflate –enable-headers –enable-so
# make & make install
# service httpd restart

以上です。

無料SSL証明書発行しセキュリティでA+を取る! 〜Apache編〜

概要

ベリトランスモジュールバージョンアップに際して
SHA256で発行したSSL証明書が必須となりました。

テスト環境でベリトランスモジュールバージョンアップ試験を行う際に
SSL証明書導入する必要が生じました。

本番環境と同じ有料SSLを導入するまでとはいかずとも
近しい状況を構築する必要があったので無料SSL証明書を発行し導入しました。

上記の手順をまとめましたので以下に記載します。

環境

AWS Marketplace: CentOS 6 (x86_64) - with Updates HVM を利用しています。

  • CentOS release 6.7 (Final)
  • Apache 2.4.12

手順

CSR生成

事前準備として、SSLインストール対象サーバで
CSRを生成しておきます。

SHA256 対応のCSR生成方法について以下ご参考ください。

StartComに登録

ヘッダーメニューの Sign-up クリック

StartSSL

必要事項登録し「send verification code」ボタンクリック

登録E-mail宛に verification codeが送付されます。

こんな感じのメールが来ます。

verfication codeを入力し登録完了

SSL発行手続き

無料版選択

SSLのWeb Server 用を選択

Domain Validation

SSLインストール対象サーバのドメイン入力

メール送信による認証

startSSL側で指定するメールアドレスで受信可能な状態にする必要があります。

ec2インスタンスのメール受信設定は以下記事が参考になりました。ありがとうございます。

AWS上のpostfixでメールを受信してみる

上記記事中の注意点として
インスタンス作成直後に yum update 分にはいいですが
時にAWSで yum update をするとkernel panicを起こすことがあります。
pythonをyumでなくソースから独自に入れ直したり、色々してたせいか…

原因は追い切れていませんが、経年運用したインスタンスについては yum update は控えたいと思います。

うまく受信設定できない場合
  • /var/log/maillog を 常に tailしてログ確認。

  • 受信可能なメールアドレスが既にあれば aliases で向け先変える。
    postmaster@(domain) → root@(domain)

  • メールボックスで Permission denied で
    受信メールを保存できない場合は以下強引にメールディレクトリを変更する。

1
2
3
4
/etc/postfix/main.cf

- home_mailbox = Maildir/
+ home_mailbox = ../home/ec2-user/Maildir/

SSL証明書 注文へ進む

メール受信による認証がクリア後、SSL証明書注文へ進みます。

認証情報作成

情報入力後、 (domain).zip がダウンロードされる。
※ 今回は WebServer が Apache なので ApacheServer を参照します。

解凍した zipファイルの ApacheServer 内の以下2ファイルを任意のディレクトリにアップしましょう。

  • 1_root_bundle.crt
  • 2_(domain).crt

今回アップ先ディレクトリは server.key 等のあるパス (/etc/httpd/conf/ssl.csr/) にします。

ssl.conf設定

SSL証明書のインストールとは
Apacheの設定ファイルとして指定ディレクティブで読み込ませる
ことです。

主な設定は以下です。

| Item | Value | Explain |
| ———————– | —————————————– |
| SSLCertificateChainFile | /etc/httpd/conf/ssl.csr/1_root_bundle.crt | 中間証明書 |
| SSLCertificateFile | /etc/httpd/conf/ssl.csr/2_(domain).crt | SSLサーバ証明書 |
| SSLCertificateKeyFile | /etc/httpd/conf/ssl.csr/server.key | SSLサーバ証明書とペアになる秘密鍵 |

以下URLで各WebServerとopensslバージョンにより最適な設定方法を示唆いただけます。

https://ssl-config.mozilla.org/

/etc/httpd/conf.d/ssl.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
LoadModule ssl_module modules/mod_ssl.so

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

SSLPassPhraseDialog builtin


SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300


#SSLMutex default
Mutex default ssl-cache

SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random 512
#SSLRandomSeed connect file:/dev/random 512
#SSLRandomSeed connect file:/dev/urandom 512

SSLCryptoDevice builtin

<VirtualHost _default_:443>

DocumentRoot "/var/www/html"
ServerName (domain):443

ErrorLog /var/log/ssl_error_log
TransferLog /var/log/ssl_access_log
LogLevel warn

SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.csr/2_(domain).crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.csr/server.key
SSLCertificateChainFile /etc/httpd/conf/ssl.csr/1_root_bundle.crt


<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>


SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<Directory "/var/www/html">
AllowOverride All
Options -Indexes +FollowSymLinks +Includes +ExecCGI
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

SSLHonorCipherOrder on

SSLCompression off
SSLSessionTickets off

パフォーマンスチューニングを一切していません。
あくまで SSL証明書インストールを対象としていますのでご注意ください。

設定ファイルの構文確認

1
2
3
4
5
// 構文チェック
# httpd -t

// 構文エラーがない場合は以下のように表示されます。
Syntax OK

構文エラーが発生している場合は対象箇所が表示されますのでチェックし直してください。
但し、構文エラーがないからと言ってApache再読み込み時にエラーが発生しないとは限らないので
万が一の為、即元に戻せるようなコマンドを作っておくと良いでしょう。

例えば
ssl.conf を ssl.conf.bk にリネームして Apacheの設定ファイルとして見ないようにさせるなど。

Apache 設定ファイル再読み込み

1
2
# service httpd reload
Reloading httpd: [ OK ]

ブラウザからアクセス

Chromeでアクセスしました。

  • 認証の詳細な情報

セキュリティチェック

以下サイトで診断できます。
QUALYS SSL LABS

「A」が取れました!

ちなみに
常に https通信で問題ないサイトであれば以下のように設定すると

1
2
3
4
5
<VirtualHost *:443>
...
Header always set Strict-Transport-Security "max-age=15768000"
...
</VirtualHost>

「A+」取得できました!

常時httpsはセキュアではありますがサイトの仕様次第なところもあるので状況によりけりです。

以上

Apache + OpenSSL でSHA256対応CSR生成

ドメイン登録者情報確認

※特にドメイン登録者を明確に指定する必要がなければ、「手順」へ進んでください。

企業認証周りが必要な場合は
事前にWHOIS(フーイズ)でドメイン登録者情報を確認しておくとスムーズです。

http://whois.jprs.jp/

検索ワードにドメイン入力して検索すると登録者情報を確認できます。

CSR生成手順