Postfix のセキュリティ対策(基礎編)

メモ:  Category:ubuntu

外部への公開は行わない予定ですが、セキュリティ対策は実施しておきたいと思い少し設定してみました。

EXPN/VRFY コマンドを拒否

SMTP サーバーに接続後、 EXPN コマンドや VRFY コマンドを使うとアカウントの有無やそのユーザー名称など外部から確認することができてしまいます。

実際にコマンドが有効な場合、次のように出力されます。

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 smtp.bnote.hoge ESMTP Postfix
VRFY hogehoge
252 2.0.0 hogehoge
VRFY fugafuga
550 5.1.1 <fugafuga>: Recipient address rejected: User unknown in local recipient table

このコマンドを無効にするには、 main.cf に次の設定を追加します。

disable_vrfy_command = yes

設定後の動作を確認してみます。

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 smtp.bnote.hoge ESMTP Postfix
VRFY hogehoge
502 5.5.1 VRFY command is disabled
EXPN hogehoge
500 5.5.2 Error: command not recognized

サーバーソフト名の非表示

「Postfix で Microsoft 365 経由でメール送信できるようにする( SMTP から SMTP-AUTH )[https://www.bnote.net/ubuntu/postfix_transport.html]」で smtpd_banner を次のように設定しましたが、この設定の場合 SMTP サーバーへ接続すると「 Postfix を使っています 」という応答が返ってきます。

smtpd_banner = $myhostname ESMTP $mail_name

使っているソフトウェアが攻撃のヒントになることもありますので、次の設定で非表示にすることができます。

smtpd_banner = $myhostname ESMTP

HELO コマンドの要求

Postfix では、 HELO (または EHLO ) コマンドを要求するかどうかを設定することができます。デフォルトでは、要求しなくてもよい設定になっているので次の設定を main.cf へ追加します。

smtpd_helo_required = yes

ブラックリストを利用する

不正なサーバーのリストを公開してくれている PBL (The Policy Block List)を利用して送信者制限を行うことができます。

smtpd_client_restrictions =
    permit_mynetworks,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client zen.spamhaus.org,
    permit

また、「 check_client_access 」として拒否するリストを作成し指定することもできます。

smtpd_client_restrictions =
    permit_mynetworks,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client zen.spamhaus.org,
    check_client_access hash:/etc/postfix/reject_client,
    permit

例えば、 reject_client ファイルを次の内容で作成します。

$ sudo # vi /etc/postfix/reject_client

192.168.1.100 REJECT
192.168.1.101 REJECT

作成したファイルをハッシュ化します。

$ sudo postmap /etc/postfix/reject_client

これで作成したファイル内の対象を拒否することができるようになります。

よりセキュリティを高めるには

今回、Postfix の環境を構築したのは SMTP-AUTH に対応していない内部環境のためでした。 外部の環境にさらされるような場合は、 SMTP-AUTH への対応や通信の暗号化などが必要になります。

また、機会があれば勉強してみたいと思います。

bluenote by BBB