クラウドの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
で出てきた内部の方にしている
- 外部IPも割り当てされているけど、
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
受信サーバー
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
おわり。
コメント