As I Please

MTのいんすとーるの練習と、その他びぼうろく・・・

sendmail-8.15.2 .on FreeBSD-9

重力波関連の速報が知りたくて、GCN Circularsのメールを受信しているけど、NASAの シスアドからメールが。

Subject: TLSv1.1-related mail bounces with NASA/GSFC

Hello,

I am a system administrator with the Astrophysics Science Division at NASA/Goddard Space Flight Center.

Due to a directive from the US Department of Homeland Security, I have made a change today to our mail server "capella2.gsfc.nasa.gov" (the mail server for the Gamma-ray Coordinates Network, https://gcn.gsfc.nasa.gov/ ) such that it now blocks TLSv1 and TLSv1.1.

Our logs show entries of the form:
May 10 xx:xx:xx capella2 sendmail[yyyyy]: STARTTLS=client: 11833:error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol:s23_clnt.c:714:
May 10 xx:xx:xx capella2 sendmail[yyyyy]: ruleset=tls_server, arg1=SOFTWARE, relay=, reject=403 4.7.0 TLS handshake failed.

I am not sure what changes might be needed on your side, but I at least wanted to alert you (because otherwise you or your users might have a "why is this suddenly failing" feeling!). I hope this is helpful.

Regards,

David

P.S. In terms of changes needed, you might need to upgrade your mail server software (sendmail, postfix, Exim, etc) to one that can "speak" TLSv1.2 or newer. Your site doesn't need to require TLSv1.2 as a minimum, as we have had to do, but it needs to be an option. Alternatively, you can let us know of a different mail address on your end to use.

と。sendmail のやりとりで TLS1.2じゃないから上げてね、というリクエスト。システムの自動応答かと思ったらどうもそうでもないような。

"US Department of Homeland Security"ってなんだ?と思ったら国土安全保障省 ?ひぇひぇ。こういうところが勧告するですね、アメリカは。
DNSのMXは primary 10,secondary 20にしていたので、通常は primary のメールサーバに来ていたが、このNASAのメールが急に secondary にメールが届くようになったので何事だろうと思っていたらこういうことだったのか。 実はprimary は TLS1.0,1.1は喋るが TLS1.2は対応していないlibssl.soをリンクしてるsendmail で動いていた。secondary はちゃんと TLS1.2を喋る libssl.soだったのでこちらに流れてきていたもののようだ。 openssl はちゃんと入れていたつもりが、sendmail はOS附属の古い libssl.so をリンクしていた。 ということで、古いOSに最新のsendmail + TLS1.2対応の ものを再インストールする必要が。 postfix,eximとかに変えることも一瞬考えるけど、milter系のものやMLソフトの整備を考えると手が出ない。 FreeBSDは、patchなどについては portsのファイルを見るとヒントになることが多いのでそれらを考慮して次のようにおこなった。
  1. まず既存の bin,configのバックアップ
  2. 必要なpatch をあてる。
  3. sendmail の configの作成
  4. compile
  5. install
と言うことで作業。
  1. まず既存のbin,configのバックアップ
  2. sendmail だけではなくて、いくつかのバイナリ・設定ファイルが作られるので、それを調べて見る。 sendmail-8.15.2.tar.gz を展開して srcのトップディレクトリで 'sh ./Build' を実行すると、 "$src/obj.`uname`.`uname -r`.`uname -p'にバイナリ別のディレクトリができる。 具体的には、
    obj.FreeBSD.9.3-RELEASE-p49.amd64
    の下に、
    editmap libsmdb mail.local makemap rmap smrsh
    libsm lbismuitl mailstats praliases sendmail vacation
    が出来た(12ディレクトリ)。
    これらが後にインストールされると思われるので、おのおのバックアップ。

    /usr/local/bin/rmail
    /usr/local/bin/mailstats
    /usr/local/bin/vacation

    /usr/local/sbin/editmap
    /usr/local/sbin/makemap
    /usr/local/sbin/praliases
    /usr/local/sbin/sendmail

    /usr/lcoal/libexec/smrsh
    /usr/local/libexec/mail.local

    libが3つ(libsmdb,libsm,libsmutil)あるがこれらはコンパイル時にstaticにリンクされるようなのでとりあえずこのまま放っておいて良いみたい。
    src/libmilter があるがこれはBuildしても自動では作成されない。sendmail/milter.c があり、sendmailをコンパイルするとkには milter.o がリンクされているのでたぶんこれは sendmailを作成時には不要のよう。3rdパーティのプログラムを使う(かもしれない)ときに libmilter.a,libmilter.so とかでリンクするためにあるようだ。(see $src/libmilter/README)
    これは明示的に 'cd libmilter; sh ./Build; sh ./Build install' で良さそう。

    config系は

    /etc/mail/
    /usr/local/share/sendmail/
    /etc/rc.sendmail

    あたりをバックアップ。
  3. patchをあてる。
  4. ports の mail/sendmail/files/ 以下に patch-xxx がある。これらを当てればいいはず、、だが、ports用のマクロ設定(%%CC%%とかに置き換え等)がありちょっとためらう。特にこのパッチを当てなくても warningが少しでるがcompileはうまくいっているようなので、今回は当てなかった。
  5. configの作成
  6. $src/INSTALL にあるように、 $src/devtools/Site/site.config.m4 を作成する。 site.config.m4.sample があるが、これはほぼ当てにならない。portsの mail/sendmail/files/ の中に site.config.m4の機能別のファイルがあるのでこれらをconcatinate して作るのが正しいかと。このディレクトリにある、site.config.m4に、ipv6,tls,sasl2,milter を今回は追加した。
    dnl
    dnl 0) use site.config.m4
    dnl
    define(`confEBINDIR',`/usr/local/libexec')
    define(`confMANROOT',`/usr/local/man/cat')
    define(`confMANROOTMAN',`/usr/local/man/man')
    define(`confMBINDIR',`/usr/local/sbin')
    define(`confSBINDIR',`/usr/local/sbin')
    define(`confUBINDIR',`/usr/local/bin')
    define(`confNO_STATISTICS_INSTALL',`True')
    define(`confHFDIR', `/usr/local/share/sendmail')
    APPENDDEF(`conf_sendmail_ENVDEF', `-DTCPWRAPPERS')
    APPENDDEF(`conf_sendmail_LIBS', `-lwrap')"
    dnl
    dnl
    dnl 1) use site.config.m4.ipv6
    dnl
    APPENDDEF(`conf_sendmail_ENVDEF', `-DNETINET6')
    APPENDDEF(`conf_libmilter_ENVDEF', `-DNETINET6')
    APPENDDEF(`conf_libsm_ENVDEF', `-DNETINET6')
    dnl
    dnl 2) use site.config.m4.tls
    dnl
    APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -D_FFR_TLS_EC')
    APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')
    dnl
    dnl 3) use site.config.m4.sasl2
    dnl
    dnl APPENDDEF(`conf_sendmail_ENVDEF', `-I%%LOCALBASE%%/include')
    dnl APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL=2')
    dnl APPENDDEF(`confLIBDIRS', `-L%%LOCALBASE%%/lib')
    dnl APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
    APPENDDEF(`conf_sendmail_ENVDEF', `-I/usr/local/include')
    APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL=2')
    APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
    APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
    dnl
    dnl 4) use site.config.m4.milter
    dnl
    APPENDDEF(`conf_libmilter_ENVDEF', `-DMILTER')
    APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')
    dnl
    
  7. compile
  8. $src にて、'sh ./Build'
  9. install
  10. $srcにて、'sh ./Build install'
元々 8.15.2 用で使っていた sendmail.cf はそのまま使えた。 これで TLS1.2も話す sendmail になったか。

ps.1
某日、STARTTLSを使ってちゃんとTLSで接続してくるメールを見てみたらいろいろあったので メモ。
クライアント証明書つきのTLS通信(但し認証(verify)はもちろんしていない)
  • NASA
  • Google (Gmailの転送)
  • SwarovskiのML
  • T-PointのML
  • オレオレCA証明書で発行したクライアント証明書を使っているMTA
ただの TLS通信。転送路は TLSのようだが特に認証無し。
  • shopify の広告DM
  • SBIのDairy mail
  • Land's Endの広告DM
  • 東洋経済のML
  • トクバイのML
  • キタムラのML
  • ホンダのML
  • DMMからのメール
  • JustsystemからのML
  • AmazonからのDM
  • GU(ユニクロ)からのML
  • みずほ銀行からのDM
  • OpenHouseからのDM
  • GMOからのML
  • EXPANSYSからのML
  • MoneyforwardからのML
  • JTBからのML
  • Generate DesginからのML
  • Wealthnavi からのML
  • QNAP からのML
  • Nature RemoからのML
  • furusat taxからのML
  • IPCamのメール通知クライアント(sasl認証)
単に forged なだけか、おかしな通信
  • security.criminalip.com
  • ninja.census.shodan.io
  • わざわざ SSL3.0,TLS1.0,TLS1.1,TLS1.2と繋がるか調べにやってきてる。
  • bezeqint.net
今後は sendmailもクライアント接続してくる側も証明書呈示するようになっていくんですかね。 とりあえず、うちも STARTTLSで接続したときに let's encryptあたりの証明書を呈示するようにしておいてみるか?

ps.2
TLS1.2対応になったことを、NASAのシスアドに連絡してみたところ、返答が。

I am glad to hear it is working for you once again!

Yes, I can see the moment in our logs when it got fixed:

Here is the last line of failure and the first line of success:

May 11 xx:xx:xx capella2 sendmail[15971]: ruleset=tls_server, arg1=SOFTWARE, relay=aaa.bbb.ccc, reject=403 4.7.0 TLS handshake failed.

May 11 yy:yy:yy capella2 sendmail[15971]: STARTTLS=client, relay=aaa.bbb.ccc., version=TLSv1.2, verify=FAIL, cipher=ECDHE-RSA-AES128-GCM-SHA256, bits=128/128

Thanks,

David


わざわざ丁寧にありがとう。

コメントする