はじめに
某大学でメールサーバを運用してます。
CentOS7.x/postfixで運用しているメールサーバに以下のようなSMTP AUTHに対する辞書攻撃のログが多数残っていました。
May 31 19:34:22 mail postfix/smtpd[6594]: warning: unknown[x.x.x.x]: SASL PLAIN authentication failed:
Jun 1 01:28:55 mail postfix/smtpd[9517]: warning: unknown[x.x.x.x]: SASL LOGIN authentication failed: XXXXX
うざいのでSMTP AUTHを使えるIPアドレスを限定したいと思いました。
SMTP AUTHからの正規アクセスがあるのは、某大学の学内ネットワーク限定です。学外からは辞書攻撃です。
まぁこんな環境ならsubmission(TCP/587)とか使えと思われるかもしれませんが、歴史的にsmtp(TCP/25)のままの方が多くて。。。また学内を無条件でリレー許可してSMTP AUTHやめればという意見もありかもしれませんが、ウイルスなどの感染によるメールのバラマキも考えられます。)
なんか良い方法がないかと思って探したらDovecotの設定が使えるようです。
https://wiki2.dovecot.org/PasswordDatabase/PAM
PAM - Pluggable Authentication Modules
-> Restrict IP-Addresses allowed to connect via PAM
この設定はSMTP AUTH認証をDovecotに代行させている場合のみ使えます。具体的には/etc/postfix/main.cfに以下のような記述をしてSMTP AUTHを実現している場合のみです。
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
上記の環境に該当する場合は、次の方法でSMTP AUTHが利用可能なIPアドレスを制限できます。
Dovecotに以下のような記述をします。学内のIPアドレスを a.b.0.0/16 とします。pamを使っているとします。
passdb {
driver = pam
# [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
# [cache_key=<key>] [<service name>]
#args = dovecot
override_fields = allow_nets=127.0.0.0/8,::1/128,fe80::/64,a.b.0.0/16
# 上記を加筆
}
上記の設定でSMTP AUTHがIPアドレスa.b.0.0/16 からのみ認証に成功するようになります。それ以外のIPアドレスからはSMTP AUTHが常に認証に失敗します。(注意:職場はIPv6が使えないためIPv6は動作未確認。)
具体的に認証に成功するかしないかはtelnetコマンドでSMTP AUTHの動作確認をしてみてください。
http://d.hatena.ne.jp/toshi_hirasawa/20111124/1322134634
smtp-auth メモ (telnetでEHLO)
なお、多くの環境ではSMTP AUTHはSSLで通信しているときのみ可能です。その場合はtelnetを以下のように替えてください。
openssl s_client -connect メールサーバのサーバ名:25 -starttls smtp -ign_eof
smtpd_sasl_exceptions_networks
上記のtelnetコマンドを使ったSMTP AUTHの動作確認ですが、EHLOコマンドを叩くとどのIPアドレスからでもSMTP AUTHが利用可能である旨の表示がされます。AUTH PLAIN.. のところです。これはDovecotでSMTP AUTHを禁止したIPアドレスからでもSMTP AUTHが利用可能であると表示されます。
$ telnet hoghehoge 25
EHLO クライアント名
250-メールサーバ名
250- (省略)
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250- (省略)
250 DSN
このAUTH PLAIN .. の表示を抑制したいと考えました。
マニュアルを探すとpostfixに smtpd_sasl_exceptions_networks というのがありました。この命令はSMTL AUTHの利用可であるという表示を抑制する命令です。 (注意:表示が抑制されるだけです。SMTP AUTHは受け付けます。ただし認証の可否はDovecotの設定によります。)
http://www.postfix.org/postconf.5.html#smtpd_sasl_exceptions_networks
本当ならSMTP AUTHを許可するIPを指定する命令があったらうれしかったのですが。
ですがマニュアルを読むと 「!」 で否定がかけるようです(^_^)
なら、SMTP AUTを許可するIPアドレスを!で否定し、最後にすべてのIPアドレスからのSMTP AUTHの表示を抑制したら期待した挙動になるのではないか?
試してみた。
学内のIPアドレスを a.b.c.d/16 とします。学内のIPアドレスを!で否定します。最後にすべてのIPアドレスを示す 0.0.0.0/0 を記載します。またIPv6関連の同様の記述を行います。(注意:職場はIPv6が使えないためIPv6は動作未確認。)
smtpd_sasl_exceptions_networks = !127.0.0.0/8, ![::1]/128, ![fe80::]/64, !a.b.0.0/16, [::]/0, 0.0.0.0/0
これで試したところ、なんかうまくいってるっぽいです。
辞書攻撃は賢くなかった
EHLO命令でSMTP AUTHの利用可能である旨を表示させない設定をした翌日、メールのログを確認したらSMTP AUTHの辞書攻撃がやっぱり記録されていました。。。
これは!辞書攻撃はEHLO命令の出力など確認せず無条件にやってやがる!!
EHLOで表示抑制しても意味なかった。
最後に
ここで述べている方法は設定失敗すると正規利用者のメールの送信ができなくなるため、かならず動作確認お願いします。他のところではうまく動作しないかもしれませんので。
以上です。