酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

さくらVPSのCentOS 6.3にメールサーバ Postfix/Dovecotをインストール

Where?さくらVPSのCentOS 6.3にメールサーバをPostfixで構築する手順です。メールサーバは安定して運用するのが、なかなか大変でハードルは高いと聞きますが、だからこそ運用スキルを高めるためにチャレンジしてみます!

この記事は、CentOS 6.3にRailsサーバを構築する手順の中の記事の一つです。


前置き

さくらVPSのCentOSはpostfixがプリインストールされており、sendmailは入っていないのを前提にしています。もし、sendmailがインストールされて、postfixがインストールされていない環境の場合は以下を入力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# postfixのインストール
sudo yum install postfix

# sendmailを停止
sudo /etc/rc.d/init.d/sendmail stop

# sendmailの自動起動を停止
sudo chkconfig sendmail off

# 設定内容を確認
chkconfig --list sendmail

# デフォルトMTAの変更
alternatives --config mta

オレオレ証明書の作成

今回は自分のために使うサーバなので、オレオレ証明書を作成します。 きちんとしたサービスを提供する場合は、証明書を購入したほうが良さそうです。

以後、example.comは自分のドメイン、user_nameはユーザー名に読み替えて下さい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cd /etc/pki/tls/certs
sudo make server.key
> Enter pass phrase:# 任意のパスフレーズを入力
> Verifying - Enter pass phrase:# パスフレーズを再入力

sudo openssl rsa -in server.key -out server.key
> Enter pass phrase for server.key:# パスフレーズを再入力

sudo make server.csr
> Country Name (2 letter code) [XX]: [空白でエンターキー]
> State or Province Name (full name) []: [空白でエンターキー]
> Locality Name (eg, city) [Default City]: [空白でエンターキー]
> Organization Name (eg, company) [Default Company Ltd]: [空白でエンターキー]
> Organizational Unit Name (eg, section) []: [空白でエンターキー]
> Common Name (eg, your name or your server's hostname) []: *.example.com
> Email Address []: [空白でエンターキー]
A challenge password []: [空白でエンターキー]
An optional company name []: [空白でエンターキー]

sudo openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650
sudo chmod 400 server.*

これで次の3つのファイルが作成されていれば成功です。

server.crt
server.der
server.key

ここで使ったパスフレーズはあとから使うのでメモっておいて下さい。

Postfixの設定

Postfixの設定を行う。sudo vim /etc/postfix/main.cfで設定ファイルを編集。

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
# (追加)
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
home_mailbox = Maildir/

# メールサーバの隠蔽する設定を追加
smtpd_banner = $myhostname ESMTP unknown

# 受信メールサイズの制限の設定を追加
message_size_limit = 10485760

# 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

# 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

# (変更)
# 外部からのメール受信を許可するように変更
inet_interfaces = all

# プロトコルをipv4に限定するように変更
inet_protocols = ipv4

# 自ドメイン宛メールを受信できるようにする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

submission ポートを使って送信するための設定

submission ポートを使って送信するための設定を行う。sudo vim /etc/postfix/master.cfでファイルを開いて以下のコメントアウトを外す。

1
2
3
4
5
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

saslauthd(SMTP-Auth)の設定

saslauthd(SMTP-Auth)の設定を行う。sudo vim /etc/sasl2/smtpd.confでファイルを開いて次のように書き換え。

1
2
3
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login

SMTP-Authのためのsaslauthdを起動

認証用のSMTP-Authのためのsaslauthdを起動します。また、自動機能の設定も行います。

1
2
3
4
sudo /etc/rc.d/init.d/saslauthd start
sudo chkconfig saslauthd on
chkconfig --list saslauthd
> saslauthd         0:off   1:off   2:on    3:on    4:on    5:on    6:off #<= で設定成功

Dovecotのインストール

Dovecotをインストール。

1
sudo yum -y install dovecot

Dovecotの設定

次にSSLを使えるようにする。sudo vim /etc/dovecot/conf.d/10-ssl.confでファイルを編集。

1
2
3
4
5
6
7
8
# (変更)
# SSL証明書
ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/certs/server.key

# (追記)
ssl = yes
ssl_key_password = "前述の証明書作成時のパスフレーズ"

さらに受信の際の認証。sudo vim /etc/dovecot/conf.d/10-auth.confでファイルを開いて次の設定を追加。

1
auth_mechanisms = plain login

次はポートの設定。sudo vim /etc/dovecot/conf.d/10-master.confでファイルを開いて、コメントアウトを取り外す。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
  }
}

さらに設定。sudo vim /etc/dovecot/conf.d/10-mail.confでファイルを開いて以下の内容を追加。

1
2
mail_location = maildir:~/Maildir
valid_chroot_dirs = /home

Dovecotの設定を行う。sudo vim /etc/dovecot/dovecot.confで設定ファイルを開いて以下を追加。

1
2
3
listen = *

protocols = imap pop3 lmtp

Maildir形式のメールボックスを作成

新規ユーザ追加時に、ホームディレクトリにMaildir形式のメールボックスを作成するようにする。

1
2
sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp} 
sudo chmod -R 700 /etc/skel/Maildir/

メールアドレスの追加

新規ユーザーを追加する場合

メールアドレスを追加していきます。まずユーザーを追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo useradd -s /sbin/nologin user_name

# IMAP/POPのパスワードになります
sudo passwd user_name

# STMPのパスワードになります
sudo saslpasswd2 -u mail.example.com user_name

# 設定の確認
sudo sasldblistusers2
> user_name@mail.example.com: userPassword

sudo chgrp postfix /etc/sasldb2 #認証DBの所有権変更

もしSMTP-Auth用ユーザ名、パスワードを削除する場合はこちら。

1
sudo saslpasswd2 -d user_name -u example.com

既存ユーザーのメールアドレスを設定する

SMTP-Auth用ユーザ/パスワードの登録。

1
2
3
sudo mkdir /home/user_name/Maildir
sudo chmod 700 /home/user_name/Maildir
sudo chown user_name:user_group /home/user_name/Maildir

Postfixを起動

1
2
3
4
sudo /etc/rc.d/init.d/postfix start
sudo chkconfig postfix on
chkconfig --list postfix
> postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off #<= で設定成功

Dovecotを起動する

以下のコマンドを実行するとDovocotが起動します。

1
2
3
4
sudo /etc/rc.d/init.d/dovecot start
sudo chkconfig dovecot on
chkconfig --list dovecot
> dovecot         0:off   1:off   2:on    3:on    4:on    5:on

iptablesの設定

Postfixのメールを送受信できるようにiptablesを設定。 sudo vim /etc/sysconfig/iptablesを実行して、以下を追加。

1
2
3
4
5
6
7
8
9
10
11
12
# smtp/smtps
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 465 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT

# pop3
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT

# imap
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
1
sudo service iptables restart

もし、iptablesの設定をしていない場合は拙著、「さくらVPS/Cent OS 6.3 iptableの設定[Railsサーバへの道][セキュリティ]」を良かったら使って下さい。

DNS の設定

DNSは次の様に設定してください。

1
2
a mail.example.com IPアドレス
mx mail.example.com. 10

メールの送受信テスト

以上で設定は完了です。

/var/log/maillogがPostfix/Devocotのログファイルです。 これを見ながら、メールの送受信ができるかテストしてみて下さい。エラーが出るようであれば、Google先生にご質問下さいまし^^

トラブルシューティング: rootに届く場合

sudo vim /etc/aliasesでファイルを開いて転送される設定になっていないか確認してください。

1
受信ユーザ:        postmaster

となってたりしたら、その行をコメントアウトして下さい。

余談

SSL証明書をもし購入する場合はこちらがおすすめです!

Special Thanks

CentOS6.2 でメールサーバーを構築した - 俺の成長日記

メールサーバー構築(Postfix+Dovecot) - Fedoraで自宅サーバー構築

はじめての自宅サーバ構築 - Fedora/CentOS - メールサーバ(SMTP)の構築(Postfix)

プログラミング日誌 :: linux+postfixのメールサーバでメールをrootが受信してしまう場合の対応

おすすめの書籍