CentOS6.2 でメールサーバーを構築した
さくらの VPS ではデフォルトで postfix が入ってたのでそれを使う。POP3、IMAP には dovecot を利用する。認証には SSL を利用するが、自分だけしか使わないのとお金がないので自己証明書を用いる。きちんとしたサービスでは認証局から証明書を発行してもらうこと。
自己証明書
まずは自己証明書を作成する。こちらを参考にした。
# cd /etc/pki/tls/certs # make server.key # "server" は好きな文字列でよい Enter pass phrase:# パスフレーズ設定 Verifying - Enter pass phrase:# 再入力
2014/02/19 追記 下記のコマンドはパスフレーズを削除してしまうので実行しないでください。
# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:# パスフレーズ入力
# make server.csr # 色々聞かれるので解答していく Country Name (2 letter code) [XX]:JP# 国 State or Province Name (full name) [e]:Tokyo # 地域(県) Locality Name (eg, city) [Default City]:Meguro-Ku # 都市 Organization Name (eg, company) [Default Company Ltd]:Individual # 組織名 Organizational Unit Name (eg, section) []:Individual # 組織の部門名 Common Name (eg, your server's hostname) []:www.hoge.com # サーバーのFQDN Email Address []:admin@hoge.com # 管理者アドレス A challenge password []:# 空Enter An optional company name []:# 空Enter # openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650 # 有効期限が10年の自己署名証明書を作成 # chmod 400 server.*
これで
- server.key
- server.csr
- server.crt
が出来ているはず。
SMTPサーバー構築
送信サーバーを立てる。さくら VPS ではすでに Postfix がインストールされ、Sendmail はアンインストールされているので、設定ファイルをいじっていく。
CentOS6 では、Postfix の設定ファイルは /etc/postfix 以下にある。起動停止は /etc/init.d/postfix に対して start とか stop とかやれば処理できる。
Postfix の設定
2012/05/05 現在では、バージョンは2.6.6が入っていた。以下設定ファイルの変更点。こちらと、こちらを参考にした。
# vim /etc/postfix/main.cf
# 追加 myhostname = mail.hoge.com mydomain = hoge.com myorigin = $mydomain home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP unknown # 変更 inet_interfaces = localhost ↓ inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost ↓ mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # SMTP-Auth 系の設定追加 disable_vrfy_command = yes smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_client_restrictions = permit_mynetworks,reject_unknown_client,permit smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination message_size_limit = 10485760 # TLS を利用するための設定、先ほど作った自己証明書を指定する smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt smtpd_tls_key_file = /etc/pki/tls/certs/server.key smtpd_use_tls = yes
TLSを利用するために /etc/postfix/master.cf の下記の部分のコメントアウトを外す。
submission inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
SMTP-Auth の設定
このままでは誰でもメールが使えてしまうので、認証をかけるために saslauthd を利用する。Postfix の設定でも一部出てきているが、ここでは SASL 単体の設定を行う。現時点でのバージョンは 2.1.23 で、さくら VPS ではすでにインストールされている。
設定ファイルは /etc/sasl2/smtpd.conf にあり、行数も少ないので全部下記に載せる。
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: plain login
saslauthd は /etc/init.d/saslauthd に起動/停止スクリプトがあるので、設定を変更したら忘れずに再起動しておく。また、下記のようにOS再起動時にも起動するように設定しておく。
# chkconfig saslauthd on # chkconfig --list saslauthd #確認 saslauthd 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ
POP・IMAPサーバー構築
今回は dovecot をインストールして設定する。こちらも /etc/init.d/dovecot あたりで起動・停止処理を行う。設定ファイルは /etc/dovecot 以下にある。
まずはインストール。現時点のバージョンは 2.0.9。
# yum -y install dovecot
設定ファイルは /etc/dovecot/ 以下にある。まずは ssl を利用出来るようにする。
/etc/dovecot/conf.d/10-ssl.conf
#追加 ssl = yes ssl_key_password = "上記で設定した自己証明書のパスフレーズ" #変更(上記で設定した自己証明書を指定、値の先頭に"<"がつくので気をつけること) ssl_cert = </etc/pki/tls/certs/server.crt ssl_key = </etc/pki/tls/certs/server.key
受信に認証をかける。
/etc/dovecot/conf.d/10-auth.conf
#追加
auth_mechanisms = plain login
それからポートの設定等。
/etc/dovecot/conf.d/10-master.conf
# imap と pop3 のポートとかsslのコメントアウトを外しておく
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
基本設定。
/etc/dovecot/conf.d/10-mail.conf
#追加
mail_location = maildir:~/Maildir
valid_chroot_dirs = /home
こっちも基本設定?
/etc/dovecot/dovecot.conf
#追加
protocols = imap pop3 lmtp
ユーザー設定
ssh ログインなしのユーザーを作成する。
# useradd -s /sbin/nologin [ユーザー名] # passwd [ユーザー名] #パスワードを設定 # saslpasswd2 -u [FQDN] [ユーザー名] #パスワード設定 # sasldblistusers2 #作成したユーザー確認 # chgrp postfix /etc/sasldb2 #認証DBの所有権変更
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} # chmod -R 700 /etc/skel/Maildir
既存ユーザーがいる場合は下記のようにディレクトリを作成する。
# mkdir /home/[ユーザー名]/Maildir # chmod 700 /home/[ユーザー名]/Maildir # chown [ユーザー名]:[ユーザーグループ] /home/[ユーザー名]/Maildir
ファイアウォールの設定
下記のポートを開けておく。
※基本的にはSSLを利用するので、上記の左側のポートは閉じていても良い
※2012/05/07追記 25番開けないと外部からのメール受けられませんでした
具体的には下記のコマンドを叩く。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT
クライアントの設定
自分の Android でメールが受信できるようにした。その設定の一例。
クライアントソフトは K-9 Mail を利用した。https://play.google.com/store/apps/details?id=com.fsck.k9
- まずは上記で設定したアカウントを入力する
- 受信メールサーバーの種類を選択(POP3サーバー)
- 受信メールサーバー設定
- 証明書が無効ですと言われるけど、許可して次へ
- 送信メールサーバー設定
これで送受信できるはず。既存の Gmail かなんかとやりとりできるか確認しておく。
デバッグ方法
ログ
ログは基本的に /var/log/maillog に出力される。別窓で tail -f /var/log/maillog とかで監視しながらメールの送受信を行って動作確認をすると良い。
SSL 周りで動かなかったり、外部からのメールが reject されてたりするときに、このへんに出力されるキーワードをもって Google 先生に指南いただいた。
メールの打ち方
サーバーに ssh で入ってメールするときには
# mail hoge@hoge.com
って打つとタイトルを聞かれた後に本文を聞かれる。行頭で「.」のみ入力して改行すると、メールが送信される。ただ "mail" コマンドのみだけを打つと新規メールが来たかを確認できる。これで、サーバー内部、もしくは内部ネットワークからはメール可能なのか、外部から弾かれているのかが確認できる。
2012/11/12 追記 Google Apps を利用してメールを送信する
メールサーバーがグローバルに出ていない場合、スパムと判断されて正常に届かないことが多い。サーバー借りるお金なんかないし、自宅サーバーだけでスモールな感じでメールサーバー構築したいときに GAppsなんかを利用してメールを送信する。
基本的には上記の設定をひととおり終える。
んで、下記のライブラリをインストールする。
# yum install -y cyrus-sasl-plain
んで、Gmail のアカウントの情報を書く。
vim /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 hoge@gmail.com:mogera123
ここで、[hoge@gmail.com]は自分のメールアカウント。GApps 利用しているなら gmail.com じゃなくて設定しているドメインでもいい。
mogera123 はそのパスワード。
それから、リレーホストも編集する。
vim /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
この一行を追加。
そして postmap する。
# postmap /etc/postfix/sasl_passwd
これでおそらくいけるはず・・・
念のため postfix と sasl2 を再起動
# /etc/init.d/postfix restart # /etc/init.d/saslauthd restart