- PR -

qmailの送信元IPを指定する方法

投稿者投稿内容
AON
会議室デビュー日: 2005/03/23
投稿数: 4
投稿日時: 2005-03-24 00:44
はじめまして、AONです。

下のページを参考にさせていただき、qmailをインストールしました。

http://www.atmarkit.co.jp/flinux/rensai/qmail01/qmail01a.html

現在、サーバは2つのIP(@192.168.10.10、A192.168.10.20)を持っていて、
Aを送信元IPとしてメールを送りたくて、調べたところ、
outgoingip.patchというものがあることがわかりました。
これはAを指定しておけば、そのIPを送信元IPとしてメールを送ってくれると
いうものですよね?

しかし、そのパッチを入手することもできず、使い方もわかりません。
元から入っているものなのでしょうか?
どなたか知っている方、教えていただけませんでしょうか?

素人で申し訳ありませんが、よろしくお願いします。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-03-24 08:17
qmail は悪名高い DJB ライセンスと呼ばれるものの基で配布されており、再配布条件として一切のカスタマイズを禁止されているので (バイナリ配布の場合はコンパイルオプションやインストール先をデフォルトから変更することさえも禁止されていたと思います) 、パッチが最初から付随しているということはないと思います。

一応、非公式サイトである

http://www.qmail.org/

には、Recommended Patches としていくつかのパッチが挙げられているようですが、それ以外のパッチの適用については恐らくネット上をくまなく探し回るか自分でソースコードを修正する以外ないと思います。
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2005-03-24 11:06
引用:

あんとれさんの書き込み (2005-03-24 08:17) より:
qmail は悪名高い DJB ライセンスと呼ばれるものの基で配布されており、再配布条件として一切のカスタマイズを禁止されているので (バイナリ配布の場合はコンパイルオプションやインストール先をデフォルトから変更することさえも禁止されていたと思います) 、パッチが最初から付随しているということはないと思います。



悪名高いかどうかは私にはわかりませんが
あくまで変更したものを再配布するにはD. J. Bernstein氏の承認が必要って
ことで禁止ではありませんけどね。
http://cr.yp.to/qmail/dist.html

承認が下りなさそうなイメージがあるので(個人的にはですが。。。)
あんとれさんのおっしゃることはあながち遠くない気がしますけど

パッチは、↓のことでしょうか?
http://www.qmail.org/outgoingip.patch

その他、netqmail向けのパッチもあるようなので
探すときには注意が必要かもしれません。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-03-24 12:09
はじめまして。
引用:

AONさんの書き込み (2005-03-24 00:44) より:
現在、サーバは2つのIP(@192.168.10.10、A192.168.10.20)を持っていて、
Aを送信元IPとしてメールを送りたくて、調べたところ、
outgoingip.patchというものがあることがわかりました。
これはAを指定しておけば、そのIPを送信元IPとしてメールを送ってくれると
いうものですよね?



Linuxであれば、qmail側で対処しなくても、netfilter(iptables)のNAT機能を使っても良いように思いました。

# iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source 192.168.10.20

のように。
ところで、同一IPセグメントのアドレスを2つ持っていて、なおかつ送信元IPアドレスを固定したいっていうのは、どういった状況なのか興味があります。差し支えなければ教えて頂きたいところです。
AON
会議室デビュー日: 2005/03/23
投稿数: 4
投稿日時: 2005-03-25 02:53
みなさん、ご返答ありがとうございます。
AONです。

#あんとれさん、anightsさん
http://www.qmail.org/ のサイトなどネットで探して見つけたのが、anightsさんのおっしゃるhttp://www.qmail.org/outgoingip.patch でした。
ただ、内容を見てもどのようにパッチをあてるのか全くわからなくて。。。
どのようにあてるのか、よろしければ教えていただけないでしょうか?

#angel
iptablesのアドバイスをいただき、少しネットで調べてみました。
やろうとしていることは、
2つのqmailを別ポートを用いて立ち上げて、それぞれIPをひとつずつ固定して、外へメールを出したいということになります。
FWを介してそれぞれのローカルIPをグローバルIP(例えば「192.168.10.10を1.1.1.10へ」と「192.168.10.20を2.2.2.20へ」)に変換し、それぞれのグローバルIPをDNSに登録(例えば「1.1.1.1をmail.a.co.jp」と「2.2.2.2ををmail.b.co.jp」)しています。
ですので、それぞれのIPを固定して送らなければDNSの変換がうまくいかなくて。
メールのヘッダ情報なども含め、すべて別々の情報にできなかったり。
バーチャルドメイン(vpopmail)を考えてみたのですが、これまでの他の方の記事を見たりしてもひとつのIPでしか行ってくれないようで、outgoingip.patchという存在を知り、2つqmailを立ち上げる方法でなんとかならないかと考えていました。
2つのqmailを立ち上げるのはうまくいったのですが。
教えていただいたiptablesを用いた場合、両方のqmailともが片方のIPに固定になってしまうのかなと考えています。
それぞれのqmailをそれぞれのIPに固定することも可能でしょうか?

qmailにしてもDNS登録にしても、何か認識誤りがあるかもしれませんが、何かおわかりでしたら、教えてください。

よろしくお願いします。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-03-25 09:37
おはようございます。
引用:

2つのqmailを立ち上げるのはうまくいったのですが。
教えていただいたiptablesを用いた場合、両方のqmailともが片方のIPに固定になってしまうのかなと考えています。
それぞれのqmailをそれぞれのIPに固定することも可能でしょうか?


む…、なかなかトリッキーなことになりそうな…。
この「2つのqmail」というのは、qmailを2つ別々にインストールしていると考えて良いでしょうか? その前提で話を進めます。

qmail が外部送信するときに使用するユーザは、標準では qmailr になるはずですが、2つインストールしているならば、このユーザも2人できることになりますから、qmailr1, qmailr2 としましょう。

そうすると、

# iptables -t mangle \\
-m owner -m mark -A OUTPUT \\
--uid-owner qmailr1 \\
-p tcp --dport 25 \\
-j MARK --set-mark 1

# iptables -t nat \\
-m mark -A POSTROUTING \\
-p tcp --mark 1 \\
-j SNAT --to-source 192.168.10.20

このように、「送信ユーザが qmailr1」「送信先がTCP25番ポート」という条件で、送信元IPアドレスを替えられます。(コマンドが長いので、複数行に分割してます)
※--set-mark と --mark で指定した 1 は、同じ数であれば、他の値でも問題ないです。
同様に qmailr2 の方も、--set-mark, --mark で指定する数を別にしてやれば良いでしょう。

ちなみに、私も複数IPアドレス環境での qmail構築はやったことありますが、送信元IPアドレスを使い分ける必要性を感じた事はないので、上のようなことはやったこと無いです。
SMTPサーバ(受信)を使い分けるだけなら、qmail本体は1つだけにして、必要IPアドレス分の tcpserver を起動すれば済むことですから。(場合によっては、tcpserverも1プロセスで済む)
anights
ぬし
会議室デビュー日: 2003/05/22
投稿数: 277
お住まい・勤務地: 東京
投稿日時: 2005-03-25 10:42
引用:

AONさんの書き込み (2005-03-25 02:53) より:
#あんとれさん、anightsさん
http://www.qmail.org/ のサイトなどネットで探して見つけたのが、
anightsさんのおっしゃるhttp://www.qmail.org/outgoingip.patch でした。
ただ、内容を見てもどのようにパッチをあてるのか全くわからなくて。。。
どのようにあてるのか、よろしければ教えていただけないでしょうか?



パッチあてなんて調べれば説明しているサイトはすぐ見つかると思うのですが。
ちなみに下記は他のパッチ等は考慮していません。
OSはRedhat EL3ですのでコマンドオプションなどは適時読み替えて下さい。

# ls
outgoingip.patch
qmail-1.03.tar.gz

# tar xvzf qmail-1.03.tar.gz
# cd qmail-1.03
# patch -p0 < ../outgoing.patch
patching file qmail-control.9
Hunk #1 succeeded at 56 with fuzz 2 (offset -1 lines).
patching file qmail-remote.8
patching file qmail-remote.c
patching file qmail-showctl.c
patching file remoteinfo.c
patching file timeoutconn.c

元のqmail-1.03にあてるとこんな感じになるはずです。
Hunkについて気になるなら自分で調べて下さい。
AON
会議室デビュー日: 2005/03/23
投稿数: 4
投稿日時: 2005-03-26 17:49
AONです。

いろいろとありがとうございます。
なんとか複数ドメイン構築ができました。
本日中までに必ずやらなきゃいけなかったので、ほんと焦りました。

angelさんからお教えいただいたqmailユーザの区別でiptablesを設定する方法でやろうとしたのですが、押し迫る時間があったので諦めました。
これを機会にiptablesを勉強したいと思ってます。
結局、outgoingipパッチを用いてやりました。
パッチの中身を見て、経験が少ない私にはpatchコマンドを実行するだけではダメかと思っていました。anights、ありがとうございました。

angelさん
>SMTPサーバ(受信)を使い分けるだけなら、qmail本体は1つだけにして、必要IPアドレス分の
>tcpserver を起動すれば済むことですから。

これについてですが、それぞれのIPをそれぞれのドメインに割り当ててDNS登録している私の場合にも送信元IPを固定しなくても大丈夫ということでしょうか?
例えば、下記のようDNS登録してあって、どちらのドメインのメールも1.1.1.1で送信した場合、a.comのメールは問題なく、b.comのメールも送れるのですが届いた先のメールのヘッダの「Received:」や「Message-ID:」にa.comや1.1.1.1の情報が付与されてしまいます。
〜〜〜〜
1.1.1.1 は mail.a.com
2.2.2.2 は mail.b.com
〜〜〜〜
CNAMEなどをうまく使ってやれば可能なのでしょうか?
わざわざ送信元IPを固定しなくても、実現できるのであれば、
自分の知識不足のせいでいろんな遠回りをしているんだろうなと思いまして。
よろしければ教えてください。

みなさん、ほんとにいろいろとありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)