受信専用のメールシステムの構築について
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からのメールが受信されることを確認