クラウド(n)を使ってみる:メールサーバの構築

標準でインストールされているpostfixとdovecotを使って、メールサーバを構築します。

設定内容は以下。

  • 個人ごとにUNIXアカウントを作らない
  • メール送信はサブミッションポート経由(SMTP Auth)
  • SMTP/POPパスワードはdovecotで一元管理
  • SSLはとりあえず使わない
  • POP3のみ対応(imap未対応)
  • Maildir形式


パッケージのインストール

# yum -y install dovecot cyrus-sasl-md5

サーバ名の設定とSELinux無効化もやっておいたほうがいいようです。
サーバ名の設定は /etc/sysconfig/hostnameとhostnameコマンド、SELinux無効化はこちら

dovecotの設定

個人ごとのUNIXアカウントは作らないので、メールを読み書きする共通のUNIXアカウントが必要となります。

# groupadd -g 10000 vmail

# useradd -u 10000 -g 10000 -d /var/spool/vmail -r -s /sbin/nologin vmail

# mkdir /var/spool/vmail

# chown vmail:vmail /var/spool/vmail

# chmod 700 /var/spool/vmail

CentOS5から6になって、dovecotも1.xから2.0になりました。
  • /etc/dovecot.conf単体ではなく、/etc/dovecot.confで概要を指定して、各セクションの詳細は /etc/conf.d/ で設定するようになった
  • デフォルト値が少し変わった(SSLはデフォルトでONなど)
  • これまでUNIXアカウントはdovecotだけだったが、dovenullも追加された(yumで自動的に追加されます)
  • dovecotpwがなくなり、doveadmとなった
本来は2.0の書き方で書くべきですが、1.xの設定ファイルでも認識するため、今回はそのまま使います。
デフォルトでは、SSLを使わない場合にはプレーンテキスト認証は無効になりました。
disable_plaintext_auth = no で有効にします。
また、mail_locationを記述しないとエラーになるようです。

# vi /etc/dovecot/dovecot.conf
auth_mechanisms = cram-md5 plain login

disable_plaintext_auth = no

mail_location = maildir:~/Maildir

passdb {
  args = /etc/dovecot/dovecot-passwd
  driver = passwd-file
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  user = root
}
ssl = no
userdb {
  args = uid=vmail gid=vmail home=/var/spool/vmail/%d/%n
  driver = static
}

パスワードの生成にはdoveadmコマンドを使うようになりました。
認証スキームはHMAC-MD5, CRAM-MD5などがあるようです。
# doveadm pw -s HMAC-MD5
Enter new password:
Retype new password:
{HMAC-MD5}8c9169f45b3b78f4c4803d5110e431b1bd71370939221876e3abe01e35bc45c2

doveadmが吐き出したパスワードを、パスワードファイルに保存しておきます。
# vi /etc/dovecot/dovecot-passwd
test@example.com:{HMAC-MD5}8c9169f45b3b78f4c4803d5110e431b1bd71370939221876e3abe01e35bc45c2

dovecotを起動します。
# /etc/rc.d/init.d/dovecot start

# chkconfig dovecot on

postfixの設定

■設定
"mydestination="を書かないと、"warning: do not list domain example.com in BOTH mydestination and virtual_mailbox_domains"のような警告がでます。
# vi /etc/postfix/main.cf
# 以下を編集
inet_interfaces = all
home_mailbox = Maildir/
mydestination =

# 以下を追加
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
virtual_mailbox_domains = example.com
virtual_mailbox_base = /var/spool/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_maps = hash:/etc/postfix/virtual

# vi /etc/postfix/master.conf
# 以下を有効に
submission inet n       -       n       -       -       smtpd

■メールアドレスを追加

# vi /etc/postfix/vmailbox
test@example.com    example.com/test/Maildir/
# postmap /etc/postfix/vmailbox

virtual.dbもできてない場合があるので、一応。
# postmap /etc/postfix/virtual

■postfixを再起動

# /etc/rc.d/init.d/postfix restart

ファイアウォールの設定変更

他サーバからの中継用の25、POP110、サブミッション587を開けます。
# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -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 110 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

クラウドコンソールで、ファイアウォールを追加します。

クラウドコンソールで、ポート転送を追加します。

以上で設定完了です。

こちらを参考に、不正リレーチェックを行っておきます。
運用開始後の作業も上記URLとほぼ同じです。(dovecotpwがdoveadmに変わっただけ)

  • Spread The Love
  • Digg This Post
  • Tweet This Post
  • Stumble This Post
  • Submit This Post To Delicious
  • Submit This Post To Reddit
  • Submit This Post To Mixx

0 Response to “クラウド(n)を使ってみる:メールサーバの構築”

Leave a Reply