WSLを使ってメーリングリストを作成(外部からの受信)

 現状ではmydomain.com宛の電子メールをmail.mydomain.comという仮想ホストにより受信しドメイン内部に転送している。

 新たにml.mydomain.comという仮想ホストを作成し、@ml.mydomanin.com宛のメールをfetchmailを通してpostfixに渡し、mailmanでメーリングリストの処理をさせる。

・DNSの設定

DNSに以下のレコードを追加する

@       IN TXT  v=spf1 ip4:xx.xx.xx.xx include:outgoing.com -all
_dmarc  IN TXT v=DMARC1; p=none; rua=mailto:dmarc_rua@mydomain.com; ruf=mailto:dmarc_ruf@mydomain.com
        IN MX  10 mail.mydomain.com.
mail    IN A   mydomain.com
ml      IN A   mydomain.com

 外部へのメールを外部のメールサーバー経由で送っているなら、SPFレコードにそのサーバーを追加しておく。

 メーリングリストはml.mydomain.comのアドレスを使用しているため、サブドメインにもSPFレコードを追加しておく。MAIL FROM:で指定したエンベロープFromのホストのSPFレコードをチェックされるため。

 Amazon SES経由で送る場合は、SPFレコードは必要ないらしい。DMARCのレポートで、policy_evaluatedセクションが<spf>=failとなっていたため気になって調べたが、問題ないらしい。

https://qiita.com/Moo_Moo_Farm/items/656826526b340694a9d8

外部向けapache(xampp)の設定変更

 後述のサーバー証明書を更新するために仮想ホストml.mydomain.com を追加する。
 ただし、/.well-knownだけは、win-acmeがチェック時にこのサーバー内を書き換えるため、除外する。

C:\xampp\apache\conf\extra\httpd-vhost.conf
ServerAlias ${DOMAIN} ftp.${DOMAIN} mail.${DOMAIN}
 ↓
ServerAlias ${DOMAIN} ftp.${DOMAIN} mail.${DOMAIN} ml.${DOMAIN}

    RewriteCond %{REQUEST_URI} !^/\.well-known
 ↓
    RewriteCond %{REQUEST_URI} !^/\.well-known
    RewriteCond %{HTTPS} off

ml.mydomain.comは別のapacheで動いているので、リバースプロキシーで飛ばす。

C:\xampp\apache\conf\extra\httpd-ssd.conf
<VirtualHost *:443>
    ServerAdmin postmaster@${DOMAIN}
	ServerName ml.${DOMAIN}
    ErrorLog  "| bin/rotatelogs.exe logs/ml.${DOMAIN}-SSL-error_%Y-%m.log  86400 540"
    CustomLog "| bin/rotatelogs.exe logs/ml.${DOMAIN}-SSL-access_%Y-%m.log 86400 540" combined
    SSLEngine on
    SSLCertificateFile "conf/certs/${DOMAIN}-chain.pem"
    SSLCertificateKeyFile "conf/certs/${DOMAIN}-key.pem"
	ProxyRequests Off
	ProxyPass / http://ml.${DOMAIN}:9080/
	ProxyPassReverse / http://ml.${DOMAIN}:9080/
</VirtualHost>

サーバー証明書の更新

既存のサーバー証明書ににml.mydomain.comを追加する

  > win-acme.exe
     A: Manage renewals (1 total)
  Please choose from the menu: a
    D: Show details for the renewal
  Choose an action or type numbers to select renewals: d
    E: Edit renewal
  Choose an action or type numbers to select renewals: e
    2: Source
  Which step do you want to edit?: 2
    2: Manual input
  How shall we determine the domain(s) to include in the certificate?: 2
  Host: mydomanin.com,ftp.mydomanin.com,mail.mydomanin.com,ml.mydomanin.com,www.mydomanin.com
  Friendly name '[Manual] mydomanin.com'. <Enter> to accept or type desired name: mydomanin.com

 追加されたホストのみが確認され新しい証明書が作成される。有効期限は変わらない。

・MercuryMailの設定

全メーリングリストで使用するメールアカウントを作成する
ユーザー名:mailman
このメールアカウントを、Configurationー”Mercury Core Module Configuration”ー”Local Domains” にドメインメールボックスとして追加する

Core ModuleーFiles
Internet name for this system: mail.mydomain.com
  ↓
Internet name for this system: mydomain.com
Core ModuleーLocal Domains
追加
  ↓
localhost mail.mydomain.com
DM=mailman ml.mydomain.com

・postfixの設定

 SMTP サーバによる知らないローカル受信者拒否を無効にする(要は知らない名前でも受け付ける)

  $ sudo vi /etc/postfix/main.cf
#local_recipient_maps =
  ↓
local_recipient_maps =

・mailmanの設定

なし

・farchmailの設定

なし