2026年8月1日
2026年8月1日
ポート587(メール送信)を閉じる方法と、閉じる前に確認すること
ポート587 は、メールソフトや Web アプリがメールサーバーにメールを渡すための「サブミッションポート」です。自分のサーバーで 587 番を使っていないなら、メールサーバーの設定とファイアウォールの両方で閉じることで、パスワード総当たりなどの攻撃対象を減らせます。この記事では、閉じてよいかの判断、Postfix での停止方法、ファイアウォールでの遮断、外部からの確認までを順に説明します。WordPress のメール送信が止まらないようにするための注意点も扱います。
「受信側の 587」と「送信側の 587」を区別する
ポート587 を閉じる話で最も多い混乱が、方向の取り違えです。
受信側(インバウンド)の 587 は、自分のサーバーが 587 番で待ち受け、外部のメールソフト(Outlook、Thunderbird、スマートフォンのメールアプリなど)から送信メールを受け付けるものです。自分のサーバーをメールサーバーとして運用している場合に使います。
送信側(アウトバウンド)の 587 は、自分のサーバー上の WordPress などが、Gmail や SendGrid などの外部 SMTP サーバーの 587 番に接続してメールを送るものです。WP Mail SMTP などのプラグインで外部 SMTP を設定している場合はこちらです。
この記事で主に扱う「閉じる」は受信側です。受信側の 587 番を閉じても、WordPress から外部 SMTP の 587 番への送信には影響しません。逆に、送信側(外向き通信)の 587 番をファイアウォールで塞ぐと、WordPress のメール送信が止まります。目的がどちらなのかを最初に確認してください。
閉じる前に確認すること
1. 本当に誰も使っていないか
自分のサーバーで 587 番を待ち受けているプロセスを確認します。
sudo ss -tlnp | grep ':587\b'
master(Postfix)や exim などが表示されれば、メールサーバーが待ち受けています。何も表示されなければ、そもそも 587 番は開いていません(その場合はファイアウォールの許可ルールだけが残っていることがあります)。
次に、実際に使われているかをメールログで確認します。Debian/Ubuntu 系の Postfix では /var/log/mail.log、RHEL 系では /var/log/maillog が一般的で、journald だけに記録している環境もあります。
# 587番経由の認証成功の記録(Postfix の例)
sudo grep 'sasl_username=' /var/log/mail.log | tail -n 20
# journald の場合
sudo journalctl -u postfix --since "7 days ago" | grep 'sasl_username='
sasl_username= の行は、誰かが認証してメールを送ったことを示します。ここに自分や社内のアカウント名が出てくるなら、587 番を閉じるとそのユーザーがメールを送れなくなります。逆に、authentication failed ばかりが並んでいるなら、正規の利用はなく、攻撃だけを受けている状態です。
2. 代わりの経路はあるか
メールソフトからの送信を残したい場合、ポート465(SMTPS、接続直後から TLS で暗号化する方式)を使う運用もあります。465 番も開いているなら、587 番だけを閉じてもメールは送れる可能性があります。ただし、その場合は 465 番が同じ攻撃を受けるだけなので、目的が攻撃対策なら後述の「閉じずに守る方法」も検討します。
ポート25 は、他のメールサーバーからメールを受信するためのものです。自分のドメインでメールを受信しているなら 25 番は閉じないでください。
3. 設定ファイルのバックアップ
設定を変更する前に、メールサーバーの設定をコピーしておきます。
sudo cp -a /etc/postfix/master.cf /etc/postfix/master.cf.bak-$(date +%Y%m%d)
手順1:Postfix で 587 番の待ち受けを止める
Postfix では、587 番の待ち受けは /etc/postfix/master.cf の submission の行で定義されています。行頭に # を付けてコメントアウトし、その下に続く -o で始まる行も同様にコメントアウトします。
#submission inet n - y - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
列の値(特に chroot の列が y か n か)はディストリビューションや設定によって異なります。書き換えるのではなく、既存の行をそのままコメントアウトしてください。
反映して、待ち受けが消えたことを確認します。
sudo postfix check
sudo systemctl restart postfix
sudo ss -tlnp | grep ':587\b' # 何も出なければ停止できています
Exim や他のメールサーバーを使っている場合は、それぞれの設定で待ち受けポートの一覧から 587 番を外します。コントロールパネル(Plesk、cPanel など)が管理しているサーバーでは、設定ファイルを直接編集するとパネル側の更新で元に戻ることがあるため、パネルの設定画面から変更してください。
手順2:ファイアウォールでも 587 番を塞ぐ
メールサーバー側で止めたうえで、ファイアウォールでも塞いでおくと、将来設定が戻ってしまったときの保険になります。
# ufw の場合:許可ルールがあれば削除し、明示的に拒否
sudo ufw status numbered
sudo ufw delete allow 587/tcp
sudo ufw deny 587/tcp
# firewalld の場合
sudo firewall-cmd --permanent --remove-service=smtp-submission
sudo firewall-cmd --permanent --remove-port=587/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
firewalld で許可していた方法(サービス名で追加したか、ポート番号で追加したか)によって、どちらか片方だけが該当します。該当しない方はエラーになりますが、問題ありません。
クラウドサーバーでは、セキュリティグループやクラウド側のファイアウォールにも 587 番の許可ルールが残っていないか確認し、不要なら削除します。
手順3:外部から閉じたことを確認する
サーバー自身からの確認では、ファイアウォールの効果が分かりません。自分が管理する別のネットワーク(自宅回線や別のサーバー)から確認します。
nc -vz -w 3 mail.example.com 587
タイムアウトまたは接続拒否になれば閉じています。あわせて、残すべきポート(受信用の 25 番、HTTPS の 443 番など)が開いたままであることも確認しておきます。
WordPress のメール送信が止まっていないか確認する
閉じた後は、WordPress からテストメールを送って、送信に問題がないかを確かめます。WP Mail SMTP などの SMTP プラグインにはテスト送信の機能があります。画面上の名称はバージョンによって異なります(2026年10月現在)。
もしテストが失敗する場合は、次の順で確認します。
- 送信先 SMTP サーバーが自分のサーバーだった:プラグインの SMTP ホストが
localhostや自分のサーバーのホスト名で、ポートが 587 になっていると、閉じたポートに接続しようとして失敗します。ローカルの Postfix を使うなら 25 番(ローカル配送)に切り替えるか、外部 SMTP サービスに変更します。 - 外向きの 587 番まで塞いでしまった:
ufw deny out 587/tcpのような外向きルールを入れていないか確認します。 - ホスティング会社が外向き通信を制限している:レンタルサーバーやクラウドによっては、外向きのメール送信ポートを既定で制限していることがあります。この場合は事業者のドキュメントに従います。
閉じずに守る方法もある
社内でメールソフトからの送信が必要な場合は、587 番を閉じる代わりに次の方法でリスクを下げられます。
- ファイアウォールで、接続元を会社の固定 IP や VPN の範囲に限定する。
- fail2ban の Postfix SASL 用のフィルターを有効にして、認証失敗を繰り返す IP を一時的に遮断する。
- 平文認証を禁止し、TLS 必須(Postfix では
smtpd_tls_security_level=encryptとsmtpd_tls_auth_only=yes)にする。 - メールアカウントのパスワードを長く推測されにくいものにし、使っていないアカウントを削除する。
まとめ
- ポート587 はメール送信用のサブミッションポートです。閉じる前に、受信側(待ち受け)と送信側(外向き接続)のどちらの話かを区別します。
ssで待ち受けを確認し、メールログのsasl_username=で正規の利用者がいないかを確かめてから作業します。- Postfix では
master.cfのsubmission行をコメントアウトし、ファイアウォールとクラウドのセキュリティグループでも塞ぎます。 - 確認は外部のネットワークから行い、WordPress のテスト送信で影響がないことも見ておきます。
- 利用者がいる場合は、閉じる代わりに接続元制限・fail2ban・TLS 必須化で守る方法を選びます。