CentOS8 PostfixとDovecotでメール送受信(その1)


# その1 まずは暗号化なしでメール送受信 #
CentOS8でメール送受信かつSSL対応とDKIM対応をしたのでその時のメモ
まずは平文で送受信できるところまでを設定します。

## Postfix ##

+ 1.インストール

先に必要なものをインストールします。

```
$ yum list installed | grep postfix
$ yum -y update postfix
(もしなければ yum -y install postfix)
$ yum -y install cyrus-sasl
$ yum -y install cyrus-sasl-plain
$ yum -y install cyrus-sasl-devel
```

+ 2.設定ファイル

バックアップを取りつつ必要な編集を行います。

```
$ cd /etc/postfix/
$ cp main.cf main.cf.org
$ cp master.cf master.cf.org
$ vi main.cf
$ vi master.cf
```

今回はexample.comというドメインでホストはmail.example.comとします。
以下が編集点です。Maildir形式を採用します。

```main.cf
...
myhostname = mail.example.com
...
mydomain = example.com
...
myorigin = $mydomain
...
inet_interfaces = all
...
inet_protocols = all
...
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
...
home_mailbox = Maildir/
...
stmpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options=noanonymous
...
```

```master.cf
...
# コメントアウトを外す
submission inet n       -       n       -       -       smtp
...
# コメントアウトを外す
-o smtpd_sasl_auth_enable=yes
...
# コメントアウトを外す
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
...
```

+ 3.SASLによるSTMP認証

SASLの自動起動を行います。

```
$ systemctl start saslauthd
$ systemctl enable saslauthd
```

次にSASLの設定を行います。

```
$ vi /etc/sasl2/smtpd.conf
```
```/etc/sasl2/smtpd.conf
pwcheck_method: auxprop
mech_list: plain cram-md5 login
```


## Dovecot ##
+ 1.インストール

先に必要なものをインストールします。

```
$ yum list installed | grep dovecot
$ yum -y update dovecot
(もしなければ yum -y install dovecot)
$ yum -y install cyrus-sasl
```

+ 2.設定ファイル

バックアップを取りつつ必要な編集を行います。

```
$ cd /etc/dovecot/
$ cp dovecot.conf dovecot.conf.org
$ cd conf.d
$ cp 10-mail.conf 10-mail.conf.org
$ cp 10-auth.conf 10-auth.conf.org
$ cp 10-mail.conf 10-mail.conf.org
$ cp 10-ssl.conf 10-ssl.conf.org
$ cp auth-passwdfile.conf.ext.conf auth-passwdfile.conf.ext.org
```
```dovecot.conf
...
protocols = imap pop3
...
listen = *
...
# デバッグをするのであれば追加
auth_verbose = yes
auth_debug = yes
...
```
```10-mail.conf
...
# no-reply@example.comの場合、%nはno-replyを意味します
mail_location = maildir:/home/%n/Maildir
...
# Maildirなのであまり意味はない？けど一応。。。
mail_privileged_group = mail
mail_access_groups = mail
...
```
```10-master.conf
...
service imap-login {
  inet_listener imap {
    #コメントアウトを外してポート設定
    port = 143
  }
...
service pop3-login {
  inet_listener pop3 {
    #コメントアウトを外してポート設定
    port = 110
  }
...
service submission-login {
  inet_listener submission {
    #コメントアウトを外してポート設定
    port = 587
  }
}
...
service auth {
  ...
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
...
```
```10-auth.conf
...
disable_plaintext_auth = no
...
## 今回はpasswdfileを使います
#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
```
```10-ssl.conf
...
ssl = no
...
```auth-passwdfile-conf
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
userdb {
  driver = passwd-file
  #args = username_format=%u /etc/dovecot/users
  args = /etc/dovecot/users

  # Default fields that can be overridden by passwd-file
  #default_fields = quota_rule=*:storage=1G

  # Override fields from passwd-file
  #override_fields = home=/home/virtual/%u
}
```

## 通信設定 ##

+ 1.起動

```
$ systemctl start postfix
$ systemctl enable postfix
$ systemctl start dovecot
$ systemctl enable dovecot
```

+ 2.ファイヤーウォール
必要なポートを開けます。

```
$ firewall-cmd --permanent --zone=public --add-port=587/tcp
$ firewall-cmd --permanent --zone=public --add-port=110/tcp
$ firewall-cmd --permanent --zone=public --add-port=143/tcp
$ firewall-cmd --reload
```

## ユーザー ##

+ 1.システムユーザー

メールアカウントはnologinグループにします。またユーザー作成時に自動的にMaildirディレクトリが作成されるようにします。
(パスワードをメモしておくこと)

```
$ mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ chmod -R 700 /etc/skel/Maildir/
$ useradd -s /sbin/nologin no-reply
$ passwd no-reply
```

+ 2.SASL DB

Postfixはユーザー照合をSASLのデータベースで行います。

```
ユーザーの作成
$ saslpasswd2 -c -u example.com no-reply
ユーザー一覧
$ sasldblistusers2
```
sasldb2の権限などを変更します。

```
$ chgrp postfix /etc/sasldb2  
$ chmod 640 /etc/sasldb2
$ ln /etc/sasldb2 /var/spool/postfix/etc/sasldb2
```

+ 3.passwdfile

Dovecotが参照するユーザーのファイルを作成します。
ユーザーIDが必要なので確認を合わせて行います。

```
$ cat /etc/passwd
$ vi /etc/dovecot/users
$ chmod 640 /etc/dovecot/users
$ chown dovecot:dovecot /etc/dovecot/users
```

```/etc/dovecot/users.
no-reply@example.com:{PLAIN}password:1001:1001::/home/no-reply:/sbin/nologin
```

1001はユーザーIDの例です。


## DNS ##
必要なMXレコード、SPFレコード、逆引きレコードを設定します。
(わかると思いますがIPアドレス123.456.789.012は仮です)

mx:  mail.example.com 10
spf: v=spf1 ip4:123.456.789.012 include:example.com -all
rtp: 123.456.789.012 3600 IN PTR example.com

確認は

```
$ dig -t MX example.com
$ dig -t TXT example.com
$ dig -x 123.456.789.012
```

## テスト ##
最後にメールを自分自身に送ります。

```
$ sendmail no-reply@example.com -f no-reply@example.com
From: no-reply@example.com
To: no-reply@example.com
Subject: test

test

.
```

.で終了です。
/home/no-reply/Maildir/のnewやcurの中にメールが来ていることを確認します。
ログを都度確認して設定を確かめましょう。

```
$ cat /var/log/maillog
```

問題がなければメールソフトの平文でアカウントが作成できるはずです。
__次回はSTARTTLSを有効にする設定を行な、、えれば、いいな。。。__
（追記）
[次回、STARTTLSの設定](https://qiita.com/someone-said-so/items/d1ab63cd19e37c7cbdd3)