Linuxでsendmailを使う

2018年12月8日

Time4VPSのStorage VPSでNextcloudを運用するための環境整備を進めているわけですが、メールを使えるようにしなければなりません。FreeBSDで使い慣れているsendmailを使えるようにしましょう。

sendmailとmailクライアントのインストール

CentOSやDebianには標準でsendmailとmailコマンドが用意されていないので、パッケージからインストールします。

CentOSの場合、sendmailサーバーに加えてクライアントプログラムのmailxをインストールします。

yum install sendmail mailx

Debianの場合はsendmailサーバーに加えてsendmail-cfというツールとクライアントプログラムのmailutilsをインストールします。

apt install sendmail sendmail-cf mailutils

CentOSの場合はインストールできたらサービスの自動起動設定と起動です。Debianはインストールと同時に起動処理が完了しているので以下は不要です。

systemctl enable sendmail.service
systemctl start sendmail.service

通常のCentOSにはsendmailの代わりにPostfixが入っているらしくMTAの切り替えが必要らしいんですが、Time4VPSでインストールされるCentOS 7.5にはPostfixは入っていませんでした。

# alternatives --config mta

There is 1 program that provides 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail

Enter to keep the current selection[+], or type selection number:

MTAってのはMail Tenso…じゃなくてMail Transfer Agentね。

ポート解放とメール設定

CentOSならfirewall-cmdを使ってsmtpポートとpop3ポートを解放します。

firewall-cmd --add-service=smtp --permanent
firewall-cmd --add-service=pop3 --permanent
firewall-cmd --reload

結果確認は以下のとおり。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: venet0
  sources:
  services: ssh dhcpv6-client http https dns ntp smtp pop3
  ports: 20022/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Debianの場合はufwでポート開放します。

ufw allow 110
ufw allow 587

結果確認は以下のとおり。

# ufw status
Status: active

To                         Action      From
--                         ------      ----
20022                      LIMIT       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
25                         ALLOW       Anywhere
110                        ALLOW       Anywhere
587                        ALLOW       Anywhere

sendmailの初期設定はFreeBSDのsendmail設定と同じです。/etc/mailディレクトリ内のaccess, local-host-names, virtusertableファイルをそれぞれ設定します。

これに加えて一点だけLinux独自の設定が必要です。Sendmail で外部からのメールを受け入れ可能にする (CentOS 5.5)によるとCentOSのsendmailはデフォルトで外部メールを受信しない設定とのこと。/etc/mail/sendmail.cfの設定を書き換える必要があります。CentOS7もDebian9もSMTP daemon optionsのところにあります。

CentOS 7.6

# diff sendmail.cf.org sendmail.cf
269c269
< O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
---
> O DaemonPortOptions=Port=smtp, Name=MTA

Debian 9.9

# diff sendmail.cf.org sendmail.cf
264c264
< O DaemonPortOptions=Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1
---
> O DaemonPortOptions=Family=inet,  Name=MTA-v4, Port=smtp

これでmakeすればmailコマンドが使えるようになるよ。