受信専用のメールシステムの構築について

August 16, 2025 – 10:52 am

私の運用しているサーバは数年前までは固定(静的)IPアドレスを取得していたが、コスト削減のため動的IPアドレス(Asahi-netと契約)で運用している。そのころから、このサーバ上で構築したメールシステムでは送信機能を持たせることが難しくなった。

少なくとも、受信専用のメールシステムを構築しようと、Gemini(Google AI Studio)の助けを借りて、作業を進めた結果、なんとか使いものになるものができたので、作業記録を残しておいた。

必要なソフトウェア(サービス)のインストール

dnf update -y
dnf install -y postfix dovecot

Postfixの設定(受信機能特化)
/etc/postfix/main.cfについて以下の設定:

# サーバーのホスト名 (Aレコードで設定したもの)
myhostname = mail.yamasnet.com

# メールアドレスのドメイン名
mydomain = yamasnet.com

# 送信元メールアドレスの@以降を$mydomainに設定 (ローカルからの通知等で利用)
myorigin = $mydomain

# すべてのネットワークインターフェースでメールを待機する
inet_interfaces = all

# このサーバーが受信するドメイン名を指定
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# --- メールボックス設定 ---
# メールボックスの形式をMaildir形式に指定 (Dovecotと合わせる)
home_mailbox = Maildir/

Dovecotの設定(メールの保管・閲覧用
/etc/dovecot/dovecot.confの設定

# 以下の行が有効になっていることを確認

protocols = imap pop3 lmtp
listen = *, ::

メールボックスの場所を設定
/etc/dovecot/conf.d/10-mail.conf の設定

mail_location = maildir:~/Maildir

認証設定
/etc/dovecot/conf.d/10-auth.conf の設定

# 平文での認証を許可し(SSL/TLS化を強く推奨)、認証方式を指定

disable_plaintext_auth = no
auth_mechanisms = plain login

SSL/TLS設定(通信の暗号化)
/etc/dovecot/conf.d/10-ssl.conf の設定

ssl = required

#letsencrypt の *.yamasnet.com用 のパラメータを以下のように反映
ssl_cert = </etc/letsencrypt/live/yamasnet.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/yamasnet.com/privkey.pem

ファイアウォール(我がサーバでは nftables)
25, 993, 995 のポートをアクセス可能とする

サービスの起動と自動起動設定

#Postfix と Dovecotの起動
systemctl start postfix dovecot

#自動起動を有効化
systemctl enable postfix dovecot

動作テスト
メールアプリ(Thuderbird)上で gmail から yamasent.com 宛てのメールを送信し、受信されることを確認。

スパムやウィルス・マルウェアをチェック用ソフトウエアを導入
必要なソフトウェア(サービス)のインストール

dnf install -y spamassassin clamav clamav-update amavisd-new perl-IO-Socket-INET6

各コンポーネントの設定と有効化
ClamAV(アンチウィルス)の設定

# freshclamの設定
sed -i -e "s/^Example/#Example/" /etc/freshclam.conf

#clamd の設定
sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf

# ウィルス定義ファイルの更新 初回は最新のウィルス定義ファイルを手動で取得
freshclam

ClamAV関連サービスの起動と自動起動設定

systemctl start clamd@scan
systemctl enable clamd@scan
systemctl start clamav-freshclam
systemctl enable clamav-freshclam

systemctl start spamassassin
systemctl enable spamassassin

Amavis(連携マネージャ)の設定
AmavisがSpamAssassinとClamAVを呼び出すように設定

# /etc/hosts を編集し、ホスト名とIPアドレスを関連付ける
# 編集後は以下

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.11.112   mail.yamasnet.com   mail

# AmavisがClamAVを利用できるように、`amavis` ユーザーを `clamscan` グループに追加
gpasswd -a amavis clamscan

# /etc/amavisd/amavisd.conf の設定
# ドメインとホスト名の設定
$mydomain = 'yamasnet.com';
$myhostname = 'mail.yamasnet.com'     

#SpamAssassin, ClamAV を有効にする (# がついていたら除く)
@bypass_virus_checks_maps, @bypass_spam_checks_maps,

**サービスの起動と自動起動設定:**
systemctl start amavisd
systemctl enable amavisd

(注)amavisdの起動に時間がかかりtimeoutになることがある

PostfixとAmavisを連携させて、全体のパイプラインを完成させる
Postfix main.cfファイル(/etc/postfix/main.cf)の編集

#最終行に以下を追記
content_filter = amavisfeed:[127.0.0.1]:10024 

Postfix master.cfファイルを編集

#最終行に以下のブロックを追加
# --- Amavis連携設定 ---
# PostfixからAmavisへメールを渡すためのサービス定義
amavisfeed unix - - n - 2 smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20

# Amavisが検査し終わったメールを再度受け取るためのサービス定義
127.0.0.1:10025 inet n - n - - smtpd
  -o content_filter=
  -o local_recipient_maps=
  -o relay_recipient_maps=
  -o smtpd_restriction_classes=
  -o smtpd_client_restrictions=
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o mynetworks=127.0.0.0/8
  -o smtpd_authorized_xforward_hosts=127.0.0.0/8

Postfixをリロードし、編集した設定内容を反映

systemctl reload postfix

以上が正常に終了したのち、gmailからのメールが受信されることを確認


Post a Comment