今朝、セキュリティ証明書の名前の不一致の問題を修正するために、How to fix mail server SSL?の推奨手順に従いましたが、現在、クライアント(この場合、クライアントはWindows Mail)からメールを送信しようとすると、次のようなエラーが表示されます。
拒否された電子メールアドレスは '[email protected]'。件名 'This is a test. '、Account: 'mail.domain.com'。 Server: 'mail.domain.com'、Protocol: SMTP, Server Response: '554 5.7.1 [email protected]:リレーアクセス denied', Port: 25, Secure(SSL):No, Server Error:554, Error Number: 0x800CCC79
Editです。このアカウントからメールを取得することはできますし、同じドメインの他のアカウントにメールを送信することもできます。ただ、ドメイン外の受信者にメールを送ることができません。
TLSを完全に無効にしてみましたが、やはり同じエラーが出ます。
ファイルmail.log
を確認すると、以下のようになっています。
Jul 18 08:24:41 company imapd: LOGIN, [email protected], ip=[::ffff:111.111.11.11], protocol=IMAP
Jul 18 08:24:42 company imapd: DISCONNECTED, [email protected], ip=[::ffff:111.111.11.11], headers=0, body=0, rcvd=83, sent=409, time=1
Jul 18 08:25:19 company postfix/smtpd[29282]: connect from company.university.edu[111.111.11.11]
Jul 18 08:25:19 company postfix/smtpd[29282]: NOQUEUE: reject: RCPT from company.university.edu[111.111.11.11]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<UserPC>
Jul 18 08:25:19 company postfix/smtpd[29282]: disconnect from company.university.edu[111.111.11.11]
Jul 18 08:25:22 company imapd: DISCONNECTED, [email protected], ip=[::ffff:111.111.11.11], headers=13, body=142579, rcvd=3289, sent=215892, time=79
ファイル main.cf
は次のようになっています。
#
# Postfix MTA Manager Main Configuration File;
#
# Please do NOT edit this file manually;
#
#
# Postfix directory settings; These are critical for normal Postfix MTA functionallity;
#
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
#
# Some common configuration parameters;
#
inet_interfaces = all
mynetworks = 127.0.0.0/8
mynetworks_style = host
myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain
smtpd_banner = $myhostname ESMTP 2.4.7.1 (Debian/GNU)
setgid_group = postdrop
#
# Receiving messages parameters;
#
mydestination = localhost, company
append_dot_mydomain = no
append_at_myorigin = yes
transport_maps = mysql:/etc/postfix/transport.cf
#
# Delivering local messages parameters;
#
mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_command = procmail -a "$EXTENSION"
biff = no
alias_database = hash:/etc/aliases
local_recipient_maps =
#
# Delivering virtual messages parameters;
#
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/usr/local/virtual
virtual_maps=mysql:/etc/postfix/virtual.cf
virtual_mailbox_domains=mysql:/etc/postfix/virtual_domains.cf
#
# SASL paramters;
#
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtp_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtp_tls_key_file = /etc/postfix/ssl/smptd.key
smtpd_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smptd.key
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
smtpd_sender_restrictions =
permit_sasl_authenticated
permit_mynetworks
smtpd_recipient_restrictions =
permit_sasl_authenticated
check_recipient_access hash:/etc/postfix/filtered_domains
permit_mynetworks
reject_unauth_destination
余談ですが、私の雇用主はクライアント(ThunderbirdとOutlook)から、ローカルネットワーク内と外の両方からメールを送信できるようにしたいと考えています。
TLSは、smtpセッションの暗号化を可能にするだけで、Postfixがメッセージを中継することを許可するかどうかには直接影響しません。
メッセージの中継が拒否されたのは、smtpd_recipient_restrictionsのルールにマッチしなかったためです。 メッセージの中継を許可するためには、これらの条件のいずれかが満たされる必要があります。
smtpd_recipient_restrictions =
permit_sasl_authenticated
check_recipient_access hash:/etc/postfix/filtered_domains
permit_mynetworks
reject_unauth_destination
それらのルールを説明すると
permit_sasl_authenticated
は、SASLによる認証済みの送信者を許可します。 これは、通常はブロックされているネットワーク外のユーザーを認証するために必要になります。
check_recipient_access
これにより、postfix は /etc/postfix/filtered_domains で受信者のアドレスに基づくルールを検索します。 (ファイル名に書かれている内容から判断して、おそらく特定のドメインをブロックしているのだと思いますが...。gmail.comがそこに記載されているかどうかチェックしてみてください)
permit_mynetworks
これは、$mynetworksで指定したIP範囲に合致するIPアドレスでホストを許可します。 投稿されたmain.cfでは、$mynetworksが127.0.0.1に設定されているので、サーバー自身が生成したメールのみを中継します。
この設定に基づいて、メールクライアントはメッセージの中継を許可される前にSMTP認証を使用する必要があります。 SASLがどのデータベースを使っているのかわかりません。 おそらく、バーチャルメールボックスと同じデータベースを使用していると思われますので、メールクライアントでSMTP認証を有効にすれば問題ないでしょう。
デフォルトのrelay_domains=$mydestination
では、mydestinationの中にdomain.comが入っていないと思いますので、その行に設定を追加します。
mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain
または
relay_domains = $mydomain
postfix confファイルを編集するたびに、postfixサーバを再起動すること(service postfix restart
)を忘れないでください。