LoginSignup
3
3

More than 5 years have passed since last update.

PostfixでSMTP AUTHの利用を許可するIPアドレスを指定する方法

Last updated at Posted at 2018-06-01

はじめに

某大学でメールサーバを運用してます。

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を実現している場合のみです。

/etc/postfix/main.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

上記の環境に該当する場合は、次の方法でSMTP AUTHが利用可能なIPアドレスを制限できます。

Dovecotに以下のような記述をします。学内のIPアドレスを a.b.0.0/16 とします。pamを使っているとします。

/etc/dovecot/conf.d/auth-system.conf.ext
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は動作未確認。)

/etc/postfix/main.cf
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で表示抑制しても意味なかった。

最後に

ここで述べている方法は設定失敗すると正規利用者のメールの送信ができなくなるため、かならず動作確認お願いします。他のところではうまく動作しないかもしれませんので。

以上です。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3