オタク日記
(Mac と Linux, 2019Q1)

目次

2019-02-13 (Wed): 宅外サーバ 2 (Postfix + Dovecot)
2019-02-06 (Wed): 宅外サーバ 2 (Ubuntu-18.04 + Certificates)

古い日記:
2018Q4   2018Q3   2018Q2   2018Q1  
2017Q4   2017Q3   2017Q2   2017Q1  
2016Q4   2016Q3   2016Q2   2016Q1  
2015Q4   2015Q3   2015Q2   2015Q1  
2014Q4   2014Q3   2014Q2   2014Q1  
2013Q4   2013Q3   2013Q2   2013Q1  


2019-02-13 (Wed): 宅外サーバ 2 (Postfix + Dovecot)

Postfix の設定には hostname が陽に (陰にも?) 入ってくるので、 後々頭をかかえなくて良いように今のうちに hostname を変更しておく。
fukuda@digoc02b:~% sudo hostnamectl set-hostname digoc04
fukuda@digoc02b:~% zsh
fukuda@digoc04:~% sudo emacs /etc/hosts
fukuda@digoc04:~% cat /etc/hosts
# Your system has configured 'manage_etc_hosts' as True.
.....
# *1)
127.0.1.1 digoc04.waremo.mine.nu digoc04
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
.....
  1. *1) この部分は手で編集する必要がある。あと、FQDN も必須ではないが、apache の起動の際の warning を押えてくれる。

テストの都合を考えて、今回は IMAP4 サーバ (Dovecot) の方からインストールする。

Dovecot

まず Maildir を作り、dovecot をインストール

fukuda@digoc04:~% mkdir Maildir
fukuda@digoc04:~% chmod 700 Maildir
fukuda@digoc04:~% sudo apt install dovecot-core dovecot-imapd
fukuda@digoc04:~% sudo ufw allow "Dovecot Secure IMAP" 

以上までできた、/etc/dovecot/conf.d/10-{auth,mail,master,ssl}.conf を変更して、結果として次のような設定パラメータとする。 (各箇所に、変更すべき conf ファイルを示す。)

fukuda@digoc04:~% doveconf -n 
# 2.2.33.2 (d6601f4ec): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.21 (92477967)
# OS: Linux 4.15.0-45-generic x86_64 Ubuntu 18.04.1 LTS 
auth_mechanisms = plain login
#1) 10-mail.conf で変更
mail_location = maildir:~/Maildir
mail_privileged_group = mail
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
}
passdb {
  driver = pam
}
protocols = " imap"
#2) 10-master.conf で変更 (block 全体) 
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
}
#3) 10-ssl.conf で変更 (2 行)
ssl_cert = </etc/letsencrypt/live/waremo.mine.nu/fullchain.pem
ssl_key = </etc/letsencrypt/live/www.waremo.mine.nu/privkey.pem 
userdb {
driver = passwd
} 
fukuda@digoc04: sudo systemctl reload dovecot
	

ここに

  1. #1) (mbox でなく) ~/Maildir 以下に、Maildir 形式でメッセージをセーブする。
  2. #2) Postfix に authentication 機能を供給する。Postfix 側では /etc/postfix/main.cf
       # /etc/postfix/main.cf
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_path = private/auth
    smtpd_sasl_type = dovecot
    等として対応する。
  3. #3) 新たに取った certificate と private key でデフォルトのモノを置き換える。 (実際には doveconf -n では、private key へのパスは表示されない。)

macOS (falcon.otacky.us) からアクセスしてみて、手短に単体チェック:

fukuda@falcon:~% gnutls-cli -p 993 imap.waremo.mine.nu
Processed 135 CA certificate(s).
Resolving 'imap.waremo.mine.nu:993'...
Connecting to '128.199.161.24:993'...
- Certificate type: X.509
- Got a certificate list of 2 certificates.
- Certificate[0] info:
 - subject `CN=www.waremo.mine.nu', \
    issuer `CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US', ....., \
    activated `2019-01-01 00:55:49 UTC', expires `2019-04-01 00:55:49 UTC', .....
	Public Key ID:
		sha1:50d585e793caeab497404b1ee298503a989aed16
		sha256:e567cf7c9a4e35f6c3008b1f228acb4a0eaf7a37f59e00d61.....
	Public Key PIN:
		pin-sha256:5WfPfJpONfbDAIsfIorLSg6vejf1ngDWFKYjkYmu3Nw=
	Public key's random art:
		+--[ RSA 2048]----+
		|        .... o.  |
		|      ..    o .  |
		|   o o.      o . |
		|  o +  .. +   +  |
		| +   o +S= + . . |
		|o E   o . + o    |
		| . .      .o .   |
		|  o      ...o    |
		| .       .o.     |
		+-----------------+

- Certificate[1] info:
 - subject `CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US', \
    issuer `CN=DST Root CA X3,O=Digital Signature Trust Co.', ....., \
    activated `2016-03-17 16:40:46 UTC', expires `2021-03-17 16:40:46 UTC', 
- Status: The certificate is trusted. 
- Description: (TLS1.2)-(ECDHE-RSA-SECP384R1)-(AES-256-GCM)
- Session ID: 6A:E1:C5:26:25:26:2F:92:67:90:D1:75:D2:01:33:C0:74:95:04:.....
- Ephemeral EC Diffie-Hellman parameters
 - Using curve: SECP384R1
 - Curve size: 384 bits
- Version: TLS1.2
- Key Exchange: ECDHE-RSA
- Server Signature: RSA-SHA256
- Cipher: AES-256-GCM
- MAC: AEAD
- Compression: NULL
- Options: extended master secret, safe renegotiation,
- Handshake was completed

- Simple Client Mode:

* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE \
    IDLE AUTH=PLAIN AUTH=LOGIN] \
    Dovecot (Ubuntu) ready.
a002 login fukuda password
a002 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE \
     IDLE SORT .....] Logged in
a003 select inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft unknown-0 $Forwarded .....)
.....
      

とりあえず、port 993 への、IMAPS アクセスに成功している。

また同 falcon 上の EmacsMac.app の Wanderlust からも、~/.folders に:

# ~/.folders
%inbox:fukuda@imap.waremo.mine.nu

として、~/.wl に:

(setq elmo-imap4-default-authenticate-type 'clear
       elmo-imap4-default-stream-type 'ssl
       elmo-imap4-default-port '993)

として、EmacsMac.app の Wanderlust から imap.waremo.mine.nu:~/Maildir にアクセスできた。

Postfix

次いで、postfix をインストール

fukuda@digoc04:~% apt install postfix procmail

で、次のような package configration pane が開くので、general type としては 'Internet Site', 次ページの System Mail Name は、'waremo.mine.nu' を入力する。(後者は説明がよく解らないし、 与えられるデフォルトが hostname で FQDN になってないけど、 ここは、ちゃんと digoc04.waremo.mine.nu とした方が良い。

Postfix Config Pane
Postfix インストール時の config pane

この結果として設定される main.cf は殆んど触るところがないくらい。 以下にその一部を加えた改変部分へのノート ('#*n)')と一緒に示す。

fukuda@digoc04:~% postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
inet_interfaces = all
inet_protocols = all
mailbox_command = procmail -a "$EXTENSION"   #1)
mailbox_size_limit = 0
mydestination = $myhostname, beaverr.otacky.us, beaver, localhost.localdomain, localhost
myhostname = digoc04.waremo.mine.nu          #2)
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
#3)
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated \
    defer_unauth_destination    #4)
#5)
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
#6)
smtpd_tls_cert_file = /etc/letsencrypt/live/www.otacky.jp/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/www.otacky.jp/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

ここに、

  1. #1) procmail を一緒にインストールすれば、 これがデフォルトとなるように見えるが、確かではない。いずれにせよ、 このように設定しておく。
  2. #2) 上記の '# dpkg-reconfigure postfix' で設定した値がここ (と /etc/mailname) に入る。 これから他のパラメータが作られるので、厳密に hostname を含む FQDN になっている必要がある。
  3. #3) ここからの 3 行が、Postfix の smtp ブロック (つまりは送信部) の TLS 関連の振舞を決める。
  4. #4) 入力されたメッセージを、 (relayhost へではなく) 一般の SMTP サーバへリレーする際の制限を記述。 'permit_sasl_authentication' が重要
  5. #5) 以下の 3 行で、上の sasl_authentication のやり方を既定。 dovecot の SASL を使う。(Cyrus SASL は難し過ぎる……)
  6. #6) _cert_file, _key_file には snakeoil 等がデフォルトが 入っているが、先に要れた letsencrypt の cert と private-key を指定する。
Procmail を設定する。その rc file ~/.procmailrc は digoc02b では既にかなり長大なものになっているが、 試験のためには適切ではないので、振り分けとか、spam filter 関連のところは無視して、以下のようなものを作る:
# ~/.procmailrc
MAILDIR=$HOME/Maildir/
DEFAULT=$HOME/Maildir/
LOGFILE=$HOME/procmail.log
DELIVER="/usr/lib/dovecot/deliver"

以上までで、メール受信、送信、配送の全てが TLS を用いてできる筈なので、 簡単に試験してみる。 (以降の試験結果は、hostname を digoc04.otacky.jp と変更してからのもので置き換えた。)

Dovecot + Postfix の動作確認

Local 送受信

fukuda@digoc04:~% sendmail fukuda@localhost    
From: fukuda@localhost
To: fukuda@localhost
Subject: local delivery
test
test
.
fukuda@digoc04:~% sudo tail /var/log/mail.log
.....
Feb 14 15:35:53 digoc04 postfix/pickup[19021]: 4AF5D17B493: uid=1000 from=<fukuda>
Feb 14 15:35:53 digoc04 postfix/cleanup[19825]: 4AF5D17B493: 
    message-id=<20190214063553.4AF5D17B493@digoc04.otacky.jp>
Feb 14 15:35:53 digoc04 postfix/qmgr[21193]: 4AF5D17B493: 
    from=<fukuda@otacky.jp>, size=306, nrcpt=1 (queue active)
Feb 14 15:35:53 digoc04 postfix/local[19827]: 4AF5D17B493: 
    to=<fukuda@localhost>, relay=local, delay=29, delays=29/0.01/0/0.01, 
    dsn=2.0.0, status=sent (delivered to command: procmail -a "$EXTENSION")

Postfix の内部で、pickup -> cleanup -> qmgr -> local と転送されて、 最後に procmail に渡されている。

fukuda@digoc04:~% lv procmail.log
From fukuda@otacky.jp  Thu Feb 14 15:35:53 2019
 Subject: local delivery
  Folder: /home/fukuda/Maildir/new/1550126153.19829_0.digoc04               391

fukuda@digoc04:~% ls Maildir/new -lt
total 2360
-rw------- 1 fukuda fukuda    391 Feb 14 15:35 1550126153.19829_0.digoc04
      

Procmail は message を ~/Maildir/new/ にセーブした。

Mail System, path 1 & 2
Fig-1, メールシステム内の転送経路概念図 (1)
(Path-1: Local to Local, Path-2: Local to Cloud)

Local から Mail Server (gmail.com)へ

同様に message を作り、今度は外部の mail server へ送信。

fukuda@digoc04:~% sendmail fukudataka@gmail.com
From: fukuda@otacky.jp
To: fukudataka@gmail.com
Subject: test from otacky.jp to gmail.com
test
test
.
fukuda@digoc04:~% sudo tail /var/log/mail.log  
Feb 14 15:42:09 digoc04 postfix/pickup[19021]: 9E9F517B493: uid=1000 from=<fukuda>

Feb 14 15:42:09 digoc04 postfix/cleanup[19884]: 9E9F517B493: 
    message-id=<20190214064209.9E9F517B493@digoc04.otacky.jp>

Feb 14 15:42:09 digoc04 postfix/qmgr[21193]: 9E9F517B493: 
    from=<fukuda@otacky.jp>, size=328, nrcpt=1 (queue active)

Feb 14 15:42:10 digoc04 postfix/smtp[19892]:  Trusted TLS connection
    established to gmail-smtp-in.l.google.com [74.125.200.27]:25:  
    TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)

Feb 14 15:42:11 digoc04 postfix/smtp[19892]: 9E9F517B493: 
    to=<fukudataka@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.200.27]:25, 
    delay=86, delays=84/0.02/0.69/1.2, dsn=2.0.0, status=sent 
    (250 2.0.0 OK  1550126531 k62si1614897pfc.208 - gsmtp)

Feb 14 15:42:11 digoc04 postfix/qmgr[21193]: 9E9F517B493: removed
      
pickup -> qmgr までは上記と同じだが、外部へは smtp を使う。 (Fig-1 の Path-2 にあたる。) この時、Trusted TLS connection を張る。これは、相手方の 25 ポートに アクセスして STARTTLS で、TLS-1.2 で接続を確立し、 しかも、相手先の certificate を自分の CAfile で認証している、という事 (?)

外部サーバからのメッセージを受信

外部サーバとして、自宅サーバ (beaver.otacky.us) を使い、 otacky.jp へメッセージを送る。このサーバの Postfix を smtp_tls_security_level = may (相手が対応していれば、 STARTTLS を使う) と設定しておくと
fukuda@beaver:~% postconf -n | grep smtp_tls
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
fukuda@beaver:~% sendmail fukuda@otacky.jp
From: fukuda@beaver.otacky.us
To: fukuda@otacky.jp
Subject: Second Trial 
.....
fukuda@beaver:~% tail -f /var/log/mail.log
Feb 16 07:15:56 beaver postfix/pickup[14495]: D472A4569A: uid=1000 from=<fukuda>

Feb 16 07:15:56 beaver postfix/cleanup[14712]: D472A4569A: 
    message-id=<20190215221556.D472A4569A@beaver.otacky.us>

Feb 16 07:15:56 beaver postfix/qmgr[1259]: D472A4569A: 
    from=<fukuda@beaverr.otacky.us>, size=342, nrcpt=1 (queue active)

Feb 16 07:15:57 beaver postfix/smtp[14714]: 
    Anonymous TLS connection established to otacky.jp[128.199.161.24]:25: 
    TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)

Feb 16 07:15:58 beaver postfix/smtp[14714]: D472A4569A: 
    to=<fukuda@otacky.jp>, relay=otacky.jp[128.199.161.24]:25, 
    delay=70, delays=69/0.02/1.2/0.17, dsn=2.0.0, status=sent 
    (250 2.0.0 Ok: queued as 1B50817B492) 

この時、digoc04 の Postfix の smtpd は次のように応答・対応する。 (STARTTLS に応じている。)

fukuda@digoc04:~% sudo tail /var/log/mail.log  
Feb 16 07:15:57 digoc04 postfix/smtpd[20457]: connect from ... [116.58.186.101]

Feb 16 07:15:57 digoc04 postfix/smtpd[20457]: 
    Anonymous TLS connection established from ....[116.58.186.101]: 
    TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)

Feb 16 07:15:58 digoc04 postfix/smtpd[20457]: 1B50817B492: client=...[116.58.186.101]

Feb 16 07:15:58 digoc04 postfix/cleanup[20467]: 1B50817B492: message-id=<....@beaver.otacky.us>

Feb 16 07:15:58 digoc04 postfix/qmgr[20725]: 1B50817B492: 
    from=<fukuda@beaverr.otacky.us>, size=548, nrcpt=1 (queue active)

Feb 16 07:15:58 digoc04 postfix/local[20468]: 1B50817B492: to=<fukuda@otacky.jp>, 
    relay=local, delay=0.1, delays=0.09/0.01/0/0.01, dsn=2.0.0, 
    status=sent (delivered to comm and: procmail -a "$EXTENSION")

Feb 16 07:15:58 digoc04 postfix/qmgr[20725]: 1B50817B492: removed

Feb 16 07:15:58 digoc04 postfix/smtpd[20457]: disconnect from ...[116.58.186.101] 
    ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7F
....
      

この時、sender (beaver) の側で、 smtp_tls_security_level = (none)(STARTTLS を disable) としておくと、つまり

fukuda@beaver:~% postconf -n | grep smtp_tls           
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_security_level =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

となっていれば、sender のログは

fukuda@beaver:~% sendmail fukuda@otacky.jp             
From: fukuda@beaver.otacky.us
To: fukuda@otacky.jp
Subject: test with smtp_tls_security_level = (blank)
.....
fukuda@beaver:~% tail -f /var/log/mail.log
.....
Feb 16 07:49:39 beaver postfix/pickup[14848]: A07724569A: 
    uid=1000 from=<fukuda>

Feb 16 07:49:39 beaver postfix/cleanup[14853]: A07724569A: 
    message-id=<20190215224939.A07724569A@beaver.otacky.us>

Feb 16 07:49:39 beaver postfix/qmgr[14847]: A07724569A: 
    from=<fukuda@beaverr.otacky.us>, size=344, nrcpt=1 (queue active)

Feb 16 07:49:40 beaver postfix/smtp[14855]: A07724569A: 
    to=<fukuda@otacky.jp>, relay=otacky.jp[128.199.161.24]:25, 
    delay=64, delays=63/0.01/0.56/0.18, dsn=2.0.0, 
    status=sent (250 2.0.0 Ok: queued as 4ADDC17B492)
.....
      

のように、Port 25 に通常の SMTP で転送される。受信側の Postfix も

fukuda@digoc04:~% sudo tail /var/log/mail.log
.....
Feb 14 16:20:17 digoc04 postfix/smtpd[20238]: connect from .....[116.58.186.101]

Feb 14 16:20:18 digoc04 postfix/smtpd[20238]: 5ED9517A95A: .....[116.58.186.101]

Feb 14 16:20:18 digoc04 postfix/cleanup[20243]: 5ED9517A95A: 
    message-id=<20190214072015.A017E4569B@beaver.otacky.us>
.....

のように報告されている (TLS は使っていない。) この両方の場合、次の図に Path-3 で示される経路を転送される。

Mail System, path 3 & 4
Fig-2, メールシステム内の転送経路概念図 (2)
(Path-3: Internet to Local, Path-4: SMTP Posting Server)

SMTP Posting Server として

自分が Cloud の任意のサーバにメールを送る時、digoc04 を Posting Server として使う訳だが、その時最も重要な「仕様」は、「スパマーの踏み台にされない」事。 要は、自分のホスト以外からの relay は一切拒否する、という事。これを実現するため、 「Submission Port (587) から TLS connection を確立し SASL login に成功したユーザからのみ、転送を受け付ける」を実現する。

Postfix の smtpd 関連の設定パラメータ

fukuda@digoc04:~% postconf -n | grep smtpd_   
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_cert_file = /etc/letsencrypt/live/www.otacky.jp/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/www.otacky.jp/privkey.pem
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes

のうち、特に smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination が重要であるように見える。

このように設定された digoc04 の Postfix に対して、gnutlis-cli を使って、メールを fukudataka@gmail.com への relay を試みる。 (青い字で書かれているのが、入力文字列。)

fukuda@falcon:~% gnutls-cli --starttls -p 587 smtp.otacky.jp 
Processed 135 CA certificate(s).
Resolving 'smtp.otacky.jp:587'...
Connecting to '128.199.161.24:587'...

- Simple Client Mode:

220 digoc04.otacky.jp ESMTP Postfix (Ubuntu)
ehlo smtp.otacky.jp
250-digoc04.otacky.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
starttls
220 2.0.0 Ready to start TLS
Ctrl-D
*** Starting TLS handshake
- Certificate type: X.509
- Got a certificate list of 2 certificates.
- Certificate[0] info:
 - subject `CN=www.otacky.jp', \
           issuer `CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US', .....
	Public Key ID:
		sha1:b617fd6ab597a34f197345074955fc0c4d0b269e
		sha256:bed0d5fa1a3612609badcc3701e3d9d23a0733d82ebe.....
	Public Key PIN:
		pin-sha256:vtDV+ho2EmCbrcw3AePZ0joHM9guvhnj1N1SqjcVl74=
- Certificate[1] info:
 - subject `CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US', 
    issuer `CN=DST Root CA X3,O=Digital Signature Trust Co.', .....
- Status: The certificate is trusted. 
- Description: (TLS1.2)-(ECDHE-SECP256R1)-(RSA-SHA256)-(AES-256-GCM)
- Session ID: F5:C7:42:70:49:3D:C2:05:FA:77:AF:50:F6:8E:B9:B3:F2:.....
- Options: extended master secret, safe renegotiation,
auth plain AGZ1a3VkYxxxxxxxSZIYQ==
235 2.7.0 Authentication successful
mail from: fukuda@beaver.otacky.us
250 2.1.0 Ok
rcpt to: fukudataka@gmail.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: fukuda@beaver.otacky.us
To: fukudataka@gmail.com
OK, go and hit the server!
.
250 2.0.0 Ok: queued as 19CF317B492
quit
221 2.0.0 Bye
- Peer has closed the GnuTLS connection

この間の、digoc04 側の log は以下のようになっている。

fukuda@digoc04:~% sudo lv /var/log/mail.log
Feb 16 11:59:08 digoc04 postfix/smtpd[23805]: connect from .....[116.58.186.101]

Feb 16 12:02:04 digoc04 postfix/smtpd[23805]: Anonymous TLS connection established 
    from .....[116.58.186.101]: TLSv1.2 with cipher 
    ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

Feb 16 12:07:57 digoc04 postfix/smtpd[23805]: 19CF317B492: client= .....[116.58.186.101], 
    sasl_method=plain, sasl_username=fukuda

Feb 16 12:09:19 digoc04 postfix/cleanup[23914]: 19CF317B492: message-id=<>

Feb 16 12:09:19 digoc04 postfix/qmgr[20725]: 19CF317B492: from=<fukuda@beaver.otacky.us>, 
    size=311, nrcpt=1 (queue active)

Feb 16 12:09:19 digoc04 postfix/smtp[23929]: Trusted TLS connection established 
    to gmail-smtp-in.l.google.com[74.125.24.27]:25: TLSv1.2 
    with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)

Feb 16 12:09:20 digoc04 postfix/smtp[23929]: 19CF317B492: 
    to=<fukudataka@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.24.27]:25,
    delay=99, delays=97/0.02/0.67/0.88, dsn=2.0.0, status=sent 
    (250 2.0.0 OK  1550286560 f21si6714164pgb.371 - gsmtp)

Feb 16 12:09:20 digoc04 postfix/qmgr[20725]: 19CF317B492: removed

つまり、

という動作をしている。(Fig-2 の Path-4 に対応。)


2019-02-06 (Wed): 宅外サーバ 2 (Ubuntu-18.04 + Cetificates)

去年の 11 月に DigitalOcean の新 droplet (digoc03) に、waremo.com を domain name として持つサービス ( <http://dms.waremo.com>, <http://www.waremo.com>) を移した。その後順調に動いているようだ。

その後、{www,lists,imap,smtp}.otacky.jp 等のサービスも digoc03 へ順次移して行く予定だったが、ちょっと気が変わった。 やってみたら「一つのサイトに一つの FQDN」というのが、 なかなか心地良いので、態々「統合」する事もないかな、というのが一つ。 もう一つは、Ubuntu-18.04 LTS のサポート期間が 5 年から 10 年に述びた事。 otacky.jp には、比較的「静的」なウェブサイトと、mail system が主なので (どちらも、この先ドラスティックな発展・変更はないだろうと踏んで)、 後 10 年はさほど手間暇を掛けずに使い続けてやろうという魂胆。

基本構成

waremo.com 関連のサービスは、既に digoc03 に移したので、 digoc02b には、otacky.jp 関連のウェブサイト (http://www.otacky.jp 他) のための HTTP サーバ と、メールサーバ (SMTP サーバ、IMAP サーバ、ML サーバ) を乗せる。

これらのサーバは、相互に強く依存しているため、 要求定義を再確認する事から始める。

Mail System Configuration
宅外サーバ 2 のメールシステムの概要
(click で拡大)

作業手順概要

概略の手順は以下の通り。最初の目論見というより、四苦八苦の結果に近いかも。

  1. 新 droplet を digoc02b として立ち上げる。 その FQDN を waremo.mine.nu とする。すなわち、与えられた IP address を DynDNS の waremo.mine.nu の A record に設定。
  2. 上述のサーバ達をインストール
  3. インストールした apache を使って letsencrypt から certificates を取得
  4. apache2 を設定し、var/www 以下を仮に rsync して動作確認。
  5. postfix, dovecot 等を順次設定し、~/Maildir を rsync して動作確認
  6. Mailman を設定、仮の ML mailman を作って動作確認
  7. digoc02: otacky.jp, digoc02b: waremo.mine.nu の certificates を revoke
  8. DynDNS の設定を変更して、digoc02: waremo.mine.nu, digoc02b: otacky.jp とし、それぞれで、certificates を取得
  9. 再度 ~/Maildir, /var/www/ を sync
  10. FQDN の変更に合わせて、apache2, postfix, dovecot, mailman の設定を変更
  11. それぞれの動作を確認

上記の 7. までは、digoc02 が otacky.jp として動作しているので、digoc02b での作業はノンビリで良いが、8. 以降は、otacky.jp の動作を一旦停止させている事になるので、そうは行かない……。

DigitalOcean で新サーバ (droplet) を立ち上げる

Digoc03 と全く同じ仕様 (4 GB / 80 GB, /SGP1, Ubuntu-18.04) の新 droplet に digoc02b と名前をつけて立ち上げる。

詳細は、2018-10-31 のオタク日記 (「宅外サーバ (その 1)」) を参照の事。

digoc02b on DigitalOcean
新 droplet, digoc02b

但し、

CPU/Network 性能比較
Droplet linalg.inv()
(ms)
fft.fft2()
(ms)
Transfer Rate
(Mbps)
Turnaround Time
(ms)
digoc02145 8231179.6 ± 1.5
digoc0392.7 60.3 113979.5 ± 2.0
digoc04146 61.3115279.7 ± 2.4
digoc02b142 83105676.1 ± 0.3

digoc02 からdigoc04 については先の日記の table のものを流用しているが、 digoc02b については、今回新たに作った droplet で実測したもの。 何故か、digoc03 だけが格段に速かったようで、 ちょっとがっかり。(digoc02b は何度かリブートして再測定しても、 似たような結果だった——たまたま、ショボイ H/W を掴んだ、 という事でも無さそうだ。ちょっと悲しい。)

Apache とそれによる Certificate 取得

これについても、digoc03 の時の記録 ( 宅外サーバ (その 1), 宅外サーバ (その 2), 宅外サーバ (その 3)) を殆んどそのまま実行した。Certificate 取得の部分だけ再掲すると……

fukuda@digoc02b:~% cat /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
  # .....
  ServerAlias www.waremo.mine.nu
  ServerAlias imap.waremo.mine.nu
  ServerAlias smtp.waremo.mine.nu

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  #.....
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  #.....
</VirtualHost>
fukuda@digoc02b:~% sudo a2ensite 000-default
fukuda@digoc02b:~% sudo systemctl reload apache2
fukuda@digoc02b:~% sudo add-apt-repository ppa:certbot/certbot
fukuda@digoc02b:~% sudo apt install python3-certbot-apache
fukuda@digoc02b:~% certbot --version                          
 certbot 0.28.0
fukuda@digoc02b:~% sudo certbot --apache -d www.waremo.mine.nu \
    -d imap.waremo.mine.nu -d smtp.waremo.mine.nu 

ここまでで、private (certificate) key と certificate が取得できている。 --apache option をつけているので、000-default.conf の SSL sites も以下のように作製されており、これから、作製された private key や certificate の在処も解る。

fukuda@digoc02b:~% cat /etc/apache2/sites-available/000-default-le-ssl.conf 
<IfModule mod_ssl.c>
  <VirtualHost *:443>
    # .....
    ServerAlias www.waremo.mine.nu
    ServerAlias imap.waremo.mine.nu
    ServerAlias smtp.waremo.mine.nu

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/www.waremo.mine.nu/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.waremo.mine.nu/privkey.pem
  </VirtualHost>
</IfModule>
      

ここまでで、仮の URL (xxxx.waremo.mine.nu) の certificate が設定できて、https://www.waremo.mine.nu へのアクセスが可能になった。 しかし、これは既に waremo.com で実現済みなので、本当の狙いは SMTP サーバや、IMAP サーバの SSL/TLS 接続に certificate を適用する設定をして動作確認をする事。

その後、otacky.jp に変更する。


314/1,326,999 Valid CSS! Valid HTML 5.0
Taka Fukuda
Last modified: 2019-02-16 (Sat) 14:41:16 JST