【Xserver VPS × KUSANAGI】メールサーバ(Postfix)の送信専用サーバ化

Xserver VPS

前回記事:【Xserver VPS × KUSANAGI】メールサーバ(Postfix)の設定で、ひとまずメールサーバは稼働する状態となりました。

一方で、このまま稼働させるためにはSMTP(25番)ポートを開けたままにしなければならない状態です。TLS等の設定はしているものの、やはり気持ちが悪い状況ですのでセキュリティ対策を色々と調べて考えてみました。

サーバの要件

そもそも、なぜメールサーバを立ち上げようとしたか。その要件を改めて整理してみました。

  • WordPressで問い合わせフォームを設置している。そのため、
    • 問い合わせ内容を自分が普段利用しているメールアドレスで受信したい。
    • 問い合わせてくださった方には、受付確認メールを送信したい。
  • その他、WordPressからの通知メールも受信したい。

というものです。

となると、外部からのアクセスを受け付ける必要は無いのではないか?受付確認メールに返信できなくなりますが、その旨を記載しておけば良いでしょうし。

ということで、要件をしぼって、送信専用サーバとすることにしました。

設定の修正

Postfix設定の修正

まずは、main.cfの修正を行っていきます。内部からしかアクセスさせないという事で、smtpdのTLS設定とかは不要で削除して良いのかもしれませんが、ひとまずは以下の変更を行います。

# vi /etc/postfix/main.cf
inet_interface = localhost (←allから変更)
mynetworks = 127.0.0.1(localhostのみ)
  • inet_interface
    メールをどこから受け付けるのかを指定するものです。これまでは、外部からメールを受信することを想定してallとしてきましたが、送信専用としますのでlocalhostのみとします。
  • mynetworks
    このサーバからしかメールを送信しないはずですので、127.0.0.1と設定します。

master.cfの修正は不要そうなので、ここで修正を反映させます。

# systemctl reload postfix

ここまでの作業ですが、# tail -f /var/log/maillogをしてログを見ながら作業をしてきましたが、ここで以下のwarningが出ました。

postfix/master[11900]: warning: service smtp: ignoring inet_interfaces change
postfix/master[11900]: warning: to change inet_interfaces, stop and start Postfix

要すれば、inet_interfacesに変更を加えたら、reloadだけじゃだめで、stop & startをしろという事ですね。従います。

# systemctl stop postfix
# systemctl start postfix
# postconf -n
(省略)
inet_interfaces = localhost
(省略)
mynetworks = 127.0.0.1

これでPostfixの設定は完了です。

firewalldの設定

smtp & smtpsはもはや不要なので、削除していきます。

# firewalld-cmd --permanent --zone=public --remove service smtp
# firewalld-cmd --permanent --zone=public --remove service smtps
# systemctl reload firewalld
# firewalld-cmd --list-all
public (active)
(省略)
  services: dhcpv6-client http https

動作の確認

外部からのアクセス

まずは外に空いているポートを確認します。Localから以下を実行してみます。

- Local -
$ sudo nmap -v mydomain.com
(省略)
PORT    STATE SERVICE
22/tcp  open  ssh
53/tcp  open  domain
80/tcp  open  http
443/tcp open  https

きちんとポートが閉じていることが分かります。念のために外部からadmin@mydomain.comにメールを送付してみても、当然届きません。

また、Localからtelnetでの接続も試してみますが、接続できない事が確認できます。

- Local -
$ telnet mydomain.com 25
Trying xxx.xxx.xxx.xxx...
telnet: Unable to connect to remote host: No route to host

内部からのアクセス

続いて、内部(Server)からのアクセスを確認していきます。

- Server -
# nmap -v localhost
(省略)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql

localhostからは25番にアクセスできることが確認できます。

続いて、Telnetで接続して確認してみます。

# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.mydomain.com ESMTP
HELO mydomain.com
250 mail.mydomain.com
MAIL FROM:<wordpress@mydomain.com>
250 Ok
RCPT TO:<admin@mydomain.com>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
To: admin@mydomain.com
From: wordpress@mydomain.com
Subject: Test from Internal SMTP-2

Hello!

.
250 2.0.0 Ok: queued as 21A87E0AA1
QUIT
221 2.0.0 Bye

無事に送信する事ができました。宛先アドレスで受信も確認できていたらOKです。

コメント

タイトルとURLをコピーしました