qmail-bindsrcaddr.patch, netqmail-1.05-ipme.patch
qmail-bindsrcaddr.patch とは
IPエイリアスやNICを2枚以上使用してIPアドレスを2個以上所有している環境下で、qmailを使用する場合に、qmail-remoteに指定したIPアドレスを送信元(Source)IPとしてbindさせる事が出来る機能を追加したパッチです。
これにより、chroot等でqmailを1台のマシンで複数動作させても、それぞれのqmailインスタンスで別のIPアドレスを送信元として使用させることにより、IPベースでバーチャルホスティングが可能になります。
# ちなみに、qmail-bindsrcaddr.patchと全く同じ動作をする(が、よりコードがきれいと思われる)outgoingip.patchというのも存在します。(存在を知らずに作ってしまいました)
netqmail-1.05-ipme.patchとは
qmail-bindsrcaddr.patch を使用して、chroot等によって2つ以上のqmailを動作させる場合に発生する問題点として、外部へのSMTPは成功するが、自ホスト内の別のqmailへのsmtpは失敗してしまうと言う症状が発生します。
これは、
Sorry. Although I'm listed as a best-preference MX or A for that host,
it isn't in my control/locals file, so I don't treat it as local. (#5.4.6)
というエラーが示すとおり、送信先が自ホストだった場合、SMTP接続は行わず、qmail-remoteは上記エラーを出して、終了します。
そのため、このパッチを導入することにより、自ホストのIPアドレスは、指定したIPアドレスのみであることを設定する事ができ、それ以外のIPアドレスは、たとえ自ホストのIPアドレスであっても、別のものと認識させることが出来ます。
動作イメージ
環境
インストール方法
qmail-bindsrcaddr.patch, netqmail-1.05-ipme.patchをダウンロードしてから、netqmailのcollate.shスクリプト実行後に、ソースディレクトリ内で、patch < qmail-bindsrcaddr.patch; patch < netqmail-1.05-ipme.patchを実行します。
具体的には以下の通りに行います。(qmail-bindsrcaddr.patch, netqmail-1.05-ipme.patchはtmp以下にあるものとしています)
$ tar -zvxf netqmail-1.05.tar.gz
$ cd netqmail-1.05
$ cd ./collate.sh
$ cd netqmail-1.05
$ patch < /tmp/qmail-bindsrcaddr.patch
$ patch < /tmp/netqmail-1.05-ipme.patch
$ make
# make setup check
qmail-bindsrcaddr.patchのダウンロード
netqmail-1.05-ipme.patchのダウンロード
設定してみる
通常の場合、/var/qmail/control配下の、sourceipファイルに送信元IPとして使用したいIPアドレスを記述します。
例えば、192.168.0.1を送信元IPアドレスとして利用したい場合は以下の通りです。
# echo "192.168.0.1" > /var/qmail/control/sourceip
sourceipファイルを作成しない場合は、通常のqmail-remoteの動作となります。
さらに、自ホストのIPアドレスをsourceipのみとして指定する場合、/var/qmail/control配下の、usesourceiponlyファイルに1を設定します。
# echo 1 > /var/qmail/control/usesourceiponly
これにより、qmailは自分のIPアドレスはsourceipアドレスに指定されたアドレスだけだと認識します。(たとえ、IPエイリアス等で複数のIPを持っていても、sourceipのIPアドレス以外のIPアドレスは、他ホストのIPアドレスだと認識します)
テスト
テキトーな外部のメールサーバにメールを送ってみます。
Received: ヘッダに指定した送信元IPアドレスが記載されていればOKです。
自ホストの別のqmailインスタンス宛にqmail-smtpdでメールを送信します。送信出来ればOKです。
注意
sourceipファイルに記述するIPアドレスを間違えると、全く外部に送信出来なくなります。(Sorry,_I_wasn't_able_to_establish_an_SMTP_connection._(#4.4.1) というエラーになります)
usesourceiponlyファイルに1を設定している場合で、sourceipファイルを設定しなかった場合には、"System resources temporarily unavailable. (#4.3.0)"というエラーが出ます。
usesourceiponlyファイルに1を設定しない場合、qmail-remoteはsourceipファイルのIPアドレスを送信元IPとして使用しますが、自ホスト内に別のqmailが立ち上がっていた場合には、送信出来ません。
ライセンス
このパッチは、GNU GPLによって配布いたします。
このパッチによって発生したいかなる損害も、Watanabe Keijiは負いませんのでご了承願います。
バグがありましたら、ご連絡ください。