MTA について

MTA (Mail Transfer Agent : メール転送エーゼント) にはいくつか種類がありますが、Linux システムで主によく使われる MTA としては以下の 2種類があります。

  • Postfix
  • Sendmail

また、サーバ内で送信したメールを転送してもえるため、昔から郵便局に例えられることが多いです。

CentOS 7 では、主要 MTA として、Postfix と Sendmail 2つが装備されていますが、CentOS 7 では Sendmail が非推奨になったため、オススメの MTA は、Postfix です。

今回は、CentOS7 で Postfix を使ってメール送信ができるようにします。

Postfix インストール、及び初期設定

Step 1. Postfix パッケージ導入

yum で postfix パッケージをインストールします。

postfix インストールRaw Code(S)Raw Code(T)
# yum -y install postfix

# rpm -qa | grep postfix
postfix-2.10.1-6.el7.x86_64

# systemctl list-unit-files --type service | grep "postfix"
postfix.service         disabled

Step 2. Postfix メール転送設定

全てのパラメータの解説が載っているわけではないですが、本家サイトの和訳なので、基本的なパラメータの詳細が知りたいときには以下のサイトが参考になります。

設定のポイントは以下の通りです。

パラメータ 備考
myhostname www.hogehoge.com ホスト名
mydomain hogehoge.com ドメイン名
myorigin $myhostname ローカルで送信されたメールがどのドメインから来るように見えるか。 この例だと user@www.hogehoge.com。 $mydomain でも良い。
mynetworks 127.0.0.1/32 許可するネットワーク。 ローカルのみ設定した方が安全。 127.0.0.0/8 みたいな感じでも構わない。
relayhost 10.10.10.10 メールサーバの IP アドレス。 何も設定しなかった場合にはデフォルトでインターネットへ直接配送。 メールサーバがあればそれを設定する。
home_mailbox Maildir/ メールボックス。 後で作成する必要がある。
/etc/postfix/main.cfRaw Code(S)Raw Code(T)
・・・
#myhostname = host.domain.tld
myhostname = www.hogehoge.com
・・・
#mydomain = domain.tld
mydomain = hogehoge.com
・・・
#myorigin = $myhostname
myorigin = $myhostname
・・・
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
mynetworks = 127.0.0.1/32
・・・
#relayhost = [mailserver.isp.tld]
relayhost = 10.10.10.10
・・・
#home_mailbox = Maildir/
home_mailbox = Maildir/

Step 3. Postfix メールボックス作成

先ほど設定したとおりに、メールボックスディレクトリを作成します。

ここでは、/root/etc/skel ディレクトリの配下にメールボックスディレクトリを作成します。

root 配下にメールボックス作成Raw Code(S)Raw Code(T)
# mkdir -p /root/Maildir/{cur,new,tmp}
# chown root:root -R /root/Maildir
# chmod 700 /root/Maildir

# ls -ld /root/Maildir
drwx------ 5 root root 36  9月 28 16:39 /root/Maildir

# ls -lR /root/Maildir
/root/Maildir:
合計 0
drwxr-xr-x 2 root root 6  9月 28 16:39 cur
drwxr-xr-x 2 root root 6  9月 28 16:39 new
drwxr-xr-x 2 root root 6  9月 28 16:39 tmp

・・・
skel 配下にメールボックス作成Raw Code(S)Raw Code(T)
# mkdir -p /etc/skel/Maildir/{new,cur,tmp}

# chmod 700 /etc/skel/Maildir/

# ls -ld /etc/skel/Maildir
drwx------ 5 root root 36  9月 28 16:38 /etc/skel/Maildir

# ls -lR /etc/skel/Maildir
/etc/skel/Maildir:
合計 0
drwxr-xr-x 2 root root 6  9月 28 16:38 cur
drwxr-xr-x 2 root root 6  9月 28 16:38 new
drwxr-xr-x 2 root root 6  9月 28 16:38 tmp

・・・

skel について

skel ディレクトリは、一般ユーザの雛形を作成するためのディレクトリです。

例えば、/etc/skel ディレクトリ内メールボックスディレクトリを作成すると、今後、useradd で新しいユーザを作成した場合に、ユーザのホームディレクトリ内にメールボックスがコピーされるようになります。

また、ユーザディレクトリ内にコピーされたメールボックスディレクトリは root 権限になっているので、ユーザがメールボックスを削除することはできません。

Step 4. Postfix サービス起動

Postfix サービス起動 その1Raw Code(S)Raw Code(T)
# systemctl enable postfix.service
ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/postfix.service'

# systemctl start postfix.service
Job for postfix.service failed. See 'systemctl status postfix.service' and 'journalctl -xn' for details.

# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
   Active: failed (Result: exit-code) since 月 2015-09-28 17:08:24 JST; 18s ago
  Process: 1425 ExecStart=/usr/sbin/postfix start (code=exited, status=1/FAILURE)
  Process: 1423 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 1421 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)

 9月 28 17:08:23 centos systemd[1]: Starting Postfix Mail Transport Agent...
 9月 28 17:08:23 centos postfix[1425]: fatal: parameter inet_interfaces: no local interface found for ::1
 9月 28 17:08:24 centos systemd[1]: postfix.service: control process exited, code=exited status=1
 9月 28 17:08:24 centos systemd[1]: Failed to start Postfix Mail Transport Agent.
 9月 28 17:08:24 centos systemd[1]: Unit postfix.service entered failed state.

エラーになってしまいましたね。

::1 が見つからないぞと。

::1 は、IPv6 のループバックアドレスです。 IPv4 環境の場合には、/etc/hosts ファイルを編集し、::1 をコメントアウトした後、再度 Postfix サービスを起動します。

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
Postfix サービス起動 その2Raw Code(S)Raw Code(T)
# systemctl start postfix.service
※正常の場合、何も表示されない

# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
   Active: active (running) since 月 2015-09-28 17:12:08 JST; 9s ago
  Process: 1448 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 1446 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 1444 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 1520 (master)
   CGroup: /system.slice/postfix.service
           tq1520 /usr/libexec/postfix/master -w
           tq1521 pickup -l -t unix -u
           mq1522 qmgr -l -t unix -u

 9月 28 17:12:07 centos systemd[1]: Starting Postfix Mail Transport Agent...
 9月 28 17:12:08 centos postfix/master[1520]: daemon started -- version 2.10.1, configuration /etc/postfix
 9月 28 17:12:08 centos systemd[1]: Started Postfix Mail Transport Agent.

Step 5. デフォルト MTA の設定

もし、現在の MTA が Sendmail になっている場合には、alternatives コマンドを使って、MTA を Postfix に切り替える必要があります。

デフォルト MAT 切り替えRaw Code(S)Raw Code(T)
# alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 1    #### 1を入力し「Enter」

メール送受信テスト

最後に、テストメールを送信してみて、受信できることを確認します。

メールを送信する際には、sendmail コマンドを使ってもいいですし、mail コマンドを使っても大丈夫です。

sendmail コマンドでメール送信

sendmail コマンドを使ってメール送信テストを実施します。

sendmail : メール送信テストRaw Code(S)Raw Code(T)
# sendmail hogehoge@mail-to.com
Content-Type: text/plain; charset=utf-8
From: root@hogehoge.com
To: hogehoge@mail-to.com
Subject: postfix メール送信・受信テスト
テストだにゃん~!
.

mail コマンドでメール送信

後は、以下のように mail コマンドを使って、テストメール送信し、受信できることを確認してください。

mail : メール送信テストRaw Code(S)Raw Code(T)
# mail hogehoge@mail-to.com
Subject: mail コマンドでメール送信・受信テスト
テストメールです!
このメールが受信できることを確認してください。
.
EOT

以上、CentOS 7 Postfix メール転送設定 でした。