dshimizu/blog

アルファ版

Ubuntu 16.04でPostfix 3.0+Dovecot 2.2+Dovecot SASLでメールサーバ構築

はじめに

Ubuntu 16.04でPostfix 3.0+Dovecot 2.2+Dovecot SASLでのメールサーバ構築メモです。 PostfixではSMTPsを、DovecotではIMAPs , POP3sを有効にします。

構築手順

環境

OS Ubuntu 16.04 LTS(4.4.0-21-generic)
SMTPソフトウェア Postfix Version 3.1.0-3
POP/IMAPソフト dovecot (dovecot-imapd,dovecot-pop3d) Version 2.2.22

事前準備

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

Postfixdovecot関連のパッケージをインストールします。

$ sudo apt-get install postfix dovecot-core dovecot-imapd dovecot-pop3d

Postfixの設定

/etc/postfix/main.cfを作成します。 Ubuntu 16.04 LTSのPostfix 3.0では/usr/share/postfix/main.cf.distにサンプルファイルがあるのでそれを元にしても良いですし、新規に作成しても良いです。

### Postfixの互換レベル設定
compatibility_level = 2

### 基本設定
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
myhostname = ホスト名
mydomain = メールサーバのドメイン名
myorigin = $mydomain
unknown_local_recipient_reject_code = 550
mynetworks_style = host, localhost
mynetworks = xxx.xxx.xxx.xxx/32, localhost, 127.0.0.0/8
relay_domains = $mydestination
smtpd_banner = $myhostname ESMTP unknown
debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     ddd $daemon_directory/$process_name $process_id & sleep 5
inet_protocols = ipv4

### 受信も必要な場合は以下を設定。
### mydestinationは最終配送先の設定で、メールアドレスの「@」の右側が mydestination の指定に一致すると、そのメールは他のサーバには配送せず、自ホスト内で処理しようとする。 
### 末尾のほうにあるvirtual_mailbox_domainsを設定している場合には、mydestinationも設定していると受信時にエラーが発生するのでここでは空の値を設定。
### virtual_mailbox_domainsがない場合は$myhostname, $mydomain, localhostあたりを設定しておけば良いはず。
inet_interfaces = all
mydestination =
#mydestination = $myhostname, $mydomain, localhost

### 証明書設定(ここではUbuntu標準のものを指定、必要であれば別途作成)
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

### アクセス制御等
smtpd_helo_required = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_client_restrictions = permit_mynetworks,reject_invalid_hostname,permit
smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname
smtpd_recipient_limit = 100

smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
allow_percent_hack = yes
swap_bangpath = yes
allow_untrusted_routing = no
disable_vrfy_command = yes
alias_maps = hash:/etc/aliases

### sasl関連設定
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname


### 送受信用仮想ドメイン/仮想ユーザの設定
virtual_mailbox_domains = ドメイン名
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:15000
virtual_gid_maps = static:15000

/etc/postfix/master.cfを編集します。 以下4行をコメントアウト(※2017/6/27コメント指摘事項修正) アンコメントします。

submission inet n       -       y       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes

smtps     inet  n       -       y       -       -       smtpd
  -o smtpd_tls_wrappermode=yes

Dovecotの設定

/etc/dovecot/dovecot.confを編集します。

### IPv4のみ有効化
listen = *

### インクルードするファイルの指定
!include conf.d/*.conf
!include_try local.conf
!include_try /usr/share/dovecot/protocols.d/*.protocol

/etc/dovecot/conf.d/10-master.confを編集します。

 service imap-login {
   inet_listener imap {
    ### imap無効化
    port = 0 
   }
   inet_listener imaps {
    ### imaps有効化
    port = 993
    ssl = yes
   }

 service pop3-login {
   inet_listener pop3 {
    ### pop3無効化
    port = 0
   }
   inet_listener pop3s {
    ### pop3s有効化
    port = 995
    ssl = yes
   }
 }

  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    ### private/authの権限をpostfixへ変更
    user = postfix
    group = postfix
  }

/etc/dovecot/conf.d/10-auth.confを編集します。

### PlainText認証を無効化
disable_plaintext_auth = yes

### 認証メカニズムに cram-md5 を利用可能にします。
auth_mechanisms = plain login digest-md5

### auth-system.conf.extファイルのインクルードを停止
#!include auth-system.conf.ext

### auth-static.conf.extファイルのインクルードを有効化
!include auth-static.conf.ext

/etc/dovecot/conf.d/10-mail.confを編集します。

### メールの配置先指定
mail_location = maildir:/home/vmail/%d/%n/Maildir

namespace inbox {
  inbox = yes
}

### メールプロセスのchroot先指定
valid_chroot_dirs = /home/vmail/%d/

### UIDLフォーマット指定
pop3_uidl_format = %08Xu%08Xv

/etc/dovecot/conf.d/10-ssl.confを編集します。

### sslを有効化
ssl = yes
### 証明書設定(ここではUbuntu標準のものを指定、必要であれば別途作成)
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key

/etc/dovecot/conf.d/auth-static.conf.extを編集します。

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n
}

バーチャルメールボックスとメールユーザの設定

Postfixのバーチャルメールボックス設定

バーチャルメールボックスを使うことにします。ユーザ管理はOSユーザアカウントではなく、仮想ユーザで管理されます。

バーチャルメールボックスの所有者となるユーザ・グループを作成します。 ここではuid/gid15000の、vmailというユーザ・グループを作成します。

$ sudo groupadd -g 15000 vmail
$ sudo useradd -u 15000 -g vmail -s /bin/false -d /home/vmail -m vmail

メールの送受信に使う仮想ユーザとメールボックスマッピング/etc/postfix/vmailbox に記載します。

$ sudo vi /etc/postfix/vmailbox

書式は以下のような形です。

ユーザ名@ドメイン名 ユーザ名/Maildir/

記載したらpostmapを実行してDBを生成します。

$ sudo postmap /etc/postfix/vmailbox

ファイルができていることを確認します。

$ ls /etc/postfix/vmailbox*
/etc/postfix/vmailbox  /etc/postfix/vmailbox.db
imap/pop3認証ユーザ設定

Dovecotでのimap/pop3認証用のユーザとパスワードのマッピングファイルを作成します。 まず、doveadmでパスワードを生成します。

$ sudo doveadm pw
Enter new password:
Retype new password:
{CRAM-MD5}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

生成されたパスワードをユーザ名とともに/etc/dovecot/usersファイルに記載します。

$ sudo vi /etc/dovecot/users

書式は以下のような形です。

ユーザ名:{CRAM-MD5}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

おわりに

以上、Postfix3.0+Dovecot2.2でのメールサーバ構築の簡単なメモでした。

参考