いわマン備忘録

備忘録とちょっとした設定メモや小ネタをUPしたいと思っております。

Postfixのあれこれ

今日はPostfixについて。

###
### インストール
###

POPを使う場合と、キューを確認できるようにする為qshapeも入れておく。あとはsasl用に。

yum -y install dovecot postfix-perl-scripts

yum -y install cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-ntlm cyrus-sasl-plain

# saslauthd起動(SMTP-Auth設定)
chkconfig saslauthd on
service saslauthd start

vi /etc/sasl2/smtpd.conf

# 変更
pwcheck_method: auxprop
#mech_list: plain login

# 新規ユーザ追加時に自動でMaildir形式メールボックス作成
mkdir -p /etc/skel/Maildir/{new,cur,tmp}
chmod -R 700 /etc/skel/Maildir/

# config編集
vi /etc/dovecot/conf.d/10-mail.conf

# protocolの設定
protocols = imap pop3

# listenの設定
listen = *

# 追加(メールボックス形式をMaildir形式とする)
mail_location = maildir:~/Maildir

# plaintextでの認証許可
disable_plaintext_auth = no

# メールユーザーの追加
# sshでのログインはしない形式で
useradd -s /sbin/nologin testman
passwd testman
hogehoge
hogehoge

# SMTP-Auth用ユーザ/パスワード登録
echo "hogehoge" | saslpasswd2 -p -u hogehoge.com -c testman

# SMTP-Auth用ユーザ名、パスワード確認
sasldblistusers2

# sasldb2所有グループをpostfixに変更※最初の1回のみ
chgrp postfix /etc/sasldb2

# SMTP-Auth用ユーザ名、パスワード削除する場合
saslpasswd2 -d test -u hogehoge.com

# dovecot start
chkconfig dovecot on
service dovecot start

###
### postfixの設定
###

# config編集
vi /etc/postfix/main.cf

# hostnameの設定
myhostname = hogehoge.com

# domainの設定
mydomain = hogehoge.com

# 送信元メールアドレス@以降にドメイン名を付加
myorigin = $mydomain

# 外部からのメール受信を許可
inet_interfaces = all

# ipv4プロトコルのみ許可
inet_protocols = ipv4

# 自ドメイン宛メールを受信できるようにする
# サーバによっては$mydomainも追加
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# SMTP接続用のネットワークを作成
# あとで専用データベースを作成
mynetworks = hash:/etc/postfix/network_table

# メールボックス形式をMaildir形式にする
home_mailbox = Maildir/

# メールサーバーソフト名の隠蔽化
smtpd_banner = $myhostname ESMTP unknown

####################
## Postfix Security Config
####################

# 受信メールサイズ制限(10MB=10*1024*1024に制限)
message_size_limit = 10485760

# sasl_authの有効化
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname

# ヘッダー情報調整
# 後ほどheader_checks のパーミッションを600にしておく。専用データベースを作成
header_checks = regexp:/etc/postfix/header_checks

# HELOコマンドでホスト名を通知しないホストの接続を拒否
smtpd_helo_required = yes

# SMTPのVRFYコマンドを使用不可にする
disable_vrfy_command = yes

# RFC822で定義されている書式に適合しないメールアドレスが
# 通知された場合、受信を拒否する
strict_rfc821_envelopes = yes

# 転送許可
allow_percent_hack = yes
swap_bangpath = yes

# ソース・ルート形式で指定されている宛先メールアドレスを拒否
allow_untrusted_routing = no

# IP アドレスからホスト名への逆引きができないホストの接続を拒否。
smtpd_client_restrictions =
permit_mynetworks,
reject_rbl_client all.rbl.jp,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dynablock.wirehub.net,
reject_rbl_client sbl.spamhaus.org,
check_client_access hash:/etc/postfix/reject_client,
reject_unknown_client,
permit

# ホスト名が正しい書式でホスト名を通知してきたホストのみ接続を許可
smtpd_helo_restrictions =
permit_mynetworks,
reject_invalid_hostname,
reject_unknown_client,
permit

# ホスト名と転送先ドメインとして許可されているドメイン
# 宛先メールアドレスに指定されているものを受信
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
permit_auth_destination,
reject_sender_login_mismatch,
check_sender_ns_access hash:/etc/postfix/reject_ns,
check_relay_domains,
reject

# 実際には存在しないドメイン名が
# 送信元メールアドレスに使われているメールの受信を拒否
smtpd_sender_restrictions =
permit_mynetworks,
reject_unknown_sender_domain,
reject_sender_login_mismatch,
permit

# SMTPのETRN コマンドの使用をホスト名が
# 不正(妖しげ)なホストには使用不可としている
smtpd_etrn_restrictions =
permit_mynetworks,
reject_invalid_hostname
reject

###
### 各種ファイル作成
###

### network_table作成
vi /etc/postfix/network_table

127.0.0.1 OK

IPアドレス OK ← こんな形式

### Reject Client
vi /etc/postfix/reject_client

123.456.789.0 REJECT ← /32はこんな感じ

123.456.789. REJECT ← /24で制限も可能

### Reject Name Server
vi /etc/postfix/reject_ns

# Spam DNS
ns1.is-name.net REJECT match blacklist NS
ns1.kim-name.net REJECT match blacklist NS
ns1.dehfs.com REJECT match blacklist NS
ns2.dehfs.com REJECT match blacklist NS
ns1.dsfad.com REJECT match blacklist NS
ns2.dsfad.com REJECT match blacklist NS
ns1.zets-1.com REJECT match blacklist NS
ns2.zets-1.com REJECT match blacklist NS
ds1.hkdom.net REJECT match blacklist NS
ds2.hkdom.net REJECT match blacklist NS
ns1.mr-bater.com REJECT match blacklist NS
ns2.mr-bater.com REJECT match blacklist NS
ns1.dufqv.net REJECT match blacklist NS
ns1.dufpv.net REJECT match blacklist NS
ns1.ttforever.net REJECT match blacklist NS
ns2.ttforever.net REJECT match blacklist NS
ns1.kaioh-say.com REJECT match blacklist NS
ns2.kaioh-say.com REJECT match blacklist NS
ns1.psvv.com REJECT match blacklist NS
ns1.psvy.com REJECT match blacklist NS

※スパムがよく使用するDNS

### Received削除
cp /etc/postfix/header_checks /etc/postfix/header_checks.default
rm /etc/postfix/header_checks

vi /etc/postfix/header_checks

# Erase Received
/^Received:/ IGNORE

chmod 600 /etc/postfix/header_checks

postmap /etc/postfix/network_table
postmap /etc/postfix/reject_client
postmap /etc/postfix/reject_ns
postmap /etc/postfix/header_checks

############
## Postfix Retry
############

## 設定ファイルに追記
vi /etc/postfix/main.cf

## 時間単位は s (秒)、m (分)、h (時)、d (日)、w (週)で記述可。
# アクティブキューメッセージの最大数
qmgr_message_active_limit = 100000

# キューマネージャーの受信者最大数
qmgr_message_recipient_limit = 100000

# 遅延メールキューをスキャンする頻度
# デフォルト1000秒
queue_run_delay = 10s

# 再送最短単位時間
# デフォルト1000秒
minimal_backoff_time = 20s

# 再送最長単位時間
# デフォルト4000秒)
maximal_backoff_time = 80s

# キュー保存期間
# デフォルト5日
bounce_queue_lifetime = 120s

# 再送期間
# デフォルト5日
maximal_queue_lifetime = 180s

# 到着が配送を超えた際の一時停止時間(秒)[0:無効]
in_flow_delay = 0

# アクティブキューの警告最小遅延間隔(秒)[0:無効]
qmgr_clog_warn_time = 0

################
## Postfix Addr対策
################

# ハイフン(「-」)から始まるメールアドレスからのメールを受信するために必要
allow_min_user = yes

###############
## Postfix Process
###############

# プロセスの上限値 (デフォルト: 100)
default_process_limit = 200 ← 環境によって調整してみる

###############
## Postfix Bounce
###############

## Bounce用のテンプレートをコピー
cp /usr/share/doc/postfix-2.6.6/bounce.cf.default /etc/postfix/bounce.cf

vi /etc/postfix/main.cf

# Bounce Mail
bounce_template_file = /etc/postfix/bounce.cf

################
## Postfix Transport
################

### ドメイン毎に配送先を変更する
## まずは「transport」を有効化した上で
## /etc/postfix/transportに設定を記述

vi /etc/postfix/main.cf

# TRANSPORT MAP
#
# See the discussion in the ADDRESS_REWRITING_README document.

transport_maps = hash:/etc/postfix/transport ← 追記

# tranceportの編集
cp /etc/postfix/transport /etc/postfix/transport.default
rm /etc/postfix/transport
vi /etc/postfix/transport

↓↓↓トランスポートの記載例

### localhost
hogehoge.com local:
.hogehoge.com local:

※これを入れないともし別のメールサーバに転送した場合、バウンスされたメールがループします。

### docomo宛に配送するケース
docomo.ne.jp dc-smtp:

### docomo宛を転送するケース
docomo.ne.jp smtp:[転送先ドメイン or IPアドレス]:25

※別キャリアやPC宛もドメイン毎に記載すればOK

postmap /etc/postfix/transport

###############
## Postfix Session
###############

## セッション数などの設定
cp /etc/postfix/master.cf /etc/postfix/master.cf.default
vi /etc/postfix/master.cf

## 配信設備としてPostfixを利用する場合は、キャリアに合わせて
## セッション数などを編集することが可能。もし飛ばすなら。

### docomo
#dc-smtp unix - - n - 1 smtp
# -o smtp_destination_concurrency_limit=3
# -o smtp_destination_recipient_limit=15

※あくまでこれは設定例です。transportでドメイン毎に「dc-smtp」みたいなおまじないをしたら、master.cfでその設定毎に色々調整ができますよ。

## postfix再起動
service postfix restart

# 不正中継されないかのチェック
http://www.rbl.jp/svcheck.php

以上でございます。大体はさらってあるはず。

###
### 追記
###

#################################################
##
## Postfix SMTP ERROR
##
#################################################

# smtpdサーバのエラー応答の扱いの遅延無効化
smtpd_error_sleep_time = 0

# 応答遅延開始設定(デフォルト10)
#smtpd_soft_error_limit =

# 応答遅延を行なってもエラーが継続して発生した場合において
# これ以上はエラーは許容しないという設定(デフォルト20)
#smtpd_hard_error_limit =

#################################################
##
## Postfix SMTP Cache
##
#################################################

### smtpコネクションキャッシュ無効化
smtp_connection_cache_on_demand = no