yahoo.co.jpのメールサーバは管轄ドメイン外でもメールが送れてしまう?

メールシステムを新しくしたのでメールログを監視中。

そんななか不審なものが・・・

Aug  9 07:48:48 サーバ名 postfix/smtpd[7394]: NOQUEUE: reject: RCPT from mta094.mail.bbt.yahoo.co.jp[182.22.12.65]: 450 4.1.8 <glfruwj@zrbzzfmaewphpyi.jp>: Sender address rejected: Domain not found; from=<glfruwj@zrbzzfmaewphpyi.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta094.mail.bbt.yahoo.co.jp>

Aug  9 07:55:19 サーバ名 postfix/smtpd[7394]: NOQUEUE: reject: RCPT from mta008.mail.bbt.yahoo.co.jp[182.22.12.11]: 450 4.1.8 <fvawxvd@6vo07bbmyz8wa8d.jp>: Sender address rejected: Domain not found; from=<fvawxvd@6vo07bbmyz8wa8d.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta008.mail.bbt.yahoo.co.jp>

yahoo.co.jpのメールサーバを使って、SPAMドメインからのメールを配信しようとしている形跡が・・・

え・・・自社ドメイン以外でも送れる設定にしてるんですか!?

もしかして、Yahooショッピングのテナントが、それぞれ自社ドメインで送れるようにそうなってるんですかね?

さすがに送信時にSMTP AUTHをしていないとは思えないし、いったいどういう処理をしてるんだかなぁ・・・


2019/06/18追記

今日も元気に、mta???.mail.bbt.yahoo.co.jpやmta???.mail.djm.yahoo.co.jpから存在していないドメインがFromに設定されているSPAMメールが送信中です。

[root@サーバ名 ~]# grep "NOQUE" /var/log/maillog|grep yahoo.co.jp|grep "Domain not"
<略>
Jun 18 14:25:52 サーバ名 postfix/smtpd[31047]: NOQUEUE: reject: RCPT from mta009.mail.bbt.yahoo.co.jp[182.22.12.12]: 450 4.1.8 <nmroofhyu@wqk5z43zgjb5y.net>: Sender address rejected: Domain not found; from=<nmroofhyu@wqk5z43zgjb5y.net> to=<宛先メールアドレス> proto=SMTP helo=<mta009.mail.bbt.yahoo.co.jp>
Jun 18 14:35:29 サーバ名 postfix/smtpd[32576]: NOQUEUE: reject: RCPT from mta718.mail.djm.yahoo.co.jp[183.79.16.21]: 450 4.1.8 <kqqtlikg@pxnfykriyoxywkrdum.jp>: Sender address rejected: Domain not found; from=<kqqtlikg@pxnfykriyoxywkrdum.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta718.mail.djm.yahoo.co.jp>
[root@サーバ名 ~]# grep "NOQUE" /var/log/maillog|grep yahoo.co.jp|grep "Domain not"|wc
     66    1518   20892
[root@サーバ名 ~]#

2020/09/23追記

yahoo.co.jpが発信源のSPAMメールは2年経過した2020年になっても止まることはありません。

Sep 23 11:05:00 サーバ名 postfix/smtpd[26185]: NOQUEUE: reject: RCPT from mta094.mail.bbt.yahoo.co.jp[182.22.12.65]: 450 4.1.8 <uhspranbsbt@rjw7zascoh.ne.jp>: Sender address rejected: Domain not found; from=<uhspranbsbt@rjw7zascoh.ne.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta094.mail.bbt.yahoo.co.jp>
Sep 23 11:07:22 サーバ名 postfix/smtpd[26185]: NOQUEUE: reject: RCPT from mta767.mail.djm.yahoo.co.jp[183.79.16.42]: 450 4.1.8 <rxrggxjnx@zinjuepwicmfrsi.jp>: Sender address rejected: Domain not found; from=<rxrggxjnx@zinjuepwicmfrsi.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta767.mail.djm.yahoo.co.jp>
Sep 23 12:24:50 サーバ名 postfix/smtpd[3025]: NOQUEUE: reject: RCPT from mta027.mail.bbt.yahoo.co.jp[182.22.12.30]: 450 4.1.8 <cxlpsqtzz@ukmpvasugqpahrvi.jp>: Sender address rejected: Domain not found; from=<cxlpsqtzz@ukmpvasugqpahrvi.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta027.mail.bbt.yahoo.co.jp>
Sep 23 12:44:53 サーバ名 postfix/smtpd[8648]: NOQUEUE: reject: RCPT from mta750.mail.djm.yahoo.co.jp[183.79.16.149]: 450 4.1.8 <info@mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.depolarised.racing>: Sender address rejected: Domain not found; from=<info@mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.depolarised.racing> to=<宛先メールアドレス> proto=SMTP helo=<mta750.mail.djm.yahoo.co.jp>
Sep 23 12:47:21 サーバ名 postfix/smtpd[8648]: NOQUEUE: reject: RCPT from mta767.mail.djm.yahoo.co.jp[183.79.16.42]: 450 4.1.8 <rxrggxjnx@zinjuepwicmfrsi.jp>: Sender address rejected: Domain not found; from=<rxrggxjnx@zinjuepwicmfrsi.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta767.mail.djm.yahoo.co.jp>
Sep 23 13:11:39 サーバ名 postfix/smtpd[13453]: NOQUEUE: reject: RCPT from mta094.mail.bbt.yahoo.co.jp[182.22.12.65]: 450 4.1.8 <uhspranbsbt@rjw7zascoh.ne.jp>: Sender address rejected: Domain not found; from=<uhspranbsbt@rjw7zascoh.ne.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta094.mail.bbt.yahoo.co.jp>
Sep 23 14:38:13 サーバ名 postfix/smtpd[28617]: NOQUEUE: reject: RCPT from mta750.mail.djm.yahoo.co.jp[183.79.16.149]: 450 4.1.8 <info@mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.depolarised.racing>: Sender address rejected: Domain not found; from=<info@mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.depolarised.racing> to=<宛先メールアドレス> proto=SMTP helo=<mta750.mail.djm.yahoo.co.jp>
Sep 23 14:40:51 サーバ名 postfix/smtpd[28617]: NOQUEUE: reject: RCPT from mta767.mail.djm.yahoo.co.jp[183.79.16.42]: 450 4.1.8 <rxrggxjnx@zinjuepwicmfrsi.jp>: Sender address rejected: Domain not found; from=<rxrggxjnx@zinjuepwicmfrsi.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta767.mail.djm.yahoo.co.jp>
Sep 23 15:11:29 サーバ名 postfix/smtpd[2026]: NOQUEUE: reject: RCPT from mta027.mail.bbt.yahoo.co.jp[182.22.12.30]: 450 4.1.8 <cxlpsqtzz@ukmpvasugqpahrvi.jp>: Sender address rejected: Domain not found; from=<cxlpsqtzz@ukmpvasugqpahrvi.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta027.mail.bbt.yahoo.co.jp>
Sep 23 15:31:39 サーバ名 postfix/smtpd[3799]: NOQUEUE: reject: RCPT from mta094.mail.bbt.yahoo.co.jp[182.22.12.65]: 450 4.1.8 <uhspranbsbt@rjw7zascoh.ne.jp>: Sender address rejected: Domain not found; from=<uhspranbsbt@rjw7zascoh.ne.jp> to=<宛先メールアドレス> proto=SMTP helo=<mta094.mail.bbt.yahoo.co.jp>

postfixを使用したiredmailで他サーバで送信された自ドメインメールが受信拒否される

メールサーバをpostfix/dovecotをベースとしたiredmailというメールシステムに置き換えた。
そうしたところ、いままでは出来ていた他にあるWebサーバ上から送信した自ドメイン宛のメールが送れなくなってしまった。

ログを確認すると以下のようになっている。

Aug  2 16:36:25 ホスト名 postfix/smtpd[4994]: NOQUEUE: reject: RCPT from 送信元ホスト名[IPアドレス]: 554 5.7.1 <宛先メールアドレス>: Recipient address rejected: SMTP AUTH is required for users under this sender domain; from=<差し出しメールアドレス> to=<宛先メールアドレス> proto=SMTP helo=<送信元ホスト名>

SMTP AUTHを要求している。

公式ドキュメントに「Recipient address rejected: SMTP AUTH is required for users under this sender domain」という記載がある。
しかし、ここで書かれている下記のMYNETWORKS設定はどちらかというと内部ネットワーク向けの設定である。

MYNETWORKS = ['192.168.0.10', '192.168.0.20', '192.168.0.30']

もうちょっとなんとかならないかなぁ、と探したところフォーラムにQAを発見。
SMTP AUTH is required for users under this sender domain (Mailing list

/opt/iredapd/settings.py に「CHECK_SPF_IF_LOGIN_MISMATCH = True」を追加して、iredapd.serviceを再起動しろ、というもの。

この設定を行うと、DNSのSPFに登録してあるサーバから送信されたメールはSMTP AUTHを要求しなくなるようだ。

これを設定してみたところ、問題は解決したようだ。

vpopmail代替としてのpostfix+dovecotメールサーバ環境iRedMail

vpopmail+qmailを使って複数ドメインのメールサーバを運用していた。
さすがにきつくなってきたので乗り換え先をいろいろ検討していた。

・いままで使っていたパスワードが継続できること
 (元の平文パスワードは不明で、MySQL上のvpopmailにあるパスワード文字列を引き継げること)
・POP3 before SMTPは廃止する
・とりあえず20ドメインぐらいあり、各ドメインのユーザは20個程度
・Maildir形式のメールデータは移行する
・Web UIでメールアカウントを作成できること
・無償版の範囲であること

いろいろ探した結果、「iRedMail」を乗り換え先として選定した。

vpopmailとiRedMail無償版を比較した場合、機能が足らない点は以下である。
・各ドメイン内の管理者ユーザが使用できない
  全体管理者と一般ユーザの2種類のみが使用できる
  ドメイン内の管理者ユーザは有償版の機能
・エイリアスはWeb UIで管理できない
  有償版での機能
  手動でMySQL DB上に設定を入れることでエイリアスを使用することはできる
  (Set mail forwarding with SQL command line)
・メーリングリストをWeb UIで管理できない
  有償版での機能
  mlmmjベースであるため手動で設定することはできる
・アップデートが面倒
  無償版だと手動でいろいろ設定しつつアップデートを行う必要がある。

ドメイン内管理者が使用できないというところが痛いが、必須要素ではないため、目をつぶった。

新しい利点として
・Exchange対応
  POP3/IMAPだけでなく「SOGo」というExchange互換サーバ機能を利用できる
  カレンダー(CalDAV)、住所録(CardDAV)も対応
・WebMailが2種類使える
  「Roundcube」と「SOGo」の2種類のWebMailが使える
・SMTP AUTH対応
・LetsEncryptによるSSL対応
 「Use a SSL certificate
・DKIM対応
 「Sign DKIM signature on outgoing emails for new mail domain

設定は、初期インストール直後のCentOS 7/Ubuntuなどで「iRedMail」公式からファイルをダウンロードして、インストールスクリプトを実行するだけで良い。

インストールスクリプト実行完了後に、初期の設定パスワードなどを記載したファイルを出力するので、どこか別の場所に保存しておく必要がある。

インストール後、「postfix/dovecotメールサーバでWindows Live Mail 2012がエラーになる」に記載した設定は行った方が良い。

また、今後、パッケージのアップデートを行う場合は「php.iniを変更せずにdisable_functionsの内容を無効化してroundcubeのアップグレードスクリプトを動作させる方法」の知識が必要になる。

なお、実際に切り替えてみると、Windows Live Mail 2012ユーザでは問題が発生した。
Windows Live Mail 2012の場合、同じパスワードであってもパスワードの設定をやり直さなければ認証エラーとなる仕様であるようだ。

php.iniを変更せずにdisable_functionsの内容を無効化してroundcubeのアップグレードスクリプトを動作させる方法

/etc/php.iniでdisable_functionsに「system」を含めている場合、roundcubeのアップグレードを行う時に「./bin/installto.sh /var/www/roundcube」を実行すると、エラーとなってしまう。

# ./bin/installto.sh /var/www/roundcubemail
Error 500: PHP system() function is required. Check disable_functions in php.ini.
#

これは、/etc/php.ini内の「disable_functions 」設定で「system」が記載されていることにより使用できないために発生している。

/etc/php.iniの disable_functionsを修正してしまえば動くようになりますが、アップデートのたびに変更して、アップデートが終わったら元に戻すのは面倒です。

/etc/php.iniを変更するのではなく、一時的に回避するための手法を検討した結果・・・

「php -d disable_functions=”” ./bin/installto.sh /var/www/roundcubemail」と実行することで、disable_functionsの設定に関して無視して実行することができました。

# php -d disable_functions="" ./bin/installto.sh /var/www/roundcubemail
<略>

これで、/etc/php.iniを編集しなくともアップデートができるようになりました。

postfix/dovecotメールサーバでWindows Live Mail 2012がエラーになる

qmail+vpopmailという古代の環境から、postfix/dovecotのiredmailメールサーバに移行した。
移行の詳細については別途記事にしますが、移行後、Windows Live Mail 2012ユーザからクレームが・・・

POP3で受信ができないという

原因は、Windows Live Mail 2012のPOP3アクセス機能が古い、という点に尽きる。
対処するにはサーバ側でセキュリティを弱める設定を入れる必要があった。

2020/09/10追記 その1については、iredmail公式にも「Allow insecure POP3/IMAP/SMTP connections without STARTTLS」という形で対処方法が記載された。

その1:POP3受信時にエラー

/var/log/dovecot/pop3.log に下記のログ

Feb 19 10:35:59 oflex-1096-1 dovecot: pop3-login: Disconnected (tried to use disallowed plaintext auth): user=<osakana@example.net>, rip=xxx.xxx.xxx.xxx, lip=xxx.xx.x.xxx, session=<brxUt4ZlTfPbavEx>

→ dovecotの「ssl = required」と「disable_plaintext_auth = yes」の設定により発生
これを「ssl = yes」と「disable_plaintext_auth = no」に変更することで対処できる

設定箇所は下記の3ファイル

/etc/dovecot/dovecot.conf ではsslとdisable_plaintext_authの双方が設定されている可能性がある
/etc/dovecot/conf.d/10-auth.conf ではdisable_plaintext_authが設定されている可能性がある
/etc/dovecot/conf.d/10-ssl.conf ではsslが設定されている可能性がある

3ファイルをそれぞれ確認して修正すること

うちの環境ではssl=requriedがdovecot.confと10-ssl.confの双方で設定されていたが、
10-ssl.confしか認識しておらずいくら設定しても反映されないと悩んだ。

その2:SMTP送信時にエラー1

/var/log/maillog に下記のログ

Feb 19 10:41:49 mailserver.osakana.net postfix/smtpd[8343]: NOQUEUE: reject: RCPT from clienthostname.osakana.net[xxx.xxx.xxx.xxx]: 504 5.5.2 <clienthostname>: Helo command rejected: need fully-qualified hostname; from=<osakana@osakana.net> to=<osakana@example.com> proto=ESMTP helo=<clienthostname>

→postfixの「smtpd_helo_restrictions」で「reject_non_fqdn_helo_hostname」が設定されているため発生

まずは、現在値確認

# postconf smtpd_helo_restrictions
smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated check_helo_access pcre:/etc/postfix/helo_access.pcre reject_non_fqdn_helo_hostname reject_unknown_helo_hostname
#

変更前の /etc/postfix/main.cf の該当部分を確認

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
    reject_non_fqdn_helo_hostname
    reject_unknown_helo_hostname

変更後の /etc/postfix/main.cf の該当部分

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
    reject_unknown_helo_hostname
#    reject_non_fqdn_helo_hostname

postconfを実行して、変更されたことを確認

# postconf smtpd_helo_restrictions
smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated check_helo_access pcre:/etc/postfix/helo_access.pcre reject_unknown_helo_hostname
#

その3:SMTP送信時にエラー2

/var/log/maillog に以下のログ

Feb 19 11:04:48 mailserver.osakana.net postfix/smtpd[11966]: NOQUEUE: reject: RCPT from clienthostname.osakana.net[xxx.xxx.xxx.xxx]: 450 4.7.1 <clienthostname>: Helo command rejected: Host not found; from=<osakana@osakana.net> to=<osakana@example.com> proto=ESMTP helo=<clienthostname>

→postfixの「smtpd_helo_restrictions」で「reject_unknown_helo_hostname」が設定されているため発生

変更前の値はエラー1と同じなのでここでは省略

変更後の /etc/postfix/main.cf の該当部分

# HELO restriction
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    check_helo_access pcre:/etc/postfix/helo_access.pcre
#    reject_non_fqdn_helo_hostname
#    reject_unknown_helo_hostname

コメントアウト記述が2つに増えただけですね。

その4:SMTP送信時にエラー3

/var/log/maillog に以下のログ

Feb 19 11:07:08 mailserver.osakana.net postfix/smtpd[12710]: NOQUEUE: reject: RCPT from clienthostname.osakana.net[xxx.xxx.xxx.xxx]: 454 4.7.1 <osakana@example.com>: Relay access denied; from=<osakana@osakana.net> to=<osakana@example.com> proto=ESMTP helo=<clienthostname>

これは単純にテスト用にセットアップしたアカウントがSMTPポート25を使っていたせいで失敗していた。
ポート587に変更したら成功