stunnelを利用せずPostfixからSESにリレーしてメール送信

Amazon linuxアップデート後stunnelが起動しない

以前、以下の記事で EC2上のPostfixからSESにリレーしてメール送信する方法をご紹介しました。

PostfixからAmazon SESにリレーしてメール送信

2017年10月頃からAmazon linux でOSをアップデートすると、stunnelが起動しない現象が発生しております。
AWSのフォーラムでも報告されているようです。

After Amaon Linux upgrade, stunnel won’t start in FIPS mode

AWSコンソールにログインしないと見れないかもしれないので抜粋します。

With this week’s OS update (to 2017.09), stunnel won’t start unless I disable FIPS in the configuration file. Here’s the output when fips is implicitly enabled by not saying anything about it in the config file:


Starting SSL tunnels: Clients allowed=500
stunnel 4.56 on x86_64-redhat-linux-gnu platform
Compiled with OpenSSL 1.0.1k-fips 8 Jan 2015
Running with OpenSSL 1.0.1e-fips 11 Feb 2013
Update OpenSSL shared libraries or rebuild stunnel
Threading:PTHREAD Sockets:POLL,IPv6 SSL:ENGINE,OCSP,FIPS Auth:LIBWRAP
Reading configuration from file /etc/stunnel/stunnel.conf
FIPS_mode_set: 2D06C06E: error:2D06C06E:FIPS routines:FIPS_module_mode_set:fingerprint does not match
Line 24: “[section]”: Failed to initialize SSL
str_stats: 6 block(s), 103 data byte(s), 348 control byte(s)
[Failed: /etc/stunnel/stunnel.conf] You should check that you have specified the pid= in you configuration file

It does not appear that the stunnel4 package was updated along with the rest of the packages, and there may be some kind of library mismatch. stunnel/openssl/fips is certainly confused about something.

Any ideas for how to get stunnel running again in FIPS mode?

(Honestly, FIPS-compliance is not super important for me, but it should work in this configuration.)

このエラーが出た場合は、FIPS モードをOFFにすればよいようなのですが、

Adding `fips=no` to each configuration file is “solving” the problem, but OpenSSL really should work in FIPS mode if Amazon is going to advertise their OpenSSL build as FIPS-enabled.

Amazon linux に入っている OpenSSLがFIPSを有効にしてビルドされているようで、stunnelの設定でfipsを無効にしてもトラブルが解消しませんでした。

stunnelを利用せずPostfixからSESへ接続してメール送信

そこで、stunnel を経由しないで直接 Postfix からSESへ接続してメールを送信するようにします。

Postfixをインストールして、mta として指定している前提で以下設定を説明します。

  • /etc/postfix/main.cf に下記を追加
relayhost = 【SESのSMTPサーバー】:587
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
  • /etc/postfix/sasl_passwd を作成
【SESのSMTPサーバー】:587 USERNAME:PASSWORD
  • パスワードDB生成

rootで作業

postmap hash:/etc/postfix/sasl_passwd
chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
  • Postfix再起動
/etc/init.d/postfix restart
  • テストメール送信

送信元アドレスには、SESで認証されたアドレスを指定します。

mail -r 送信元アドレス 送信先アドレス

これで、メールが送信されるようになりました。

以下の記事を参考にさせていただきました。

KUSANAGIのCentOS7環境

# 追記
KUSANAGI の CentOS7 環境では、cyrus-sasl-plain が入っていないので、no mechanism available エラーが発生します。
その場合は以下でcyrus-sasl-plainをインストールします。

sudo yum install cyrus-sasl-plain

コメントを残す

コメントは当サイト運営者の承認後に反映されます。
お名前はニックネームでも結構です。

Comments are allowed only in Japanese. / 日本語が含まれない投稿は無視されますのでご注意ください。