【Docker】Port25 の罠にハマった話【Mailserver】

はじめに
メールサーバーの導入は毎度苦労します。
GWということで重い腰を上げることにしました。
今回は こちら 様を参考に docker-mailserver で導入させていただきました。
導入方法は紹介サイトが多くあるので省きます。
mailserver port 25 …
OP25B(Outbound Port 25 Blocking) の苦労話でしょ?
自分もそう思いましたが、別の問題が原因でした。
導入と不具合
まず失敗の設定ファイルです。 hostname domainname などは仮です。
どこが問題かわかりますか?
version: '3.8'
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
container_name: mailserver
# If the FQDN for your mail-server is only two labels (eg: example.com),
# you can assign this entirely to `hostname` and remove `domainname`.
hostname: hostname
domainname: domainname
env_file: mailserver.env
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
# To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
ports:
- 25:25 # SMTP (explicit TLS => STARTTLS)
- 465:465 # ESMTP (implicit TLS)
- 993:993 # IMAP4 (implicit TLS)
volumes:
- ./docker-data/dms/mail-data/:/var/mail/
- ./docker-data/dms/mail-state/:/var/mail-state/
- ./docker-data/dms/mail-logs/:/var/log/mail/
- ./docker-data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt:/etc/letsencrypt
cap_add:
- NET_ADMIN
restart: always
導入が完了し 自分宛てにメールを送信…送受信成功
GMail へ送信… 送信成功
ICloud へ送信… 送信成功
GMail から自分宛てに送信

あれれ?おかしいぞ?
iCloud から送信

だめだ、外部から受信できないみたいです。
GMail の詳細も
The recipient server did not accept our requests to connect. Learn more at https://support.google.com/mail/answer/7720
受信側サーバーが接続要求を受け入れませんでした。 詳しくは https://support.google.com/mail/answer/7720
とのことで、当方サーバーが拒否っているようです。
当方 OP25B 制限はない環境で、リレーサーバーは不要な環境です。
検索しても OP25B 対策しかヒットしない状況でした。
ルーターの NAT設定
ダイナミックDNSの設定
などもチェックしましたが問題なし…
解決
色々検索し解決方法が見つけました。
こちら
Could you try if it works if you put the25:25
in quotes? I.e.,"25:25"
; this is a known issue with the way the yaml is parsed; see this note in the documentation; https://docs.docker.com/compose/compose-file/#ports
感謝!
docker ps でポートを確認してみると
2204735f2342 ghcr.io/docker-mailserver/docker-mailserver:latest "/usr/bin/dumb-init …" 4 seconds ago Up 3 seconds 25/tcp, 110/tcp, 143/tcp, 0.0.0.0:465->465/tcp, :::465->465/tcp, 587/tcp, 995/tcp, 4190/tcp, 0.0.0.0:993->993/tcp, :::993->993/tcp, 0.0.0.0:32829->1525/tcp, :::32829->1525/tcp mailserver
確かに 25/tcp が外から見えなく
よくわからんポート 0.0.0.0:32829->1525/tcp, :::32829->1525/tcp が開いている。
どうやら 25:25 を YAML が60進数で解釈され 25*60+25 = 1525 へ変換されているようです。
ポート設定は “” をつけるのを徹底したほうが良さそうです。
で修正後の設定がこちら
version: '3.8'
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
container_name: mailserver
# If the FQDN for your mail-server is only two labels (eg: example.com),
# you can assign this entirely to `hostname` and remove `domainname`.
hostname: hostname
domainname: domainname
env_file: mailserver.env
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
# To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
ports:
- "25:25" # SMTP (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "993:993" # IMAP4 (implicit TLS)
volumes:
- ./docker-data/dms/mail-data/:/var/mail/
- ./docker-data/dms/mail-state/:/var/mail-state/
- ./docker-data/dms/mail-logs/:/var/log/mail/
- ./docker-data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
- /etc/letsencrypt:/etc/letsencrypt
cap_add:
- NET_ADMIN
restart: always
ports の設定を “” ダブルクォーテーション でくくってます。
docker ps の結果は
a9113d712b83 ghcr.io/docker-mailserver/docker-mailserver:latest "/usr/bin/dumb-init …" 5 seconds ago Up 3 seconds 110/tcp, 0.0.0.0:25->25/tcp, :::25->25/tcp, 143/tcp, 0.0.0.0:465->465/tcp, :::465->465/tcp, 587/tcp, 995/tcp, 0.0.0.0:993->993/tcp, :::993->993/tcp, 4190/tcp mailserver
0.0.0.0:25->25/tcp, :::25->25/tcp,
ちゃんと外にポートがつながったようです。
GMail からも iCloud からもメールが届くようになりました。
あーこれは仕様知らないとわからんですね。
あとがき
GW を半分使い切ってしまいました。
全然メール環境不要なのですが、動かないと気になって夜しか眠れないですもんね。
Docker で楽しようと思ったら思わぬ落とし穴に落ちた感じでした
その後 Gmail や iCloud から送ったテストメールが山のように届きました。