• ベストアンサー

WEBサーバーとメールサーバーを分けたいのです

現状1台で動作しているメールサーバーと(sendmail)、WEB(Apache)サーバーを分けたいのですが、上手くできません。 ■ルーター:WebCaster V110 ■利用機器:DELL PowerEdge SC430 x2 ■グローバルIP:固定 同じ設定のサーバーをもう1つ作り、192.168.1.3として、 ルーターのNAPT設定で、 WAN側ポート: 80>>>LAN側ポート 192.168.1.2: 80 WAN側ポート: 53>>>LAN側ポート 192.168.1.2: 53 WAN側ポート:110>>>LAN側ポート 192.168.1.2:110 WAN側ポート: 25>>>LAN側ポート 192.168.1.2: 25 を、 WAN側ポート: 80>>>LAN側ポート 192.168.1.2: 80 WAN側ポート: 53>>>LAN側ポート 192.168.1.3: 53 WAN側ポート:110>>>LAN側ポート 192.168.1.3:110 WAN側ポート: 25>>>LAN側ポート 192.168.1.3: 25 とすると、一応分けて動作したんですが、ホームページ(192.168.1.2)で使用しているお問い合わせフォーム(mb_send_mail関数で作成?)が使用できなくなってしまいました。 問題はお問い合わせフォームだけなので、192.168.1.2の方には110と25以外のポートを指示するだけで、いけそうだなと思い、調べたんですが、なかなか引っかかりません。 以上、説明不足があるかもしれませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

かえって混乱させてしまったようで申し訳ないです。 >define(`SMART_HOST', `smtp:[192.168.1.3]')dnl  というのを書き込んでみましたが、192.168.1.3には転送されませんでした。 まず、SMART_HOSTは「自分のマシン以外宛のメールを送る」ホストの指定なので、ローカル配信してしまう部分を直さないと意味がありません。 >また[ローカルで配信すべきアドレスではないという設定]にするため~ おそらく「エラーが戻ってきた」という時点で、192.168.1.2は外へ配信しようとしていると思われるので、一歩前進です。 これはSMART_HOSTをつけた後ですか? 前ですか? エラーとなって戻ってきたメール(および両方のサーバのmaillog)から、どのようなエラーが起きているかを調べるのがキモです。 ・送り先サーバへの接続に失敗している。(どのアドレスに接続しようとしているか?) ・192.168.1.3へ送ろうとしたが(192.168.1.3のsendmailが拒否したのか/それ以前のiptablesなどが拒否したのか/そのた)。 ・どこへ送っていいかわからなかった(hoge.co.jpのMXがわからなかった)とか。 など。 >そして[192.168.1.2から直接外へ配信したいなら]もよく理解できなくなってしまいました。 これは一時忘れてください。 >とroot宛てのメールをyahooのWEBメールに転送するようにしてみると、ちゃんと届いていたんです これはSMART_HOSTをつけた後ですか? 前ですか? いずれにせよ、まず解決するところは192.168.1.2->192.168.1.3への送信なので、以下を試してみてください。 [192.168.1.2]で ○ 「dig mx hoge.co.jp」コマンドで、ちゃんとMXが引けているか。192.168.1.3に向いているか。(もしグローバルIPアドレスが返ってきたら・・・ ^^); ○ 「telnet 192.168.1.3 25」コマンドで、ちゃんと返事が返ってくるか(繋がったら「quit」で切断してください)。正常なら220から始まる応答が返ってきます。

rara1972
質問者

お礼

先日、 新たに買ったアスキーの『すっきりわかったDNS&メール』を読んで解決しました。 あと、 /etc/mail/sendmail.mc //////////////////////////////////////////////////// (最終行に追加) define(`SMART_HOST',`smtp:[192.168.1.3]')dnl //////////////////////////////////////////////////// と /etc/mail/mailertable //////////////////////////////////////////////////// hoge.com esmtp:[192.168.1.3] .hoge.com esmtp:[192.168.1.3] //////////////////////////////////////////////////// でいけました。ありがとうございました。

rara1972
質問者

補足

申し訳ないですなんてめっそうもありません。こちらこそ何度もお手数おかけして申し訳ないです。 >>とroot宛てのメールをyahooのWEBメールに転送するようにしてみると、ちゃんと届いていたんです >これはSMART_HOSTをつけた後ですか? 前ですか? SMART_HOSTを設定しなくても送ることができました。 >>おそらく「エラーが戻ってきた」という時点で、192.168.1.2は外へ配信しようとしていると思われるので、一歩前進です。 >これはSMART_HOSTをつけた後ですか? 前ですか? sendmail.mcの define(`SMART_HOST', `smtp:[192.168.1.3]')dnl を #cd /etc/mail #make でsendmail.cfに反映して、sendmail再起動。お問い合わせフォームから送信してみましたが、192.168.1.2の /var/mail/送り先ユーザーのスプールファイルに入ってきました。そして、[ローカルで配信すべきアドレスではないという設定]にするため、 local-host-namesから@hoge.co.jpを削除すると、/var/mail/rootにエラー送信されるようになりました。 root宛のメールをみると /////////////////////////////////////////////////////// The original message was received at Wed, 6 Dec 2006 20:56:41 +0900 from apache@localhost ----- The following addresses had permanent fatal errors ----- info@hoge.co.jp (reason: 550 5.1.1 <info@hoge.co.jp>... User unknown) (expanded from: info@hoge.co.jp) ----- Transcript of session follows ----- ... while talking to [127.0.0.1]: >>> DATA <<< 550 5.1.1 <info@hoge.co.jp>... User unknown 550 5.1.1 info@hoge.co.jp... User unknown <<< 503 5.0.0 Need RCPT (recipient) /////////////////////////////////////////////////////// でした。ローカルに送ってドメインを認識できなかっただけでしょうか? ○ 「dig mx hoge.co.jp」コマンドで、ちゃんとMXが引けているか。 早速、ためさせていただきました。 /////////////////////////////////////////////////////// ; <<>> DiG 9.3.1 <<>> mx hoge.co.jp ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15076 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;hoge.co.jp. IN MX ;; AUTHORITY SECTION: hoge.co.jp. 7200 IN SOA ns2.zoneedit.com. soacontact.zon eedit.com. 1149728924 14400 7200 950400 7200 ;; Query time: 206 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Fri Dec 8 12:48:31 2006 ;; MSG SIZE rcvd: 95 /////////////////////////////////////////////////////// ○ 「telnet 192.168.1.3 25」コマンドで、ちゃんと返事が返ってくるか 220 localhost.localdomain ESMTP Sendmail 8.13.7/8.13.7; Fri, 8 Dec 2006 12:55:57 +0900 220から始まる応答がかえってきました。 これはDNSサーバーがいけないんでしょうか? 最初NAPTでポート指定したときに、ポート53を架空のアドレスに振っても、WEBは機能したのでNAPTで強制的に決めるとおもっていたんですが。; またお手数おかけして申し訳ないですが、よろしくお願いします。

その他の回答 (4)

回答No.4

ログを見てもやはりwebサーバがローカルに配信しちゃってますね。 sendmail.cfなり/etc/hostsなりを変更して、@hoge.co.jp はローカルで配信すべきアドレスではないという設定にしないと192.168.1.3には配信されません。 別の手法として、ちょっとトリッキー(というかこの場合あまり良い方法ではないかも)ですが、メールのディレクトリをNFSで共有してしまう方法もあります。 また192.168.1.2から直接外へ配信したいなら、sendmail.cfのDS(sendmail.mcだとSMART HOST)を192.168.1.3へ向けるのが良いでしょう。

rara1972
質問者

補足

またまたお返事ありがとうございます。 あれから色々調べたり試したりしたんですが、なにぶん始めたばかりでよくわからないんです。 本当に申し訳ないんですが、またご教示おねがいできますでしょうか。 >sendmail.cfなり/etc/hostsなりを変更して、@hoge.co.jp はローカルで 配信すべきアドレスではないという設定にしないと192.168.1.3には配信されません。 >別の手法として、ちょっとトリッキー(というかこの場合あまり良い方法ではないかも)ですが、メールのディレクトリをNFSで共有してしまう方法もあります。 >また192.168.1.2から直接外へ配信したいなら、sendmail.cfのDS(sendmail.mcだとSMART HOST)を192.168.1.3へ向けるのが良いでしょう。 教えていただいたことから検索し、 SMART_HOST(CFでいうDEFAULT_RELAY)は 「内部からインターネットにメールを送信する際に、内部メールサーバは一旦DMZなどに置かれるリレーサーバにメールを渡すので内部のメールサーバに設定するもの」 などとたどりつきました。 # sendmail.mc define(`SMART_HOST', `smtp:[192.168.1.3]')dnl というのを書き込んでみましたが、192.168.1.3には転送されませんでした。 また[ローカルで配信すべきアドレスではないという設定]にするため、local-host-namesから@hoge.co.jpを削除しましたが、試してみると、192.168.1.2の/var/mail/送り先ユーザーのスプールファイルでなく、/var/mail/rootにエラー送信されます。 そして[192.168.1.2から直接外へ配信したいなら]もよく理解できなくなってしまいました。 ローカルでしか配信できない設定になっているのかと思ったんですが、試しに、 WAN側ポート: 80>>>LAN側ポート 192.168.1.2: 80 WAN側ポート: 53>>>LAN側ポート 192.168.1.3: 53 WAN側ポート:110>>>LAN側ポート 192.168.1.3:110 WAN側ポート: 25>>>LAN側ポート 192.168.1.3: 25 この状態で,192.168.1.2の方で、 # echo "root: hoge@yahoo.co.jp" >> /etc/aliases # newaliases # echo test|mail root とroot宛てのメールをyahooのWEBメールに転送するようにしてみると、ちゃんと届いていたんです。 ほんと的外れな事をしてるかも知れませんが、ますますどうしていけばいいかわからなくなってしまいました。 ご指摘、ご指南のほどよろしくお願いします。

回答No.3

>sendmail.cfの設定もデフォルトから特に触っていないんですが、何か必要な事があるんでしょうか? 192.168.1.12側のsendmailの設定を変更したポートに設定はしました?

rara1972
質問者

補足

お返事本当にどうもありがとうございます。 先ほどの補足で誤りがあり、どうやって編集したらいいかと悩んでいました。 >192.168.1.12側のsendmailの設定を変更したポートに設定はしました? NAPT設定で、 WAN側ポート: 80>>>LAN側ポート 192.168.1.2: 80 WAN側ポート: 53>>>LAN側ポート 192.168.1.2: 53 WAN側ポート:110>>>LAN側ポート 192.168.1.3:110 WAN側ポート: 25>>>LAN側ポート 192.168.1.3: 25 WAN側ポート: 32>>>LAN側ポート 192.168.1.2: 32 WAN側ポート: 34>>>LAN側ポート 192.168.1.2: 34 とした時に /etc/servicesの "smtp 25/tcp" を "smtp 34/tcp" "pop3 110/tcp" を "pop3 32/tcp" にしてみました。 この部分では反映されないのでしょうか? そして、 すみませんが前回分の補足を訂正させて下さい。 ---------------------------------------------------------------------- >> 1.192.168.1.2のサーバがローカルで配信している(192.168.1.2の/var/mail に配信されてませんか?) >192.168.1.2の/var/mailには配信されていません。 ---------------------------------------------------------------------- と、書きましたが誤りでした。 /var/mailに配信されていました。

回答No.2

可能性として、 1.192.168.1.2のサーバがローカルで配信している(192.168.1.2の/var/mail に配信されてませんか?) 2.192.168.1.3が受信拒否している(iptablesなどでブロックされているか、sendmail.cfの設定の問題か) とりあえず両サーバのメールログ(/var/log/maillogかな?OSが書かれていないので違うかも)をtail -fで監視しながらcgiからメール送信してみればどんな動作をしてどんなエラーが出ているかわかると思いますが。

rara1972
質問者

補足

早速のお返事どうもありがとうございます。 またまた説明不足で申し訳有りません。 OSはFedoraCore4を使用し、sendmailはヴァーチャルドメインで運用してます。 > 1.192.168.1.2のサーバがローカルで配信している(192.168.1.2の/var/mail に配信されてませんか?) 192.168.1.2の/var/mailには配信されていません。 > 2.192.168.1.3が受信拒否している(iptablesなどでブロックされているか、sendmail.cfの設定の問題か) iptablesの設定というのは何もした覚えが有りません。 # iptables -L Chain INPUT (Policy ACCEPT) target  prot opt source     destination Chain FORWARD (Policy ACCEPT) target  prot opt source     destination Chain OUTPUT (Policy ACCEPT) target  prot opt source     destination sendmail.cfの設定もデフォルトから特に触っていないんですが、何か必要な事があるんでしょうか? また/var/log/maillogは 192.168.1.3の方は変化なく 192.168.1.2の方は /////////////////////////////////////////////////////////////////// Dec 6 15:57:31 localhost sendmail[7122]: kB66vU7a007122: Authentication-Warning: localhost.localdomain: apache set sender to info@hoge.co.jp using -f Dec 6 15:57:31 localhost sendmail[7122]: kB66vU7a007122: from=info@hoge.co.jp, size=440, class=0, nrcpts=1, msgid=<200612060657.kB66vU7a007122@localhost.localdomain>, relay=apache@localhost Dec 6 15:57:31 localhost sendmail[7123]: kB66vVIi007123: from=<info@hoge.co.jp>, size=775, class=0, nrcpts=1, msgid=<200612060657.kB66vU7a007122@localhost.localdomain>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1] Dec 6 15:57:31 localhost sendmail[7122]: kB66vU7a007122: to=info@hoge.co.jp, ctladdr=info@hoge.co.jp (48/48), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30440, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (kB66vVIi007123 Message accepted for delivery) Dec 6 15:57:32 localhost sendmail[7124]: kB66vVIi007123: to=<info@hoge.co.jp>, ctladdr=<info@hoge.co.jp> (514/514), delay=00:00:01, xdelay=00:00:01, mailer=local, pri=30984, dsn=2.0.0, stat=Sent Dec 6 16:02:18 localhost spamd[7058]: server killed by SIGTERM, shutting down /////////////////////////////////////////////////////////////////// となっていました。 よくわかっていないので、状況を上手く説明できませんが またまた、よろしくお願い致します。

回答No.1

>ホームページ(192.168.1.2)で使用しているお問い合わせフォーム(mb_send_mail関数で作成?)が使用できなくなってしまいました。 とは、具体的にどんな状況ですか? CGIがエラーを出す。 エラーは出ないけどメールが192.168.1.2から送信されない。 など。

rara1972
質問者

補足

お返事どうもありがとうございます。 説明不足で申し訳有りません。 >ホームページ(192.168.1.2)で使用しているお問い合わせフォーム(mb_send_mail関数で作成?)が使用できなくなってしまいました。 192.168.1.3の方にポート110と25を振り分けているためだと思うんですが。 の状況というのは、 「192.168.1.2から送信しようとしてポートが開いてなく失敗するのか」 「192.168.1.2自分自身に受信しようとしてポートが開いてなく失敗するのか」調べ方も分かってないんです。 ただ、PHPの問い合わせフォームで、メール送信完了した場合、"メールを送信しました"と出るようにされていて、その文字は出力されますが、メールが届いてきません。(メーラーでも受信せず、192.168.1.3の/var/mail/の中のspoolファイルの日付も更新されていません。)192.168.1.2と192.168.1.3はユーザーからその他、(IPアドレスに関わる箇所以外)ファイルの設定も192.168.1.2と同じにしているので、 WAN側ポート: 80>>>LAN側ポート 192.168.1.3: 80 WAN側ポート: 53>>>LAN側ポート 192.168.1.3: 53 WAN側ポート:110>>>LAN側ポート 192.168.1.3:110 WAN側ポート: 25>>>LAN側ポート 192.168.1.3: 25 と全て192.168.1.3としても、192.168.1.3で正常に動作します。 始めたばかりで、そもそもメールの構成もよくわかってないんですが、 192.168.1.2の方に、110と25以外のポートで送受信しようと思い、 試しに NAPT設定で、 WAN側ポート: 80>>>LAN側ポート 192.168.1.2: 80 WAN側ポート: 53>>>LAN側ポート 192.168.1.2: 53 WAN側ポート:110>>>LAN側ポート 192.168.1.3:110 WAN側ポート: 25>>>LAN側ポート 192.168.1.3: 25 WAN側ポート: 32>>>LAN側ポート 192.168.1.2: 32 WAN側ポート: 34>>>LAN側ポート 192.168.1.2: 34 とし、 /etc/servicesの "smtp 25/tcp" を "smtp 34/tcp" "pop3 110/tcp" を "pop3 32/tcp" にしてみたんですが、やはり、メールはきませんでした。 お手数ですが、よろしくお願い致します。