スパム対策として今まで特定の国からのパケット破棄・Rgrey(S25R + greylisting)でしたが、今回はtaRgrey(S25R + tarpitting + greylisting)でスパム対策することにしました。
※RgreyやtaRgreyについての説明は省きます。詳しくはこちらを参照してください。
アンチウイルス等ファイアウォールについてはFortiGateで行うためここでは考慮しません。
ハードウェア
- 本体:Dell PowerEdge R610
- CPU:Intel(R) Xeon E5502(1.86GHz)
- メモリ:4GB(DDR3 2GB×2)
- HDD:146GB×2 RAID1構成(2.5インチSAS 10000RPM) ※ホットプラグ対応
- 電源:717W
- OS:CentOS-5 (5.4)
- SMTP:Postfix(2.3.3)
- POP:Dovecot(1.0.7) ※IMAP対応
- その他:Postgrey(1.32)
# mkdir /etc/skel/Maildir
# chmod 700 /etc/skel/Maildir
※初回送受信時にMaildirの配下にNew(新着メール)、Cur(既読メール)、Tmp(配送中メール)が作られます。
Postfixのインストール
# yum install postfix
設定ファイル編集(変更や追記部分のみ表記)
# vi /etc/postfix/main.cf
FQDN形式でのホスト名(DNSで名前解決できるもの)
myhostname = mail.exsmple.com
自身のドメイン名
mydomain = exsmple.com
ローカルから発せられるメールのUserName@以降に付与
myorigin = $myhostname
待ち受けるネットワーク(ローカル、LANなど全て)
inet_interfaces = all
ローカルで受信するドメイン名およびそのサブドメイン(必要に応じてカンマ区切りで追記)
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, www.$mydomain
ローカルで受信するユーザの存在マッピング
local_recipient_maps = unix:passwd.byname $alias_maps
ローカルのユーザが存在しないときのエラー
※安定するまで450(再送信依頼)で対応、その後は550(存在しません)で拒否するのがよい。
450で返すと正常なMTAは30分後ぐらいに送信してくる。
unknown_local_recipient_reject_code = 450
権限の与えられるクライアントネットワーク定義(接続や中継を許可するなどに利用)
mynetworks = 10.1.0.0/16, 127.0.0.0/8
メールのリレーを許可するドメインおよびそのサブドメイン
relay_domains = $mydestination
メールボックスの形式
home_mailbox = Maildir/ ※スラッシュを付け忘れないこと
ヘッダチェックなどの制限等をする定義ファイル(後でheader_checksファイルを編集)
header_checks = regexp:/etc/postfix/header_checks
メールサーバソフトの隠蔽化
smtpd_banner = ESMTP unknown
ここまでが基本設定となります。
このままでも稼動させることができますが、セキュリティ強化の設定を追記していきます。
vrfyコマンドを無効(ユーザが存在するかどうか問い合わせをさせない)
disable_vrfy_command = yes
HELO(EHLO)コマンドで自己紹介を要求(ホスト名を通知しない接続を拒否する)
smtpd_helo_required = yes
RFC821の形式に合わないアドレスは拒否
strict_rfc821_envelopes = yes
HELOコマンドの場面で適用される制限
smtpd_client_restrictions =
permit_mynetworks mynetworksで定義したネットワークは許可
reject_rbl_client bl.spamcop.net 外部ブラックリストに登録されている接続先は拒否
permit それ以外は許可
SMTP HELO(EHLO)コマンドの場面で適用される制限
smtpd_helo_restrictions =
permit_mynetworks mynetworksで定義したネットワークは許可
reject_unknown_hostname ホスト名のDNSでAまたはMXレコードない場合は拒否
reject_invalid_hostname ホスト名の文法が不正の場合は拒否
reject_non_fqdn_hostname ホスト名がFQDN形式ではない場合に拒否
※reject_unknown_hostname、reject_invalid_hostname、reject_non_fqdn_hostnameについては正常なホストでも"DNSで解決できない" "FQDN形式ではない"場合が多いため適用しないほうがよいと思われます。
SMTP Mail Fromコマンドの場面で適用される制限
smtpd_sender_restriction =
reject_non_fqdn_sender 送信者メールアドレスがFQDN形式でない場合は拒否
reject_unknown_sender_domain 送信者メールアドレスのドメインが存在しない場合は拒否
permit それ以外は許可
RCPT TOコマンドの場面で適用される制限
smtpd_recipient_restrictions =
permit_mynetworks mynetworksで定義したネットワークは許可
reject_non_fqdn_recipient 受信者メールアドレスがFQDN形式でない場合は拒否
reject_unauth_destination 受信者メールアドレスがmydestinationに属さない宛先は拒否
main.cfの入力を終了します。
header_checksファイルの編集(追記)
# vi /etc/postfix/header_checks
ヘッダのReceived部分を非表示
/^Received:/ IGNORE
大量送信用特殊メーラーからのメールを拒否(他にも色々あります)
/^X-Mailer:.*PostMaster General/ REJECT
GMTを利用して特定地域からのメールを拒否
例)ブラジル(フェルナンド ノローニャ諸島)地域
/^Date:.*-1100/ REJECT
header_checksの入力を終了します。
CentOSではMTAのデフォルトがsendmailのためデフォルトMTAをPostfixへ切り替えます。
まずsendmailを止めて自動起動しないようにします。
# /etc/init.d/sendmail stop
# chkconfig sendmail off
# alternatives --config mta
There are 2 programs which provide 'mta'.
Selection Command
-----------------------------------------------
* + 1 /usr/sbin/sendmail.sendmail ← 現在sendmailがMTAとなっている
2 /usr/sbin/sendmail.postfix ← postfixもあり
Enter to keep the current selection[+], or type selection number:2 ←2を入力
Postfixの起動
#/etc/init.d/postfix start
Postfixの自動起動を有効にする
# chkconfig postfix on
# chkconfig --list postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off ※2,3,4,5がONになっていれば問題なし
Postfixの基本環境は完了です。
その2でPostgrey等のインストール・設定を行います。
その2へ
0 件のコメント:
コメントを投稿