Postfixで特定のIPアドレスやホスト名のアクセスを拒否をする

2023年10月08日 更新

概要: Postfixでhashやregexpを使用したアクセス制御の説明

基本設定

アクセス制御を有効するにあたり、main.cfを編集

$ vi /etc/postfix/main.cf

smtpd_client_restrictions = permit_mynetworks, regexp:/etc/postfix/filename, permit

smtpd_client_restrictions では指定したオプションの順に、要求の可否を判定する。

permit_mynetworks: mynetworksで指定したIPアドレスからの要求は許可

regexp:/etc/postfix/filename: /etc/postfix/filename ファイルで指定したIPアドレスやホスト名から要求の可否を判定する

permit: 上記2つに当てはまらない接続(mynetworksで未指定かつ、reject_senderでも未指定のIPアドレスやホスト名)を許可する

上記の「regexp:」の部分は「hash:」とすることもできる。

hash:/etc/postfix/filename

regexp では正規表現を用いてIPアドレスやホスト名を指定できる。hash は正規表現を用いずにIPアドレスやホスト名を指定するが、その後に postmap コマンドを実行する手順が必要になる。

regexp による設定例

正規表現では「/hostname/」のように半角スラッシュで囲む。ファイル名は reject_sender とした。

$ vi /etc/postfix/reject_sender

/amazonaws\.com$/  REJECT

/^12\.345\.67\.89$/  REJECT

この例の場合、まずホスト名の末尾が amazonaws.com に一致するホストを拒否する設定になっている。 abc.amazonaws.com や 123.amazonaws.com が拒否の対象となる。

次行では、IPアドレスが 12.345.67.89 に完全一致する場合に拒否としている。

hash による設定例

$ vi /etc/postfix/reject_sender

amazonaws.com  REJECT

sub.amazonaws.com  REJECT

12.345.67.89  REJECT

12.345.67  REJECT

12.345.67 は、12.345.67.0/24と同義である。

設定ファイルを書いたら、DBを更新する。

$ postmap /etc/postfix/reject_client

上記のコマンドを実行することで、reject_clientと同じディレクトリに reject_sender.db が生成される。

最後にPostfixの再読み込みを実行

Postfix を再読み込みする。

$ systemctl reload postfix