0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

0.初めに

自身のドメインを取得を行っていたので念願のメールを構築しようという会

1.使用した技術

  • Ubuntu Server 26.04LTS
  • Nginx
  • cloudflare
  • Mailcow

2.手順

1. Mailcow側のポート変更とHTTPSリダイレクト無効化

1-1. mailcow.conf の編集

Mailcowのインストールディレクトリに移動し、設定ファイルを編集します。

cd /opt/mailcow-dockerized
nano mailcow.conf

以下の項目を書き換えます(変更または追記)。

# ホストNginxと競合しないポートへ退避(127.0.0.1にバインド)
HTTP_PORT=8080
HTTP_BIND=127.0.0.1

HTTPS_PORT=8443
HTTPS_BIND=127.0.0.1

# ホストNginx側でSSL終了を行うため、Mailcow自身のリダイレクトを無効化
REDIRECT_TO_HTTPS=n

1-2. Mailcowコンテナの再起動

設定を完全に反映させるため、コンテナを一度落としてから再起動します。

docker compose down
docker compose up -d


2. Let's Encrypt による本番SSL証明書の取得

ホストOS側のCertbotを使用し、DNS(Cloudflare等)を経由した認証で本物の証明書を取得します。

2-1. 証明書の取得コマンド実行

sudo certbot certonly -d mail.reeldev.jp

  • 対話画面では 1: Nginx Web Server plugin (nginx) を選択します。
  • 画面の指示に従ってメールアドレスの入力と規約への同意(Y)を行います。

🎉 成功時の保存先パス:

  • 証明書: /etc/letsencrypt/live/mail.reeldev.jp/fullchain.pem
  • 秘密鍵: /etc/letsencrypt/live/mail.reeldev.jp/privkey.pem

3. メールコンテナ(Mailcow)への証明書共有

PostfixやDovecotなどのメールシステムにも今取得した本物の証明書を適用するため、シンボリックリンクを作成して共有します。

# Mailcowが自動生成したダミーの自己署名証明書をバックアップ
sudo mv /opt/mailcow-dockerized/data/assets/ssl/cert.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem.bak
sudo mv /opt/mailcow-dockerized/data/assets/ssl/key.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem.bak

# 本物の証明書へのシンボリックリンクを作成
sudo ln -s /etc/letsencrypt/live/mail.reeldev.jp/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem
sudo ln -s /etc/letsencrypt/live/mail.reeldev.jp/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem

# メール関連のコンテナを再起動して反映
cd /opt/mailcow-dockerized
docker compose restart postfix-mailcow dovecot-mailcow nginx-mailcow


4. ホストNginxの本番リバースプロキシ設定

外部からの 80(HTTP) および 443(HTTPS) のアクセスをすべてホストのNginxで受け止め、裏に隠れているMailcow(8080)へ流す設定を行います。

4-1. 設定ファイルの作成・編集

sudo nano /etc/nginx/sites-available/mail.reeldev.jp

中身を以下の内容にすべて差し替えます(IPv4 / IPv6のデュアルスタック対応)。

# HTTP (80番) から HTTPS (443番) への強制リダイレクト
server {
    listen 80;
    listen [::]:80;
    server_name mail.reeldev.jp;
    return 301 https://$host$request_uri;
}

# SSL証明書を使用したHTTPSリバースプロキシ設定
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name mail.reeldev.jp;

    # Let's Encryptから取得した本物の証明書パス
    ssl_certificate /etc/letsencrypt/live/mail.reeldev.jp/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mail.reeldev.jp/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        # ホストOS内部のMailcow (8080ポート) へ転送
        proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080); 
        
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        
        # Mailcowに余計なHTTPSリダイレクトを起こさせないよう http 固定
        proxy_set_header X-Forwarded-Proto http; 
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        client_max_body_size 100m;
    }
}

4-2. Nginxの構文チェックと適用

sudo nginx -t
sudo systemctl reload nginx

  • nginx: configuration file /etc/nginx/nginx.conf test is successful と出ればOK。

5. ファイアウォール(UFW)の開放

OS内部で通信が遮断されないよう、Webポートおよび主要なメール送受信ポートを開放します。(※UFWが inactive の場合でも、今後の有効化に備えて設定を投入)。

sudo ufw allow 'Nginx Full'
sudo ufw allow 25/tc
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp
sudo ufw allow 110/tcp
sudo ufw allow 995/tcp
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw allow 4190/tcp

3.終わりに

これにて、インストールは完了です。お疲れ様でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?