Login          

Postfixでメールサーバー構築

Postfixでメールサーバー構築

サーバーを運用していると、動作させているサービスがエラーやログなどのメールを発進する場合がありますから、サーバーのトラブルをいち早く知るにはやはりメールサーバは動作させておきたいです
また、自宅サーバーであれば、ほぼ上限無くメールアドレスを設定できます

centOS7へのメールサーバー設定にはこちらを参考にさせていただきました
ほぼ同様の設定を行っていきますので詳細は下記サイトで確認してください。私の環境で若干違う設定の箇所もあるので、覚書きとして記録しておきたいと思います
https://www.rem-system.com/mail-postfix01/
https://www.rem-system.com/mail-postfix02/
https://www.rem-system.com/mail-postfix03/
https://www.rem-system.com/dkim-postfix04/

postfix の設定(配送専用設定)

インストールの確認

yum list installed でpostfix のインストール状態を確認します

$ yum list installed | grep postfix
 postfix.x86_64       2:2.10.1-7.el7                 @base

設定ファイルを自分のドメイン名に合わせる

私の環境では、すでにインストールされていました。
postfix は /etc/postfix/main.cf のファイルで設定しますので、まずは既存のファイルはバックアップとして残しておき編集します
まずは、メールサーバのドメイン名を自分の環境に合わせます

$ sudo cp -p /etc/postfix/main.cf /etc/postfix/main.cf.org
$ sudo vi /etc/postfix/main.cf

・
・
#------- 2019.00.00 kazu
# myhostname = host.domain.tld
# myhostname = virtual.domain.tld
myhostname = mail.hogehoge.com  <-------- ドメイン名を自分に合わせて編集 
 ・
 ・
#------- 2019.00.00 kazu
# mydomain = domain.tld
mydomain = hogehoge.com       <---------- ドメイン名を自分に合わせて編集 
 ・
 ・
#------- 2019.00.00 kazu
masquerade_domains = hogehoge.com  <------ ドメイン名を自分に合わせて編集

#inet_interfaces = all  <---------- 他のマシンからも配送するには、allを指定   
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = localhost  <--------- このサーバからしか配送できない 

設定のチェックと再起動と自動起動設定

# postconf -n
 ・
 ・
masquerade_domains = hogehoge.com
mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = hogehoge.com
myhostname = mail.hogehoge.com
 ・
 ・
 ・

$ sudo postfix check
       <--------- なにも表示されなければエラーなし

$ suso  systemctl restart postfix  <------- 再起動

$ sudo systemctl status postfix <------- 起動状態の確認

$ sudo systemctl is-enabled postfix
enabled                 <----- enable なら自動起動に設定されている

メール送信の確認

$ mail test@example.com     <---------- 既知のメールアドレスに送信
Subject: Mail delivery test  <--------- 件名
test-test       <-------------- 本文
test
.               <----- 「.」で入力終了し送信
EOT

確認が可能であれば、送信したメールアドレスを確認してください。
サーバーからは、ログファイル「/var/log/maillog」で確認できます
「less」コマンドで、ログを指定すると、内容が表示されます。
キーボードの大文字「G」キーを押すと最終行へジャンプできます。
ログの最後付近に、「status=sent (250…..」があれば送信されています。

$ sudo less /var/log/maillog
 ・
 ・
......, status=sent (250 2.0.0 ...... Message accepted for delivery)
 ・
 ・

SPF・メールの送信ドメインの認証

メール配送のSMTPは、任意の差出人に成りすまされるという弱点があるようで、メールサーバによっては認証ができないドメインからのメールは迷惑メールとして処理される事があるようです。
そこで、SPFを設定することで、ある程度送信ドメインを証明する事ができると言う事です。
SPFはDNS側に設定するので、自分でDNSを運用している場合には、DNS側に設定しますが、私の場合はダイナミックDNSサービスの「MyDNS」を利用させてもらっているので、そちらで設定する事になります。
MyDNSへログインし、「DOMAIN INFO」に入り確認したところ、自動的に設定されているようです。

皆さんのサーバーのIPアドレスでSPFレコードを自動的に設定しますので通常は設定は不要です。 

との記述がありました。

Dovecotで送受信できるようにする

次に、受信もできように設定し、外部PCのメーラーからでもメールを受取れるように設定したいと思います

MXレコードの確認

MXレコードも、DNSに設定するので、私の環境では「MyDNS」にログインして確認します

「MX」にはMXレコードの設定をしますが、入力が無い場合には自動的にそのドメイン名自体をMXホストとして設定しますので通常は設定は不要です。 もしドメイン名を途中で変更した場合にはMXの修正を忘れないようにして下さい。 

とあるので、ドメイン名と同じ場合には、自動的に設定されているようですが、私は、「mail.hogehoge.com」と明示的に設定しました。
設定を確認するには、「host」コマンドで確認できます。
「host」コマンドが使用できない場合には「brid-utils」をインストールする必要があります。
「-t mx」オプションでタイプを指定して検索します

$ sudo yum install bind-utils
 ・
 ・
$ host -t mx hogehoge.com
 hogehoge.com mail is handled by 10 mail.hogehoge.com.

Dovecot のインストールと自動起動設定

$ sudo yum -y install dovecot   <------- インストール

$ yum list installed | grep dovecot     <---- インストールの確認
  dovecot.x86_64       1:2.2.36-3.el7    @base
  
$ sudo systemctl start dovecot   <--------- 起動
$ sudo systemctl status dovecot  <--------- 起動状態確認
$ sudo systemctl enable dovecot  <--------- 自動起動設定

$ sudo systemctl is-enabled dovecot   <--------- 自動起動の確認
enabled  

Dovecotの設定

POP3/IMAP4のプロトコルを利用。
接続時の認証はLinuxのユーザーアカウントを利用。
POP3/IMAP4接続時のパスワードは平文。
SSLによる暗号化は無し。
SMTP-AUTHの際に認証機能を提供。

今回の設定では、下記ファイルを変更します。
変更前に、現ファイルは、「.org」をつけて残しておくようにします

  • /etc/dovecot/dovecot.conf
  • /etc/dovecot/conf.d/10-auth.conf
  • /etc/dovecot/conf.d/10-mail.conf
  • /etc/dovecot/conf.d/10-ssl.conf
  • /etc/dovecot/conf.d/10-master.conf
★dovecot.conf 変更
$ cd /etc/dovecot/
$ sudo cp -p dovecot.conf dovecot.conf.org   <--------バックアップ
$ sudo vi ./dovecot.conf   <----------- 設定ファイル編集

#protocols = imap pop3 lmtp
protocols = imap pop3       <------------ imap pop3 のみに設定

★10-auth.conf 変更
$ cd /etc/dovecot/conf.d/
$ sudo cp -p 10-auth.conf 10-auth.conf.org    <------- バックアップ
$ sudo vi 10-auth.conf     <----------- 設定ファイル編集

#disable_plaintext_auth = yes
disable_plaintext_auth = no <----------- 平文認証無効化を無効

#auth_mechanisms = plain
auth_mechanisms = plain login  <----------- 平文での認証

★10-mail.conf 変更
$ cd /etc/dovecot/conf.d/
$ sudo cp -p 10-mail.conf 10-mail.conf.org  <------ バックアップ
$ sudo vi 10-mail.conf    <----------- 設定ファイル編集

   mail_location = maildir:~/Maildir
#   mail_location = maildir:~/Maildir

★10-ssl.conf 変更
$ cd /etc/dovecot/conf.d/
$ sudo cp -p 10-ssl.conf 10-ssl.conf.org  <----- バックアップ
$ sudo vi ./10-ssl.conf  <----------- 設定ファイル編集

#ssl = required   <----------- SSL の利用
ssl = no     <----------- SSL の利用

★10-master.conf 変更
$ sudo cp -p 10-master.conf 10-master.conf.org   <--- バックアップ
$ sudo vi ./10-master.conf  <----------- 設定ファイル編集

 # Postfix smtp-auth
 #unix_listener /var/spool/postfix/private/auth {
   #  mode = 0666
 #}
  ↓ postfix で認証を行う設定にコメントを外して変更
  ↓
 unix_listener /var/spool/postfix/private/auth {
   mode = 0666
   user = postfix
   group = postfix
  }

設定の確認と反映

dovecot 設定の確認は、「doveconf -n」で変更部分を確認できます。
再起動して反映させるには、「systemctl restart dovecot」
状況の確認は「systemctl status dovecot」で「active (running)」の表示で確認できます
狙い通りに、「pop3」と「IMAP」の利用状態は、「netstat -nat」で110番と143番が表示されていれる事で確認できます

$ sudo doveconf -n
$ sudo systemctl restart dovecot
$ sudo systemctl status dovecot
$ netstat -nat

PostfixのSMTP-AUTH設定

dovecot側でのSMTP認証の設定は終了したので、Postfix側の設定に進みます
設定は、/etc/postfix/main.cf で行うので、まずはバックアップを取り編集します。編集する項目は、

  • inet_interfaces
  • mydestination
  • local_recipient_maps
  • home_mailbox
  • smtpd_banner
  • message_size_limit
  • SMTP-AUTHの設定追加
    になります
# ----- inet_interfaces
inet_interfaces = all     <---------- local 以外の配送を可
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost      <--------------- コメントにする


# -----  mydestination ---- 自分のドメイン宛のメールも受け取り可
#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain



# ------  local_recipient_maps unixユーザーを許可
local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =

# ------  home_mailbox 
#home_mailbox = Mailbox
home_mailbox = Maildir/    <----- 「Maildir」形式 

# -------  smtpd_banner 
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP  <----- postfix の使用を隠す

# ------ message_size_limit 
### MAIL SIZE
message_size_limit = 20971520 <----------- 任意に設定(20MB)

### SMTP-AUTH  <------------------- 設定を追加
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks
                               permit_sasl_authenticated
                               reject_unauth_destination

/etc/postfix/main.cf  を保存したら、「postfix check」で構文エラーの確認

OP25B対策

迷惑メール対策で、ほとんどのプロバイダでSMTP接続の25番ポートがブロックされています
その場合、サブミッションポートと呼ばれる587番ポートを利用するのでその設定をしなければいけません
設定は、「/etc/postfix/master.cf」で行うので、いつものように、バックアップをとり、編集します

$ cd /etc/postfix/
 $ sudo cp -p master.cf master.cf.org
 $ sudo vi ./master.cf

   submission inet n   -   n   -   -   smtpd  <---- この設定を有効にする
  
   # 編集したら、保全して、「postfixを再起動」 
$ sudo systemctl restart postfix

   #「netstat -nat」コマンドで587番ポートがオープンしていればOK
$ netstat -nat
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN

ファイアウォールへ接続許可

メールを送受信する場合、
送信用として「SMTP : 25番」「SMTP-Submission : 587番」
受信用として「POP3 : 110番」「IMAP$ : 143番」を許可します
現状のファイアウォールの状態は、「firewall-cmd –list-all」で確認できます
また、サービスを追加するには、
「firewall-cmd –zone=public –add-service={___ , ____ , ____}」
「—-permanent」オプションで永続的に設定できますが、ファイアウォールの再ロードが必要になります
「firewall-cmd –reload」

$ sudo firewall-cmd --list-all  <--- 現状の状態を調べる
 public (active)
   target: default
   icmp-block-inversion: no
   interfaces: wlp8s0
   sources:
   services: ssh dhcpv6-client http https   <---- SMTPなどのサービスは無効
   ・
   ・
$ sudo firewall-cmd --zone=public --add-service={smtp,smtp-submission,pop3,imap} --permanent
 success     <------------ 追加成功
 $ sudo firewall-cmd --reload
 success   <------- 再ロード
 $ sudo firewall-cmd --list-all   <-------- 状態確認
 public (active)
   target: default
   icmp-block-inversion: no
   interfaces: wlp8s0
   sources:
   services: ssh dhcpv6-client http https smtp smtp-submission pop3 imap

メール送信の確認

メールは、「mail」コマンドで送信できる。
また、「/var/log/maillog」にログが記録される

$ mail hogehoge@nifty.com   <--------- アドレスを指定 
 Subject: test  <---------- 件名
 test-mail1   <------- 本文
 from hogehoge.com to nifty.com
 .      <------------- 「.」が入力されるまで、本文とみなす
 EOT

  これで配送されたはずなので、ログを確認してみます
$ sudo less /var/log/maillog
  ログが出力されますが、最新のログは一番最後になります。
 多い場合には、「G」キーで、最終行に移動できます。
 最終行付近に、「status=sent (delivered to maildir)」があれば
 配送されています

送信できない場合が発生

会社など、外部から通常使っているメーラーで試してみます
すると、届く場合と、届かないアドレスが出てきました
対策としては、自分のメールサーバーから直接の配送でなく、gmail などプロバイダのメールサーバーにリレーしてもらうことで回避できるようです
私の場合、Nifty のアドレスを取得してあるので、そちら経由でするように設定したいと思います
こちらを参考にしました
https://www.walbrix.co.jp/blog/2014-02-gentoo-postfix-relay-gmail.html
https://ufuso.jp/wp/centos-7-0-%E3%81%A7-mail-server%E6%A7%8B%E7%AF%89postfixdovecot/
設定は、リレーしてもらうメールサーバーの認証ファイルを作成し、「/etc/postfix/main.cf」の「smtp_sasl~」パラメータに指定します

Nifty の認証ファイル作成

実施のメーラーに設定する、自分のアカウント名とパスワードを使用して「postmap」コマンドでデータベースを作成します

# echo [smtp.nifty.ne.jp]:587 hogehoge@nifty.ne.jp:「パスワード」 > /etc/postfix/sasl_niftypass
# postmap /etc/postfix/niftypass

Postfix に反映

「/etc/postfix/main.cf」の「smtp_sasl~」パラメータに指定します
パラメータ変数名で、ちょっと注意が必要です
「smtpd_sasl~」と「smtp_sasl~」の二種類があります
「smtpd」 は、外から入ってく来るとき。
「smtp」 は外へ出て行くときの設定のようです
なので、送信の場合は、「smtp_sasl~」の設定になりますね
いつものように、 「/etc/postfix/main.cf」 のバックアップを作成し編集します

relayhost = [smtp.nifty.ne.jp]:587  <--------- SMTP サーバを指定

smtp_sasl_auth_enable = yes   <-------- 認証情報を指定
smtp_sasl_password_maps = hash:/etc/postfix/sasl_niftypass
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = LOGIN

  設定を保存

$ sudo postfix check    <---------- 設定ファイルの確認。エラーが出なければOK
$ sudo systemctl restart postfix  <-------- Postfix 再起動
$ sudo systemctl status postfix <-------- 起動状況の確認


・
・
    active (running)
「active」が表示されれば、正常に起動している

$ sudo systemctl is-enabled postfix  <----- 起動状態の確認
 enabled

メール送信テスト

$ echo testmail sasl_nifty | mail hogehoge@kaisya.co.jp
   <------------ メールは配送されます。通常のメーラーで配送状況を確認
$ less /var/log/maillog  <-------- サーバーのログ確認
              <-------- 「G」キーで最終行へ移動。
              <------- status=sent があれば送信されている

メールの送受信が可能

これで、サーバからの送受信と、外部からでも受信ができるようになりました