前回記事:【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です。
コメント