sendmail サーバーの構成と管理

ここにディレクトリのタイトルを書きます

1. メールシステムの構成

Linux システムの電子メール システムには、MUA (Mail user Agent、メール ユーザー エージェント)、MTA (Mail Transfer Agent、メール転送エージェント)、MDA (Mail Delivery Agent、メール配信エージェント) の 3 つのコンポーネントが含まれています。

1、最初に

MUA是电子邮件系统的客户端程序,它是用户与电子邮件系统的接口、主に電子メールの送受信、電子メールの作成と読み取りを担当します。現在、主流のユーザー エージェント プラットフォームには、Linux の OutLook、foxmail、Mail などがあります。

2、MTA

MTA是电子邮件系统的服务器程序、它主要负责邮件的存储和转发最も一般的に使用される MTA ソフトウェアは、Windows プラットフォームに基づいた Exchange、Linux プラットフォームに基づいた Sendmail および postfix で構成されます。

3、MDA

MDAはLDA(Local Delivery Agent、ローカル配信エージェント)とも呼ばれます。MTAはメール受信者がいるメールサーバーにメールを配信しますMDA则负责把邮件按照接收者的用户名投递到邮箱中

4. MUA、MTA、MDAの共同作業

一般に、MUA プログラムを使用してレターを作成する場合、アプリケーションはそのレターを sendmail や postfix などの MTA プログラムに送信します。レターが LAN またはローカル ホストに宛てられている場合、MTA プログラムはアドレスからこの情報を判断できるはずです。

2. 電子メールに関するプロトコル

一般的に使用される電子メール プロトコルはSMTP、POP3、IMAP4です。

SMTP (Simple Mail Transfer Protocol) は、デフォルトで TCP のポート 25 で動作する Simple Mail Transfer Protocol です。SMTP はクライアント/サーバー タイプに属します。送信元アドレスから宛先アドレスにメールを送信するために使用される一連のルールです。新しい転送モードを制御します。SMTP は TCP/IP プロトコル クラスタに属し、各コンピュータのそれか、セカンダリが新しいときに次の宛先を見つけてください。

POP3 (Post Office Protocol3) は、Post Office Protocol の 3 番目のバージョンです。このプロトコルはデフォルトで TCP のポート 110 で動作し、POP3 もクライアント/サーバー モデルに属します。POP3 は、インターネット電子メールの最初のオフライン プロトコル規格であり、サーバーからローカルのホスト コンピュータにメールを保存すると同時に、メール サーバーに保存されているメールを削除することができます。


3. メールリレー

リレーは、メールを別のサーバーに配信するというサーバーへのリクエストです。サーバーが処理するメールは送信メールと受信メールの2種類しかなく、前者はこのドメイン内のユーザーがサーバー経由で外部に転送したいメール、後者は宛先に送信されます。このドメイン内のユーザー。

ユーザーは、自分のユーザーによって転送されることも、自分のユーザーに送信されることもなく、外部ユーザーから別の外部ユーザーに送信される受け渡しメールを処理すべきではありません。この動作はサードパーティ中継と呼ばれます。認証なしでメールを組織外に中継できる場合はOpen RELAY(オープンリレー)と呼ばれ、「第三者中継」や「オープン中継」は禁止されていますが、中継を閉じることはできません。ここで理解すべき概念がいくつかあります。

(1)中継:ユーザーがサーバーを経由してメールを組織外に渡す

(2) OPEN RELAY : 組織外への無制限の中継。つまり、認証されていないユーザーも中継リクエストを送信できます。

(3)サードパーティリレー: サーバーによって送信された OPEN RELAY は、クライアントから直接送信されません。たとえば、ネットワーク セグメントのドメインが A で、サーバー B 経由で電子メールをドメイン C に転送するとします。このとき、サーバー B は、接続要求がドメイン A のサーバーから来ており、電子メールがドメイン A のユーザーによって送信されていないことを認識します。サーバー B が配置または送信されるドメイン B ドメイン、これはサードパーティのリレーです。これがスパムの根源です。ユーザーがサーバーへの直接接続を介して電子メールを送信する場合、大量メール送信ソフトウェアなどではこれを防ぐことはできません。OPEN RELAY がオフになっている場合、組織内のユーザーにのみメールを送信でき、組織外にメールを中継することはできません。

**sendmail相关配置文档**

**sendmail.cf**:sendmail核心配置文件,位于/etc/mail/sendmail.cf

sendmail.mc:sendmail提供sendmail文件模板,通过编辑此文件后再使用m4工具将结果导入sendmail.cf完成配置Sendmail核心配置文件,降低配置复杂性,位于/etc/mail/sendmail.mc

local-host-name:定义收发邮件服务器的域名和主机别名,位于/etc/mail/local-host-names

accesss.db:用来设置Sendmail服务器为哪些主机进行转发邮件,位于/etc/mail/access.db

aliases.db:用来定义邮件别名,位于/etc/mail/aliases.db

virtusertaable.db:用来设置虚拟账户,位于/etc/mail/virtusertable.db

***

4. Sendmail の一般的なサーバー構成

1. Sendmail サーバーの構成手順

Sendmail サーバーを適切に引き受けたい場合は、その動作原理を理解することに加えて、設定プロセス全体と、プロセス全体における各ステップの役割についても明確にする必要があります。提案 Sendmail サーバーのセットアップ プロセスには主に次の手順が含まれます。

(1)配置好DNS

(2)检查是否安装Sendmail

(3)修改/etc/mail/sendmail.mc

(4)使用m4工具编译产生sendmail.cf文件,启动Sendmail服务器

(5)修改/etc/mail/access文件

(6)编译生成access.db

(7)修改/etc/mail/local-host-names。

(8)启动Sendmail服务器

(9)创建用户

(10)测试

2. Sendmail.cf および sendmail.mc

sendmail.cf是Sendmail的核心配置文件, Sendmail のパラメータ設定のほとんどは、ファイルを変更する必要があります。このため、sendmail のファイルは聖典ともいえる複雑すぎるため、設定の複雑さを軽減するために、Sendmail.cf ファイルを直接変更するのではなく、sendmail.mc ファイルを変更することがよく行われています。

したがって、sendmail.mc を変更するだけで済み、m4 ツールを使用して結果を sendmail.cf ファイルにインポートできます。このアプローチにより、構成の複雑さを大幅に軽減できます。

sendmail.mc の内容は非常に大きいですが、そのほとんどがコメント化されています。以下の「dnl」で始まる情報は無効です。通常、sendmail サーバーを設定する場合、以下の内容を変更するだけで済みます。

116				DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

括弧内の Addr フィールドは、SMTP プロトコルのリスニング アドレスが 127.0.0.1 であることを示します。通常の構成では、需要将其改为题目所要求的网段或者0.0.0.0以来加大侦听范围そうでない場合、メールは正常に送信できません。

3. m4ツールの使用

m4 ツールは強力なマクロ処理フィルターであり、その複雑さは sendmail.cf に劣りません。m4 ツールを使用する前に、ソフトウェア パッケージがサーバーにインストールされていることを確認してください (デフォルトでは、m4 ツールがインストールされています)。

構成プロセス中に、m4 ツールを使用して、編集した sendmail.mc ファイルの内容を sendmail.cf ファイルにリダイレクトする必要があります。これにより、次のように複雑な sendmail.cf ファイルを直接編集する必要がなくなります。

m4 sendmail.mc > sendmail.cf 

知らせ:此时如果sendmail报错,那么就是因为sendmail.cf中有错误,在第39行多空了一个,我们只需要把那多的一行删掉,在重启即可。

4.ローカルホスト名ファイル

このファイルは、電子メールの送受信用のホスト エイリアスを定義するために使用されます。sendmail默认情况下该文件位于/etc/mail下サービスを正常に動作させるには、このファイルにホスト名またはホスト エイリアスを追加する必要があります。追加しないと、エラーが表示されます。

メール サーバーにmail.skills.com と mail1.skills.com という 2 つのホスト名があり、mail.skills.com に送信されたメールのみを受信する必要があり、mail1.skills.com に送信されたメールは影響を受けないとします。 mail.skills.com を loxal-host-names に追加する必要があります

次のように:

# local-host-names - include all aliases for your machine here.
mail.skills.com
skills.com

すべてのホスト エイリアスで電子メールを送受信できるようにする場合は、上記の例を参照して、すべてのホスト エイリアスをファイルに追加してください。

5. エイリアスとグループ送信設定:

ユーザーエイリアスはよく使われる機能で、ユーザーに別の名前を付けることです。たとえば、ユーザー A にエイリアス名 B が与えられた場合、B に送信された電子メールは、今後ユーザー A によって受信されることになります。

この機能を使用する理由

  • まず、root ユーザーはメールの送受信ができないため、root ユーザーに手紙を送信する場合は、root ユーザーのエイリアスを作成する必要があります。
  • 次に、この機能はグループ送信設定で使用する必要があります。企業内でメールサービスを利用する場合、部門ごとにグループで送信することが多いです。財務部門に送信されたメールは、財務部門の全員しか受信できません。部門以外では受信できません。

次の形式を使用します。

aliases:   user[,user,user,...]

このうち、aliasメールアドレス内のユーザー名reciioientは実際にメールを受信するユーザーですユーザー エイリアスの設定方法を示すいくつかの例を次に示します。

例1:

user1 アカウントのエイリアスを toto に設定し、user2 アカウントのエイリアスを Popo に設定します。

[root@localhost named]# vim /etc/mail/aliases     //创建aliases文件并对其修改
toto:   user1
popo:   user2

例2:

ネットワーク グループがこのサーバーに電子メール アカウントを持っていると仮定して、今度は同じ内容の電子メールをネットワーク グループのすべてのメンバーに送信したいと考えますこれは、エイリアス メカニズムの有機アミン リスト関数を使用して実現できます。

group: net1,ne2,net3,....

6. Access ファイルを使用してメール リレーを設定する

アクセスファイルは、メール中継(RELAY)の制御やメールの入退室管理などに使用されます。アクセス ファイルを使用すると、このメール サーバーを使用してメールを転送できるクライアントを制限できます。たとえば、特定のドメインのクライアントが電子メールの転送を拒否できないように制限したり、特定のネットワーク セグメントのクライアントが電子メールを転送できないように制限したりできます。その形式は次のとおりです。

对象				处理方式

オブジェクトと処理メソッドの表現は単一ではなく、各行にオブジェクトとその処理メソッドが含まれます。以下に、一般的なオブジェクトの種類と処理方法を簡単に紹介します。

Access ファイルの各行にはオブジェクトと処理メソッドがあり、環境のニーズに応じて 2 つを組み合わせる必要があります。

Connect:localhost.localdomain           RELAY
Connect:localhost                       			 RELAY
Connect:127.0.0.1  									 RELAY

例: 192.168.0.0 ネットワーク セグメントが自由にメールを送信できるようにしますが、クライアント ftp.skills.comと 192.168.123.0 ネットワーク セグメント内の 192.168.123.101 を除くすべてのホストを拒否します。

Connect:localhost.localdomain          RELAY
Connect:localhost                       			RELAY
Connect:127.0.0.1                       				RELAY
Connect:192.168.0                     			    RELAY
Connect:192.168.123                    		    REJECT
Connect:ftp.skills.com                           REJECT
Connect:192.168.123.101                       OK

最後に、makemap コマンドを使用して、新しい access.db データベースを生成します。

[root@localhost named]# cd /etc/mail
[root@localhost mail]# makemap hash access.db<access

7. SMTP認証を設定する

access.db ファイルを使用してメール リレー エージェントを実装する場合、ダイヤルアップ インターネット アクセスを使用するユーザーにとっては現実的ではありませんが、現時点では SMTP 認証メカニズムを使用して、指定されたユーザーにメールをリレーできます。

/etc/mail/sendmail.mc ファイルを編集し、認証に関連する構成行を変更します。

 52  TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
 53  define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
 78 FEATURE(`no_default_msa', `dnl')dnl
 125 DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

これらの各行の先頭にある dnl を削除します。

(1)TRUST_AUTH_MECH的作用是使Sendmail不管Access文件中如何设置,都能relay那些通过LOGIN、PLAIN、或DIGEST-MD5方式验证的邮件

(2)confAUTH_MECHANISMS的作用是确定系统的认证方式

(3) `Port=submission, Name=MSA, M=Ea的作用是开启认证、MSA を子プロセスとして実行して、電子メール アカウントとパスワードを確認します。

7.2 m4 コマンドを使用して /etc/mail/sendmail.cf ファイルを再生成する

[root@localhost mail]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

7.3 sendmail サービスと saslauthd サービスの再起動

systemctl restart sendmail  saslauthd

8. メールボックス容量の設定

ユーザーのメールサイズ設定を設定します。元の制限は 2MB ですが、20MB に設定することをお勧めします。*** に注意してください单位为字节2000000=2M、20000000=20M

 36 define(`UUCP_MAILER_MAX', `20000000')dnl

ローカルメールボックスのドメイン名を設定します。

157 LOCAL_DOMAIN(`skills.com')dnl

設定後、m4 ツールを使用して新しい sendmail.cf ファイルを生成します。

m4 /etc/mail/sednmail.mc > /etc/mail/sendmail.cf

5. 仮想ドメイン ユーザーのセットアップ

仮想ドメインを使用します。仮想ドメインに送信されたメールは、実際のドメインのユーザーのメールボックスに配信できますメーリングリストの機能は仮想ドメインを利用することでも実現できます。ここでの仮想ドメインは存在しないドメインにすることができ、実際のドメインはローカル ドメインまたはリモート ドメイン名 Inter 内のドメインのいずれかにすることができます。

仮想ドメインは実ドメインのエイリアスであり、仮想ドメインユーザーテーブル/etc/mail/virtusertable.dbを通じて、仮想ドメインのメールアドレスから実ドメインのメールアドレスへのリダイレクトが実現されます。

仮想ドメイン ユーザー テーブル /etc/mail/virtuserable.dbファイル是通过/etc/mail/virtuserable文件生成****。次のように

虚拟域地址				真实域地址

仮想ドメイン アドレスと実ドメイン アドレスはタブで区切られており、このファイルには仮想ドメイン アドレスと実ドメイン アドレスを完全に記述することも、ドメイン名またはユーザー名のみを記述することもできます。次の形式が利用可能です

@sales.com		@smile.com
[email protected]		user2
[email protected]		user1,user2,user3

メーリングリスト機能を実装する場合は、実際のドメインアドレスをカンマで区切って指定します。


例:

Sendmailメールサーバーのドメインはsmile.comであり、メールサーバーには仮想ドメインskills.comが設定されています。そして、[email protected] に仮想ドメイン名のエイリアス [email protected] を指定します。

具体的な手順は次のとおりです。

(1) DNSサーバーの設定と仮想ドメインのMXリソースレコードの設定

1 DNS ゾーン解決ファイルを変更し、skills.com ドメインを追加します。

zone "skills.com" IN {
        type master;
        file "1";
        allow-update { none; };
};
zone "123.168.192.in-addr.arpa" IN {
        type master;
        file "2";
        allow-update { none; };
};

2 skill.com ゾーンの前方解決ファイル /var/named/1 を作成および編集します

      cd /var/named/
      cp -a named.localhost 1
      cp -a named.loopback 2

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
@       IN      MX      10      mail.skills.com
mail    IN      A       192.168.123.101

(2) /etc/mail/local-host-namedファイルに仮想ドメインskills.comを追加します。

echo "skills.com" >> /etc/mail/local-host-names 

(3) メール中継の設定

vimエディタで/etc/mail/accessファイルを編集する

[root@localhost named]# vim /etc/mail/access
skills.com				RELAY

makemap コマンドを使用して /etc/mail/access.db ファイルを生成します。

[root@localhost named]# makemap hash /etc/mail/access.db < /etc/mail/access

仮想ドメインリスト /etc/mail/virtuserable を設定し、/etc/mail/virtuserable.db を生成します。

vimエディタで/etc/mail.accessファイルを編集する

vim /etc/mail/virtusertable
user1@skils.com			user1@smile.com

新しい /etc/mail/virtusertable.db ファイルを生成します

makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

sendmail サービスを再起動します 注: ここで再起動が失敗した場合は、systemctl status sendmail(named) -l を使用してサービスのステータスを確認できます。一般的に、named.conf と sendmail.cf の 2 つのファイルがチェックされます。


6. Sendmailサーバーをデバッグする

1. Telnet を使用してサーバーにログインし、メールを送信します

Sendmail サーバーをセットアップしたら、Telnet ツールを使用してサーバーのポート 25 にすぐにログインし、電子メールを送信します。

2. Telnet ツールとメール ツールをダウンロードする

(メール ツールを使用すると、各メール ユーザーのメールボックスを簡単に確認できます)

yum install -y telnet mailx

ダウンロードが完了したら、ファイアウォールをオフにします

systemctl stop firewalld
setenforce 0

3.sendmailサーバーにログインします。

[root@localhost mail]#  
[root@localhost mail]# telnet localhost 25      //利用telnet命令登录邮件服务器25端口
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.14.7/8.14.7; Mon, 15 May 2023 00:26:24 +0800
mail from:user1@smile.com    //设置发信人地址
250 2.1.0 user1@smile.com... Sender ok
rcpt to:user2@skills.com     //设置收件人地址
250 2.1.5 user2@skills.com... Recipient ok
data					//data表示要开始写信内容了
354 Enter mail, end with "." on a line by itself
this is a happy mail   
wish you happy everyday!    				//这两行都是信件的内容
.								//“.”表示结束信件内容 千万不要漏掉了
250 2.0.0 34EGQO8V001584 Message accepted for delivery
quit					//退出telnet服务器的命令
221 2.0.0 localhost.localdomain closing connection

Telnet では、コマンドを入力するたびに、サーバーはデジタル コードで応答します。これらのコードを理解しておくと、sendmail をよりよく把握し、サーバー エラーの原因を特定するのに役立ちます。

4. 一般的なレスポンスコードとその意味

応答コード 説明する
220 SMTPサーバーがサービスの提供を開始することを示します
250 コマンドが指定され、応答が正しいことを示します
354 手紙の内容の入力を開始し、「.」で終了します。
500 SMTP構文が間違っているためコマンドを実行できないことを示します
501 ディレクティブパラメータまたは引用符の構文エラーを示します
502 コマンドがサポートされていないことを示します

5. Mailx コマンドを使用して電子メールを受信します

mailx をインストールして再起動した後、次のコマンドを入力してメールをクエリできます。

[root@localhost mail]# mail -u user2     使用命令查看user2的邮箱
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/user2": 1 message 1 new 
>N  1 user1@smile.com       Mon May 15 00:27  13/520    //邮件编号
& 1    //查看邮件编号1
Message  1:
From user1@smile.com  Mon May 15 00:27:49 2023   //信件来源与发信时间
Return-Path: <user1@smile.com>     //返回路径
Date: Mon, 15 May 2023 00:26:24 +0800  //接收时间
From: user1@smile.com 
X-Authentication-Warning: localhost.localdomain: localhost [127.0.0.1] didn't use HELO protocol
Status: R

this is a happy mail
wish you happy everyday!    //邮件内容

& quit   //使用命令退出
Held 1 message in /var/mail/user2

6. ユーザーメールディレクトリ /var/spool/mail

メール サーバー上のユーザーのメールをチェックすることで、メール サーバーのメールが再び正常に動作していることを確認できますSendmail再/var/spool/mail目录中为每个用户分别建立单独的文件用于存放每个用户的邮件これらの名前はユーザー名と同じです

[root@localhost mail]# ls /var/spool/mail
user1  user2

7. メールキュー

メール サーバーが正常に設定されると、ユーザーに電子メール送信サービスを提供できますが、メールを受信するサーバーに問題がある場合、または他の理由によりメールが宛先に安全に到達できない場合があります。このメールは単に行方不明になっている可能性があります。したがって、sendmail はメール キューを使用して、これらの送信に失敗したレターを保存します。

mailq を通じてクエリできます

[root@localhost mail]# mailq
                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
34EGNRUH001537       40 Mon May 15 00:24 "this is a happy mail"<user1@skills.com
                 (host map: lookup (smile.com): deferred)
                                         user2@smile.com
                Total requests: 1

関連するパラメータの説明:

Q-ID: メールキューの番号を示します。

サイズ: メールのサイズを示します。

Q-Time: メールが /var/spool/mqueue ディレクトリに入る時刻。メールをすぐに送信できない理由を説明します。

送信者/受信者: 送信者と受信者の電子メール アドレス


7、メールサーバーの設定では、いくつかのことを覚えておくことがよくあります

まず最初に、DNS サーバーを必ず設定してください。DNS サーバー、sendmail サーバー、クライアント間の通信が正常であることを確認します。

2番目: ファイアウォールを閉じるか、サーバーのポートを開きます。

3 番目: setenfroce 0 を使用して selinux を閉じることができます

4つ目:仮想マシンのネットワークカードの接続方法に注意する

おすすめ

転載: blog.csdn.net/2201_75288693/article/details/130668442