postfix

一般にMTA(Message Transfer Agent)、またはSMTP(Simple Mail Transfer Protocol)といわれ、
メールの送信とメールの受信〜振り分けを担当するものです。
わかりにくいですので、詳しいところは他のサイトを検索して調べてください。

で、今回は、そのメールシステムの根幹を組み立てます。
いろいろ一度にやるとややこしくなって、問題発生時の切り分けが面倒になるので、
変な認証システムを組み込まず「素のMTA(SMTP)」を作ってみます。
まぁ、このまま運用するのはちょっと不安な代物ですが・・・
「メールの送信とメールの受信〜振り分けを担当」
世間一般で言うSMTPというと「メールの送信」を担当するものとなっています。
(SMTPの本当の意味はメール送信用のプロトコルなんですけどね)
まぁ、間違いじゃないんですが、役割はもう少し大きいです(MTAという意味では)
メールの送信=SMTP、メールの受信=POPとされているのはやっぱりメールクライアントのせいかな?
他にも、spamのせいということもできるかも。
spamは自前のSMTPを使って無差別にメールを送るケースがあるので、このためかなぁ?

まぁ、皆さんもspamの踏み台にされないように注意してください。
もし、spamの踏み台にされているような形跡が見つかったら、真っ先にLANケーブルを抜くことをお勧めします。

やること一覧
	・HGの事前準備postfixのインストール各種設定Postfix チュートリアル
		Postfixの設定
		メールサーバ( Postfix )不正中継テスト

関連ページ
	・postfix with smtp authOutbound Port 25 Blocking対策(DIONの場合)無駄なメールが来るローカルIPがメールヘッダに漏れるgccの再インストール



HGの事前準備

玄箱HGだと必須の作業ですが、その他の玄箱シリーズ(pro除く)でもこの作業を行うことを推奨します。
HGでpostfixをコンパイルしようとすると以下のエラーが出てしまう・・・

	make時のエラーメッセージ部分
	┃/usr/powerpc-hardhat-linux/bin/ld: cannot find -ldb
	┃collect2: ld returned 1 exit status
	┃make: *** [master] Error 1
	┃make: *** [update] Error 1
要は、libdb.aが見つからないらしい。
なら、dbとやらをインストールすれば良い。

事前準備:gccの再インストール
Berkeley DBをコンパイルする時、以下のエラーがでるので再インストールが必要。
	make時のログ(すぐ止まります)
	┃/bin/sh ./libtool --mode=compile cc -c -I. -I../dist/..  -D_GNU_SOURCE -D_REENTRANT -O3  ../dist/../mutex/mut_tas.c
	┃mkdir .libs
	┃ cc -c -I. -I../dist/.. -D_GNU_SOURCE -D_REENTRANT -O3 ../dist/../mutex/mut_tas.c  -fPIC -DPIC -o .libs/mut_tas.o
	┃../dist/../mutex/mut_tas.c: In function `__db_tas_mutex_lock':
	┃../dist/../dbinc/mutex_int.h:517: impossible register constraint in `asm'
	┃../dist/../dbinc/mutex_int.h:517: `asm' needs too many reloads
	┃make: *** [mut_tas.lo] Error 1
手順は別項:gccの再インストールを参照。

事前準備:dbことBerkeley DBをインストール
db-4.8.30.tar.gzを探してくる(注;postfixはbd-4.x系までしか対応していない)
Berkeley DBダウンロード
ちょっち、いつもと手順が違う(詳しくは同梱マニュアル:db-4.8.30/docs/参照)
例のあれ(?)
	$ wget http://kuro.crow2.net/server/data/db-4.8.30.tar.gz
	$ tar xvfz db-4.8.30.tar.gz
	$ cd db-4.8.30/build_unix
	$ ../dist/configure --prefix=/usr
	$ make
	# make install
インストールされるもの
	[prefix]/bin/
		db_archive db_deadlock db_hotbackup db_printlog db_stat db_verify 
		db_checkpoint db_dump db_load db_recover db_upgrade
	[prefix]/docs/*
	[prefix]/include/
		db.h db_cxx.h
	[prefix]/lib/
		libdb-* libdb.a libdb.so
おまじない
	# cd /usr/bin
	# strip -p db_archive db_deadlock db_hotbackup db_printlog db_stat \
	db_verify db_checkpoint db_dump db_load db_recover db_upgrade
	# rm -r /usr/docs
		注:ソースアーカイブの中にまったく同じものがあるので削除
「libdb.aが見つからない」
玄箱Nだと/lib/libdb.aと存在するファイルなんですが・・・
どうも、玄箱HGで削除されてしまったファイルみたいです。
dbを3.2から3.3にアップデートしたときに間違って削除したみたいな痕跡が・・・(ーーA"

postfixのインストール

作業自体に難しいことはないので、サクっとやる。

postfixに必要なユーザーとグループを作る

	# groupadd -g 25 postfix
	# useradd -g postfix -u 25 -d /var/empty -s /bin/false postfix
	# groupadd -g 26 postdrop
ユーザーをロックする
	# vipw
	または
	# vi /etc/passwd
		変更点:! を * に書き換える
postfixのコンパイル
インストール時にいくつか質問が来るが基本的にそのままで大丈夫。
postfix-2.10.2.tar.gzを探してくる。
The Postfix Home Page
で、ユーザーのホームディレクトリにFFFTPで送る。
例のあれ
	$ tar xvfz postfix-2.10.2.tar.gz
	$ cd postfix-2.10.2
	$ make makefiles OPT=-O2
		

option説明など
OPT=-O2Makefileにコンパイルの最適化設定を指定(省略可)

$ make # make install インストール時の質問(順不同) ┃install_root: [/] ┃tempdir: [/home/[username]/postfix-2.10.2] ┃config_directory: [/etc/postfix] ┃daemon_directory: [/usr/libexec/postfix] ┃command_directory: [/usr/sbin] ┃queue_directory: [/var/spool/postfix] ┃sendmail_path: [/usr/sbin/sendmail] ┃newaliases_path: [/usr/bin/newaliases] ┃mailq_path: [/usr/bin/mailq] ┃mail_owner: [postfix] ┃setgid_group: [postdrop] ┃html_directory: [no] ┃manpage_directory: [/usr/local/man] /usr/man ┃readme_directory: [no]
上記設定でインストールされるもの
	/etc/postfix/
	/usr/bin/newaliases
	/usr/bin/mailq
	/usr/libexec/postfix/
	/usr/sbin/post*
	/usr/sbin/sendmail
	/usr/man/?
	/var/spool/postfix/
おまじない
	# strip -p /usr/sbin/post*
	# strip -p /usr/sbin/sendmail
	# chown -R postfix /var/spool/postfix
「postfix」
なんか、qmailと違ってpostfixの場合、Maildirを自動で作ってくれる。
便利。っていうか、楽。
まぁ、いい加減、書くことがなくなってきたってこと。

各種設定

アリアスを定義する
aliasesって、
「AというユーザーとBというユーザーは一緒だから、メールの配送はBのディレクトリに送って」
って言うことを指示する設定ファイル。

	# vi /etc/postfix/aliases
		(変更)
		┃root:           [username]
			変更点:コメントをはずして you を [username] に変更
aliasesをデータベースに変換する
	# newaliases
		注:書きえるたびに実行する
メインの設定を弄る
main.cfは一度ダウンロードしてから編集する。
参考サイトを見ながら変更し、アップロードで上書きする。
詳細に関しては、あまりに(proftpd以上に)ややこしいので割愛。

起動スクリプトを作る
参考サイトを見ながら、適当な起動スクリプトをカスタマイズして作る。
postfix起動スクリプト(postfix.tar.gz) md5sum crc32:A4BEADCC
  上記起動ファイルでは start stop restart reload abort queue が使えるようにしている。
  まぁ、書かなくてもわかると思うけど、無保証です。

テスト
	# /etc/init.d/postfix start
	メールの送信とユーザーディレクトリへの配送を確認
		注:メーラーから送信はできるが、メーラーに受信はできない
	# /etc/init.d/postfix restart
	# /etc/init.d/postfix stop
自動起動設定
	# ln -s /etc/init.d/postfix /etc/rc.d/rc2.d/S30postfix
	# ln -s /etc/init.d/postfix /etc/rc.d/rc0.d/K30postfix
	# ln -s /etc/init.d/postfix /etc/rc.d/rc6.d/K30postfix
再起動(テスト)
	# shutdown -r now
「自動起動設定」
本当はメールシステムのような重要なものはいち早く起動して、
できるだけ最後に終了するようにしたほうがいいです。
でも、そんなことを考えずに設定したので(今から変更するのも面倒だし)、上記のような設定になってます。
やるときには適当に調整してください。

不正中継テスト

設定はうまく行っても、メールの転送を許可していたら
百害あって一利なしなので、
不正中継テストを実行して、不正利用される可能性がないか確認する。

第三者中継チェック RBL.JP

使い方
	0.サイトに書かれていることをよく読む。
	1.ホスト名のところに、ドメイン、グローバルIPを入力する。
	2.Checkのボタンを押す。
	3.しばらく待つ。
	4.結果を受け止める。
Mail relay testing
使い方
	1.Address to testのところに、ドメインか、グローバルIPを入力する。
	2.test for relayのボタンを押す。
	3.しばらく待つ。
	4.結果を受け止める。
テストを受けるときにはルーターのポート25を開放する。
「spam」
不正中継テストには合格していますが、気になるので時々ログを見てチェックしています。
だって、spamメールって嫌じゃない?ウィルスメールも嫌だけどさ。
あの、神経を逆撫でするような内容・・・
今やおちおちサイトにメールアドレスを公開できない時代になっちゃいましたからね。
spamを許しちゃうと、世界中のmail鯖から拒否されちゃいますからね・・・(;´Д`)


戻るなら押せ!