0. 設定要件
いきなり暗号化まで組み込むと、うまく動かないときに切り分けが難しくなるので、最初は平文でアクセスできるように構築します。
このため、ユーザのパスワードは暗号化するまでテスト用のものを使用してください。
メールサーバを暗号化するにはここを参照。
項目 内容 備考 OS CentOS 7.9.2009 手元で稼働中の Linux。
ホントは最新の CentOS8 で設定したかったが、
CentOS7 よりもサポートが短くなってしまった。SMTP サーバ ソフトウェア Postfix 2.10.1 CentOS7 に付属のもの 全体設定 /etc/postfix/main.cf プロトコル設定 /etc/postfix/master.cf POP3/IMAP サーバ ソフトウェア Dovecot 2.2.36 CentOS7 に付属のもの。
起動設定ファイルは /etc/dovecot/dovecot.confメールファイル設定 /etc/dovecot/conf.d/10-mail.conf conf.d/*.conf は dovecot.conf から追加で読み込まれる。 プロトコル/制限設定 /etc/dovecot/conf.d/10-master.conf ログイン認証設定 /etc/dovecot/conf.d/10-auth.conf SSL 設定(→無効化) /etc/dovecot/conf.d/10-ssl.conf メール格納形式 Maildir ディレクトリ /home/who/Maildir/ にメールを格納する。 メールサーバ名 mail.example.jp - メールアドレス who@example.jp - ユーザ ID who -
1. OS とエクスチェンジャ、メールサーバのバージョンを確認
$ cat /etc/system-release
$ dig example.jp -t mx +short | sort -n
CentOS Linux release 7.9.2009 (Core)
$ /usr/sbin/postconf | grep ^mail_versionドメイン名とメールサーバ名が紐づいていること。
10 mail.example.jp.
複数ある場合は、優先順位の値 (この場合は 10) が小さいものから優先される。
$ /usr/sbin/dovecot --version
mail_version = 2.10.1
$ /usr/sbin/saslauthd -v
2.2.36
もし入ってなかったら入れておく。(dnf install cyrus-sasl cyrus-sasl-plain)
saslauthd 2.0.26
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap httpform
2. Dovecot の設定
2-1. メールの格納方法を Maildir 形式にする。
$ su2-2. POP3/IMAP を許可する。
# cd /etc/dovecot/conf.d/
/etc/dovecot/conf.d/# vim 10-mail.conf
# <doc/wiki/MailLocation.txt> # mail_location = maildir:~/Maildir # If you need to set multiple mailbox locations or want to change default
/etc/dovecot/conf.d/# vim 10-master.conf2-3. POP3/IMAP の暗号化を解除することにより平文でアクセスできるようにする。
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 } }
/etc/dovecot/conf.d/# vim 10-auth.confIMAP の設定は、以下になる。
/etc/dovecot/conf.d/# vim 10-ssl.conf
# connection is considered secure and plaintext authentication is allowed. # See also ssl=required setting. # disable_plaintext_auth = no # Authentication cache size (e.g. 10M). 0 means it's disabled. Note that
/etc/dovecot/conf.d/# exit
# disable plain pop3 and imap, allowed are only pop3+TLS, pop3s, imap+TLS and imaps # plain imap and pop3 are still allowed for local connections # ssl = no # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
$
ポート 143 接続の保護 なし 認証方式 平文のパスワード (安全でない)
POP3 の設定は、以下になる。
ポート 110 接続の保護 なし 認証方式 平文のパスワード (安全でない)
3. Postfix の設定
3-1. 全体設定
$ su3-2. プロトコル設定
# cd /etc/postfix/
/etc/postfix/# vim main.cf
PostfixAdmin 等、仮想メールアドレスとして実ホスト名を扱う場合は mydestination に $mydomain を含めない記述を使用すること。
# other configuration parameters. # myhostname = mail.example.jp # The mydomain parameter specifies the local internet domain name.
# parameters. # mydomain = example.jp # SENDING MAIL
# to recipient addresses that have no @domain part. # myorigin = $mydomain # RECEIVING MAIL
# Note: you need to stop/start Postfix when this parameter changes. # inet_interfaces = all #inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost #inet_interfaces = localhost
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS". # #mydestination = $myhostname, localhost.$mydomain, localhost mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, # mail.$mydomain, www.$mydomain, ftp.$mydomain
# (the value on the table right-hand side is not used). # mynetworks = 127.0.0.0/8 #mynetworks = $config_directory/mynetworks #mynetworks = hash:/etc/postfix/network_table
# "Maildir/" for qmail-style delivery (the / is required). # home_mailbox = Maildir/ # The mail_spool_directory parameter specifies the directory where
disable_vrfy_command = yes smtpd_helo_required = yes smtpd_client_restrictions = reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org, reject_rbl_client bl.0spam.org, reject_rbl_client rbl.abuse.ro, reject_rbl_client b.barracudacentral.org, reject_rbl_client bl.blocklist.de, reject_rbl_client ubl.unsubscore.com, # reject_rbl_client dnsbl.sorbs.net, # reject_rbl_client hostkarma.junkemailfilter.com, # reject_rbl_client rbl.megarbl.net, # reject_rbl_client zen.spamhaus.org, permit # Connection limit anvil_rate_time_unit=60s smtpd_client_message_rate_limit=100 smtpd_client_connection_rate_limit=5 smtpd_client_connection_count_limit=5 smtpd_client_event_limit_exceptions=127.0.0.0/8
Connection limit - 接続数の制限を設ける。*1
下記制限はいずれも 1 クライアントに適用される。(総数ではない)
anvil_rate_time_unit=60s # 制限の単位時間を 60 秒とする。 smtpd_client_message_rate_limit=100 # 単位時間当たりのメール送信数の上限を 100 通とする。 smtpd_client_connection_rate_limit=5 # 単位時間当たりの接続数の上限を 5 とする。 smtpd_client_connection_count_limit=5 # 単位時間当たりの同時接続数の上限を 5 とする。 # (同時接続: connect したまま disconnect しない状態) smtpd_client_event_limit_exceptions=127.0.0.0/8 # 上記制限の対象としないアドレスを指定する。
/etc/postfix/# vim master.cfSMTP の設定は、以下になる。
/etc/postfix/# exit
#dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy submission inet n - n - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
$
ポート 587 接続の保護 なし 認証方式 平文のパスワード (安全でない)
4. サーバの登録と起動
$ su
# systemctl enable saslauthd
# systemctl enable postfix
# systemctl enable dovecot
# systemctl start saslauthd
# systemctl start postfix
# systemctl start dovecot
# exit
$
*1この設定により、以下のメッセージがメール送受信ログ /var/log/maillog に表示される。
以下は、実際のメール送受信ログ (メールクライアントの IP アドレスは 192.168.103.245)
これは、*2で通常接続できることを確認したのちに*3で複数セッションを試みたものと思われる。
*2通常のメール送信クライアントは、connect - disconnect のペアで動作する。
Jul 8 11:42:11 mail postfix/smtpd[15989]: connect from unknown[192.168.103.245] *2 *4-1 Jul 8 11:42:11 mail postfix/smtpd[15989]: disconnect from unknown[192.168.103.245] *2 Jul 8 11:42:12 mail postfix/smtpd[15989]: connect from unknown[192.168.103.245] *3 *4-2 *5-1 Jul 8 11:42:14 mail postfix/smtpd[15997]: connect from unknown[192.168.103.245] *3 *4-3 *5-2 Jul 8 11:42:14 mail postfix/smtpd[15998]: connect from unknown[192.168.103.245] *3 *4-4 *5-3 Jul 8 11:42:15 mail postfix/smtpd[16000]: connect from unknown[192.168.103.245] *3 *4-5 *5-4 Jul 8 11:42:17 mail postfix/smtpd[15997]: disconnect from unknown[192.168.103.245] *3 Jul 8 11:42:17 mail postfix/smtpd[15998]: disconnect from unknown[192.168.103.245] *3 Jul 8 11:42:17 mail postfix/smtpd[16000]: disconnect from unknown[192.168.103.245] *3 Jul 8 11:42:17 mail postfix/smtpd[15989]: disconnect from unknown[192.168.103.245] *3 Jul 8 11:47:18 mail postfix/anvil[15991]: statistics: max connection rate 5/60s for (smtp:192.168.103.245) at Jul 8 11:42:15 *4 Jul 8 11:47:18 mail postfix/anvil[15991]: statistics: max connection count 4 for (smtp:192.168.103.245) at Jul 8 11:42:15 *5
*3異常なメール送信クライアントは、connect を複数回実行したあとに disconnect を実行する。
*4統計情報 (エラーや警告ではない): 60 秒間に同一クライアントから 5 つの接続があったことを通知している。(*4-1~4-5)
*5統計情報 (エラーや警告ではない): 同一クライアントから 4 つの同時接続があったことを通知している。(*5-1~5-4)
おまけ
dovecot のバグ (?) なのか、なぜかディレクトリを作成してくれないことがある。
その時は、以下を実施すると、(これまたなぜか) うまくいく。
- ユーザのディレクトリ (Maildir) に、ディレクトリを作成する。(例 送信済みトレイ: .Sent)
- 作成したディレクトリをユーザのパーミッションに合わせる。
- いつも使っているメーラーでアクセスする。(← ここで .Sent/ の中身が生成される)
(メーラーを再起動すると吉)