VPNを使ってセキュアなメールサーバー構築 ②

Server

今回は前回の記事の続きで、VPNからのみ接続できるメールサーバーの構築を解説していきます

前回の記事はこちらです


1.クライアント側(例:Windows)の WireGuard 設定を変更する

現在のクライアント(WireGuard)の設定はこうなっています

[Interface]
PrivateKey = クライアントの秘密鍵
Address = 10.0.0.2/24
DNS = 1.1.1.1   ← ← ← これが Cloudflare 公開 DNS になっている

[Peer]
PublicKey = サーバーの公開鍵
AllowedIPs = 0.0.0.0/1, 128.0.0.0/1
Endpoint = xxx.xxx.xxx.xxx:51820
PersistentKeepalive = 25

これを以下のように変更していきます

[Interface]
PrivateKey = <クライアントの秘密鍵>
Address = 10.0.0.2/24
DNS = 10.0.0.1  ← これに変更

ただしサーバー側で 10.0.0.1 が DNS サーバーとして機能していないと意味がありませんので、次にdnsmasqを使ってVPSにDNSサーバーを構築します


2.dnsmasqの初期設定

ここではdnsmasq を使った軽量ローカルDNSを使用します

dnsmasqはVPN内のプライベートIPアドレスを独自ドメインに解決するために非常に適したツールです

  • bind9 や unbound より軽量で設定が簡単
  • /etc/hosts と連携してドメイン解決ができる
  • VPN内だけに DNS を提供できる(10.0.0.1 にだけ)

1. dnsmasq のインストール

sudo apt install dnsmasq

2. /etc/hosts にメールサーバーを記述

sudo nano /etc/hosts

以下の内容を追加することによってmail.go-pro-world.net を 10.0.0.3 に解決できるようにします

10.0.0.1 mail.go-pro-world.net

3. dnsmasq 設定ファイルを編集

sudo nano /etc/dnsmasq.conf

最低限、以下を確認・追加します

server=1.1.1.1
server=1.0.0.1

listen-address=127.0.0.1,10.0.0.1
bind-interfaces

server=1.1.1.1
server=1.0.0.1

名前解決できなかったときに、dnsmasq が問い合わせを転送する上位DNSサーバー
ここでは Cloudflare のDNS(高速・プライバシー重視)を使用しています
ローカルで答えが出ない場合は、Cloudflareに聞きに行きます

listen-address=127.0.0.1,10.0.0.1
bind-interfaces

この dnsmasq は 127.0.0.1(ローカル)と 10.0.0.1(VPNのインターフェース)でDNSリクエストを受け付けます
VPNクライアントから 10.0.0.1 に向けてDNSクエリを送れば、dnsmasq が応答する構成になります

4. dnsmasq 再起動

sudo systemctl restart dnsmasq

3.ufwの設定

ここまで来たら最後にファイアウォールの設定を確認します

以下のコマンドで、VPNインターフェース wg0 経由でサーバーに届くすべての通信を許可するルールを追加します

sudo ufw allow in on wg0

次に以下のコマンドで送信と受信ポートをVPNからのみ許可します

sudo ufw allow from 10.0.0.0/24 to any port 143    # IMAP
sudo ufw allow from 10.0.0.0/24 to any port 587    # SMTP(サブミッション)

ufwの設定を確認します

sudo ufw status verbose

最終的に自分はこんな感じになっています

To                         Action      From
--                         ------      ----                  
51820/udp                  ALLOW IN    Anywhere                  
Anywhere on wg0            ALLOW IN    Anywhere                     
993/tcp                    ALLOW IN    10.0.0.0/24               
25/tcp                     ALLOW IN    Anywhere                  
587/tcp                    ALLOW IN    10.0.0.0/24               
51820/udp (v6)             ALLOW IN    Anywhere (v6)                  
25/tcp (v6)                ALLOW IN    Anywhere (v6)

これで独自ドメインの mail.go-pro-world.net を内部DNSで解決し、証明書エラーなく送受信できます

コメント