CentOS4.x Postfix-2.1

Postfixを導入します

とりあえず動かす為だけの設定ですので注意願います

構築する環境

ホスト名saturday.example.com
ドメインexample.com
IPアドレス192.168.0.150
ネットマスク255.255.255.0

導入

yumにてPostfixの導入を行います

rootにて以下を実行します

# yum install postfix

MTAの切り替え

MTAをsendmailからPostfixに変更します

変更方法は「MTAの切り替えを行う」に詳しく記載しています

rootにて以下を実行します

# /usr/sbin/system-switch-mail-nox

Postfixの設定

設定ファイル群は、/etc/postfix/以下にありますので編集していきます

main.cfの設定

以下の部分を設定する(デフォルトで設定されているものも一部含んでます)

myhostname = saturday.example.com
mydomain = example.com
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 192.168.0.0/24, 127.0.0.0/8

relay_domains = $mydestination
disable_vrfy_command = yes      <--VEFYコマンド禁止(不正中継対策に若干有効)
allow_percent_hack = yes        <--初期値なので指定は不要です
swap_bangpath = yes             <--初期値なので指定は不要です

smtpd_recipient_restrictions = permit_mynetworks,check_relay_domains

なお、上2行については、以下の様にhostnameコマンドで「saturday.example.com」と回答がくる場合は設定不要です

# hostname
saturday.example.com

補足:UNIXアカウント@ドメイン名でメール受信できる様にするには

上記の設定だと、UNIXアカウント@saturday.example.comというメールアドレスになります

このようなアドレスでなく、UNIXアカウント@example.com と「UNIXアカウント@ドメイン名」でメールの受信を行いたい場合は、上記の設定の内、以下の部分を訂正します

myorigin = $mydomain
mydestination = localhost.$mydomain, localhost, $mydomain

(*)$myhostnameは削除してます。そうしないとUNIXアカウント@saturday.example.comでも受信できてしまう

Postfixの起動・再起動

rootにて以下を実行します。

# /etc/rc.d/init.d/postfix start
または
# /etc/rc.d/init.d/postfix restart

動作確認

fooというUNIXアカウントがあると仮定し、foo@saturday.example.comにメールを送信してみる

# mail foo@saturday.example.com
Subject: aaaa
bbbb
cccc
.
Cc:
#

として、fooユーザ宛てにメールが届いている事を確認する

不正中継の確認

第三者中継チェックなどで不正中継のテストを行う

上記設定の場合、

- ($mynetworks にマッチする IP アドレスを持つ)「信頼された」クライアントから全ての目的地へ
- 「信頼されていない」クライアントから、$relay_domains または
  そのサブドメインにマッチする目的地へ、送信者が指定したルーティングのアドレスを除いて
リレーをします
relay_domains は $mydestinationがデフォルト値

のような配送条件なので、

自ホストまたは192.168.0.0/24ネットワーク以外からtelnetで本smtpに接続し、他ドメイン宛てメールの送信が拒否されたらOKです

ちなみに、telnetでメール送信する場合は以下の様にします

#telnet 192.168.0.150 25   <-- 本マシンの25番ポートに接続する。以下smtpを喋ってみる
220 saturday.example.com
EHLO example.com
250-saturday.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250 8BITMIME
MAIL FROM:<foo@saturday.example.com>
250 Ok
RCPT TO:<test@xxxx.co.jp>
250 Ok
DATA
354 Start mail input; end with <CRLF>.<CRLF>
Subject: this is subject

This is mail body...
.
211: Error: I can break rules, too. Goodbye     <-- 送信を拒否された。

送信先がtest@xxxx.co.jpと自ドメイン宛てではないので拒否された

送信先をbar@example.comとするとうまくメール送信される

メール受信最大サイズを設定(message_size_limit)する

メールヘッダを含めた、1メールあたりの最大サイズを指定。初期値は、10240000 bytes

message_size_limit=20480000

メール送信端末のIPアドレスがメールヘッダに乗らない様にする

メールヘッダに、メールを送信したクライアントのIPアドレスが記載されない様にする為の設定を行う

header_checksの設定

/etc/postfix/header_checksに以下を追加する。

/^Received:\sfrom .*\[127\.0\.0\.1\]|^Received:\sfrom .*\[192\.168.*\]|^Received:\sfrom .*\[172\.16.*\]/ IGNORE

上記設定では、172.16.0.1,192.168.*.*,172.16.*.* を表示しない様にする設定です。

main.cfの設定

/etc/postfix/main.cfに以下を追加し、header_checksファイルを有効にする

header_checks = regexp:/etc/postfix/header_checks

再起動

Postfixを再起動し、設定を反映

# /etc/rc.d/init.d/postfix restart

関連ページ