「ただ送れるだけ」のサーバーは、ただの「凶器」です
こんにちは!「リナックス先生」です。
前回はDNSやSSL証明書の準備、お疲れ様でした。今回はいよいよ、メールを「送る」ためのソフトウェア、Postfix(ポストフィックス)を構築します。
- 第1回:設計・DNS編 – 初心者でもGmailに届くインフラ作り
- 第2回(今回):送信編 – 不正中継を防ぐSMTP-AuthとSubmissionポートの構築
- 第3回:受信編 (Dovecot) – 盗聴不可能なIMAP環境
- 第4回:信頼性編 – SPF・DKIM・DMARCフル装備
- 第5回:防衛編 – スパムとウイルスを撃ち落とす
先生、Postfixって設定ファイルがすごく長くて難しそうという噂を聞きました…。
「不正中継」とか「リレー」とか、専門用語も多くて不安です。
初心者でも本当に大丈夫でしょうか?
大丈夫よ、コウ君。
確かに設定項目は数百個あるけれど、実際にいじる必要があるのは「20箇所」くらい。
一番恐ろしいのは、設定ミスで「誰でも使えるメールサーバー(オープンリレー)」にしてしまい、世界中のスパム業者の踏み台にされること。
今回はそれを防ぐための「認証機能」を、1行ずつ意味を説明しながら設定していくわ!
1. PostfixとSASLツールのインストール
まずは必要なソフトウェアをインストールします。
今回はPostfix本体だけでなく、パスワード認証(SMTP-Auth)を実現するために Cyrus SASL(サイラス・サスル) 関連のツールも導入します。
AlmaLinux / Rocky Linux / RHEL系
# Postfixと認証ツールをインストール dnf install postfix cyrus-sasl cyrus-sasl-plain
Ubuntu / Debian系
# インストール時に設定画面が出たら「Internet Site」を選び、ドメイン名を入力してください apt update apt install postfix libsasl2-modules sasl2-bin
インストール確認
# バージョン確認 postconf mail_version # -> mail_version = 3.5.8 などと表示されればOK
2. main.cf の基本設定(身元の確立)
Postfixの設定ファイルは主に2つあります。
- /etc/postfix/main.cf: 基本的な動作設定(ドメイン名やセキュリティポリシーなど)
- /etc/postfix/master.cf: 各プロセスの動作設定(ポート開放など)
まずはメインとなる main.cf を編集します。
※編集前には必ずバックアップを取りましょう!
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak vi /etc/postfix/main.cf
① ホスト名とドメイン定義
75行目あたりから、以下の項目を探して変更します。
前提: ホスト名 mail.example.com / ドメイン example.com
# ホスト名(FQDN) myhostname = mail.example.com # ドメイン名 mydomain = example.com # メール送信時に @ 以降をどうするか(user@example.com にする) myorigin = $mydomain # 全てのネットワークインターフェースで待ち受ける(必須!) # デフォルトの localhost だと外部からメールが届きません inet_interfaces = all # IPv4のみ使う場合(IPv6トラブル回避のため推奨) inet_protocols = ipv4
② メールボックス形式の変更(Maildir)
Linuxのメール保存形式には、古い「mbox(1つの巨大ファイル)」と、新しい「Maildir(1メール1ファイル)」があります。
後のDovecot(受信)での管理が楽になるため、Maildir形式を採用します。
main.cf の末尾付近、または home_mailbox で検索して変更します。
# ユーザーのホームディレクトリ配下の Maildir/ に保存する # 末尾のスラッシュを忘れずに! home_mailbox = Maildir/
3. 不正中継防止設定(セキュリティの要)
ここが最も重要な設定です。
「誰からのメールなら転送(リレー)を許可するか」を定義します。
設定を間違えると、スパム業者があなたのサーバーを経由してウイルスメールをばら撒きます。
mynetworks の設定
「無条件で信用するネットワーク」を指定します。
ここでは「自分自身(ローカルホスト)」のみを指定します。
# 127.0.0.0/8 のみを許可 mynetworks = 127.0.0.0/8
mydestination の設定
「自分のサーバーが最終目的地(受信すべき)となる宛先」を指定します。
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
4. セキュリティ強化1:SMTP-Auth(パスワード認証)
先ほどの mynetworks 設定だけでは、外部(あなたのスマホや自宅PC)からメールを送ろうとしても「お前は部外者だ」と拒否されてしまいます。
そこで、「IDとパスワードを知っているユーザーなら送信を許可する」という仕組み、SMTP-Auth を導入します。
main.cf の末尾に、以下のブロックを追記してください。
# --- SMTP-Auth Settings ---
# SASL認証を有効化
smtpd_sasl_auth_enable = yes
# 認証ソフトウェアの種類(Cyrus SASL)
smtpd_sasl_type = cyrus
# ソケットの場所(RHEL系の場合は smtpd だけで通ることが多い)
smtpd_sasl_path = smtpd
# 匿名ログインを禁止(noplaintextを入れると平文パスワード禁止だが、TLSと併用するためnoanonymousのみ)
smtpd_sasl_security_options = noanonymous
# 古いOutlook対策(ログイン方法の互換性)
broken_sasl_auth_clients = yes
# 【最重要】受信/転送の許可ルール
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
解説:smtpd_recipient_restrictions の意味
上から順に評価されます。
1. permit_mynetworks: サーバー内部からの送信ならOK。
2. permit_sasl_authenticated: パスワード認証に成功したらOK。
3. reject_unauth_destination: それ以外で、宛先がこのサーバー管理下でない場合は拒否(=スパムの踏み台拒否)。
5. セキュリティ強化2:TLS暗号化(盗聴防止)
パスワード認証を入れても、通信が平文(HTTPのような状態)だと、パスワードがネット上で盗み見られてしまいます。
第1回で取得したSSL証明書を使って、通信を暗号化(STARTTLS)します。
引き続き main.cf の末尾に追記します。
# --- TLS Settings ---
# TLSを有効化(may = 相手が対応していれば暗号化する)
smtpd_tls_security_level = may
# 証明書ファイルのパス(第1回で取得したパスを指定)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
# ログレベル(運用時は0か1推奨)
smtpd_tls_loglevel = 1
# セッションキャッシュ(高速化)
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
6. セキュリティ強化3:Submissionポート(587)の開放
家庭用プロバイダや会社のネットワークからは、通常「25番ポート」への接続がブロックされています(OP25B対策)。
そのため、メールソフト(MUA)からの送信専用の入り口である「587番ポート(Submissionポート)」を開放します。
ここで編集するのは main.cf ではなく、/etc/postfix/master.cf です。
vi /etc/postfix/master.cf
15行目付近にある submission の行を見つけてください。行頭の # を外して有効化します。
※インデント(行頭のスペース)は設定の一部なので、絶対に削除しないでください!
# Before (コメントアウトされている) #submission inet n - n - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # After (有効化) submission inet n - n - - smtpd -o syslog_name=postfix/submission # 587番ではTLSを強制する(encrypt) -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # 以下、必要に応じてコメントアウトを外す(MUA補正機能など) -o smtpd_client_restrictions=permit_sasl_authenticated,reject
7. SASL認証サービスの起動
Postfixの設定は完了しましたが、認証を担当する saslauthd を起動しないとログインできません。
RHEL / AlmaLinux の場合
# サービス起動と自動起動設定 systemctl enable --now saslauthd # 動作テスト(ユーザー作成後に実施) testsaslauthd -u ユーザー名 -p パスワード
Ubuntu / Debian の場合
設定ファイル /etc/default/saslauthd を編集し、START=yes に変更する必要があります。
vi /etc/default/saslauthd # START=yes に変更 systemctl start saslauthd
8. ユーザー作成と起動テスト
実際にメールを使うユーザー(Linuxユーザー)を作成し、Postfixを起動します。
ユーザー作成
# ユーザー kou-kun を作成(ログインシェルなし) useradd -s /sbin/nologin kou-kun # パスワード設定 passwd kou-kun # -> ここで設定したパスワードがメールパスワードになります
Postfixの起動とFirewall開放
# 設定ファイルの構文チェック postfix check # 起動 systemctl enable --now postfix # Firewall設定(25, 587, 465番を開放) # AlmaLinux firewall-cmd --add-service=smtp --permanent firewall-cmd --add-service=smtp-submission --permanent firewall-cmd --add-service=smtps --permanent firewall-cmd --reload # Ubuntu ufw allow 25/tcp ufw allow 587/tcp ufw allow 465/tcp
第2回まとめ:世界へ送る準備は整った
お疲れ様でした!
設定ファイルとの格闘、大変でしたね。でもこれで、あなたのサーバーは:
- 不正中継を拒否し、
- ID/PASS認証で正規ユーザーのみを通し、
- TLS暗号化で盗聴を防ぎ、
- 587番ポートでどこからでも送信できる
という、プロバイダ顔負けの送信サーバーになりました。
main.cf の設定、緊張しました…。
でも、「なぜその設定が必要なのか」が分かると面白いですね!
これでメール送信はできるようになったけど、まだ受信ができないんですよね?
その通り。
今のままだと、届いたメールはサーバーの中に溜まる一方で、スマホから読むことができないの。
次回は、受信サーバーソフト「Dovecot」を構築して、iPhoneやOutlookからメールを読めるようにするわよ。
ここを乗り越えれば、ついに送受信の開通よ!
▼Postfix運用に最適な安定VPS
メールサーバーは24時間止まってはいけません。安定した稼働率と、万が一の時のスナップショット機能を備えた、Linux工房おすすめのVPSはこちらです。


コメント