xserver
Home クッキー及びWeb ビーコンについて



Postfixによるメールサーバーの構築

Postfix のセキュリティ対策

 ここは単なる私のメモ代わりです(笑)。




■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 を作成し以下の行を追加します。

/^Received:/ IGNORE

header_checks のパーミッションを600にしておきます。

# chmod 600 /etc/postfix/header_checks



■参考

ITmedia エンタープライズ Linux Tips「Postfixで特定拡張子の添付ファイルを拒否させたい」
Postfix の設定 - UCE 制御
Postfixによるspam対策







TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円~30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: