muninのインストール

サーバのリソースなどを監視してグラフにできるmuninをインストールします。公式サイトは以下の場所です。

Cent OSの公式リポジトリには入っていないので、ソースから入れてもいいのですが、依存しているperlのモジュールなどを手動で準備するのは大変なのでepelからインストールすることにします。

サーバの情報を収集するエージェント部分のmunin-nodeと集計して表示するmuninの二つのパッケージに分かれています。メインのサーバには両方をインストールして、他のサーバにはmunin-nodeのみをインストールすることにします。epelから両方をインストールするには以下のように実行します。

yum --enablerepo=epel install munin munin-node

デフォルトの設定でそのまま起動するとだいたい使える状態になっています。設定ファイルは/etc/munin/以下にあり、集計側の設定ファイルがmunin.conf、エージェントの設定ファイルがmunin-node.confです。

起動方法は集計側はcronで、エージェントはserviceスクリプトです。chkconfigをonにしておきます。

集計側の設定は基本はデフォルトでエージェントの設定のところを編集します。まず、自分自身のエージェントのエントリ名の名前を書き換えます。そして他のエントリを追加します。

エージェントのみを動かすサーバはmunin-node.confを編集して、allowのアドレスを集計しているサーバのIPアドレスに変更します。また、iptablesでtcpの4949ポートを忘れずにあけておきます。

epelを使用する

これまでCent OSの公式のリポジトリにないものはソースからインストールみたいな方針でやってきましたが、あるものは使おうということでepelも設定しておきます。epelとはExtra Packages for Enterprise Linuxの略らしく、Red Hat系のLinux用に追加のパッケージを提供しているリポジトリです。ウェブサイトは以下の場所です。

ページの真ん中のあたりにあるepel-releaseパッケージをダウンロードしてrpmコマンドでインストールします。例えばCent OS 5の場合は以下のような感じです。

wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm

続いてデフォルトでは使用しないように設定ファイル/etc/yum.repos.d/epel.repoを編集します。

enabled=0

epelのリポジトリからパッケージをインストールする場合には以下のようにyumを実行します。

yum --enablerepo=epel install hoge

postfixのTLSの設定

続いてpostfixでTLSを使う設定をします。

postfixは25番ポートでの配送のやりとりと587番でのsubmissionを行っているわけですが、サーバ間の配送に使われる25番ポートは基本的に認証などは行いません。ただし、リレーは行わず自分宛のメールのみ受け取ります。

一方587番のsubmissionはメールの送信を受け付けます。ここでは認証が必要です。認証はSASL AUTHで行いますが、このときパスワードを平文で渡しても問題ないようにSTARTTLSによるTLSの使用を必須とします。

まずpostfixの設定ファイルは/etc/postfix/の下にあります。main.cfに以下の設定を行います。TLSに使うサーバ証明書の指定と、AUTHはTLSのときにしか行わないという制限です。証明書はdovecotに使用したものと同じものを使います。

smtpd_tls_cert_file = /etc/pki/dovecot/certs/mail.crt
smtpd_tls_key_file = /etc/pki/dovecot/private/mail.key
smtpd_tls_auth_only = yes

次にmaster.cfのsubmissionの行に以下のオプションを追加します。これはTLSを必ず使うと言う設定です。これで587番ポートでのsubmissionの接続は必ずTLSで行われることになります。

  -o smtpd_tls_security_level=encrypt

postfixにもクライアント認証の設定があるようですがThunderbirdでクライアント認証の設定方法が見当たらないので今回は見送ります。

 

dovecotのIMAPSの設定

オレオレ証明書ならいくらでも作成できる環境になったので、メールサーバもSSLを使って通信をするように変更します。

証明書は普通のサーバ証明書を使用しますが、メールサーバには別の名前(mailなど)を使用している場合には、そのサーバ名をCNにした証明書を用意します。

dovecotの設定ファイルは/etc/dovecot/conf.d/の下にありますが、10-ssl.confがSSLの設定です。

以下の設定でSSLが有効になります。/etc/dovecot/dovecot.confでprotocolsとしてimapが有効になっていると、これでimapsが有効になります。

ssl = required

次に以下の証明書の設定を行います。これで再起動すればIMAPSでアクセスが可能になります。

ssl_cert = </etc/pki/dovecot/certs/mail.crt
ssl_key = </etc/pki/dovecot/private/mail.key

IMAPSでのアクセスが可能になったら、10-auth.confのdisable_plaintext_authはyesに戻してもよいかもしれません。最後にiptablesでimapの143を閉じて変わりにimapsの993をあけたら完了です。

また、当然ながらオレオレ証明書の場合はメールソフト側で警告が出ます。

さらにdovecotの設定ファイルでは認証にクライアント認証を使うこともできるようですが、Thunderbirdでクライアント認証を使う方法が分からないので今回は保留とします。Thunderbirdの認証方式の設定でTLS証明書というのがそれっぽく見えますが、証明書も指定できないしどうも違うみたいです。

nagiosのクライアント認証

nagiosではデフォルトではユーザ名とパスワードを用いたベーシック認証で認証を行いますが、せっかくクライアント認証の環境を用意したのでクライアント認証で認証できないかな考えます。

認証の設定自体はApacheの設定です。nagiosのウェブアクセスの設定ファイルはnagiosのディレクトリの下のetc/cgi.cfgです。

以下の設定がベーシック認証のユーザ名をnagiosで利用する設定のようです。これを0にします。

use_authentication=0

以下の設定がクライアント認証のユーザ名をnagiosで利用する設定のようですが、nagiosadmin以外のユーザ名だと面倒なので、今回はこれは0にすることにします。

use_ssl_authentication=0

以下の設定を行うと認証とは関係なくユーザnagiosadminとみなすことができるようです。

default_user_name=nagiosadmin

認証自体はApacheでクライアント認証の設定をしているのでこれで問題ありません。

クライアント証明書の作成およびApacheのクライアント認証の設定

opensslを使用してクライアント証明書を作成します。作成手順はサーバ証明書の時と全く同じです。サーバ証明書の時はCNにFQDNを指定していたのが、クライアント証明書ではCNにユーザ名を指定するのが唯一の違いです。

  • クライアント証明書用の秘密鍵を作成
  • クライアント証明書要のCSRを作成
  • 自前の認証局で署名

サーバ証明書だとサーバの数は限られるのでお金を払ってもよい気がしますが、クライアント証明書を正規の認証機関で署名してもらうのはかなり厳しいのではと思います。ここで自前の認証局が活躍となります。

つぎにユーザのインストール用にクライアント証明書をパッケージ化します。以下のようにopensslを使ってpkcs12という形式で、クライアント証明書・秘密鍵・認証局の証明書をまとめることができます。このときにpkcs12のパッケージ用のパスワードを設定します。

openssl pkcs12 -export -in huga.crt -inkey huga.key -certfile /etc/pki/CA/cacert.pem -out huga.p12

正規の認証局で署名してあれば認証局の配布は不要となります。秘密鍵をシステム側で作成して配布するのは本来の意味では間違いと思いますが、ユーザがCSRを作成して署名してもらうというのは(特にWindowsでは)現実的ではないので気にしないことにします。

ここで生成されたp12ファイルをWindows上でダブルクリックするとインストールすることができます。インストール時にpkcs12のパッケージのパスワードを入力します。OSおよびIEはこれで証明書を認識できます。

FireFoxでは別途ブラウザ上でクライアント証明書をインストールする必要があります。

Apache側の設定ですが、SSLの設定はすんでいると仮定します。ssl.confの以下の項目でクライアント証明書を発行した認証局の証明書を指定します。

SSLCACertificateFile /etc/pki/CA/cacert.pem

また次の設定で上記認証局で署名されたクライアント証明書がないとSSLでアクセスができなくなります。

SSLVerifyClient require

個別にユーザの制限を行う場合は以下のような設定を追加します。以下の例では/以下の場所で上記認証局で署名されたユーザhugaのみアクセス可能となります。

<Location />
SSLRequire %{SSL_CLIENT_S_DN_CN} in { "huga" }
</Location>

 

サーバ証明書の作成およびApacheのSSLの設定

opensslを使ってApacheでSSLを使用するためのサーバ証明書を作成します。

まずは以下のコマンドでサーバ証明書用の2048bitの秘密鍵を作成します。ここではhoge.keyというファイル名で保存します。

openssl genrsa -out hoge.key -des 2048

Apacheを起動するときに毎回秘密鍵のパスフレーズを入力するのは大変なのでパスフレーズなしの秘密鍵も作成します。ファイル名はhoge.nopass.keyにします。(追記:パスフレーズ外すなら最初から暗号化しない秘密鍵を作ればいいのか?)

openssl rsa -in my.euphe.net.key -out hoge.nopass.key

次に上で作成した秘密鍵を用いてCSR(証明書要求)を作成します。ここではhoge.csrというファイル名にします。実行すると組織の情報などの入力が求められます。そしてCNとしてサーバの名前(FQDN)を入力します。

openssl req -new -key hoge.key -out hoge.csr

ここで作成したCSRに署名をしたものがサーバ証明書となります。ここまでは正規の証明書でもオレオレ証明書でも同じです。正規の証明書ではこのCSRに商用の認証機関で署名してもらうことになります。

ちなみにCAスクリプトを使用する場合はCA -newreqで上記の作業が可能なようです。この場合、特に指定しなければファイル名などはopenssl.cnfで設定されているデフォルトが使われるようです。(ちゃんと確認していません。)

次に、オレオレ証明書の場合は、自分で作成した認証局で署名を行います。以下の例では認証局の証明書および秘密鍵がそれぞれcacert.pem、cakey.pemです。サーバ証明書のファイル名はhoge.crtとします。

openssl ca -in hoge.csr -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out hoge.crt

CAスクリプトではCA -signで実行するようです。(こちらも未確認。)

ApacheのSSLの設定ですが、CentOSではmod_sslパッケージをインストールすることでSSLが使用可能になります。設定ファイルは/etc/httpd/conf.d/ssl.confです。以下の項目にそれぞれ上記で作成した証明書と秘密鍵を設定します。

SSLCertificateFile /etc/pki/tls/certs/hoge.crt
SSLCertificateKeyFile /etc/pki/tls/private/hoge.nopass.key

httpdを再起動すればhttpsでアクセスが可能なはずです。iptablesの設定などにも注意が必要です。

商用の認証機関で署名をしてもらったときには中間証明書が必要な場合もあります。その場合にはSSLCertificateChainFileの項目も合わせて設定を行います。

認証局(CA)の作成

ちょっと前に正規のサーバ証明書を購入しても非常に安価であるという話をしたばかりですが、いわゆるオレオレ証明書を作成するための(プライベートな)認証局の作成の話を書きます。

CentOSの場合、opensslのパッケージをインストールしていると/etc/pki/の下に認証関係のファイルが配置されています。/etc/pki/tls/misc/CAというスクリプトを実行すると認証局が作成できます。非常に簡単です。デフォルトでは/etc/pki/CA/の下に認証局のファイルが作成されます。

具体的には以下のように実行します。実行すると秘密鍵用のパスフレーズおよび組織の情報などの入力が求められます。

# ./CA -newca

phpMyAdminをインストール

phpMyAdminはウェブからGUIでMySQLlの操作が行えるツールです。データベースの作成やユーザの作成だけならコマンドラインからmysqlコマンドで行っても全然問題がありませんが、ものは試しということでインストールしてみました。

CentOSのリポジトリには入っていないようなので公式サイトからダウンロードしてインストールします。公式サイトは以下の場所です。

  • http://www.phpmyadmin.net/home_page/index.php

インストールは非常に簡単で、ここからソースファイルをインストールしウェブからアクセスできる場所に解答するだけです。デフォルトの設定ファイルがconfig.sample.inc.phpという名前で入っているのでそれをconfig.inc.phpという名前でコピーします。

設定はデフォルトのままで動きました。MySQLのユーザ名とパスワードでログインできます。あとは環境に合わせてApacheの設定を行います。AliasでURLを設定しアクセス制御を行えば完了だと思います。

アクセスするといろいろと項目があって複雑ですね。mcryptがないと怒られますがそれは今度考えることにします。