postfix with smtp auth

postfixをsmtp auth対応でコンパイルします。
これで、迷惑メールの中継を抑制することができるようになるので、
ようやく最低限の公開条件を満たすことができます。
まぁ、smtp authに対応しても設定が悪いと中継許可しまくりになりますので、
その辺は気をつけてください。

しかし、どうもsmtp authに弱いというか・・・
postfixがらみに弱いというか・・・
また、どつぼに嵌った・・・○| ̄|_
まぁ、成功するまでいろいろやりました。。。
「どつぼ」
また嵌りました。
何ででしょうね?やっぱ、不確定情報だからかな?
まぁ、何とかはっきりしたのでこれでOK?

やること一覧
	・(HGの)事前準備cyrus-saslのインストールpostfixをSMTP-AUTH対応でコンパイル設定とか各種テストの実行

関連ページ
	・postfixOutbound Port 25 Blocking対策(DIONの場合)無駄なメールが来るローカルIPがメールヘッダに漏れるopenssl



(HGの)事前準備

玄箱HGだと必須の作業ですが、その他の玄箱シリーズ(pro除く)でもこの作業を行うことを推奨します。
手順は別項:postfix#HGの事前準備を参照。
「事前準備」
これ以降はdbがインストール済みを前提で行われています。
玄箱Nにて問題が発生した場合にはこの項目の処理を行ってください。

cyrus-saslのインストール

事前準備:OpenSSLをインストール
暗号通信(SMTP over SSL)を利用する場合には事前にOpenSSLをインストールする必要がある。
手順は別項:opensslを参照。

smtp authの認証モジュール部分。cyrusの一部を利用するようだ。

ユーザー作成

	# useradd -g mail -u 26 -d /var/empty -s /bin/false cyrus
	# vipw
	または
	# vi /etc/passwd
		変更点:! を * に書き換える
cyrus-sasl-2.1.26.tar.gzを探してくる。
Project Cyrus
で、ユーザーのホームディレクトリにFFFTPで送る。
例のあれ
	$ tar xvfz cyrus-sasl-2.1.26.tar.gz
	$ cd cyrus-sasl-2.1.26
	$ ./configure --prefix=/usr --enable-cram --enable-plain --enable-login \
	--enable-gssapi=no [--with-dblib=gdbm]
		

option説明など
--enable-cram
--enable-plain
認証方式を指定
cramとplainを有効にしている
--enable-login認証方式を指定
アウトルック系のlogin認証を有効にする
--enable-gssapi=no何かわからないけどエラーが出るからdisableに
X関係のなにか。みたいだけど・・・
--with-dblib=saslで使うデータベースを指定
標準で組み込まれているgdbmを利用(dbをインストールしていない場合)

$ make $ make check # make install
インストールされるもの
	/usr/include/sasl/
	/usr/lib/sasl2/
	/usr/lib/libsasl2.*
	/usr/man/????
	/usr/sbin/sasl*
おまじない
	# strip -p /usr/sbin/sasl*
パスワードデータベース形式の指定(まぁ、おまじない)
	# vi /usr/lib/sasl2/Cyrus.conf
		補足:smtpd.conf でもOKらしい(よくわからないけど)
		(新規)
		┃pwcheck_method: auxprop
			注:よくわからないけど、とりあえず最後に改行を入れておけ♪(念のため)
	または、
	# echo "pwcheck_method: auxprop" >/usr/lib/sasl2/Cyrus.conf
「cyrus-sasl」
cyrusシリーズはあまり好きじゃないです。
だって、わけわかんないんだもん。
パスワードデータベースの指定のところで「改行」の有無でうまく行かなかった(かも知れない)
なんてことがあったので、好きじゃないです。

もし、「データベースがみつからねぇよヽ(`Д´)ノ」って言うエラーが出たら、
Cyrus.confか、gccを疑ってください。

postfixをSMTP-AUTH対応でコンパイル

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を運用中なら(リビルドなら)インストール前に止める。
	# /etc/init.d/postfix stop
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 tidy]
		注:前回ビルドした残骸が残ってる人はこれを使う
		  make cleanとは違いMakefileも削除するみたい
		  設定が変わってない人はmake cleanでいいんじゃ・・・?(´・ω・`)
	$ patch -p0 <~/postfix_smtpd.c.obj
		注:ローカルIP(プライベートIP)を「Received:」に表示させないようにするパッチ
		  関連情報:ローカルIPがメールヘッダに漏れる
		  不要(orわからない)なら飛ばしてかまわない
		ローカルIP隠蔽パッチ(2.5.5ベース)(postfix_smtpd.c.tar.gz) md5sum crc32:FA0416DF

	postfix-2.2.*以前なら
	$ make makefiles OPT=-O2 \
	CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl" AUXLIBS="-L/usr/lib -lsasl2"

	postfix-2.3.0以降なら
	$ make makefiles OPT=-O2 \
	CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" \
	AUXLIBS="-L/usr/lib -lsasl2"
		

option説明など
CCARGS=”いんくるーどへっだふぁいる”の場所を指定する
よくわからない(´・ω・`)
AUXLIBS=”らいぶらりふぁいる”の場所を指定する
よくわからない(´・ω・`)

注:postfix-2.3.0以降ではDovecot protocol version 1のサポートに伴い、   コンパイル時にcyrusを使用することを宣言する必要がある。 $ make # make install インストール時の質問一覧 ┃install_root: [/] ┃tempdir: [/home/[username]/postfix-2.10.2] ┃config_directory: [/etc/postfix] ┃command_directory: [/usr/sbin] ┃daemon_directory: [/usr/libexec/postfix] ┃data_directory: [/var/lib/postfix] ┃html_directory: [no] ┃mail_owner: [postfix] ┃mailq_path: [/usr/bin/mailq] ┃manpage_directory: [/usr/local/man] /usr/man ┃newaliases_path: [/usr/bin/newaliases] ┃queue_directory: [/var/spool/postfix] ┃readme_directory: [no] ┃sendmail_path: [/usr/sbin/sendmail] ┃setgid_group: [postdrop]
上記設定でインストールされるもの
	/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
「SMTP-AUTH対応でコンパイル」
取り込み自体は問題なく行えるはずです(makefilesの設定さえ間違えなければ)
失敗する原因はgccかcyrusの設定でしょうね。
あとは、ユーザー登録のミスか。

設定とか

こまごまとした設定とか。
postfixの設定(master.cf)によって設定で使うコマンドが異なる。

パスワードの作成(設定によって選ぶこと)

	# saslpasswd2 -c -u `postconf -h myhostname` user名
	または
	# saslpasswd2 -c -u `postconf -h mydomain` user名
		注:パスワードの変更もこのコマンドでOK
		注:メール用パスワードはtelnet等で使用するパスワードと違うものでOKです
		  むしろ、変えたほうが安全♪
パスワードの削除(設定によって選ぶこと)
	# saslpasswd2 -d -u `postconf -h myhostname` user名
	または
	# saslpasswd2 -d -u `postconf -h mydomain` user名
登録内容の確認
ちゃんとメールアドレスになっているか確認する。
	# sasldblistusers2
データベースの設定
	# chgrp postfix /etc/sasldb2
	# chmod 640 /etc/sasldb2
postfixの設定変更
	# vi /etc/postfix/main.cf
		(smtp authに関する一部)
		┃smtpd_sasl_auth_enable = yes
		┃smtpd_sasl_local_domain = [$myhostname]or[$mydomain]
		┃broken_sasl_auth_clients = yes
		┃smtpd_sasl_security_options = noanonymous
			注:smtpd_sasl_local_domainはどちらか1つを指定する
			解説(上の項目から)
			  saslによるsmtp authを有効にする
			  ローカル認証のREALMの指定(パスワード作成に用いたものと同じにする)
			  アウトルック系のログオン形式を有効にする
			  使用可能な認証メカニズムの設定(匿名での接続を拒否)
postfix起動
	# /etc/init.d/postfix start
「postfixの設定」
とにかく設定できる幅が広いです。
まぁ、私も結構はまりましたし、
設定に落ち度があって、それを利用されるのも嫌ですので公開はしません。
皆さんもはまってください(まぁ、案外さっくりと進めると思いますが)

各種テストの実行

smtp authの動作確認
SMTP_AUTH対応のメーラーで送信するか、telnetを使って確認する。

テスト用ユーザーの登録(ここでは$mydomainとして登録している)

	# saslpasswd2 -c -u `postconf -h myhostname` testuser
	または
	# saslpasswd2 -c -u `postconf -h mydomain` testuser
	password testpass
telnetでpostfix(ポート25)に接続(コンソールからさらにtelnetする)
	$ telnet localhost 25
	(画面が停止したら)
	EHLO [$mydomain]
	(画面が停止したら)
	AUTH PLAIN dGVzdHVzZXIAdGVzdHVzZXIAdGVzdHBhc3M=
	で、
	┃235 Authentication successful
	と出ればOK
	quit
	で終了
テストユーザーの削除
	# saslpasswd2 -d -u `postconf -h myhostname` testuser
	または
	# saslpasswd2 -d -u `postconf -h mydomain` testuser
他にやるべきテスト
	LAN内送信テスト(PCから玄箱へ)
	ルーターのポートを開ける(25番)
	受信テスト(プロバイダから玄箱へ)
	送信テスト(LAN内からプロバイダなどへ)
	第3者不正中継テスト
	LAN外からの(インターネット越しの)接続テスト
	 1.外部からの接続〜玄箱へのメール送信
	 2.外部からの接続〜プロバイダへのメール送信
「smtp authの動作確認」
telnetでテストする場合、このユーザー名とパスワードしか使えません。
理由は玄箱付属のperlにBase64のエンコーダーが含まれていないから。
なので、テストユーザーは確実に削除指定ください。
踏み台にされますよ?

まぁ、時間を掛けてperlを再インストールすればそれでOKですけどね。
面倒でしょ?
詳しく知りたい人はSMTP認証の「PLAIN認証の検証」を見てください。

メーラーでの確認は特に制限がないので自由に設定しても大丈夫です。

ここに関しては私も「いつの間にかできるようになっちゃった」という感じなので、正確かどうかはわかりません。
自分でもう一回したら、うまく行かない可能性もある位、適当です(をひ

あぁ、そうそう。 smtp authのテストするときには「permit_mynetworks」をはずしてくださいね。
じゃないとmynetworksに指定したアドレスからはsmtp authの結果にかかわらず、無条件でリレーしますから。
テストの意味がなくなります。


戻るなら押せ!