2017.04

Debian Postfix [MailServerⅠ]

Postfixで送信[SMTP]サーバー

### First,please visit -----------
Introduction & INDEX コチラから
------------------------------ ###

オフィスにLAN専用のメールサーバーを立てます。
初回は、PostfixでSMTP受信サーバーの章です。

■ INDEX
Postfixで送信[SMTP]サーバー : MailServer-Ⅰ
Dovecotで受信[IMAP]サーバー : MailServer-Ⅱ
Mailユーザー作成登録とクライアント側のメーラー設定: MailServer-Ⅲ
プライベート認証局によるサーバー証明書発行: MailServer-Ⅳ
SMTP/IMAP OverSSL/TLSで暗号化通信: MailServer-Ⅴ
ClamSMTP Mailをリアルタイムウィルススキャン: MailServer-Ⅵ
S/MIMEでセキュアなメール環境: MailServer-Ⅶ

< 環境 >
MAIL_LAN

■ インストール
$ aptitude show postfix sasl2-bin libsasl2-modules
$ sudo apt-get install postfix sasl2-bin
---libsasl2-modulesはたぶん入っている。
Postfixインストール中のコンフィグレーション画面で、
no configuration(設定なし)を選択。
*コメント通り後でLAN専用に必要な設定を手書きする。

Postfix was not set up. Start with cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf .If you need to make changes, edit /etc/postfix /main.cf(and other) as needed.To view postfix configuration values,see postconf(1). After modifying main.cf, be sure to '/etc/init.d/postfix reload'.

■ 設定ファイルの編集
○ File:saslauthd(編集 認証について)
$ sudo vi /etc/default/saslauthd
# Should saslauthd run automatically on startup?(default: no)
## 自動起動するに変更
#START=no
START=yes
# Example: MESHANISMS="pam"
## PAM認証を使用する
#MECHANISMS="shadow"
MECHANISMS="pam"

# running in a chroot.
## chrootで動いているので変更
#OPTION="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

*chrootで動いているかどうかは、コメント通り。
"/etc/postfix/master.cf"をチェック
"smtp inet n - y - - smtpd"or"smtp inet n - - - - smtpd"--->running in a chroot
"smtp inet n - n - - smtpd"---> Not running in a chroot

○ File:smtpd.conf(新規作成 認証について)
$ sudo vi /etc/postfix/sasl/smtpd.conf
## ":"コロン + " "スペース区切り
## 認証にsaslauthを利用する
## plain loginとも平文送信
pwcheck_metod: saslauthd
mech_list: plain login

pwcheck_methodの認証方式パラメーター
 auxprop 
 saslauthd 
 pwcheck 
mech_listの認証方式パラメーター
 plain 
 login 
 cram-md5 
 digest-md5 

○ postfixをsaslグループに加える
$ sudo usermod -aG sasl postfix
$ id postfix
uid=111(postfix) gid=119(postfix) groups=119(postfix),45(sasl)

○ File:aliases(編集)
postmaster(postfix)から配送されるメールを自分:Use_Accountに転送する
$ sudo vi /etc/aliases
# /ect/aliases
postmaster: root
(中略)
root:User_Account
## User_Account@Domainでも可

$ sudo newaliases
---aliasesの更新

○ Directory:Maildir(新規作成)
MailDir形式のメール保存フォルダを作成:自分用
$ mkdir -p ~/Maildir/cur
$ mkdir -p ~/Maildir/tmp
$ mkdir -p ~/Maildir/new
$ chmod -R 700 ~/Maildir
*Ⅲ章で後述するように、MailServerとしてMailClientの
 ユーザーアカウント別に作成すると良いだろう。

○ File:main.cf(新規作成と編集)
いよいよPostfixの本丸。
まず、インストール時のコメントの通りファイルを作成する。
$ sudo cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

それでは、"main.cf"の編集
$ sudo vi /etc/postfix/main.cf

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

#smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_banner = $myhostname ESMTP
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

myhostname = miyagi.lan.mail
mydomain = lan.mail
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8, 192.168.1.0/24
home_mailbox = Maildir/
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mailbox_size_limit = 50000000
message_size_limit = 3000000

smtpd_recipient_limit = 30
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = yes
smtpd_client_restrictions = permit_mynetworks,reject
smtpd_helo_restrictions = reject_unknown_client
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,reject

relayhost = $mydomain
relay_domains = $mydestination
default_transport = error
relay_transport = error

▼ パラメータ解説を展開

○ File:master.cf(編集)
main.cfで全体設定し、デーモンごとにmaster.cfで記述する。
設定は、master.cfが上書きする。
$ sudo vi /etc/postfix/master.cf
## コメントアウト"#"を外す
## サブミッションポート:587の使用(saslauth認証用)
submission inet n - - - - smtp
-o smtpd_sasl_auth_enable=yes
-o milter_macro_daemon_name_ORIGNATING

○ 編集した設定の反映
Postfixのmain.cfやmaster.cfを設定変更したら、rootで更新する。
$ sudo postfix reload

○ main.cfの記述をチェックする
$ sudo postfix check
---パラメータの誤字を指摘するが、運用法の間違いは正さない
$ sudo postconf [-a -d -n -v]
[options]
---saslで使用できるplug-inリスト
---デフォルト設定の参照: -d
---デフォルトと異なる記述の参照: -n
---詳細: -v

○ Postfixの設定をチェックする
$ systectl status -l postfix.service
---問題があると表示されているので参考にする
$ sudo ls -F /var/spool/postfix/private/auth
/var/spool/postfix/private/auth=
---このように表示されればOK
---dovecotの設定後に表示される
$ cat /etc/service | grep 587
---portの確認
$ ps ax | grep postfix
---Serviceの確認

○ Postfix saslauthを再起動
$ sudo systemctl restart postfix.service
$ sudo systemctl restart saslauthd.service

■ Postfix ロギング
Postfixのログは、rsyslogデーモン管理で記録される。
e.g.
$ ls -l /var/log/mail*
rsyslog: コチラを参照

■ SMTPのプロセスについて  *1.
smtp_process
 1.TCPコネクション接続要求
 2.リプライコード: 220(準備OK)
 3.HELO(EHLO)コマンド: 通信開始
 4.リプライコード: 250(コマンドOK)
 5.MAIL FROMコマンド: メール送信開始
 6.リプライコード: 250(コマンドOK)
 7.RCPT TOコマンド: 受取人アドレス指示
 8.リプライコード: 250(コマンドOK)
 9.DATAコマンド: メッセージ送信開始
10.ReplyCode: 354(開始し"."で終了せよ)
11.メッセージ転送中
12.メッセージ終了: .
13.リプライコード: 250(コマンドOK)
14.QUITコマンド: 接続終了
15.リプライコード: 221(切断)

■ reject_unknown_client(or hostname)の対策  *2.
○ホスト名とIPアドレスの名前解決が正しく行われない場合に拒否される。
これが落とし穴となり、正常なメールまで拒否される場合がある。
そのため、このパラメータの適用は外に向けて広く送受信するSMTPサーバーでは
慎重に用いたほうが良さそうだ。
ここではLAN環境内ということもあり当パラメータを採用している。したがって、
smtpd_client_restrictions = permit_mynetworks で許可されても
Heloコマンド時に、
smtpd_helo_restrictions = reject_unknown_client がマッチすると拒否される。

< 困ったケース >
Q: $mynetworksの正当なクライアントがこのパラメータで拒否されてしまうんたけど。。
A: "/etc/hosts"ファイルで名前解決すれば良いでしょう。
e.g.
Client: HostName=pc-031 IPaddress=192.168.1.31
$ sudo vi /etc/hosts
127.0.0.1      localhost
192.168.1.31   pc-031
$ sudo systemctl restart networking.service
$ sudo ifup eth0   (環境に応じて)
$ sudo systemctl restart postfix.service


Copyright(C) green-pen miyagi