今回は前回の記事の続きで、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
以下の内容を追加することによってmai
l.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で解決し、証明書エラーなく送受信できます
コメント