せっかくSSL証明書を取ったんだから・・・ - SMTPS postfix ssl ServersMan@VPS さくらのVPS

 VPSで、SSL証明書を使う話、MySQL、dovecotに続いて3回目?

 SMTPのシステムはpostfixを利用する。
/etc/postfix/main.cf

smtpd_use_tls = yes
TLS暗号処理を有効にする

smtpd_tls_cert_file = /etc/pki/tls/certs/hoge_bundle.crt
TLS証明書を設定する

smtpd_tls_key_file = /etc/pki/tls/private/hoge.plain.pem
TLS証明書に対応する秘密鍵を設定する

smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
TLSセッションのキャッシュをB木で作成する

 postfixでは平文の秘密鍵が必要なため、暗号化されている秘密鍵を平文に戻しておく↓

openssl rsa -in /etc/pki/tls/private/hoge.pem -out /etc/pki/tls/private/hoge.plain.pem

 postfixでは認証機関の証明書を別ファイルにしておくことが出来ないので、証明書と認証機関証明書を1ファイルに纏めておく↓

cat /etc/pki/tls/certs/hoge.crt /etc/pki/tls/certs/rapidssl.crt > /etc/pki/tls/certs/hoge_bundle.crt

/etc/postfix/master.cf

#smtps inet n – n – – smtpd
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject

smtps inet n – n – – smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

SMTPSサービスを有効にする。 TLSラッパーで動作する。 SASL認証を有効にする。 SASL認証で通らなかったクライアントを拒否する。
(SASL関連オプションについては、postfixを利用するを設定している場合の関連記述)
設定が完了したら、
/etc/init.d/postfix restart

参考:ITわかり隊

デフォルトのSMTPSはポート465で待ち受けている。

(271)

カテゴリー: サーバ設定 | コメントをどうぞ

せっかくSSL証明書を取ったんだから・・・ - POP3S dovecot ssl ServersMan@VPS さくらのVPS

 せっかく自由に設定できるVPSを使ってて、SSL証明書もとったんだから、いろいろなものを暗号化したい。
 とりあえず、前回は、MySQLコネクションの暗号化を行ったけど、今回はPOP3(メール受信)を暗号化する。
 POP3dはdovecotを利用する。

/etc/dovecot.conf 編集

#protocols = imap imaps pop3 pop3s

protocols = pop3 pop3s
プロトコルとしてPOP3/POP3Sを使う。

#ssl_disable = no

ssl_disable = no
SSL無効化を解除する(SSLを有効にする)

#ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem

ssl_cert_file = /etc/pki/tls/certs/hoge.crt
証明書ファイルのパス

#ssl_key_file = /etc/pki/dovecot/private/dovecot.pem

ssl_key_file = /etc/pki/tls/private/hoge.pem
秘密鍵のパス

#ssl_ca_file =

ssl_ca_file = /etc/pki/tls/certs/rapidssl.crt
証明機関証明書ファイルのパス

#ssl_key_password =

ssl_key_password = hogepiyo
秘密鍵のパスワード

これで /etc/init.d/dovecot restart するとhoge.crt証明書を使って認証・暗号化できる。
protocols = pop3s
にすれば、より安全だけど、レガシー端末用にpop3も残した。

参考:tondol

デフォルトのPOP3Sはポート995で待ち受けている。

(219)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

最近のServersMan@VPS

 ServersMan@VPSでProプランを使っているんだけど、契約当初よりだんだんしょぼくなってきている。
 最初、仮想CPUは4コアだったのだけどいつの間にか2コアに減っている。 ディスクアクセスも遅くなっていて、UnixBenchで1000いかない。 さくらのVPSで同じ金額を出すと、1.5GBメモリプランになって、仮想CPU2個、UnixBenchは1200くらい行く。
 ServersManで4GBメモリ~と言っても、実際には1GBしか保証されていないので、性能的にはさくらの方が上だ。
 唯一、ServersManのProプランは無償IP追加3個出来て、4個のIPが手に入るので、HTTPSで複数のサイトを運用するのには便利(最新のシステムではSNIによって、ネームバーチャルでのHTTPSが出来るものの、ちょっと古い環境ではIPベースしか対応しないので、HTTPS用には有用)
 今から新規で契約するなら、さくらの方がおすすめだろう。

(224)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

ファイルの最終部分を追いかける – ログ tail 自動更新

 VPSに限った話じゃないけど、システム開発でログファイルの最後を見たいときに使うのが tail コマンド。
tail /var/log/httpd/error_log
 みたいにすると、ファイルの最後が見られる。
 このtailコマンドに -f オプションを付けると自動更新で追いかけられる。
 覚えておくと便利なコマンド。

(262)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

システム開発に役立つデータ類1

 システム開発をする上で困るのにデータの調達がある。
 よく利用する物では、電話の国番号をキーにした国名データとか、都道府県コード、郵便番号データ等だが、この辺はどこででも拾える。
 困ってくるのは路線・駅情報とか、詳細な町名情報とかだけど、この辺は数百万で開発用データを売ってたりする。
 なんとかデータを安く手に入れようとするときに役に立つのが、官公庁が提供している公開データ。

 最近利用したのが、国交省の位置参照情報ダウンロードサービスと言うヤツ。
 ここでは全国の字町名とその座標が入ったCSVデータ集が手に入る。
 CSVを適当にデータベースに挿入してやっておくと、ある町名を選んだときに、近隣町名を求めると言った事が出来る。
 Webで地図を扱う場合、GoogleMAP APIを利用することが多いけど、こういった機能が無い(地図表示を見ればポイントの周辺の地名が表示されているけど、これを取得する方法がない)ので、ピックされたポイントの座標から、+-LAT/LNGの範囲を求める事でざっくりと近隣の字町名が得られる(先のデータベースにWHERE LAT BETWEEN point_lat-distance AND point_lat+distance AND LNG BETWEEN point_lng-distance AND point_lng+distance みたいにしてみる)

(234)

カテゴリー: 未分類 | コメントをどうぞ

MySQL接続にSSLを使用する – PHP MySQL SSL WordPress MYSQL_CLIENT_SSL 暗号化

 MySQLの接続にSSLを使う話。

 このブログはWordpressとMySQLが別のサーバで動いている(WindowsServer2003R2化したさくらのVPS上にMySQLサーバを設置して、Apache+PHPを設置したLinux状態のさくらVPSからmysqlコネクタを経由して接続している)
mysql接続は通常は平文なので、ネットワーク上で色々な情報がだらだら流れてしまうのは嫌なので、このコネクションをSSLで暗号化する。

 まず、WindowsServer2003R2上に設置したMySQLサーバにSSL設定を行う。
 MySQL5.5サーバのWindowsバイナリにはSSL機能が含まれているから、特別なプログラムを追加する必要はないけど、Windows上のSSL管理は複雑だ。
 MySQLサーバでは秘密鍵は暗号化されていないファイルでなければならないのだけど、Windowsではそもそも証明書ストアの内部に格納されているので、これを取り出さなければならないんだけど、その操作が証明書の取得と前後する(普通は秘密鍵をベースとして証明書の管理をするんだけど、Windowsでは証明書を取得しないと秘密鍵か取り出せない)
 まず、WindowsのIISマネージャを起動して、ナビゲーションからサーバ>Webサイト>既定のWebサイトを選択して、プロパティを開いて、「ディレクトリセキュリティ」タブにある「セキュリティで保護された通信」の「サーバー証明書」を叩いて「IIS証明書ウィザード」から、「証明書の要求を作成して後で送信する」処理でCSRを作成する(WindowsServer2003R2では古い1024ビットがデフォルトになっているけど、現在は2048ビットが一般的なので、それを選択してCSRを作成する)
 CSRを生成したら、普通にSSL証明書を取得してきて(今回はSSLボックス
からRapidSSLを取得)、適当なcer(※α)としてファイルに保存して、再度「IIS証明書ウィザード」から証明書を登録する(証明書を取得したときに、認証局の証明書も来ると思うので、これも適当なcer(※β)としてファイルに保存しておく)
 証明書の登録処理が完了したら、「セキュリティで保護された通信」の「証明書の表示」を開いて、「詳細」タブの「ファイルにコピー」を実行して、「秘密キーのエクスポート」で「はい」を選んで進むと、PKCS#12形式に固定されているので、チェックボックスを全て解除して、適当なパスワードを設定してpfxファイルにエクスポートする。
 OpenSSLが導入された環境で・・・

openssl pkcs12 -in 出力したpfxファイル -out 中間.cer

で、PFXをデコードする。 この時、聞かれるパスワードは、エクスポート時に設定したパスワードで、パスフレーズはCERに設定するパスフレーズである。
 で、CERにすると、秘密鍵はRSA暗号化された状態なので、再度opensslで

openssl rsa -in 中間.cer -out 平文.pem

とすると、パスフレーズを聞かれるから、先ほど設定したパスフレーズを入れて平文の秘密鍵(※γ)を得る。

 この手順で、α:サーバ証明書、β:認証局証明書、γ:秘密鍵が揃うので、MySQLサーバのあるホストの適当な場所に配置する。
 後は、MySQL設定ファイル(Unixではmy.cnfだが、WindowsではMySQLインストールディレクトリのmy.ini)の[mysqld]セクションに設定を追記する。

ssl-cert=”αのフルパス”
ssl-ca=”βのフルパス”
ssl-key=”γのフルパス”

の、3設定を入れてMySQLサービスを起動する。
 MySQLクライアントで「SHOW VARIABLES LIKE ‘%ssl%’;」とか打つと、

have_openssl : YES
have_ssl : YES

になっていれば、サーバはSSL動作可能な状態になっている。

 PHPのMySQLクライアントでSSL接続する場合には、mysql_connectの第五引数にMYSQL_CLIENT_SSL定数を設定すればOK。
 Wordpressでは、/wp-include/wp-db.php で、@mysql_connect(…)としている部分で、第四引数までセットされているから、「, MYSQL_CLIENT_SSL」と第五引数を追記してやれば、WordpressのDB接続時にはSSL接続を使うようになる。
 正常にSSLに接続されているか確認するために、mysql_connectの下あたりに

$res = mysql_query(“SHOW STATUS LIKE ‘Ssl_cipher'”);
var_dump(mysql_fetch_assoc($res));

とか書いてWordpressサイトに接続してみると、DHE-RSA-AES256-SHAとかの値がべたっと入っていれば、接続はSSLで保護されている(空文字が戻っていたらSSL保護されていない)

 これで、ネット経由のmysql接続が保護されるので、安心して使うことが出来る。

(1270)

カテゴリー: MySQL, PHP, Windows VPS, サーバ設定 | コメントをどうぞ

postfix初期設定 – postfix main.cf

 メールにpostfixを使う場合の/etc/postfix/main.cf設定値のメモ。 デフォルト

myhostname = host.hoge.piyo #自分のホスト名(フル)
mydomain = hoge.piyo #自分のドメイン名(ホスト名を取った部分)
myorigin = $mydomain #ユーザ名のみでポストしたメールのFromの@以降に付けるアドレス(この場合、user@$mydomain=user@hoge.piyoになる)
inet_interfaces = $myhostname, localhost #メールをリッスンするIP(デフォルトではlocalhostのみなので、127.0.0.1[localhostのhosts値]からの送信専用になっているので、外部からメールを受け取れない。 ホスト名で指定する場合、ルックアップでIPを取得できないといけないので、ServersMan@VPSみたいに複数IP割り振ってもらったサーバの場合に受け入れる仮想アダプタを設定できる。 NAT経由でプライベートIPなLAN上のサーバの場合とか、ホスト名をDNSでルックアップするとグローバルが帰ってくるけど、持ってるアダプタのIPはプライベートになるから、ホスト名じゃなくIP指定が良い) 
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #自分が最終転送先であるアドレスのリスト($mydomainを追加して、user@hoge.piyoを受信出来るようにする)

とりあえずこの辺を設定すれば動く。
さくらのVPSServersMan@VPSデフォルト共通。

参考

(434)

カテゴリー: サーバ設定 | コメントをどうぞ