- PR -

sendmailの転送設定について教えてください

投稿者投稿内容
某学校サーバ管理者
会議室デビュー日: 2004/05/24
投稿数: 18
投稿日時: 2004-05-24 22:53
はじめまして。
とある学校でサーバの管理をしている者です。
どなたか、sendmailの設定について教えていただきたく、書き込みをいたしました。

こちらの学内では、以下のようなメール転送をしております。

     Internet
      |
      |
   interscanサーバ
    |    |
 Aドメイン  Bドメイン 
 sendmail  sendmail

学内に2つのドメインが存在するために、一旦DMZ上にあるinterscanで
受信をして、その後、2つのサーバに転送をしています。
現在、
 ・学内外のメール送信はInterscanサーバを経由する(ウィルスチェックがかかる)
 ・ABドメイン間のメール送信でも、Interscanサーバを経由する
 ・Aドメイン内、Bドメイン内でのメール送信の際には、ローカルで処理をする
という設定になっています。


これで問題なく稼動していたのですが、先日同一ドメイン内にウィルスメールが
紛れ込んだ模様で、同一メールドメイン内のメールもinterscanを経由するように、
設定を変更したいのです。



現状の動作を有効にしている(と私が思っている)設定は、Aドメインのsendmail
サーバにおいては、以下のとおりです。
 [/etc/mail/local-domain-name]
a.school.ac.jp #Bドメインではb.school.ac.jp いずれもドメイン名
[/etc/mail/sendmail.cf]
DSinterscan.school.ac.jp
DMa.school.ac.jp       #BドメインではDMb.school.ac.jp いずれもドメイン名

sendmail -bt を使用して、cfファイルを変更して、以下のような調査を
しています。
 (1)/etc/mail/local-domain-name の内容をカラにする。
  (この時点では転送方法は変わらない)
 (2)実験用のcfファイルを作って、DM 行をコメントアウトする
 (3)DM 行は#を外し元に戻して、DSsmtp:interscan.school.ac.jpとする
(2)、(3)のどちらのcfファイルを使っても、sendmail -btの結果では、interscanサーバに
転送されます。
これならめでたし、といいたいところですが、問題は、実際にsendmailを再起動してcf
ファイルを読み込ませた場合、interscanサーバとaサーバ、interscanサーバとbサーバの
間で、ループが発生するのではないか、という事が心配です。
それが心配なので、まだ実際の転送確認ができていないのです。

どなたか、正しい方法をお教えください。

長い文章になってしまい、申し訳ありません。




kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-05-25 11:33
こんにちわ.
引用:

某学校サーバ管理者さんの書き込み (2004-05-24 22:53) より:

こちらの学内では、以下のようなメール転送をしております。

     Internet
      |
      |
   interscanサーバ
    |    |
 Aドメイン  Bドメイン 
 sendmail  sendmail

学内に2つのドメインが存在するために、一旦DMZ上にあるinterscanで
受信をして、その後、2つのサーバに転送をしています。
現在、
 ・学内外のメール送信はInterscanサーバを経由する(ウィルスチェックがかかる)
 ・ABドメイン間のメール送信でも、Interscanサーバを経由する
 ・Aドメイン内、Bドメイン内でのメール送信の際には、ローカルで処理をする
という設定になっています。


sendmail とは関係ありませんが,InterScan VirusWall ですよね?user の「数」で縛りがあると思いますが,言い換えると「user 数が変わらないなら,何台に導入しても良い」んじゃないかと.であれば,それぞれのメールサーバに個別に導入してしまえば簡単な話ですね.
個人的には,InterScan から「どのように分配しているの?」と興味があったりします.

引用:

現状の動作を有効にしている(と私が思っている)設定は、Aドメインのsendmail
サーバにおいては、以下のとおりです。
 [/etc/mail/local-domain-name]
a.school.ac.jp #Bドメインではb.school.ac.jp いずれもドメイン名
[/etc/mail/sendmail.cf]
DSinterscan.school.ac.jp
DMa.school.ac.jp       #BドメインではDMb.school.ac.jp いずれもドメイン名

sendmail -bt を使用して、cfファイルを変更して、以下のような調査を
しています。
 (1)/etc/mail/local-domain-name の内容をカラにする。
  (この時点では転送方法は変わらない)
 (2)実験用のcfファイルを作って、DM 行をコメントアウトする
 (3)DM 行は#を外し元に戻して、DSsmtp:interscan.school.ac.jpとする
(2)、(3)のどちらのcfファイルを使っても、sendmail -btの結果では、interscanサーバに
転送されます。
これならめでたし、といいたいところですが、問題は、実際にsendmailを再起動してcf
ファイルを読み込ませた場合、interscanサーバとaサーバ、interscanサーバとbサーバの
間で、ループが発生するのではないか、という事が心配です。
それが心配なので、まだ実際の転送確認ができていないのです。

どなたか、正しい方法をお教えください。


設定が正しいかどうか,sendmail.cf の内容が見えないので確たる事は申し上げられませんが,一度検証してみたら如何でしょう?
sendmail.cf は所定の位置にあると思いますが,
# sendmail -bd -C /etc/"PATH"
とすると,所定の sendmail.cf 以外の configuration file を読み込んで daemon mode で load してくれます.ここで,port option を 25 以外,例えば
O DaemonPortOptions=
で "Port=1025" とかして,
# netstat -an
してやると,1025/tcp を listen してくれます.
1025 を訊いてくれている sendmail へ telnet を繋いだり,MUA で 1025 を叩きに行くように設定してやれば,配信できると思います.で,実際に送信して headder 見てみれば,どのような順番で遷移しているか割り出せると思います.

以上,ご参考までに.

はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2004-05-25 11:53
こんにちは〜。

う〜ん、某学校サーバ管理者 さんのお望みの状況は、現在のままでは実現しないと思われるのですが…(汗)。
ご心配していらっしゃるように、メールのループが発生するものと思われます。
(なお、ループが発生しても、最大ホップ数を指定してあればステになるので、永久ループは防げると思います)

対策としては、MTA を分割することしか思いつかないのですが、ハード的に分けてしまうとクライアント側の設定を変更する作業が発生してしまいます。
それを避けるのであれば、MTA を 2つ起動する方法があります。
つまり、25番ポートで待ち受ける sendmail(sendmail → interscan を担当)と、それとは別のポートで待ち受ける sendmail(interscan → sendmail を担当)を作る、ということなのですが… interscan 側が 25番以外のポートとやりとりをする機能を持っているかは存じません。(^^;
sendmail.cf も別々に作成することになると思われます。

# あらら、レスかぶっちゃいました(^^; > kaz さん

[ メッセージ編集済み 編集者: はゆる 編集日時 2004-05-25 11:59 ]
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-05-25 12:13
んでは,かぶってしまったついでに...

実現できないわけではないです >> はゆる様
でも,ちょっと tricky な事をやるので,DNS も MTA もひっくるめて total で考えないとならないので,ちょっと 某学校サーバ管理者様には荷が重いかと...

要するに「それぞれの domain で本来受け取るべきでない MTA が spool host になっている」という状態を作り出せば何とかなるんだと思うんですけどね〜.
某学校サーバ管理者様と似たようなことをシステム管理部署から要求されて,致し方なくそのようになるべく手練手管を尽くして手元のメールサーバを運営している次第です.

ちなみに,InterScan が Windows 版だと SMTP Scan そのものが MTA ですけど,UNIX 版だと結局 MTA が必要だったりします.そこで sendmail 使ってると,sendmail.cf をせっせと書いて結構いろいろできたりします.が,当然 Support 外ですが...
なので,InterScan でどのように振り分けしてるかな〜と気になったりしました
はゆる
ぬし
会議室デビュー日: 2004/02/16
投稿数: 1008
お住まい・勤務地: 首都圏をウロウロと
投稿日時: 2004-05-25 12:36
ちょびっと脱線です。
なるほど、そうデザインすればいいのか! またひとつ勉強になりました m(_ _)m > kaz さん
# ファイターですねぇ…お疲れさまです(苦笑)
某学校サーバ管理者
会議室デビュー日: 2004/05/24
投稿数: 18
投稿日時: 2004-05-25 15:28
某学校サーバ管理者です。
皆様の暖かいレスがありがたいです。
(確かに荷が重いかも、と思っております。)

また、こちらの説明が不足していて申し訳ないです。
interscanサーバ、および2つのメールサーバはSolarisです。
したがって、Interscan Viruswall3.8は、forUNIXで、
配信用に使用しているメールサーバはsendmailです。

interscanサーバの中は、
 ・25待ちうけはiscanサーバ
 ・iscanがメールを受信すると、iscanがsendmailを呼び出す。(※)
 ・sendmailは、DNSのMXに従い、学外、A、B等のメールドメイン宛に転送する。
という設定になっています。(※)の部分は、ViruswallのGUI設定で設定しています。
この設定の場合、interscanサーバに入ってくるSMTPも、出て行くSMTPも25ポート
なので、学内、学外ともに問題がなく送信できます。

kaz様、はゆる様ご指摘の別ポートでやり取りをする場合なんですが、、、
うーむ。ちょっともう少しこちらでも検討させて下さい。
よく考えないと、学外に向けて10025のようなポートでメールを出しそうな
気がします。
(また、夜に続きをメールします。)


   



某学校サーバ管理者
会議室デビュー日: 2004/05/24
投稿数: 18
投稿日時: 2004-05-27 17:50
某学校サーバ管理者です。
荷が重いなりに、いろいろ調べました。
以下、大変長い書き込みになってしまい、申し訳ないです。

 (1)現在の配信方法
  先日報告した内容に一部誤りがありました。
  Internetからのメールを例にすると、
 
   <Internet MX設定>
   ・2つのドメインのMXレコードは、いずれもinterscanサーバに設定。
    Internetからのメールは全てinterscanサーバに届く

   <interscanサーバ設定>
   ・interscanサーバの25番ポート待ちうけは、iscanプロセス。
   ・Interscan VirusWallの設定は"Local Server"で、配送用のsendmailを
    呼び出す設定。
   ・配送用のsendmailは、"mailertable"で、ドメインごとに静的に配送先を指定
     a.school.ac.jp smtp:[192.168.1.1]
     b.school.ac.jp smtp:[192.168.1.2]

   <ローカルメールサーバ設定>
   ・ローカルの2つのメールサーバが、それぞれ自分のドメイン宛のメールを
    受信。local-host-names設定により、localに配信し、各ユーザのメール
    スプールに入る。

  という方法をとっておりました。
  interscanは静的に配送先を指定しているsendmailで、2つのサーバに対して
  配送をしていました。(なお、学内→学外へのメール送信の際は、このinterscan
  サーバ上の配送用sendmailはDNSに従って、Internet上のしかるべきメールサーバ
  にメールを送ります。)

 (2)設定変更方針の変更
  荷が重い事もあり、まずは一方のメールサーバだけ、配信方法を変える事に
  しました。bドメインの192.168.1.2サーバの方です。

  こちらbは、幸いな事(?)に
   ・imapのみでユーザはアクセスを行う
  という運用を行っています。そこで、、、


    Internet
    aサーバ bサーバ
     ↓       ↓
    interscan---------------------
|     | (10025 Listen) |
|     | ◎ sendmail.b  |
    |      | (TO:local 25) |
   | ------------------|
| ( 25 Listen ) |
| iscan |
| ( local sendmail呼出) |
    |----------------------------|
| sendmail (配送用) |
| ( a SMTP:[192.168.1.1] |
| b SMTP:[192.168.1.2] |
| それ以外 SMTP:DNS ) |
------------------------------


     学内端末 interscan
↓ ↓
bサーバ--------------------------
| (143 listen) | |
| imap | (25 listen) |
| | |
|---------------| ◎sendmail.in |
| | |
|○sendmail |(local-host設定|
|( SmartHost | に従い、local |
| [interscan] | で受信。) |
| 10025 | |
| local配信なし)| |
---------------------------------
↓     (全てlocalのはず)
     interscan   

  という設定にしようと考えています。
  一応、はゆる様のコメントを忠実に実現しているつもりなのですが。。。

  各デーモンの上下に、待ち受けポートと転送先への使用ポートを
  記載しています。
  ◎は、新たなサービスを立ち上げる必要がある物、というつもりです。
  interscanに、bサーバからの10025ポートでのメール受信を受ける
  sendmail.bを起動させます。
  また、bサーバ側に、interscanからsmtpで転送されるメールを受ける
  sendmail.inを起動させます。
  ○は、設定を変更する必要があるデーモンです。
  bサーバの既存のsendmailについては、以下の変更をします。
   -25での待ち受けを外す
   -smarthost設定でinterscanに送るときに10025を使用
   -local設定を全て外す

  まず、この方法で期待している転送が成功するか、ご指摘をいただきたく
  存じます。

 (3)疑問点
  仮に、上記の方針でうまくいく場合ですが、

   1.imapデーモンでユーザからのメールを受けて、25ポートで
    待ち受けているsendmailが配信をしてくれている今の設定
    を、今ひとつ理解していないのです。
    imapデーモンがlocalに対して25ポートでメールを転送して
    いる場合は、imapデーモンの設定も帰る必要がでてくると
    思います。

    imap関係のよいサイトがあったらお教えください。

   2.interscanサーバ上で、別プロセスのデーモンが起動しません。
    O DaemonPortOptions=Port=10025
    の設定をsendmail.cfに投入して、sendmail -btでは配信先の
    確認が出来ますが、-bd でデーモン起動させると
     -10025 listen状態が発生しない
     -1分ほどで プロセスが消える
     -生きている間にtrussコマンドを入れると、どうも

      bind(6, 0x000AF600, 16, 3) Err#125 EADDRINUSE
       (中略)
      pause() (sleeping...)
    Received signal #14, SIGALRM, in pause() [caught]
      pause() Err#91 ERESTART

      という所でエラーを起こしている模様
    という状態です。
   
    他に調べる必要のあるところがあればお教えください。


 (4)その他
   ライセンスに関して指摘を頂きましたが、
    ・ユーザ数に関しては無制限ライセンスで購入
    ・インストールサーバは1台だけ。複数サーバにインストール
     する時は、サーバ追加オプション(10万/1台)が必要
   でした。なんか、こんな苦労するくらいなら10万円払ったほうが
   安い気もします。。。


以上です。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-05-27 21:19
こんばんわ.

Solaris はいくつで,sendmail は 8. いくつでしょうね.
引用:

某学校サーバ管理者さんの書き込み (2004-05-27 17:50) より:

 (2)設定変更方針の変更
  荷が重い事もあり、まずは一方のメールサーバだけ、配信方法を変える事に
  しました。bドメインの192.168.1.2サーバの方です。

  こちらbは、幸いな事(?)に
   ・imapのみでユーザはアクセスを行う
  という運用を行っています。そこで、、、

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

  という設定にしようと考えています。
  一応、はゆる様のコメントを忠実に実現しているつもりなのですが。。。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

  まず、この方法で期待している転送が成功するか、ご指摘をいただきたく
  存じます。


図がよくわからなくなってますので端折りました.はゆる様のご指摘内容,概ね伝わってきてますのですが,内容としてははゆる様のご指摘どおり,個別に config file が必要です.さらに言うと,mqueue directory も別にする必要があるでしょう.当然 listen port も.この辺は sendmail.cf ともうひとつの config file とそれぞれに設定値を書いてやれば良いです.

って,この方法あのお客さんとここへ入れた InterScan でやったな〜.懐かしい.まだ sendmail-8.9.3 のころ...

引用:

 (3)疑問点
  仮に、上記の方針でうまくいく場合ですが、

   1.imapデーモンでユーザからのメールを受けて、25ポートで
    待ち受けているsendmailが配信をしてくれている今の設定
    を、今ひとつ理解していないのです。
    imapデーモンがlocalに対して25ポートでメールを転送して
    いる場合は、imapデーモンの設定も帰る必要がでてくると
    思います。

    imap関係のよいサイトがあったらお教えください。


MTA と MRA は全然別物で,設定変更の必要はありません.
imapd は MUA に「電子メールを見せてあげるだけの daemon」なので,MTA の配送とは直接因果関係を持ちません.つまり,sendmail の設定をどれだけ派手に変えてやっても,spool の置き場所や mbox の形式が変わらない限りまったく問題ないでしょう.

引用:

   2.interscanサーバ上で、別プロセスのデーモンが起動しません。
    O DaemonPortOptions=Port=10025
    の設定をsendmail.cfに投入して、sendmail -btでは配信先の
    確認が出来ますが、-bd でデーモン起動させると
     -10025 listen状態が発生しない
     -1分ほどで プロセスが消える
     -生きている間にtrussコマンドを入れると、どうも

      bind(6, 0x000AF600, 16, 3) Err#125 EADDRINUSE
       (中略)
      pause() (sleeping...)
    Received signal #14, SIGALRM, in pause() [caught]
      pause() Err#91 ERESTART

      という所でエラーを起こしている模様
    という状態です。


sendmail.cf を直接変更してます?この場合,前述どおり2つの sendmail を daemon として起動する必要がありますが,これまた前述どおり,config file も複数必要です.なので,sendmail.cf のほかに config file を準備します.
で,通常なら
# sendmail -bd
で sendmail が勝手に sendmail.cf を読み込んで daemon してくれますが,実は sendmail.cf のある場所を hard coding してくれてます.任意の config file を使って,つまり所定の sendmail.cf を使わずに daemon する場合は
# sendmail -bd -C /directory/config.file
とします.これで,sendmail は /directory/config.file を sendmail.cf の代わりに読み込んで daemon します.port をずらしておくと,これで2つの sendmail を daemon させることが出来ます.

ちなみに sendmail -bt でも同様に -C で config file を指定してやる必要があります.

sendmail.cf のほかに submit.cf で MSP する手もアリですが,これは sendmail の version によります.   
引用:

 (4)その他
   ライセンスに関して指摘を頂きましたが、
    ・ユーザ数に関しては無制限ライセンスで購入
    ・インストールサーバは1台だけ。複数サーバにインストール
     する時は、サーバ追加オプション(10万/1台)が必要
   でした。なんか、こんな苦労するくらいなら10万円払ったほうが
   安い気もします。。。


今の InterScan VirusWall の license は「追加」は必要ないですよね.仕事で導入事例が山ほどありますが,保守期間内なら Enterprise Edition へ安価に乗り換えられます.が,install し直しなのでちょっときついです.でも,ver.3.8 はそろそろ賞味期限が切れますので,検討されたほうがよろしいでしょう.

ISVW もちゃんと listen port を変更できますよ,ご心配なく -> はゆる様

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