[Postfix,Dovecot]VPSでメールを中継し、Tailscaleで接続された別マシンで受信する

記事内に広告が含まれています。

クラウドのVMでメール中継して、Tailscaleで繋がれてる自宅鯖で受信した。

VMで全部やればいいじゃんって?それはそうだけど自宅鯖使いたかったんだもん..

参考サイトは以下。ピンポイントで参考にしたとこはその部分にリンク張ってます

PostfixとDovecotで中継メールサーバ、受信サーバの検証環境を準備してみる
PostfixとDovecotを用い、中継メールサーバ、受信サーバの検証環境を構築する手順をまとめました。
PostfixでSMTPリレーサーバを構築する - Qiita
Postfixで、25番ポートで受け取り、サブミッションポート(587)を使用してリレーさせるためのサーバを構築した際の手順をまとめたものです。セキュリティはIP制限で実施する想定であるため、度外視…
スポンサーリンク

環境

  • 中継サーバー
    • Google Cloud上のVM(Compute Engine)
    • Postfixのみインスコ
  • 受信サーバー
    • 自宅鯖(Proxmox)上のLXC
    • Postfix&Dovecotをインスコ
  • どちらもTailscaleに接続、MagicDNSを有効化済み(受信サーバー名:lxcmail)
  • OSはどちらもUbuntu 22.04.3 LTS

設定

IPアドレス表記の補足

  • 100.x.x.x : 中継サーバーのtailscale上でのIPアドレス
  • 100.y.y.y : 受信サーバーのtailscale上でのIPアドレス
  • 10.x.x.x : GCPのVMの内部IP
    • 外部IPも割り当てされているけど、$ ip aで出てきた内部の方にしている

DNS設定はこんな感じ

中継サーバーにクラウドを使う場合、VMのファイアウォールと別にコンソール画面でポート開放が必要。

中継サーバー

$ sudo apt install postfix
$ cd /etc/postfix
$ sudo cp -p main.cf main.cf.org
$ sudo vim main.cf

compatibility_level = 3.6
# メールサーバーのドメイン
myhostname = sv.example.com
# user@[ここの部分]
mydomain = m.example.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 100.0.0.0/8

home_mailbox = Maildir/

inet_interfaces = 10.x.x.x 100.x.x.x
# いろいろ試してたときの名残 いるかわかりませんが一応
smtp_bind_address = 0.0.0.0

transport_maps = hash:/etc/postfix/transport
# こうしないとエラー出てた
local_recipient_maps =
[esc]:wq

$ vim transport
m.example.com   smtp:100.y.y.y
[esc]:wq
$ sudo postmap transport
$ sudo service postfix restart

Tailscale期限切れ→再度認証した場合はpostmapコマンドを使う必要があるっぽい。これで沼った

受信サーバー

Postfixをインスコ

$ sudo apt install postfix
$ cd /etc/postfix
$ sudo cp -p main.cf main.cf.org
$ sudo vim main.cf

compatibility_level = 3.6

# 最初は中継サーバーと同じsv.example.comにしてたのだけど
# 受信鯖→中継鯖の通信で、受信「おれsv.example.com」中継「ええ?おれも同じなんだけど??」
# となってたため、tailscaleのMagicDNSの名前に変えた。
myhostname = lxcmail
mydomain = m.example.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8 100.0.0.0/8

home_mailbox = Maildir/

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
inet_interfaces = 100.y.y.y
recipient_delimiter = +

relayhost = [100.x.x.x]

local_recipient_maps =
[esc]:wq
$ sudo service postfix restart

続いてDovecot。コマンド等のコピペ元 :

メールサーバー|Ubuntu 22.04サーバー構築入門
$ sudo apt install dovecot-core dovecot-imapd dovecot-pop3d
$ cd /etc/dovecot/conf.d/
$ sudo cp -p 10-mail.cf 10-mail.cf.org
$ sudo vim 10-mail.cf

一応変更部分だけ記述していく

#mail_location = maildir:~/Maildir
mail_location = mbox:~/mail:INBOX=/var/mail/%u
service pop3-login {
 inet_listener pop3 {
    port = 110
 }
 inet_listener pop3s {
 }
}

service auth {
 unix_listener auth-userdb {
 }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
disable_plaintext_auth = no
$ sudo service dovecot restart
$ sudo newaliases

メール確認

受信サーバーで使ってるユーザー名がuserなら、Gmail等で[email protected]宛てにメールを送信

curlで受信サーバーにアクセスして確認 参考↓

メールを見たい? curlで良いんじゃない? - Blanktar
curlコマンドはメールを受信するためのIMAPも扱うことが出来るようです。実際に受信や既読マークを付ける方法を試してみました。
$ curl -u user 'imap://127.0.0.1:143' -X 'EXAMINE INBOX'
Enter host password for user 'user':
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 3 EXISTS
* 3 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1694923938] UIDs valid
* OK [UIDNEXT 4] Predicted next UID

おわり。

コメント

タイトルとURLをコピーしました