Sendmailを使用して、テキストファイルから非常に簡単なメールを送信しています。これがテキストファイルです。
to:[email protected]
from:[email protected]
subject:Testing
test test test
私が送るもの:
sendmail -t < mail.txt
私がsendmailを実行しているサーバーは、hostname.tldです。/etc/hostsは次のとおりです。
12.34.56.78 hostname hostname.tld
127.0.0.1 localhost
ここで、hostname.tldはサーバーのfqdnで、12.34.56.78はサーバーのパブリックIPです。/etc/hostnameは単にhostname.tldを含みます
メールを受信すると、次のヘッダーが表示されます。
Received: from hostname.tld (hostname.tld [127.0.0.1])
127.0.0.1は必要ありません。パブリックIPをそこに置きたいのですが、sendmailで何をしようともそれを使用できません。 /etc/mail/sendmail.mcも編集して、次の行を追加しました。
define(`confDOMAIN_NAME', `hostname.tld')dnl
しかし、それは何もしません。
私は、人々が同様の問題を抱えている多くのスレッドを読みましたが、それを解決するものは何もないようです。私に何ができる?
上記のIPアドレスの注釈は、実際にはsendmail
サーバー自体の構成ではありません。 sendmail
の最新の展開を見ると、通常2つのコンポーネントに分割されています。従来のサーバー(デーモンモード)とメール送信プログラムモード(MSP)で実行されている別のサーバー。これは単純なps
コマンドで確認できます。
$ ps -eaf | grep send
root 24488 1 0 21:10 ? 00:00:00 sendmail: accepting connections
smmsp 24504 1 0 21:10 ? 00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
1行目はデーモンモードのsendmail、2行目はMSPモードのsendmailです。 sendmailを出荷するほとんどのディストリビューションはMSPバリアントをより権限の少ない特別なユーザーとして実行するため、いつでもそれらを区別できます。これは、CentOS 5.xサーバーでユーザーsmmsp
として実行されているものです。
注:これは、メール送信(MSP)とメール配信(デーモンモード)の処理の役割を分離するために行われます。ユーザーは、ボックスでローカルにmail
やmailx
などのコマンドを使用してメールを送信しているときにMSPインスタンスに接続します。
CentOSなどのRed Hatベースのディストリビューションでsendmailを処理する場合、構成ファイルは/etc/mail
にあります。この変更に関心のある2つのファイルがあります。
最初のファイルはデーモンモードサーバーを制御し、2番目のファイルはMSPサーバー用です。
ちなみに、これらの*.mc
ファイルは、2つのサーバーが直接使用する実際の構成ファイルではありません。一般に、sendmail
構成は複雑になる可能性があります。古く、その多様性を考えると、さまざまな方法で構成できるため、これらの*.mc
ファイルは、実際のsendmail
構成ファイルに「コンパイル」される事前構成ファイルです。これらのファイルのコンパイル済みバージョンも同じディレクトリにあります。
通常、これらの2つのファイルを直接変更するのではなく、対応する.mc
ファイルを使用して変更するのが賢明です。通常、.mc
ファイルを編集してから、/etc/mail
ディレクトリ内でmake
コマンドを実行します。繰り返しますが、これは私の知る限りではRed Hat主義であるため、別のディストリビューションでは状況が異なる場合があります。
注:* .mc
ファイルは M4 と呼ばれるマクロ言語であるため、それらをコンパイルするツールはもちろんm4
と呼ばれます。次のようなコマンドを使用して、これらのファイルを手動でコンパイルできます。
$ m4 /etc/mail/submit.mc > /etc/mail/submit.cf
これは、Red Hatが/etc/mail
ディレクトリに提供する、豪華なmake
およびMakefile
ファイルで行われていることです。
それでは、どのような変更を行う必要がありますか?次の行をsubmit.mc
ファイルに追加する必要があります。
CLIENT_OPTIONS(`Family=inet, Address=<your ip here>, Name=MTA')dnl
<your ip here>
と書かれている場所にIPを必ず追加してください。この変更を行ったら、submit.mc
ファイルを再生成する必要があります。
$ cd /etc/mail && make
.cf
ファイルを再生成したら、sendmail
を再起動する必要があります。
$ /etc/init.d/sendmail restart
-or-
$ /etc/init.d/sendmail reload
上記の変更を行った後、次のヘッダーが残ります。この例では、たとえば、外部IPアドレスは50.122.22.45でした。
Return-Path: <[email protected]>
Received: from mail.sdom.com (mail.sdom.com [50.122.22.45])
by sdom.com (8.14.3/8.14.3) with ESMTP id r5J188Gx018193
for <[email protected]>; Tue, 18 Jun 2013 21:08:08 -0400
Received: (from root@localhost)
by mail.sdom.com (8.14.3/8.14.3/Submit) id r5J15ua4018000;
Tue, 18 Jun 2013 21:05:56 -0400
Date: Tue, 18 Jun 2013 21:05:56 -0400
Message-Id: <[email protected]>
to:[email protected]
from:[email protected]
subject:Testing
X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,BAYES_00
autolearn=ham version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mail.sdom.com
X-Greylist: Sender is SPF-compliant, not delayed by milter-greylist-4.0 (sdom.com [127.0.0.1]); Tue, 18 Jun 2013 21:08:09 -0400 (EDT)
test test test
これは私の解決策でした:
/ etc/hosts:
12.34.56.78 hostname.tld
127.0.0.1 localhost
/etc/mail/submit.mc:
FEATURE(`msp', `[12.34.56.78]', `25')dnl
(当初は、パブリックIPではなく127.0.0.1でした)
/etc/mail/sendmail.mc:
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=12.34.56.78')dnl
DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=12.34.56.78')dnl
(これらの行は両方とも127.0.0.1でしたが、これを変更すると、sendmailはlocalhostではなくパブリックIPでリッスンします)。
次のコマンドを実行します。
make -C /etc/mail
Sendmailをリロードします。
service sendmail reload
テストメールを送信した後:
sendmail -t < mail.txt
私が今嫌いだったヘッダーは言う:
Received: from hostname.tld (hostname.tld [12.34.56.78])
そして、ヘッダーのどこにもlocalhostまたは127.0.0.1についての言及はありません