Postfix のセキュリティ対策(基礎編)
外部への公開は行わない予定ですが、セキュリティ対策は実施しておきたいと思い少し設定してみました。
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 への対応や通信の暗号化などが必要になります。
また、機会があれば勉強してみたいと思います。