Postfix2.xのインストール
ここからDownload.
postfixというユーザとpostfix,postdropというグループを作成。rpmで旧バージョンで インストールされているとすでに作成されている
/etc/passwd postfix:x:128:128:postfix:/var/spool/postfix:
/etc/group postfix:x:128: postdrop:x:129:
$ tar zxvf postfix-2.2.5.tar.gz $ cd postfix-2.2.5 $ make (./configureはしない) make -f Makefile.in MAKELEVEL= Makefiles (echo "# Do not edit -- this file documents how Postfix was built for your machine."; /bin/sh makedefs) >makedefs.tmp set +e; if cmp makedefs.tmp conf/makedefs.out; then rm makedefs.tmp; \ else mv makedefs.tmp conf/makedefs.out; fi >/dev/null 2>/dev/null
(略)
[src/tlsmgr] gcc -Wmissing-prototypes -Wformat -g -O -I. -I../../include -DLINUX2 -c tlsmgr.c gcc -Wmissing-prototypes -Wformat -g -O -I. -I../../include -DLINUX2 -o tlsmgr tlsmgr.o ../../lib/libmaster.a ../../lib/libtls.a ../../lib/libglobal.a ../../lib/libutil.a -ldb -lnsl -lresolv cp tlsmgr ../../libexec
$ su
# /etc/rc.d/init.d/postfix stop
# /etc/rc.d/init.d/pop-before-smtp stop
# make upgrade (make installをするとインストール先等いろいろ聞かれるが、 upgradeだと現在の/etc/postfix/main.cfから判断してくれる。
rpmインストールされているときは upgradeが簡単)
set -e; for i in src/util src/global src/dns src/tls src/master src/postfix src/smtpstone src/sendmail src/error src/pickup src/cleanup src/smtpd src/local src/lmtp src/trivial-rewrite src/qmgr src/oqmgr src/smtp src/bounce src/pipe src/showq src/postalias src/postcat src/postconf src/postdrop src/postkick src/postlock src/postlog src/postmap src/postqueue src/postsuper src/qmqpd src/spawn src/flush src/verify src/virtual src/proxymap src/anvil src/scache src/discard src/tlsmgr; do \
(set -e; echo "[$i]"; cd $i; make 'CC=gcc -Wmissing-prototypes -Wformat ' update MAKELEVEL=) || exit 1; \
done [src/util]
(略)
Editing /etc/postfix/master.cf, adding missing entry for discard service Editing /etc/postfix/master.cf, adding missing entry for tlsmgr service
Note: the following files or directories still exist but are no longer part of Postfix:
/etc/postfix/pcre_table /etc/postfix/regexp_table
You have mail in /var/spool/mail/okada
/etc/postfix/main.cf を編集 /etc/postfix/aliases に root: 自分のアカウント名 を追加
# /usr/sbin/postfix check (何も帰らない)
# /etc/rc.d/init.d/postfix start
# /etc/rc.d/init.d/pop-before-smtp start
運用設定
インストール後に設定するファイルは/etc/postfix/main.cfで 以下の内容ように設定する mydomain = abc.ac.jp 以下の2つは送り元にホスト名を入れるか否かを決める myorigin = $myhostname <:---user@xxx.domain.jp myorigin = $mydomain <:---user@domain.jp mydestination = $myhostname, localhost.$mydomain (もし、ドメインのメールサーバにして、ドメイン宛てのメールを受け取るときは mydestination = $myhostname, localhost.$mydomain, $mydomain とする) mynetworks = 192.xxx.xxx.0/24, 127.0.0.0/8, 10.0.0.0/8 smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient,
check_client_access hash:/etc/postfix/pop-before-smtp, check_relay_domains
(pop-before-smtpの設定) relayhost = mail.abc.ac.jp (リレーホストの設定)
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) (Vine Linux) smtpd_banner = $myhostname ESMTP $mail_name (これはメールサーバの素性をあかさないための設定
#Edit by JE2ISM
##allow_percent_hack = no allow_percent_hack = yes
#Edit by JE2ISM
# Limit Mssege 30MB message_size_limit = 31457280 (一度に送れるメッセージサイズのMax default:10MB)
# MailBox Size 400MB mailbox_size_limit = 409600000 (MailBoxの最大容量 default:50MB)
メールアドレスが間違っているとき「unknown user: "f05999"」 のようなメッセージを送信元に返すときは unknown_local_recipient_reject_code = 550
rejectするだけで送信元にメッセージを返さないなら unknown_local_recipient_reject_code = 450 550:メールで拒否を通知(reject mail) 450:一定時間後に再試行(try again later)
以下のようなパラメータも追加できる disable_vrfy_command=yes vrfyコマンドを無効にする。vrfyコマンドとはユーザーが存在するかどうか問い合わせるためのもの
smtpd_helo_required=yes helo/ehloコマンドを要求する。helo/ehloコマンドは接続元のホストを識別するための コマンド。自らのホスト名を通知しない接続を拒否するように設定しておく。
strict_rfc821_envelopes=no RFC821の形式に合わないアドレスは拒否する。RFC821はSMTPによるメール転送を定めた規格。
スパム対策 ただし、これを行うと全てそれらのサイトからのメールを拒否するので注意 maps_rbl_domains=relays.ordb.org rblとは不正中継を行う可能性があるサイトのブラックリスト
smtpd_client_restrictions=reject_maps_rbl, reject_unknown_client reject_maps_rblは上で指定したブラックリストに登録されたホストからの接続を拒否 reject_unknown_clientはnameの逆引きができないとき接続を拒否するせって
同時に送れるメッセージの制限 default_destination_concurrency_limit パラメータ (デフォルト: 20) は同じ配送先に同時に送ることができるメッセージの 数 メッセージ1件ごとにコネクション張るには1にする
特定の配送チャネル (local, smtp, uucp 等)に対して上書きすることができる local_destination_concurrency_limit パラメータは 同じローカル受信者に対して 同時に配送するメッセージの数を制御します. 2くらいが推奨
変更後は
# /etc/rc.d/init.d/postfix reload
で変更内容を反映させる。
リレーチェックをしてくれるサイトRBL.JP
そのチェックで以下のような%入りアドレスでリレーするとチェックされたときは main.cfの allow_percent_hack = no を allow_percent_hack = yes にする。
[リレーチェックの結果] 中継テスト その6
RSET
250 Ok
MAIL FROM: <spamtest@xxx.xxx.xx.xxx>
250 Ok
RCPT TO: <relaytest%rbl.jp@[xxx.xxx.xx.xxx]>
250 Ok relay accepted!! spam対策 Headerでチェック
main.cfに
#header_checks = regexp:/etc/postfix/header_checks のコメントをはずす
/etc/postfix/header_checks に
# It refuses by a partner's subject.
/^Subject: je2ism/ REJECT (Subject欄がje2ismで始まるメールを拒否)
# It refuses in a FROM address.
#/^From: okada/ REJECT (From欄がokadaで始まるメールを拒否) /^From:.*<#.*@.*>/ REJEC (From欄が何もないメールは拒否) /^From: .*@abc.ne.jp/ REJECT (From欄がabc.ne.jpからのメールは拒否)
本文でチェック
main.cfに body_checks=regexp:/etc/postfix/body_checks を追加 /etc/postfix/body_checksに /spam/REJECT (本文中にspamというキーワードがあればメールを拒否)
/name=.*\.scr/ REJECT (添付ファイルが.scrが含まれればメールを拒否)
変更後は
# /etc/rc.d/init.d/postfix reload を実行
別ドメインのメールも受け取れるようにする
/etc/postfix/main.cfの
mydestination = $myhostname, localhost.$mydomain, $mydomain, abc.ne.jp
^^^^^^^^追加ドメイン
にドメイン名を追加する。
IPアドレス指定は[192.168.1.1]のように指定する
送られたメールアカウントでコマンドを実行するには
/etc/postfix/aliasesに
(アカウント名): "|(コマンドパス)"
comingout: "|/home/postgres/comingout/perl/comingout.pl" のように記入する
DDNS
DDNS(dyndns.org)のMail Exchanger (optional)に指定 したメールを受け取るときにも必要。 例えば Mail Exchanger (optional): abc.ne.jp と設定すると
wwwism.dyndns.org. 86400INMX10 abc.ne.jp. とDNSに書かれ、 abc.ne.jpにwwwism.dyndns.org宛てメールが転送される。 Backup MX?:DDNSのIPにもメールを転送するときにチェックを入れる。普通はチェックの必要なし。
自宅にメールサーバを立ち上げルータでPort25(smtp)をフォワードさせるときはMail Exchanger:にwwwism.dyndns.orgとしてpostfixの設定をwwwism.dyndns.orgも受信可能にするとokada@wwwism.dyndns.orgでメールが受け取れる。 自宅のサーバをsmtpサーバに設定
main.cfを myhostname = pc85xxxx.axxgo2.ne.jp <---DHCPで割り振られたHost名
mydomain = axxgo2.ne.jp <---プロバイダのドメイン名
mydestination = $myhostname, localhost.$mydomain $mydomain
mynetworks = 168.168.10.0/24, 127.0.0.0/8
relayhost = mail.axxgo2.ne.jp <---プロバイダのsmtpサーバ キューの表示
$ mailq
info@mail.uzwr.com
1C34F2DEA53* 2655 Fri Jan 6 06:48:21 MAILER-DAEMON
info@mail.wubv.com
(略)
63E992DE9F1 7372 Fri Jan 6 02:38:31 MAILER-DAEMON
(connect to rothen.net[216.168.224.70]: Connection timed out) colmonr@rothen.net
6B76F2DEA1C 5917 Thu Jan 5 21:24:13 MAILER-DAEMON (host mx1.mail.yahoo.co.jp[202.93.77.231] said: 421 VS14-RT5 Mailbox bounce arrival rate exceeds system limit (#4.2.2))
fkirij798@yahoo.co.jp
キュー削除
Postfix2.1以降なら、
bounce_queue_lifetime = 86400 でユーザが出したメールとは別に、bounceした結果作成されるメールがキューに留まる時間を制御。デフォルトは5日(432000 MAX:8640000)
その他のキュー関係 queue_run_delay (デフォルト: 1000 秒) キュー マネージャが遅延メールのキューをスキャンする頻度。
maximal_queue_lifetime (デフォルト: 5 日) メッセージが 配送不能として送り返されるまでにキューに留まる期間。
minimal_backoff_time (デフォルト: 1000 秒) メッセージが 検索されない最小時間および「死亡」配送先に手を出さない最小時間。
maximal_backoff_time (デフォルト: 4000 秒) 配送に 失敗してからメッセージを見ない最大時間。
(手動で対処) mailq と打ち込んで,キューにメールが数百 以上たまっていたら,
mailq | grep MAILER-DAEMON | sort +3 > hoge
とかして,数時間以上たった MAILER-DAEMON からのメールのキューについては,
postsuper -d キュー番号
# /usr/sbin/postsuper -d 8B3296529B postsuper: 8B3296529B: removed postsuper: Deleted: 1 message
でメールキューから削除,通常ユーザ権限でかまいませんので sendmail -q を実行すれば,キューにたまったメールを全て配送する 不明な宛先にバウンスさせない
自分のサーバ存在しないアカウント宛のメールを受けないようにする これで、メールアドレスを詐称された無実の人にも無用なエラーバウンスを出さなくなる
main.cf
local_recipient_maps = $alias_maps unix:passwd.byname
2.xはデフォルトでOn 1.xも使える。 奥村先生参考ページ