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

Server

以前の記事で、独自ドメインを使ってメールサーバーをVPS構築する記事を紹介しました

メールサーバーを自前で運用するとセキュリティ対策を自分で考えなければならず、不正アクセスとの闘いが待っています

そこで今回紹介する内容は、PostfixやDovecotの接続元IPアドレスを限定して、不正アクセス対策とする方法です

通常、様々な環境からアクセスすればIPアドレスは変わるのですが、以前紹介したVPNを使えば、常に同じIPアドレスからアクセスすることができます

  • VPNを通してスマホやThunderbirdなどのクライアントを接続すれば、安全な閉鎖ネットワーク内だけでメールが送受信されます
  • VPNのIPアドレス以外からのSMTPポート(587や465)を閉じることで、不正アクセスを受け付けなくなります

wireguardを使ってVPNを構築する方法を解説した記事はこちら

以下に、「VPN経由のみでメールサーバーにアクセスを許可する方法」を解説します


1.WireGuard VPN経由からのアクセスのみ許可

1.メールサーバー(VPS側)のWireGuard設定確認

VPS側(WireGuardサーバー)の設定ファイルを確認します

sudo cat /etc/wireguard/wg0.conf

以下のようになっているとします

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = xxx

# --- クライアント設定 ---
[Peer]
PublicKey = xxx
AllowedIPs = 10.0.0.2/32

ここでの 10.0.0.1 はVPNサーバーの仮想IPです
10.0.0.2 はクライアントのプライベートIPアドレスになります


2.Postfixの設定(main.cf)

Postfixの設定ファイルを編集します

sudo nano /etc/postfix/main.cf

以下のmynetworksの内容を変更、追加します

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.0/24

それぞれの意味を解説します。

意味
127.0.0.0/8IPv4のループバックアドレス範囲(127.0.0.1 ~ 127.255.255.255)
[::ffff:127.0.0.0]/104IPv4-mapped IPv6のループバックアドレス(IPv6で書いた127.0.0.0/8)
[::1]/128IPv6のループバックアドレス(IPv6でのlocalhost)
10.0.0.0/24ローカルネットワーク(10.0.0.0~10.0.0.255)

mynetworks の役割

mynetworks に含まれるIPアドレスやネットワークは、SMTP認証なしでメール送信を許可される信頼されたクライアントです

  • サーバー自身(localhost)から送信されるメールは許可
  • 同じLAN上(10.0.0.0/24)にあるPCからのメール送信も許可

この設定は 不正中継(Open Relay) を防ぐために非常に重要です

編集が終わったらPostfixを再起動します

sudo systemctl restart postfix

3. Dovecotの設定(10-master.conf)

Dovcotの設定ファイルを編集します

sudo nano /etc/dovecot/conf.d/10-master.conf

以下の項目を変更、追加します

service imap-login {
  inet_listener imap {
    address = 127.0.0.1 10.0.0.1
    port = 143
  }
  inet_listener imaps {
    address = 127.0.0.1 10.0.0.1
    port = 993
  }
}

それぞれの意味

service imap-login

  • Dovecot における IMAP ログインサービスの設定ブロックです

inet_listener imap

  • 通常の IMAP(非SSL) 用の接続を受け付けるリスナーです

inet_listener imaps

  • SSL/TLS を使った IMAPS(IMAP over SSL) のリスナーです

各設定項目の詳細

項目説明
address = 127.0.0.1 10.0.0.1接続を受け付けるIPアドレス
・127.0.0.1:サーバー自身(localhost)からの接続のみ許可
・10.0.0.1:ローカルネットワーク上の特定のIPからも許可
port = 143通常のIMAP接続に使われるポート(非SSL)
port = 993IMAPS(SSL/TLS暗号化)に使われる標準ポート

この設定により、Dovecot はローカルホストまたは指定されたLAN上のアドレスからのみ接続を受け付けます
ここで 10.0.0.1 はVPNサーバーのローカルIP(WireGuardで設定したもの)です
それ以外のIP(例:インターネット経由)から接続しようとしても、ポートが開いていないため接続不能です

編集が終わったらDovecotを再起動します

sudo systemctl restart dovecot

2.ufwの設定

ここまで設定出来たら必要のないポートは閉じておいた方が安全です

  • ポートが開いていると、スキャンツール(例:nmap)で「ここにSMTP/IMAPサーバーがあるな」とバレます
  • たとえログインできなくても、ログが汚れる負荷が増える攻撃対象として目をつけられることがあります

ポートを閉じておけば「そもそも存在しない」ように見せられる

1. ファイアウォールの設定(UFWの例)

# 送信、受信のポートを閉じる
sudo ufw deny 587/tcp
sudo ufw deny 993/tcp

# 指定したIPアドレスからのみ許可
sudo ufw allow from 10.0.0.0/24 to any port 587 proto tcp
sudo ufw allow from 10.0.0.0/24 to any port 993 proto tcp

以上でVPNのIPアドレスでのみメールサーバーへ接続できるように設定変更しました

ただ、これだけだとメールクライアントで名前解決などで不具合が出ることがあるので、次回はdmasqを使って名前解決の設定をする方法を解説したいと思います

コメント