Postfixの設定

Red Hat Linuxのページトップへ

The Postfix Home Page(Postfixの公式サイト)

# rpm -qa | grep postfix
postfix-1.1.11-11
# rpm -e postfix-1.1.11-11

postfix最新ファイルをダウンロードして、/usr/local/srcに展開して、make、make install。make install時の質問はすべてデフォルトでエンターする。インストールには最初にサーバーをインストールした時に出来た既存のユーザーとグループpostfixとグループpostdropのユーザーとグループを利用する。もし最初にpostfixを入れていない場合には作成すること。

# cd /usr/local/src
# wget ftp://ring.aist.go.jp/pub/net/mail/postfix/official/postfix-2.0.16.tar.gz
# tar xvzf postfix-2.0.16.tar.gz
# cd postfix-2.0.16
# make
# make install

sendmail の停止
# mv /usr/lib/sendmail /usr/lib/sendmail.sendmail
# chmod 0700 /usr/lib/sendmail.sendmail
# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF
# mv /usr/bin/newaliases /usr/bin/newaliases.OFF
# mv /usr/bin/mailq /usr/bin/mailq.OFF
# chmod 755 /usr/sbin/sendmail.OFF  /usr/bin/newaliases.OFF \
  /usr/bin/mailq.OFF

sendmail の停止
# kill -TERM 'sendmail-PID'
 Postfix の起動
# /usr/postfix/bin/postfix start

postfix 宛のメールを root に向ける。
# vi /etc/aliases
postfix:  root
# tar xvfz postfix-2.1.4.tar.gz
# cd postfix-2.1.4
( MySQL を利用する
mysqlマップをサポートしたpostfixをビルドするには、 -DHAS_MYSQLとmysqlヘッダーを含んだディレクトリへの-Iの追加と、 mysqlclientライブラリ(とlibm)をAUXLIBSへ追加しなければなりません
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm'
上を実行してからmake)
# make
# groupadd -g 89 postfix
# groupadd -g 90 postdrop
# useradd -g 89 -u 89 -d /var/spool/postfix -s /sbin/nologin postfix
# make install ←新規インストール時
# make upgrade ←アップグレード時
注意:アップグレード時は /etc/postfix/main.cf が無いと出来ません

新規インストール時は下記を要求されます
install_root: [/] 既定値

tempdir: [/usr/local/src/postfix-2.1.4] 既定値

config_directory: [/etc/postfix] 既定値

daemon_directory: [/usr/libexec/postfix] 既定値

command_directory: [/usr/sbin] 既定値
rpm版がインストールされている場合は[/usr/local/sbin]

queue_directory: [/var/spool/postfix] 既定値

sendmail_path: [/usr/sbin/sendmail] 既定値
rpm版がインストールされている場合は[/usr/local/sbin/sendmail]

newaliases_path: [/usr/bin/newaliases] 既定値
rpm版がインストールされている場合は[/usr/local/sbin/newaliases]

mailq_path: [/usr/sbin/mailq] 既定値
rpm版がインストールされている場合は[/usr/local/sbin/mailq]

mail_owner: [postfix] 既定値

setgid_group: [postfix] 既定値

html_directory: [no] 既定値

manpage_directory: [/usr/local/man] 既定値

sample_directory: [/etc/postfix] 既定値

readme_dirctory: [no] 既定値


起動スクリプト
# gedit /etc/rc.d/init.d/postfix
これをリンクする

# chmod 755 /etc/rc.d/init.d/postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc0.d/K30postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc1.d/S80postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc2.d/S80postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc3.d/S80postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc4.d/S80postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc5.d/S80postfix
# ln -s /etc/rc.d/init.d/postfix /etc/rc.d/rc6.d/K30postfix
#!/bin/sh
#
# postfix      Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
#              that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
#
# Based on startup script from Simon J Mudd 
# 25/02/99: Mostly s/sendmail/postfix/g by John A. Martin 
# 23/11/00: Changes & suggestions by Ajay Ramaswamy 
# 20/01/01: Changes to fall in line with RedHat 7.0 style
# 23/02/01: Fix a few untidy problems with help from Daniel Roesen.

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x /usr/sbin/postfix ] || exit 0
[ -d /etc/postfix ] || exit 0
[ -d /var/spool/postfix ] || exit 0

RETVAL=0

start() {
	# Start daemons.
	echo -n "Starting postfix: "
	if [ ! -e /var/spool/postfix/etc/resolv.conf ]; then
		cp -f /etc/resolv.conf /var/spool/postfix/etc
	fi
	/usr/sbin/postalias /etc/postfix/aliases
	/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure
	RETVAL=$?
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
        echo
	return $RETVAL
}

stop() {
        # Stop daemons.
	echo -n "Shutting down postfix: "
	/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure
	RETVAL=$?
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
	echo
	return $RETVAL
}

reload() {
	echo -n "Reloading postfix: "
	/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure
	RETVAL=$?
	echo
	return $RETVAL
}

abort() {
	/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure
	return $?
}

flush() {
	/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure
	return $?
}

check() {
	/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure
	return $?
}

restart() {
	stop
	start
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart)
	stop
	start
	;;
  reload)
	reload
	;;
  abort)
	abort
	;;
  flush)
	flush
	;;
  check)
	check
	;;
  status)
  	status master
	;;
  condrestart)
	[ -f /var/lock/subsys/postfix ] && restart || :
	;;
  *)
	echo "Usage: postfix {start|stop|restart|reload|abort|flush|check|status|condrestart}"
	exit 1
esac

exit $?
Postfixはsendmailと互換性が高く、パフォーマンスやセキュリティ面で優れたMTA(Mail Transfar Agent)です
MTAにはsendmail、Postfix、qmailがあるので比較
  sendmail Postfix qmail
CPU負荷
ディスク使用
qmailはメール1通1通を1つのファイルとして保存するMaildir形式のため同一の比較ではないかもしれません

sendmailとの切り替え
# alternatives --config mta
Red Hat9以降はツールが用意されてます
システムツール>他のシステムツール>Mail Transport Agent Switcher
(redhat-switch-mail)

設定ファイルの編集
# gedit /etc/postfix/main.cf

67行目付近
myhostname = ホスト名
75行目付近
mydomain = ドメイン名
91行目付近
myorigin = $mydomain
または
myorigin = $myhostname
ドコモ宛てのメールではここが重要!!
ただし固定8IPとかでなければIPを逆引きしたときのドメインと異なるので、受信拒否される
その場合はIPを逆引きしてドメインを調べ、そのドメイン名を入力すると受信してもらえるらしい
108行目付近
inet_interface=all(←外部から使用する場合)
mydestination = $myhostname, localhost.$mydomain

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

送信メールの最大サイズとタイムアウトの設定
ほかのメールサーバに迷惑をかけないためにも必ず設定する
メールの最大サイズの設定(例:10MB)
message_size_limit = 10000000
タイムアウトの設定(例:5分)
smtp_data_init_timeout = 5m


PostfixをMaildir形式にする場合
Maildir形式:メール1通1通を別々のファイルとして保存する形式
ユーザアカウントごとの設定
アカウントのホームディレクトリの.forward を設定する
~/Maildir/

システム全体の設定
main.cfファイルを編集する
home_mailbox = Maildir/
#mailbox_command = 〜
#mail_spool_directory = 〜

ユーザーディレクトリにMailboxを作成する
home_mailbox = $HOME/Mailbox


バーチャルドメインの設定
main.cfに以下を追記
virtual_maps = hash:/etc/postfix/virtual
# gedit /etc/postfix/virtual
[第一ドメイン名]   anything
[第一ドメイン名のメールアドレス]   [ユーザー名1]
[第二ドメイン名のメールアドレス]   [ユーザー名2]
例1
example.com     anything
test@example.com    user1
xxx@abc.com    user2
例2
example.com     anything
test@example.com    user1
xxx@abc.com    xxx
1行目:ドメイン名の設定、『anything』の部分は特に意味がないのでなんでもいい
2行目、3行目:メールアドレスとそれを受け取るユーザー名、メールアドレスの@より前のアカウントのユーザーは存在しなくてもいいが受け取るユーザー名は存在しなければいけない

複数のバーチャルドメインを設定する場合
example.com   anything
test@example.com    user1
post@example.com    post

abc.com   anything
xxx@abc.com   user2
post@abc.com   post
main.cfの中のmydestinationから$mydomainを削除すると、メインのドメインを記述することもできる
注意:こちらのサーバの不具合等でメールが送れなかった場合のメールエラーでは宛先のアドレスが『[ユーザー名]@[$mydomainで指定したドメイン名]』になり、送った人がちょっとびっくりしちゃいます
この場合だと『xxx@abc.com』に送ったはずだけど、『user2@example.com』に送れなかったとのエラーが返ってきます

postmapを設定する
# postmap /etc/postfix/virtual

main.cfの中に以下を追加する
# gedit /etc/postfix/main.cf
virtual_maps = hash:/etc/postfix/virtual

postfixをreloadする
# /usr/sbin/postfix reload
virtual_alias_domains - バーチャルドメイン名のリストバーチャルドメインのリストを指定する。空白または「,」で区切って複数指定可能である。 または、ドメイン名を1個1行で記述したファイルのフルパスを指定しても良い。 さらに、「hash:/etc/postfix/virtual_domain」のような形式で、ルックアップテーブルも指定できる。 この場合は、検索キーとしてドメインが登録されていれば、キーに対する値は何が登録されていても良い。 

なお、ここで定義したドメインは mydestination に記述する必要はない。 

例:

[/etc/postfix/main.cf]
virtual_alias_domains = example.com


virtual_alias_domains = /etc/postfix/domains

Postfixが起動中でなければ、実行後、以下のようなエラーメッセージが出力される
これはスクリプトの最終行に、postfixをリロードするための一行が含まれているのが原因なだけで、
特に気にする必要はないらしい
postfix/postfix-script: fatal: the Postfix mail system is not running 


Postfix起動しているサーバ名を設定
myhostname = ns1.example.com
ドメイン名を設定
mydomain = example.com
送信元アドレスに設定するドメイン名を設定
myorigin = $mydomain
ネットワークインターフェースを設定
inet_interfaces = all
受信を許可するメールアドレスのドメイン名を設定
mydestination = $myhostname, localhost.$mydomain, $mydomain
自分のネットワークを設定
mynetworks = 192.168.0.0/24, 127.0.0.0/8
エイリアスを設定
alias_maps = hash:/etc/postfix/aliases
エイリアスデータベースを設定
alias_database = hash:/etc/postfix/aliases
スプールキューを設定(mailbox形式)
mail_spool_directory = /var/spool/mail
sasl2による認証を許可するように設定
smtpd_sasl_auth_enable = yes
認証を許可するドメインを設定
smtpd_sasl_local_domain = $mydomain
リレーの許可を設定
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,check_relay_domains
認証を許可する接続を設定(匿名とプレインテキストを拒否)
smtpd_sasl_security_options = noanonymous,noplaintext
対応していないメーラーの接続を拒否に設定
broken_sasl_auth_clients=no
docomo,auへのメール送信時にはじかれるのでISPへの転送を設定するファイルの指定
transport_maps = hash:/etc/postfix/transport

chrootで動作させるための設定
Postfixをchrootで動作させるための設定をおこないます。
# sh ./examples/chroot-setup/LINUX2
# vi master.cf
 
chrootで動作するように下記のnとなっているところをyに変更します。
smtp inet n - y - - smtpd
pickup fifo n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr fifo n - y 300 1 nqmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
flush unix n - y 1000? 0 flush
proxymap unix - - y - - proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
showq unix n - y - - showq
error unix - - y - - error
lmtp unix - - y - - lmtp
 


sasl2の設定
パスワードを格納するDBを設定します。
$ su -
# cd /usr/lib/sasl2
# vi smtpd.conf
SMTP-AUTHで使用するDBをsasldbに設定
pwcheck_method:auxprop
 
sasl2のユーザを追加してこのユーザでSMTP-AUTHの認証ユーザとします。
$ su -
# /usr/sbin/saslpasswd2 -c -u example.com ユーザ名   ユーザの作成
# /usr/sbin/saslpasswd2 -d -u example.com ユーザ名   ユーザの削除
# /usr/sbin/sasldblistusers2                追加されたユーザの確認
 

sasldb2をPostfixからアクセスできるようにします。   
# cd /etc
# chgrp postfix sasldb2
# chmod 640 sasldb2
 

chrootされて動作されているのでリンクを貼っておきます。   
# cd /var/spool/postfix/etc
# ln /etc/sasldb2 sasldb2
 
ドコモ、au対策の設定
ドコモ、auへのメールはリレーのチェックではじかれるので
契約しているプロバイダから送信してもらうように設定します。

docomo,auへのメール送信時にはじかれるのでISPへの転送を設定するファイルの指定
main.cfに追記
# gedit /etc/postfix/main.cf

transport_maps = hash:/etc/postfix/transport

# cd /etc/postfix
# gedit transport
 
ドコモへのメールをプロバイダ経由に設定
.docomo.ne.jp :[契約プロバイダのSMTPサーバ]
docomo.ne.jp :[契約プロバイダのSMTPサーバ]
auへのメールをプロバイダ経由に設定
.ezweb.ne.jp :[契約プロバイダのSMTPサーバ]
ezweb.ne.jp :[契約プロバイダのSMTPサーバ]
 
# /usr/sbin/postmap /etc/postfix/transport

場合によってはプロバイダーのSMTPサーバにPOP before SMTPの設定がされていることがある
その場合は定期的にメールチェックをするように設定をする

postfixを再起動する
# /etc/rc.d/init.d/postfix restart
またはpostfixをreloadする
# /usr/sbin/postfix reload

Postfixの起動
コピーしておいた起動スクリプトをそのまま使って起動できるようにします。 
# chkconfig --add postfix2
# chkconfig --level 3 postfix2 on
# /etc/init.d/postfix2 start
 
# saslpasswd -c -u 'postconf -h myhostname' [ユーザー名]
# chgrp postfix /etc/sasldb
# chmod 640 /etc/sasldb

#gedit /etc/postfix/main.cf

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,
check_relay_domains,reject

MySQL
make -f Makefile.init makefiles \
        'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include' \
        'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm'

alias_maps = mysql:/etc/postfix/mysql-aliases.cf

# mysqlサーバーへログインするためのユーザー名とパスワード
user = someone
password = some_password


# サーバー上のデーターベース名
dbname = customer_database

# テーブル名
table = mxaliases

#
select_field = forw_addr
where_field = alias

# additional_conditionsをここで指定してもよい
additional_conditions = and status = 'paid'

# 上記の変数は次の問い合わせフォームになります:
# select forw_addr from mxaliases where alias = '$lookup' and status = 'paid'
# ($lookupはシングルクオートや他の特殊文字を含む場合エスケープされ、
# SQLでのパースエラーを引き起しません。)
#
# postfixが接続して問い合わせるホスト(順序リスト)
# Unixドメインソケットには unix:、TCP接続(デフォルト)にはinetを指定
hosts = host1.some.domain host2.some.domain unix:/file/name

# gedit /etc/postfix/header_checks_list
/^X-Mailer:.*MultiSender/ REJECT
/^X-Mailer: spammailer ver.*/ REJECT
/^X-Mailer: Achi-Kochi Mail.*/ REJECT
/^X-Mailer: Direct Email.*/ REJECT
/^X-Mailer: DM mailer.*/ REJECT
/^Rerurn-Path:.*<#.*@.* >/ REJECT
/^From:.*<#.*@.* >/ REJECT
/^Subject: only $290 for Adobe Creative Suite/ REJECT


/^Subject: Re: ...relating to your web site/ REJECT
/^Subject: Re: ...web site need some advertising/ REJECT
/^Subject: Re: ...your organization may be able to use this/ REJECT
/^Subject: Are you sure your site listed in Google/ REJECT
/^Subject: Best prices for famous soft/ REJECT
/^Subject: Chose place and time.It will do the rest/ REJECT
/^Subject: =?iso-8859-1?B?Q2lhbGlzIC0g/ REJECT
/^Subject: Extra power. Don't think. Just act/ REJECT
/^Subject: Get the next generation...not expensive/ REJECT
/^Subject: Graphic design from logos to websites/ REJECT
/^Subject: High-quality affordable logos/ REJECT
/^Subject: It's on the move, grab it now/ REJECT
/^Subject: Little magic. Perfect weekends/ REJECT
/^Subject: New software from Adobe available/ REJECT
/^Subject: =?iso-8859-1?B?T2ZmaWNlIHNvZnR3YXJlIC0g/ REJECT
/^Subject: Prime custom design work/ REJECT
/^Subject: Read the Greatest Story on the Universe/ REJECT
/^Subject: This stuff is not really expensive as before/ REJECT
/^Subject: WE DO SOFTWARE ENGINERING/ REJECT

/^Subject: Cialis soft tabs: new item available/ REJECT
/^Subject: cheap CIALIS/ REJECT
/^Subject: Great prices for any software/ REJECT
/name=.*\.src/ REJECT
/name=.*\.exe REJECT
/name=\".*\.inf\"/ REJECT
/name=\".*\.scr\"/ REJECT
/name=\".*\.pif\"/ REJECT
/name=\".*\.bat\"/ REJECT
/name=\".*\.vbs\"/ REJECT
/name=\".*\.reg\"/ REJECT

# postmap regrep:/etc/postfix/header_checks_list main.cfに追記 header_checks = regrep:/etc/postfix/header_checks_list maps_rbl_domains = relays.ordb.org inputs.orbz.org outputs.orbz.org or.orbl.org, orbz.gst-group.co.uk, manual.gst-group.co.uk, inputs.orbz.org, outputs.orbz.org, relays.osirusoft.com smtpd_client_restrictions = permit_mynetworks reject_maps_rbl permit or.orbl.org、inputs.orbz.org、outputs.orbz.orgは現在サポートされていないらしい orbz.org is no longer an RBL [main.cf] smtpd_client_restrictions = permit_mynetworks, reject_rbl_client relays.ordb.org, reject_rbl_client sbl.spamhaus.org, permit maps_rbl_domains=relays.ordb.org 踏み台サーバーにリレーされてないかのチェック telnet relay-test.mail-abuse.org Relaying deniedとなれば問題なし。

ぺんたん.info
あかいひ.com
IPくん.com
8枠.com - 競馬情報
galhime.com

PC Q&A||古い記事|雑学|ラーメン