■EXPN/VRFYコマンドを拒否する
EXPN コマンドによってシステムアカウントの有無を確認することができます。また、VRFYはメールアカウントが存在するかどうかを確認するもので存在していればそのユーザー名を表示します。EXPN、VRFYを使うとアカウントの情報が外部から容易に確認することができてしまうので、このような情報はできるなら表示させないようにします。以下は、VRFY
コマンドを使ってkororoというユーザーが存在するかどうか確認した例です。
# telnet localhost
25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.kororo.jp ESMTP Postfix
EHLO localhost
250-mx.kororo.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN OTP DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN OTP DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
VRFY kororo
252 kororo |
|
EXPN/VRFY コマンドを無効にするには、以下の行を追記します。
disable_vrfy_command
= yes |
|
■Postfix のバージョンを非表示にする
以下のようになっている行のコメントを削除することでPostfix のバージョンを非表示にすることができます。$mail_nameを削除してPostfix
の名前すら表示させないようにすることも可能です。
smtpd_banner = $myhostname
ESMTP $mail_name |
|
■ブラックリストの利用
smtpd_client_restrictions では、送信者制限を行うことができます。自ネットワークは許可しておき、ブラックリストに登録された送信元からのメールは拒否するように設定しておきます。なお、受信者制限は、smtpd_recipient_restrictionsで行います。ここでは、中国・韓国(cn-kr)、ブラジル(brazil)、ロシア(russia)からのブラックリストに登録された宛先からのメールは全て拒否します。check_client_access
では、ブラックリストに登録されていないIPアドレスからのメールを拒否する際に必要となる記述です(後述)。
(Postfix2 用のmain.cf )
smtpd_client_restrictions
=
permit_mynetworks,
reject_rbl_client relays.ordb.org,
reject_rbl_client spamcop.net,
reject_rbl_client dynablock.wirehub.net,
reject_rbl_client opm.blitzed.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client cn-kr.blackholes.us,
reject_rbl_client brazil.blackholes.us,
reject_rbl_client russia.blackholes.us
check_client_access hash:/etc/postfix/reject_client,
reject_unknown_client, //逆引きができないホストの接続を拒否
permit |
|
(Postfix1用のmain.cf)
maps_rbl_domains
= relays.ordb.org
smtpd_recipient_restrictions = reject_maps_rbl
|
|
■/etc/postfix/reject_clientで送信元クライアント(IPアドレス)による制限
/etc/postfix/reject_clientは、ブラックリストには登録されていないIPアドレスを直接指定して受信を拒否するためのファイルです。デフォルトでは用意されていないので作成しておきましょう。
# vi/etc/postfix/reject_client
192.168.0.100 REJECT
192.168.10 REJECT |
|
上記の設定を反映させるためにpostmap を実行します。postmap を実行すると、reject_client.db
というDBファイルが作成されるので、そのDBをPostfix に読み込ませるためにリロードを実行しておきましょう。
# /usr/sbin/postmap
/etc/postfix/reject_client
# ls -la /etc/postfix/reject_client.db
-rw-r--r-- 1 root root 12288 Jul 21
16:21 /etc/postfix/reject_client.db
# postfix reload |
|
■/etc/postfix/reject_senderで送信元ドメインによる制限
smtpd_sender_restrictions パラメータは MAIL FROM コマンドの送信者アドレスを制限します。
reject_unknown_sender_domainは、送信者メールアドレスが DNS A または
MX レコードを持たない場合に、要求を拒否します。reject_non_fqdn_sender は、クライアントの
MAIL FROM コマンドのアドレスが FQDN 形式でない場合に要求を拒否します。
# vi /etc/postfix/main.cf
smtpd_sender_restrictions =
hash:/etc/postfix/reject_sender
reject_unknown_sender_domain,
reject_non_fqdn_sender |
|
/etc/postfix/reject_senderを作成し、制限したいドメインを記述します。その後、postmap
を実行し、hash を作成します。postfix をリロードさせて設定を反映させます。
# vi /etc/postfix/reject_sender
spam@spam.com REJECT
spam.org REJECT
# ls -la /etc/postfix/reject_sender.db
-rw-r--r-- 1 root root 12288 Jul 21
16:47 /etc/postfix/reject_sender.db
# postfix reload |
|
■HELO コマンドの要求
smtpd_helo_required パラメータは、SMTP セッションのはじめに
HELO
(または
EHLO) コマンドを要求するかどうかをクライアントに対して決定します。デフォルトでは、「no」に設定されており、HELOコマンドの使用を要求しません。HELOコマンドを要求するようにしておくことで止めることができるスパムメールもありますので、「yes」に設定しておきましょう。
smtpd_helo_required
= yes |
|
また、HELO (EHLO) ホスト名を制限するために以下の記述も追加しておきます。reject_invalid_hostname
は、クライアントの HELO もしくは EHLO パラメータに間違った文法のホスト名があった場合に要求を拒否します。
smtpd_helo_restrictions
=
permit_mynetworks,
check_helo_access hash:/etc/postfix/ok-ips,
reject_invalid_hostname,
reject_unknown_hostname,
reject_non_fqdn_hostname,
permit |
|
※
トラブルシューティング
smtpd_helo_restrictions パラメータで reject_unknown_hostname
等がある場合、HELOで渡すホスト名とDNSの実際のホスト名が違う場合に受信を拒否することができます。しかし、HELO
ホスト名がDNSのホスト名と異なるホストは意外と多いようなので、このパラメータを設定することで必要なメールまでREJECTされてしまう可能性もあります。その場合は、
/etc/postfix/ok-ipsというファイルを作成し、その中に「
xxx.yyy.zzz.aaa
OK」という1行を記述をしてあげればそのホストからのメールは受信することができるようになります。下記のSyslog
例では、実際のホスト名が「proxy.aaa.jp」なのにHELOは「alor.aaa.jp」を渡していますのでメールを受信することができなくなっています。実際に受信したメールのヘッダを閲覧してみると、「
Received:
from」の箇所にproxy.aaa.jp とalor.aaa.jp の2通りの記述が見られると思います。
例)Reject されてしまう例
# tail -1000 /var/log/maillog
| grep -i reject
Jul 23 11:00:40 ns1 postfix/smtpd[4516]:
56FE42EB09: reject: RCPT from proxy.aaa.jp[210.aaa.228.30]:
450 <alor.aaa.jp>: Helo
command rejected: Host not found;
from=<info@aaa.jp> to=<kororo@kororo.jp>
proto=ESMTP helo=<alor.aaa.jp> |
|
なお、このHELO ホスト名の値を変更するには、main.cf に「smtp_helo_name」のパラメータを付加してあげます。デフォルトでは$myhostnameに設定されています。
# postconf -v | grep
helo_name
smtp_helo_name = $myhostname
# vi /etc/postfix/main.cf
smtp_helo_name = abcd.kororo.jp
# postfix reload |
|
■サイズ制限
ひとりあたりのメールボックスの最大サイズ(デフォルト:10MB)を制限します。
mailbox_size_limit
= 1024000 |
|
エンベロープ情報 (送信者、受信者など) を含めた、Postfix キューファイルの最大サイズの制限。
message_size_limit
= 1024000 |
|
■Received ヘッダの削除
main.cf を編集して、「header_checks = regexp:/etc/postfix/header_checks」を有効にします。その後、/etc/postfix/header_checks
を作成し以下の行を追加します。
header_checks のパーミッションを600にしておきます。
# chmod 600 /etc/postfix/header_checks |
|
■参考
ITmedia
エンタープライズ Linux Tips「Postfixで特定拡張子の添付ファイルを拒否させたい」
Postfix
の設定 - UCE 制御
Postfixによるspam対策