Amazon linuxアップデート後stunnelが起動しない
以前、以下の記事で EC2上のPostfixから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