Postfix

2008年05月08日

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(5/n) - Dovecotの設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

メールを受信


PostfixはMTAなので、POP3用サーバが別途必要。
今回はMySQLと連動叶なDovecotを使った。



設定概要


virtualドメイン用アカウントvpostmail(uid:12000,gid:12000)
スプールディレクトリ/var/lib/vpostmail/domain/$(domain)/$(local-part)/Maildir/
設定ファイル/etc/dovecot-mysql.conf



作業内容


dovecotをMySQL対応にする。
# yum install dovecot-mysql
dovecot.confの修正。
imapとpop3を使えるようにする。
結果的に設定ファイルはシンプルなものになった。
# cd /etc/; pwd
/etc
# cp -pi dovecot.conf dovecot.conf.0
# vi dovecot.conf
protocols = imap pop3

auth default {
  mechanisms = plain
  passdb pam {
  }
  passdb sql {
    args = /etc/dovecot-mysql.conf
  }
  userdb passwd {
  }
  userdb sql {
    args = /etc/dovecot-mysql.conf
  }
  user = root
}
MySQL用の設定。
※12000はvpostmailのuidとgid。
# cat /etc/dovecot-mysql.conf
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=********
default_pass_scheme = MD5
user_query = SELECT concat('/var/lib/vpostmail/domain/', maildir) as home, 12000 as uid, 12000 as gid FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' AND active = '1'
設定を反映させる
[root@www etc]# /etc/init.d/dovecot reload
Stopping Dovecot Imap:                                     [  OK  ]
Starting Dovecot Imap:                                     [  OK  ]
POPの確認
$ telnet localhost 25
user foo@example.com
pass ********
list
retr 1
.....
ここで認証が通れば問題なし。

複数バーチャルドメイン対応メール環境が出来上がった。



関連リンク



半袖 at 19:35|PermalinkComments(0)TrackBack(0)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(4/n) - Postfixの設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

構成イメージはvpopmail


vpopmailの様なディレクトリ構成にする。



設定概要


virtualドメイン用アカウントvpostmail(uid:12000,gid:12000)
スプールディレクトリ/var/lib/vpostmail/domain/
設定ファイル/var/lib/vpostmail/etc/*.cf



作業内容


バーチャルドメイン用アカウント作成。
# /usr/sbin/useradd -u 12000 -s /bin/false vpostmail
バーチャルドメイン用にmain.cf修正
# pwd
/etc/postfix
# cp -pi main.cf main.cf.0
# vi main.cf
# diff main.cf.0 main.cf
> virtual_gid_maps = static:12000
> virtual_uid_maps = static:12000
> virtual_mailbox_limit   = 51200000
> virtual_minimum_uid     = 1001
> virtual_transport       = virtual
> virtual_mailbox_base    = /var/lib/vpostmail/domain
> virtual_mailbox_domains = mysql:/var/lib/vpostmail/etc/mysql_virtual_domains_maps.cf
> virtual_mailbox_maps    = mysql:/var/lib/vpostmail/etc/mysql_virtual_mailbox_maps.cf
> virtual_alias_maps      = mysql:/var/lib/vpostmail/etc/mysql_virtual_alias_maps.cf
メールボックス用ディレクトリ。
今回は/var/lib/vpostmail/配下に作っていく。
# mkdir /var/lib/vpostmail/
# cd /var/lib/vpostmail/; pwd
/var/lib/vpostmail
# mkdir etc domain
vpostmailアカウントが
domainディレクトリにファイルを書き込むのでオーナーを変更する。
# chown vpostmail:vpostmail domain
Postfix-mysql用設定
# cd etc/; pwd
/var/lib/vpostmail/etc

# vi mysql_virtual_alias_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT goto FROM alias WHERE address='%s'

# vi mysql_virtual_domains_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT description FROM domain WHERE domain='%s'

# vi mysql_virtual_mailbox_maps.cf
user     = postfix
password = ********
hosts    = localhost
dbname   = postfix
query    = SELECT concat(maildir,'Maildir/') FROM mailbox WHERE username='%s'
/var/lib/vpostmail/domain/$(domain)/$(local-part)/Maildir/としたいので、
concatを用いて「Maildir/」を追加する。
これにより、後に設定するdovecotの管理が簡単になる。

etc配下のconfigにはMySQL用パスワードが載ってるので読めないようにする。
オーナーをpostfixへ変更。
# cd ../; pwd
/var/lib/vpostmail
# chown -R postfix:postfix etc/
# ls -ld etc/
drwx------  2 postfix postfix 4096 May  7 20:35 etc/
設定内容確認
# /etc/init.d/postfix check
問題なければ反映
# /etc/init.d/postfix reload
Reloading postfix:                                         [  OK  ]
送信テスト
$ telnet localhost 25
helo localhost
mail from:foo@example.net
rcpt to:bar@example.com
data
Subject: test

test
test
.
quit
ログ確認
# tail -F /var/log/maillog
.....
エラーが出てなければOK


次回はPOP3サーバの設定



関連リンク



半袖 at 18:40|PermalinkComments(0)TrackBack(2)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(3/n) - PostfixAdminの設定

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

管理ツールで管理負荷軽減


エンジニアであればコマンドラインからの作業で事足りる。
納品する場合など、相手がエンジニアとは限らない。
管理ツールを導入する事により、覚える事は最小限。

今回はメールアカウント管理ツールとしてPostfixAdminを使う。



環境概要

PostfixAdmindirectory/var/lib/postfixadmin/
URIhttp://postfixadmin.example.com/
Mailbox$(domain)/$(local-part)
MySQLdb_hostlocalhost
db_namepostfixadmin
db_userpostfix
db_pass********

ユーザー用Maildirディレクトリデザイン補足


今回、
『$(local-part)@$(domain)』のメールボックスを、
『$(domain)/$(local-part)』となるようにする。
これは単にvpopmailの構成が好きだったから。

PostfixAdminで設定する。
設定すべき変数が下記2つ。
$CONF['domain_path']'NO'(無し)
'YES'$(domain)/
$CONF['domain_in_mailbox']'YES'$(local-part)@$(domain)
'NO'$(local-part)

今回の設定。
$CONF['domain_path']'YES'
$CONF['domain_in_mailbox']'NO'



作業内容


# mkdir -p /var/lib/postfixadmin
# cd /var/lib/postfixadminostfixadmin; pwd
/var/lib/postfixadmin
# wget http://downloads.sourceforge.net/postfixadmin/postfixadmin_2.2.0.tar.gz?modtime=1209482958&big_mirror=0
# tar zxvf postfixadmin_2.2.0.tar.gz
# ln -s postfixadmin-2.2.0 htdocs
Apacheのconfig生成
# cd /etc/httpd/conf/vhosts-available/; pwd
/etc/httpd/conf/vhosts-available
# vi postfixadmin.example.com
.....(省略).....

# cd ../; pwd
/etc/httpd/conf
# ln -s `pwd`/vhosts-available/postfixadmin.example.com `pwd`/vhosts-enabled/
問題なければ反映(reload)
[root@www conf]# /usr/sbin/apachectl configtest
Syntax OK
[root@www conf]# /etc/init.d/httpd reload
Reloading httpd:                                           [  OK  ]
ここではsetup.phpへアクセス出きることのみを確認。
→ http://postfixadmin.example.com/setup.php
※まだ設定途中なのでエラーが多々出る。

DBアクセス用アカウント作成
$ mysql -uroot
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY '********';
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
PostfixAdminの設定
# pwd
/var/irokoi/postfixadmin/htdocs
# cp -pi config.inc.php config.inc.php.0
# vi config.inc.php
# diff config.inc.php.0 config.inc.php
31c31
< $CONF['configured'] = false;
---
> $CONF['configured'] = true;
51,53c51,53
< $CONF['database_host'] = 'localhost';
< $CONF['database_user'] = 'postfixadmin';
< $CONF['database_password'] = 'postfixadmin';
---
> $CONF['database_host'] = 'localhost';
> $CONF['database_user'] = 'postfix';
> $CONF['database_password'] = '********';
123c123
< $CONF['domain_path'] = 'NO';
---
> $CONF['domain_path'] = 'YES';
129c129
< $CONF['domain_in_mailbox'] = 'YES';
---
> $CONF['domain_in_mailbox'] = 'NO';
再び http://postfixadmin.sharedlink.com/setup.php を確認。
  • 各項目がOKとなる事を確認。
  • 管理アカウント作成を要請されるので、管理アカウントを作成する。
  • この時点でPostfixAdminがtableを生成してくれる
設定内容に問題がなければsetup.phpをリネームする。
※ここでsetup.phpが残っていると管理画面へアクセス出来ない。
# mv -i setup.php setup.php.deleted
管理画面へアクセス出切る事を確認する。
→ http://postfixadmin.example.com/

この時点でドメインとメールアカウントの管理を行えるようになる。
しかし、まだメール配送(Postfix)の設定がない。

続きは次回。



関連リンク



半袖 at 17:55|PermalinkComments(0)TrackBack(1)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(2/n) - Postfix入れ替え

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

RHEL4のPostfixでは駄目


出鼻をくじかれる。
Postfixが対応するルックアップテーブル一覧を確認してみた。

$ /usr/sbin/postconf -m
btree
cidr
environ
hash
ldap
nis
pcre
proxy
regexp
static
unix
mysqlが無い!!



Postfixを作り直す


参考にしたページはPostfix + Courier-IMAP

$ pwd
/home/admin/work/rpms
$ mkdir -p {SOURCES,SPECS,BUILD,SRPMS,RPMS/i386}
$ echo "%_topdir $HOME/work/rpms" > ~/.rpmmacros
$ cat ~/.rpmmacros
%_topdir /home/admin/work/rpms
SRPMを取得する
$ cd SRPMS/; pwd
/home/admin/work/rpms/SRPMS
$ wget http://ftp.riken.jp/Linux/centos/5/os/SRPMS/postfix-2.3.3-2.src.rpm
$ rpm -ivh postfix-2.3.3-2.src.rpm
quota修正用パッチ
$ cd ../SOURCES/; pwd
/home/admin/work/rpms/SOURCES
$ wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
$ gunzip -d postfix-2.3.3-vda.patch.gz
$ cd ../SPECS/; pwd
/home/admin/work/rpms/SPECS
specファイル修正。
MySQLを使えるようにする。
$ cp -pi postfix.spec /tmp/
$ vi postfix.spec
$ diff /tmp/postfix.spec postfix.spec
2c2
< %define MYSQL 0
---
> %define MYSQL 1
82a83
< Patch10: postfix-2.3.3-vda.patch
136a138
> %patch10 -p1 -b .vda
$ rpmbuild -ba postfix.spec
標準パッケージと入れ替える
$ su
Password:
# apt-get remove postfix
# rpm -ivh ../RPMS/i386/postfix-2.3.3-2.i386.rpm
mysqlが入っている事を確認
$ /usr/sbin/postconf -m
btree
cidr
environ
hash
ldap
mysql
nis
pcre
proxy
regexp
static
unix
OK



関連ページ



半袖 at 16:00|PermalinkComments(0)TrackBack(0)

RHEL4に[Postfix]+[Dovecot]+[PostfixAdmin]+[MySQL]環境構築(1/n) - 序章

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

話を聞いてみると、この構成が一番スマート


メールを環境を構築して欲しい。
そう頼まれた。
  • POPを使いたい
  • 複数ドメインを使いたい
  • アカウント管理をしたい

なるほど。

まだ構築した事がなかったけど、
一番スマートに思えた構成がこれ。

MTAPostfix+MySQL
POP3Dovecot+MySQL
管理ツールPostfixadmin+MySQL)

数エントリに分割して環境構築方法をまとめていく。


半袖 at 15:45|PermalinkComments(0)TrackBack(1)

2008年01月06日

Postfixで「envelope-from」と「envelope-to」を取得する

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

envelope情報


友達に聞かれたので再度確認メモ
「MAIL FROM」「RCPT TO」を取得する方法ないの?

以前書いたメールの時間範囲指定配送を考察 Postfix編では情報不足。

envelope環境変数内容SMTP
envelope fromSENDER送信者メールアドレスMAIL FROM
envelope toRECIPIENT受信者メールアドレスRCPT TO

検証方法


下準備

$ cat ~/.forward
"| /usr/bin/env > /tmp/env.log.$$"
  • 環境変数を/tmp/env.log.$$へ出力
SMTP
$ telnet [maa ipaddr] 25
HELO smtp.example.com
MAIL FROM:<foo+envelope@example.com>
RCPT TO:<bar+envelope@example.com>
DATA
Subject: envelope
To: foo+heder@example.com
From: bar+header@exampel.com

envelope
/tmp/env.log.$$の内容のうち、
RECIPIENTとSENDERが、
envelope-to,envelope-fromと一致している事を確認した。


半袖 at 14:00|PermalinkComments(0)TrackBack(0)

2007年11月16日

Postfixでsmtpだけダウンさせる

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

qmailの「qmail-smtpdだけダウン」
これをPostfixでやるにはどうしたらいいのか。

# vi /etc/postfix/master.cf
/etc/postfix/master.cfのsmtpをコメントアウト
# /etc/init.d/postfix check
# /etc/init.d/postfix reload

netstatで確認するなり、telnetで25番ポートへ接続してみると、
smtpだけダウンしている事を確認出来る。


半袖 at 15:10|PermalinkComments(0)TrackBack(0)

2007年08月13日

makeでサーバ管理効率を上げる Postfix編

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

自分は良くmakeを使う(Makefileを書く)。


▼makeの良い所
対象となるファイルのタイムスタンプを比較し、比較対照よりも
新しくなっている場合、何かしらの処理を行ってくれる所。


この利点を上手く利用してやるとサーバ管理の効率を上げる要素となる。
例えばPostfixのconfig。

Postfixを使っている人は分かるだろうけど、main.cfやmaster.cf、
これ等Postfixのconfigはincludeディレクティブ未対応。
それゆえ、main.cfやmaster.cfを1ファイルに設定を集約してやる必要が出て来る。


効率よく管理する方法はいくつかある。
そのうちの1つが、複数ファイルを1ファイルとして結合する方法。

▼confを結合する時のイメージ
d47f193a.png


※画像クリックで拡大表示


▼/etc/postfix/main.cfを結合生成プロセス

・/etc/postfix/parts.d-common/main.cf 管理サーバ群共通設定
・/etc/postfix/parts.d-local/main.cf サーバ特有設定
  ↓
  ↓2つを結合する
  ↓
・/etc/postfix/master.cf


▼Makefile例
PARTS_COMMON=parts.d-common
PARTS_LOCAL=parts.d-local
MAIN_CFS=$(PARTS_COMMON)/main.cf $(PARTS_LOCAL)/main.cf

all: main.cf

main.cf: $(MAIN_CFS)
cat $(MAIN_CFS) > $@
echo $@ done.



▼実行結果
$ make
cat parts.d-common/main.cf parts.d-local/main.cf > main.cf
echo main.cf done.
main.cf done.


makeを実行する事により、main.cfが生成される。
parts.d-common/main.cfかparts.d-local/main.cfのタイムスタンプと比較し、
main.cfのタイムスタンプが *古い場合*、main.cfが再生成される。


結合用スクリプトを生成するよりも、makeを利用した方が良い事は多々ある。
シェルスクリプトを作っておいて良かったと思った事は…無いな。

makeはソースをコンパイルする為だけの物ではない。
サーバ管理にも使えるスグレモノ。
上手く使えば大分サーバ管理効率を上げる事が出来るはず。

広がるmakeの世界。


半袖 at 23:35|PermalinkComments(0)TrackBack(0)

2007年08月01日

PostfixとSPFで受信側MTAのspamメール対策

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

Postfixとpostfix-policyd-spf-perlを使用し、
メールヘッダーに"Received-SPF"を追加する。


■環境
・OS: Debian GNU/Linux (etch)
・MTA: Postfix 2.3.8-2


■概要
・libmail-spf-perlをインストール
・postfix-policyd-spf-perlをインストール
・postfixの設定(/etc/postfix/master.cf編集)


▼Mail::SPF (libmail-spf-perl)
postfix-policyd-spfはMail::SPFに依存する。
debパッケージには存在しない。探してみたらubuntuにあった。

http://packages.ubuntu.com/feisty/perl/libmail-spf-perl


$ wget http://..../libmail-spf-perl_2.004-0ubuntu1_all.deb
$ sudo dpkg -i libmail-spf-perl_2.004-0ubuntu1_all.deb



▼postfix-policyd-spf-perlをdeb化する
postfix-policyd-spf-perlはdeb化される事を想定しているのだろう。
debian/ と言うディレクトリがある。まずはdebパッケージ作り


$ wget http://www.openspf.org/source/software/postfix-policyd-spf-perl/tags/2.004.tar.gz?view=tar -O postfix-policyd-spf-perl-2.0004.tar.gz
$ tar zxvf postfix-policyd-spf-perl-2.0004.tar.gz
$ cd 2.004/
$ chmod +x debian/rules
$ fakeroot dpkg-buildpackage -uc -us
$ ls -1 ../postfix-policyd-spf-perl*
../postfix-policyd-spf-perl-2.0004.tar.gz
../postfix-policyd-spf-perl_2.004-0ubuntu1.dsc
../postfix-policyd-spf-perl_2.004-0ubuntu1.tar.gz
../postfix-policyd-spf-perl_2.004-0ubuntu1_all.deb
../postfix-policyd-spf-perl_2.004-0ubuntu1_i386.changes
$ sudo dpkg -i ../postfix-policyd-spf-perl_2.004-0ubuntu1_all.deb


0utunbu1となっているけど気にしない


$ dpkg -L postfix-policyd-spf-perl
/.
/usr
/usr/sbin
/usr/sbin/postfix-policyd-spf-perl
/usr/share
/usr/share/doc
/usr/share/doc/postfix-policyd-spf-perl
/usr/share/doc/postfix-policyd-spf-perl/copyright
/usr/share/doc/postfix-policyd-spf-perl/changelog.gz
/usr/share/doc/postfix-policyd-spf-perl/changelog.Debian.gz
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/postfix-policyd-spf-perl.8p.gz



▼/etc/postfix/master.cfを修正


$ sudo vi /etc/postfix/master.cf
------------------------------
policy unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/sbin/postfix-policyd-spf-perl
------------------------------


追記したらreload


$ sudo /etc/init.d/postfix reload



▼テスト
実際に対してメールを送信し、
メールヘッダーにReceived-SPFが追加されているかを確認


半袖 at 15:55|PermalinkComments(0)TrackBack(0)

Postfixのsmtpd_*_restrictionsシリーズ

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

どんなアプリケーションの設定をしていても言える事。
設定を変更していると頻出する項目があるはずだ。

Postfixの設定の頻出設定項目の1つが「smtpd_*_restrictions」。
今までは具体的に何をしているのか良く理解していなかった。
これはメールの制御をする為のものだった。

接続からSMTPのコマンド毎まで、細かな設定が可能。
smtpd_*_restrictionsを、評価される順に並べると下記の通り。


smtpd_client_restrictions

smtpd_helo_restrictions

smtpd_sender_restrictions

smtpd_recipient_restrictions

smtpd_etrn_restrictions

smtpd_data_restrictions

smtpd_end_of_data_restrictions


Postfixは機能豊富。豊富過ぎる。
Postfixの設定だけで飯を食って行けそうな気がするくらいに多い。
ただ、使うのは、ごく一部の機能だけ。

リファレンスはリファレンスとして用意しつつ、
受験用英単語の様に、頻出設定項目順に紹介して行くのは需要がありそう。


Postfix 辞典
Postfix 辞典
posted with amazlet on 07.08.01
とみた まさひろ
翔泳社 (2006/06/21)
売り上げランキング: 203504



半袖 at 01:05|PermalinkComments(0)TrackBack(0)

2007年01月18日

『postconf -e param=value』でmain.cfの設定変更

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

パラメタの追加と変更は可能。


$ sudo /usr/sbin/postconf -e param=value


ただ、これでは任意のパラメタを削除出来ない…。
postconf -eだとファイルのロック処理をしてくれるので、全てを
postconfでやってしまおうと思っていた。管理インターフェース
として全てを任せられないではないか。

自前で削除処理をどうにかするしかないか。
デフォルト値を入れてやると言うのは1つの解決策か。


半袖 at 16:00|PermalinkComments(0)TrackBack(0)

2007年01月17日

/etc/init.d/postfix reload の終了コード その2

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

どうしても0ではないものにしたい場合の解決例

$ diff -C5 /tmp/postfix /etc/init.d/postfix
*** /tmp/postfix        2007-01-17 15:25:28.000000000 +0900
--- /etc/init.d/postfix 2007-01-17 15:28:27.000000000 +0900
***************
*** 101,111 ****
--- 101,113 ----
      force-reload|reload)
        log_action_begin_msg "Reloading Postfix configuration"
        if ${DAEMON} quiet-reload; then
            log_action_end_msg 0
        else
+           exitcode=$?
            log_action_end_msg 1
+           exit $exitcode
        fi
      ;;

      flush|check|abort)
        ${DAEMON} $1

# /etc/init.d/postfix reload
Reloading Postfix configuration...postfix/postfix-script: fatal: the Postfix mail system is not running
failed.
# echo $?
1


半袖 at 15:35|PermalinkComments(0)TrackBack(0)

/etc/init.d/postfix reload の終了コード

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録


# whoami
root
# /etc/init.d/postfix reload
Reloading Postfix configuration...postfix/postfix-script: fatal: the Postfix mail system is not running
failed.
# echo $?
0


failedになっても終了コードは0なのかよ…。
0でない事を期待していた。


半袖 at 15:20|PermalinkComments(0)TrackBack(0)

2007年01月03日

Postfixで頭にハイフン『-』の付くメールアドレスへ送信可能にする

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

Postfixは何もしないと頭にハイフンの付くメールアドレスへの送信不可能。


Jan 3 13:18:12 colinux postfix/qmgr[1234]: B52B520123: to=<-foo@example.com>, relay=none, delay=0, status=bounced (invalid recipient syntax: "-foo@example.com")


main.cfに『allow_min_user = yes』を追加


$ sudo vi /etc/postfix/main.cf
+ allow_min_user = yes
$ sudo /etc/init.d/postfix reload



Jan 3 13:38:19 colinux postfix/smtp[19284]: 3E3E34567B: to=<-foo@example.com>, relay=mail.example.com[192.0.2.25], delay=0, status=sent (250 Ok: queued as 85B80B2)


SPF等の送信ドメイン認証が原因ではない事もある。
MTAのログ確認を忘れずに。


半袖 at 13:45|PermalinkComments(0)TrackBack(0)

Postfixの.forward生成時の注意点

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

▼ファイル所有者に気をつける

.forwardのuid,gidは
 オーナーのuidかつ、
 オーナーのデフォルトグループのgidである必要あり。

.forwardが置かれているディレクトリのグループにオーナーが所属
されているのに.forwardが上手く働いていなかった。ログを見たら
gid問題だと言う事が判明。


Jan 2 13:15:16 colinux postfix/local[20745]: warning: file /home/project/bar/.forward has bad owner uid 1001


fooのデフォルトgidは1001なのに、gidが1002となっていた。
gidをデフォルトgidである1001に変更したら.forwardが有効になった。

解決例

$ sudo chown $(id -u ${file-owner}):$($id -g ${file-owner}) [file]




▼.forwardの中のコマンドはダブルクォートで囲む

何となく動いているコマンドはあるけど、意図した動きをしないコ
マンドもあった。原因はダブルクォートで囲んでいなかった事だ。

悪い例

| [command] || exit 75


良い例

"| [command] || exit 75"



半袖 at 10:00|PermalinkComments(0)TrackBack(0)

2007年01月02日

Postfixで複数サブドメイン名を1アカウントへ集約させる設定例

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

vpopmailにおいけるvpopmailユーザーに集約させるような設定例。
ここでは example.com と *.example.com 宛メールをpostmasterへ集約させる。


/^[^@]+@(.*\.)?example\.com$/ -> postmaster


▼ルックアップ方法とテーブルファイルの設定追加
正規表現を利用するのでregexpを指定。


$ sudo vi /etc/postfix/main.cf
+ # subaddr
+ virtual_alias_domains = regexp:/etc/postfix/virtual_domains
+ virtual_alias_maps = regexp:/etc/postfix/virtual


▼mapファイルの生データ作成

$ sudo vi virtual_domains
/@(.*\.)?example\.com$/i true
$ sudo vi virtual
/@(.*\.)?example\.com$/ postmaster


▼mapファイル作成

$ sudo /usr/sbin/postmap /etc/postfix/virtual_domains
$ sudo /usr/sbin/postmap /etc/postfix/virtual


▼確認

$ /usr/sbin/postmap -q foo@example.com regexp:/etc/postfix/virtual_domains
true
$ /usr/sbin/postmap -q foo@bar.example.com regexp:/etc/postfix/virtual_domains
true

受信可能ドメイン名である事を確認出来る。


$ /usr/sbin/postmap -q @example.com regexp:/etc/postfix/virtual
postmaster
$ /usr/sbin/postmap -q @bar.example.com regexp:/etc/postfix/virtual
postmaster

postfixへaliasされている事を確認出来る。

▼反映

$ sudo /etc/init.d/postfix reload
Reloading Postfix configuration...done.


▼確認

$ telnet 127.0.0.1 25
helo localhost
mail from:foo@example.com
rcpt to:bar@example.com
quit

$ telnet 127.0.0.1 25
helo localhost
mail from:foo@example.com
rcpt to:sub@sub.example.com
quit


もしもaliasされてない等のエラーが何かが不足している。
エラーメッセージをじっくり読んで臨機応変に対応。


半袖 at 13:40|PermalinkComments(0)TrackBack(0)

2006年12月21日

メールの時間範囲指定配送を考察 Postfix編

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

メールの時間範囲指定配送を考察の続き


今回はPostfixで実現する方法を考えてみた。
キーワードは『終了ステータスコード75』



▼終了ステータスコード


"| [command] [args] || exit 75"


 1. キューに対して何かしらの処理させたい[command]を作る
 2. 配送してはならないキューなら終了ステータスコードとして0ではないもので終了させる。例えばexit 1。
 3. exit 0でない場合は "|| [command]" が処理されるので上記ではexit 75を実行される
 4. 対象キューは再送対象となって配送されずに済む。

『何だよ…Postfixでもこれを使えたのか』と思った。



▼環境変数
環境変数を組み合わせると、送信者毎や受信者毎に処理させることが可能。

下記、環境変数例。他にもいくつかある。






SENDER送信者メールアドレス
RECIPIENT受信者メールアドレス
DOMAIN受信アドレスのドメインパート
LOCAL受信アドレスのローカルパート


例えば受信者メールアドレス毎に何かをしたい場合。


"| [command] $RECIPIENT || exit 75"


これは.forwardではなくmaster.cfにpipeとしてサービス登録しても動くはず。
これらを利用してやれば日時指定配送、時間指定配送を実現出来るはずでもある。

さて、アイデアはまとまった。検証はこれからだ。


半袖 at 11:10|PermalinkComments(0)TrackBack(0)

2006年12月18日

postfix/master.cfの書式

livedoorClipに登録 livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録


service type private unpriv chroot wakeup maxproc command + args


・『#』以降はコメント扱いし、無視
・空行は無視
・先頭が空白文字で開始されている行は、前の行からの継続行として扱う


半袖 at 19:15|PermalinkComments(0)TrackBack(0)