MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
コンテナ - メールサーバのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
コンテナ - メールサーバ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Postfixは高性能なメールサーバソフトウェア (MTA : Mail Transfer Agent) であり、Dovecotは電子メールの受信と管理を担うソフトウェア (MDA : Mail Delivery Agent) である。<br> <br> Docker / Podmanコンテナとして実行することにより、開発環境や本番環境で簡単にメールサーバを構築することができる。<br> PostfixはSMTPによるメール送信を処理、DovecotはIMAP/POP3によるメール受信とメールボックス管理を行う。<br> <br> <center> {| class="wikitable" |+ メールサーバコンテナの主な機能 ! 機能 !! プロトコル !! デフォルトポート !! 説明 |- | SMTP受信 || SMTP || 25 || 外部からのメール受信 |- | SMTP送信認証 || SMTP / STARTTLS || 587 || 認証付きメール送信 (Submission) |- | IMAP受信 || IMAPS || 993 || メールクライアントからのIMAP接続 |- | POP3受信 || POP3S || 995 || メールクライアントからのPOP3接続 |- | SASL認証 || - || - || DovecotによるSMTP認証機能 |} </center> <br><br> == ディレクトリ構成 == メールサーバの設定ファイルを管理するためのディレクトリ構成を以下に示す。<br> <br> mailserver/ ├── docker-compose.yml ├── postfix/ │ ├── main.cf │ ├── master.cf │ ├── vmailbox │ └── virtual ├── dovecot/ │ ├── dovecot.conf │ ├── users │ └── conf.d/ │ ├── 10-auth.conf │ ├── 10-mail.conf │ ├── 10-master.conf │ └── 10-ssl.conf ├── certs/ │ ├── mail.crt │ └── mail.key └── vmail/ └── (メールボックスデータ) <br><br> == Containerfile == Containerfileを作成する。<br> <br> <syntaxhighlight lang="dockerfile"> FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt update && \ apt install -y \ postfix \ dovecot-imapd \ dovecot-pop3d \ dovecot-lmtpd \ supervisor \ rsyslog && \ apt clean && \ rm -rf /var/lib/apt/lists/* COPY postfix/ /etc/postfix/ COPY dovecot/ /etc/dovecot/ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf RUN mkdir -p /var/mail/vmail && \ groupadd -g 5000 vmail && \ useradd -u 5000 -g vmail -s /usr/sbin/nologin -d /var/mail/vmail vmail && \ chown -R vmail:vmail /var/mail/vmail EXPOSE 25 587 993 995 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] </syntaxhighlight> <br> コンテナイメージをビルドする。<br> podman build -t mailserver:custom -f Containerfile . <br> ビルドしたイメージからコンテナを実行する。<br> podman run -d \ --name mailserver \ --hostname mail.example.com \ -p 0.0.0.0:25:25 \ -p 0.0.0.0:587:587 \ -p 0.0.0.0:993:993 \ -v ./vmail:/var/mail/vmail \ -v ./certs:/etc/ssl/certs/mail \ mailserver:custom <br><br> == Compose == Composeファイルを作成する。<br> <br> <syntaxhighlight lang="yaml"> version: '3.8' services: mailserver: image: ubuntu:22.04 container_name: mailserver hostname: mail.example.com ports: - "0.0.0.0:25:25" # SMTP - "0.0.0.0:587:587" # SMTP Submission - "0.0.0.0:993:993" # IMAPS - "0.0.0.0:995:995" # POP3S volumes: - ./postfix/main.cf:/etc/postfix/main.cf - ./postfix/master.cf:/etc/postfix/master.cf - ./dovecot/dovecot.conf:/etc/dovecot/dovecot.conf - ./dovecot/conf.d:/etc/dovecot/conf.d - ./certs:/etc/ssl/certs/mail - ./vmail:/var/mail/vmail - mailserver-spool:/var/spool/postfix - mailserver-logs:/var/log environment: - DOMAIN=example.com - HOSTNAME=mail.example.com restart: unless-stopped command: | /bin/bash -c "apt update && \ apt install -y postfix dovecot-imapd dovecot-pop3d supervisor && \ /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf" volumes: mailserver-spool: mailserver-logs: </syntaxhighlight> <br> Composeファイルを実行して、コンテナを作成および実行する。<br> podman-compose up -d # または podman-compose -f <Composeファイル名> up -d <br><br> == Postfix設定ファイル == ==== main.cf ==== main.cfファイルは、サーバのホスト名、受信するドメイン、認証方式、TLS暗号化、セキュリティポリシー、バーチャルメールボックスの設定等のメールサーバの基本的な動作を定義する。<br> <br> postfix/main.cfファイルを作成する。<br> <br> <syntaxhighlight lang="ini"> # 基本設定 myhostname = mail.example.com # メールサーバのホスト名(FQDN) mydomain = example.com # 所属するドメイン名 myorigin = $mydomain # 送信メールの送信元ドメイン mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # 最終配送先として受け取るドメイン relayhost = # 外部SMTPリレーサーバ(空白の場合は直接配送) mynetworks = 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 # 信頼するネットワーク範囲 inet_interfaces = all # 待ち受けるネットワークインターフェース (all : 全て) inet_protocols = ipv4 # 使用するプロトコル (ipv4 / ipv6 / all) # メールボックス設定 home_mailbox = Maildir/ # メールボックス形式 (Maildir形式) mailbox_command = # メール配送時の外部コマンド (空白 : 標準配送) # SASL認証設定 (Dovecot経由) smtpd_sasl_type = dovecot # SASL認証のバックエンドタイプ smtpd_sasl_path = private/auth # Dovecot認証ソケットのパス smtpd_sasl_auth_enable = yes # SMTP認証機能の有効化 smtpd_sasl_security_options = noanonymous # 匿名認証の無効化 smtpd_sasl_local_domain = $mydomain # SASL認証で使用するローカルドメイン broken_sasl_auth_clients = yes # 古いクライアントとの互換性維持 # TLS設定 smtpd_use_tls = yes # TLS暗号化機能の有効化 smtpd_tls_cert_file = /etc/ssl/certs/mail/mail.crt # サーバ証明書ファイルのパス smtpd_tls_key_file = /etc/ssl/certs/mail/mail.key # 秘密鍵ファイルのパス smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache # サーバ側TLSセッションキャッシュ smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # クライアント側TLSセッションキャッシュ smtpd_tls_security_level = may # TLSセキュリティレベル (may : 任意、encrypt : 必須) smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 # 使用禁止プロトコル (! : 禁止) smtpd_tls_ciphers = high # 暗号化方式の強度 (high : 高強度のみ) smtpd_tls_mandatory_ciphers = high # TLS必須時の暗号化方式強度 # セキュリティ設定 # 受信者アドレスに対する制限ルール(上から順に評価) smtpd_recipient_restrictions = permit_mynetworks, # 信頼ネットワークからの接続を許可 permit_sasl_authenticated, # SASL認証済みクライアントを許可 reject_unauth_destination, # 未認証の外部ドメイン宛を拒否 (オープンリレー防止) reject_invalid_hostname, # 無効なホスト名を拒否 reject_non_fqdn_sender, # 送信者がFQDNでない場合を拒否 reject_non_fqdn_recipient, # 受信者がFQDNでない場合を拒否 reject_unknown_sender_domain, # 送信者ドメインのDNS解決失敗を拒否 reject_unknown_recipient_domain # 受信者ドメインのDNS解決失敗を拒否 # バーチャルメールボックス設定 virtual_mailbox_domains = example.com # バーチャルドメインとして扱うドメイン virtual_mailbox_base = /var/mail/vmail # バーチャルメールボックスのベースディレクトリ virtual_mailbox_maps = hash:/etc/postfix/vmailbox # メールアドレスとメールボックスの対応ファイル virtual_minimum_uid = 1000 # 使用する最小UID値 virtual_uid_maps = static:5000 # バーチャルメールボックスで使用する固定UID virtual_gid_maps = static:5000 # バーチャルメールボックスで使用する固定GID virtual_alias_maps = hash:/etc/postfix/virtual # メールエイリアス (転送設定) ファイル </syntaxhighlight> <br> ==== master.cf ==== master.cfファイルは、Postfixのサービスプロセスを制御する設定ファイルである。<br> <br> 各サービスの起動方法、プロセス数、実行ユーザ、コマンドラインオプション等を定義する。<br> また、SMTP、SMTP Submission、LMTPなどの各種サービスの動作を個別に設定することができる。<br> <br> 特に、SMTP Submission (ポート587) の設定では、認証必須やTLS暗号化必須等のオプションを追加することにより、セキュアなメール送信環境を構築することができる。<br> <br> postfix/master.cfファイルに、SMTP Submissionポート (587番) の設定を追加する。<br> <br> # SMTP Submission (ポート587) の設定 # サービス定義 : submission / inet / smtpdプロセスを起動 submission inet n - y - - smtpd -o syslog_name=postfix/submission # syslogでの識別名 -o smtpd_tls_security_level=encrypt # TLS暗号化を必須化 -o smtpd_sasl_auth_enable=yes # SASL認証を有効化 -o smtpd_reject_unlisted_recipient=no # 受信者リスト外への配送を許可 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject # 認証済みのみ許可 -o milter_macro_daemon_name=ORIGINATING # メールフィルタに内部送信を通知 <br> ==== バーチャルメールボックスの設定 ==== vmailboxファイルは、メールアドレスとそれに対応するメールボックスのディレクトリパスを関連付ける。<br> <br> 各行には、左側にメールアドレス、右側にそのメールボックスの相対パスを記述する。<br> このファイルを編集した後は、postmapコマンドでハッシュデータベースに変換する必要がある。<br> <br> Postfixは、このハッシュデータベースを参照して、受信したメールを適切なメールボックスに配送する。<br> <br> postfix/vmailboxファイルを作成して、仮想メールボックスを定義する。<br> <br> <syntaxhighlight lang="text"> # 形式 : メールアドレス メールボックスの相対パス # パスはvirtual_mailbox_base (/var/mail/vmail) からの相対パス user1@example.com example.com/user1/ # user1のメールボックス user2@example.com example.com/user2/ # user2のメールボックス info@example.com example.com/info/ # infoのメールボックス </syntaxhighlight> <br> ハッシュデータベースを生成する。<br> postmap /etc/postfix/vmailbox postmap /etc/postfix/virtual <br><br> == Dovecot設定ファイル == ==== dovecot.conf ==== dovecot/dovecot.confファイルを作成する。<br> <br> <syntaxhighlight lang="text"> protocols = imap pop3 lmtp listen = *, :: base_dir = /var/run/dovecot/ instance_name = dovecot !include conf.d/*.conf !include_try local.conf </syntaxhighlight> <br> ==== 認証設定 (10-auth.conf) ==== dovecot/conf.d/10-auth.confファイルを作成する。<br> <br> disable_plaintext_auth = yes auth_mechanisms = plain login passdb { driver = passwd-file args = scheme=CRYPT username_format=%u /etc/dovecot/users } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vmail/%u } <br> ==== メールボックス設定 (10-mail.conf) ==== dovecot/conf.d/10-mail.confファイルを作成する。<br> <br> mail_location = maildir:/var/mail/vmail/%u namespace inbox { inbox = yes } mail_privileged_group = mail first_valid_uid = 5000 last_valid_uid = 5000 first_valid_gid = 5000 last_valid_gid = 5000 <br> ==== サービス設定 (10-master.conf) ==== dovecot/conf.d/10-master.confファイルを作成して、Postfix用のSASL認証ソケットを設定する。<br> <br> service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } } service imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 995 ssl = yes } } <br> ==== SSL/TLS設定 (10-ssl.conf) ==== dovecot/conf.d/10-ssl.confファイルを作成する。<br> <br> <syntaxhighlight lang="ini"> ssl = required ssl_cert = </etc/ssl/certs/mail/mail.crt ssl_key = </etc/ssl/certs/mail/mail.key ssl_min_protocol = TLSv1.2 ssl_cipher_list = HIGH:!aNULL:!MD5 ssl_prefer_server_ciphers = yes ssl_dh = </etc/dovecot/dh.pem </syntaxhighlight> <br><br> == SSL / TLS証明書 == ==== 自己署名証明書の作成 ==== テスト環境用に自己署名証明書を作成する例を以下に示す。<br> <br> mkdir -p ./certs <br> openssl req -x509 -nodes -days 365 -newkey rsa:4096 \ -keyout ./certs/mail.key \ -out ./certs/mail.crt \ -subj "/C=JP/ST=Tokyo/L=Tokyo/O=MyCompany/CN=mail.example.com" <br> chmod 600 ./certs/mail.key chmod 644 ./certs/mail.crt <br> ==== Diffie-Hellmanパラメータの生成 ==== Dovecotで使用するDHパラメータを生成する。<br> <br> openssl dhparam -out ./dovecot/dh.pem 2048 <br> ==== Let's Encrypt証明書の使用 ==== 本番環境では、Let's Encryptを使用した正規の証明書を取得することを推奨する。<br> <br> certbot certonly --standalone -d mail.example.com <br> # 証明書をコピー cp /etc/letsencrypt/live/mail.example.com/fullchain.pem ./certs/mail.crt cp /etc/letsencrypt/live/mail.example.com/privkey.pem ./certs/mail.key <br><br> == ユーザ管理 == ==== ユーザーの追加 ==== Dovecotのusersファイルにユーザーを追加する。パスワードハッシュはdoveadmコマンドで生成する。<br> <br> # コンテナ内でパスワードハッシュを生成 podman exec -it mailserver doveadm pw -s SHA512-CRYPT # Enter new password: (パスワードを入力) # Retype new password: (パスワードを再入力) # {SHA512-CRYPT}$6$... <br> dovecot/usersファイルに生成したハッシュを追加する。<br> <br> <syntaxhighlight lang="text"> user1@example.com:{SHA512-CRYPT}$6$... user2@example.com:{SHA512-CRYPT}$6$... info@example.com:{SHA512-CRYPT}$6$... </syntaxhighlight> <br> ==== メールボックスディレクトリの作成 ==== ユーザごとのメールボックスディレクトリを作成する。<br> <br> mkdir -p ./vmail/example.com/user1 mkdir -p ./vmail/example.com/user2 mkdir -p ./vmail/example.com/info chown -R 5000:5000 ./vmail <br> ==== ユーザの削除 ==== usersファイルから該当行を削除して、メールボックスディレクトリを削除する。<br> <br> # usersファイルから削除 sed -i '/user1@example.com/d' dovecot/users # メールボックスディレクトリを削除 rm -rf ./vmail/example.com/user1 <br><br> == メールの送受信 == ==== SMTP接続テスト ==== telnetコマンドを使用してSMTP接続をテストする。<br> <br> telnet mail.example.com 25 <br> 以下に示すコマンドを順に入力する。<br> EHLO test.local MAIL FROM:<sender@example.com> RCPT TO:<user1@example.com> DATA Subject: Test Mail This is a test message. . QUIT <br> ==== SMTP Submission接続テスト (認証付き) ==== opensslコマンドを使用してSMTP Submissionポートへの接続をテストする。<br> <br> openssl s_client -connect mail.example.com:587 -starttls smtp <br> 接続後、以下に示すコマンドを入力する。<br> EHLO test.local AUTH LOGIN # Base64エンコードされたユーザ名とパスワードを入力 <br> Base64エンコードは以下に示すコマンドで生成する。<br> <br> echo -n 'user1@example.com' | base64 echo -n 'password' | base64 <br> ==== IMAP接続テスト ==== opensslコマンドを使用してIMAPS接続をテストする。<br> <br> openssl s_client -connect mail.example.com:993 <br> 接続後、以下に示すコマンドを入力する。<br> a001 LOGIN user1@example.com password a002 LIST "" "*" a003 SELECT INBOX a004 LOGOUT <br> ==== POP3接続テスト ==== opensslコマンドを使用してPOP3S接続をテストする。<br> <br> openssl s_client -connect mail.example.com:995 # 接続後、以下のコマンドを入力 USER user1@example.com PASS password LIST RETR 1 QUIT <br> ==== メールクライアントでの接続テスト ==== ThunderbirdやOutlook等どのメールクライアントで接続する場合の設定を以下に示す。<br> <br> <center> {| class="wikitable" |+ メールクライアント設定パラメータ ! 項目 !! 受信サーバ (IMAP) !! 送信サーバ (SMTP) |- | サーバ名 || mail.example.com || mail.example.com |- | ポート番号 || 993 || 587 |- | セキュリティ || SSL / TLS || STARTTLS |- | 認証方式 || 通常のパスワード認証 || 通常のパスワード認証 |- | ユーザー名 || user1@example.com || user1@example.com |} </center> <br><br> == ログの管理 == ==== Postfixログの確認 ==== Postfixのログをリアルタイムで確認する。<br> <br> podman exec mailserver tail -f /var/log/mail.log # または podman exec mailserver tail -f /var/log/syslog | grep postfix <br> 特定のメールアドレスに関連するログを検索する。<br> <br> podman exec mailserver grep "user1@example.com" /var/log/mail.log <br> ==== Dovecotログの確認 ==== Dovecotのログをリアルタイムで確認する。<br> <br> podman exec mailserver tail -f /var/log/mail.log | grep dovecot <br> 認証失敗のログを確認する。<br> <br> podman exec mailserver grep "auth failed" /var/log/mail.log <br> ==== コンテナログの確認 ==== podman logsコマンドでコンテナ全体のログを確認する。<br> <br> podman logs -f mailserver # 最新100行のみ表示 podman logs --tail 100 mailserver # タイムスタンプ付きで表示 podman logs -t mailserver <br> ==== ログのローテーション設定 ==== ログファイルが肥大化しないように、logrotateを設定する。<br> <br> * /etc/logrotate.d/mailserver ファイルの例 *: <syntaxhighlight lang="text"> /path/to/logs/mail.log { daily rotate 30 compress delaycompress notifempty create 0640 syslog adm sharedscripts postrotate podman exec mailserver postfix reload podman exec mailserver doveadm reload endscript } </syntaxhighlight> <br><br> == メールキューの管理 == ==== キュー内のメール一覧表示 ==== キューに滞留しているメールを確認する。<br> <br> podman exec mailserver postqueue -p <br> ==== 特定のメールをキューから削除 ==== キューIDを指定してメールを削除する。<br> <br> podman exec mailserver postsuper -d <キューID> <br> 全てのメールをキューから削除する。<br> <br> podman exec mailserver postsuper -d ALL <br> ==== キューの再送信 ==== キューに滞留しているメールを強制的に再送信する。<br> <br> podman exec mailserver postqueue -f <br> ==== 保留中のメールの確認 ==== 保留 (hold) 状態のメールを確認する。<br> <br> podman exec mailserver postqueue -p | grep -A 2 "^[A-F0-9]*\*" <br><br> == セキュリティ設定 == ==== SPFレコードの設定 ==== DNSにSPFレコードを追加して、送信元の正当性を検証する。<br> <br> example.com. IN TXT "v=spf1 ip4:203.0.113.10 ~all" <br> ==== DKIMの設定 ==== OpenDKIMを使用してメールに電子署名を付与する。<br> <br> これは、OpenDKIMをコンテナに追加する。<br> <br> # OpenDKIMのインストール apt install -y opendkim opendkim-tools # 鍵の生成 mkdir -p /etc/opendkim/keys/example.com opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s mail # DNSにTXTレコードを追加 cat /etc/opendkim/keys/example.com/mail.txt <br> ==== DMARCレコードの設定 ==== DNSにDMARCレコードを追加して、SPFとDKIMの検証結果を管理する。<br> <br> _dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com" <br> ==== 接続制限の設定 ==== Postfixで接続数とレート制限を設定する。<br> <br> これは、main.cfに以下に示す設定を追加する。<br> <br> <syntaxhighlight lang="ini"> # 接続数制限 smtpd_client_connection_count_limit = 10 smtpd_client_connection_rate_limit = 30 # メッセージサイズ制限 message_size_limit = 10240000 mailbox_size_limit = 102400000 # レシピエント制限 smtpd_recipient_limit = 100 </syntaxhighlight> <br> ==== アクセス制御リストの設定 ==== 特定のIPアドレスやドメインからのアクセスを制御する。<br> <br> postfix/accessファイルを作成する。<br> <br> # 許可するIPアドレス 192.168.1.0/24 OK 10.0.0.0/8 OK # 拒否するドメイン spam-domain.com REJECT bad-sender.net REJECT <br> ハッシュデータベースを生成して、main.cfに設定を追加する。<br> <br> postmap /etc/postfix/access <br> main.cfに追加する設定を以下に示す。<br> <br> smtpd_client_restrictions = check_client_access hash:/etc/postfix/access, permit_mynetworks, reject_unknown_client_hostname <br><br> == スパムフィルタの設定 == SpamAssassinを使用して、スパムメールをフィルタリングする。<br> <br> ==== SpamAssassinのインストール ==== コンテナ内にSpamAssassinをインストールする。<br> <br> apt install -y spamassassin spamc <br> ==== SpamAssassinの設定 ==== /etc/default/spamassassinファイルを編集して、SpamAssassinを有効化する。<br> <br> ENABLED=1 SPAMD_HOME="/var/lib/spamassassin/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" <br> ==== Postfixとの連携 ==== master.cfにSpamAssassinの設定を追加する。<br> <br> smtp inet n - y - - smtpd -o content_filter=spamassassin spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} <br><br> == バックアップと復元 == ==== メールボックスのバックアップ ==== vmailディレクトリをtarで圧縮してバックアップする。<br> <br> tar Jcf mailbox-backup-$(date +%Y%m%d).tar.xz -C ./vmail . <br> ==== 設定ファイルのバックアップ ==== 設定ファイルをまとめてバックアップする。<br> <br> tar Jcf config-backup-$(date +%Y%m%d).tar.xz postfix/ dovecot/ certs/ <br> ==== メールボックスの復元 ==== バックアップからメールボックスを復元する。<br> <br> tar xf mailbox-backup-20250107.tar.xz -C ./vmail chown -R 5000:5000 ./vmail <br> ==== 定期バックアップスクリプト ==== Cronで定期的にバックアップを実行することもできる。<br> <br> <syntaxhighlight lang="sh"> #!/usr/bin/env sh BACKUP_DIR="/backup/mailserver" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p ${BACKUP_DIR} # メールボックスのバックアップ tar Jcf ${BACKUP_DIR}/vmail-${DATE}.tar.xz -C /path/to/vmail . # 設定ファイルのバックアップ tar Jcf ${BACKUP_DIR}/config-${DATE}.tar.xz postfix/ dovecot/ certs/ # 古いバックアップの削除 (30日以上前) find ${BACKUP_DIR} -name "*.tar.gz" -mtime +30 -delete </syntaxhighlight> <br><br> == パフォーマンスチューニング == ==== Postfixの同時接続数設定 ==== main.cfファイルを編集して、同時接続数を調整する。<br> <br> <syntaxhighlight lang="ini"> # デフォルトのプロセス数 default_process_limit = 100 # SMTPデーモンのプロセス数 smtpd_client_connection_count_limit = 50 # 配信プロセスの数 maximal_queue_lifetime = 5d bounce_queue_lifetime = 5d </syntaxhighlight> <br> ==== Dovecotのプロセス数設定 ==== 10-master.confファイルを編集して、プロセス数を調整する。<br> <br> service imap-login { process_min_avail = 4 process_limit = 100 } service pop3-login { process_min_avail = 2 process_limit = 50 } service auth { process_limit = 100 } <br> ==== メールボックスキャッシュの設定 ==== Dovecotのキャッシュ設定を最適化する。<br> <br> これは、10-mail.confファイルに設定を追加する。<br> <br> <syntaxhighlight lang="ini"> mail_cache_min_mail_count = 10 mailbox_list_index = yes mail_location = maildir:/var/mail/vmail/%u:LAYOUT=fs </syntaxhighlight> <br> ==== ディスクI/O最適化 ==== メールボックスのディスクI/Oを最適化する。<br> <br> <syntaxhighlight lang="ini"> # Postfixのキュー配置最適化 queue_directory = /var/spool/postfix # Dovecotのインデックスファイル配置 mail_location = maildir:/var/mail/vmail/%u:INDEX=/var/indexes/%u </syntaxhighlight> <br><br> == トラブルシューティング == ==== コンテナが起動しない ==== 設定ファイルの構文エラーを確認する。<br> <br> # Postfixの設定確認 podman exec mailserver postfix check # Dovecotの設定確認 podman exec mailserver doveconf -n # コンテナログの確認 podman logs mailserver <br> ==== メール送信ができない ==== SMTP接続とSASL認証を確認する。<br> <br> # SMTP接続テスト telnet mail.example.com 25 # SASL認証機構の確認 podman exec mailserver postconf -n | grep sasl # Dovecot認証ソケットの確認 podman exec mailserver ls -la /var/spool/postfix/private/auth <br> ==== メール受信ができない ==== メールボックスのパーミッションとDovecotの設定を確認する。<br> <br> # メールボックスのパーミッション確認 ls -la ./vmail # Dovecotのユーザー設定確認 podman exec mailserver doveadm user user1@example.com # Dovecotログの確認 podman exec mailserver grep dovecot /var/log/mail.log <br> ==== 認証エラー ==== ユーザ設定とパスワードハッシュを確認する。<br> <br> # usersファイルの確認 cat dovecot/users # パスワードハッシュの再生成 podman exec -it mailserver doveadm pw -s SHA512-CRYPT # 認証テスト podman exec mailserver doveadm auth test user1@example.com <br> ==== TLS/SSL接続エラー ==== 証明書とTLS設定を確認する。<br> <br> # 証明書の有効性確認 openssl x509 -in ./certs/mail.crt -text -noout # TLS接続テスト openssl s_client -connect mail.example.com:587 -starttls smtp # Postfixの証明書設定確認 podman exec mailserver postconf | grep tls <br> ==== メールキューの滞留 ==== キューに滞留しているメールの原因を調査する。<br> <br> # キューの状態確認 podman exec mailserver postqueue -p # 特定のメールの詳細確認 podman exec mailserver postcat -q <キューID> # ログでエラーを確認 podman exec mailserver grep "status=deferred" /var/log/mail.log <br> ==== ポート番号の競合 ==== 他のサービスとポート番号が競合している場合、別のポートを使用する。<br> <br> # 使用中のポート確認 netstat -tuln | grep -E ':(25|587|993|995)' # 別ポートで起動 podman run -d --name mailserver -p 0.0.0.0:2525:25 -p 0.0.0.0:2587:587 mailserver:custom <br><br> == ファイヤーウォールの設定 == 同一ネットワーク上の外部PCからアクセスする場合は、ファイヤーウォールのポート開放を行う。<br> <br> ==== Linux ==== # Firewalldを使用している場合 sudo firewall-cmd --permanent --add-service=smtp sudo firewall-cmd --permanent --add-service=smtp-submission sudo firewall-cmd --permanent --add-service=imaps sudo firewall-cmd --permanent --add-service=pop3s sudo firewall-cmd --reload # またはポート番号で指定 sudo firewall-cmd --permanent --add-port=25/tcp sudo firewall-cmd --permanent --add-port=587/tcp sudo firewall-cmd --permanent --add-port=993/tcp sudo firewall-cmd --permanent --add-port=995/tcp sudo firewall-cmd --reload # UFWを使用している場合 sudo ufw allow 25/tcp sudo ufw allow 587/tcp sudo ufw allow 993/tcp sudo ufw allow 995/tcp <br> ==== Windows 11 ==== PowerShellを管理者権限で起動して、以下に示すコマンドを実行する。<br> <br> SMTPポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail SMTP" -Direction Inbound -Protocol TCP -LocalPort 25 -Action Allow <br> SMTP Submissionポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail SMTP Submission" -Direction Inbound -Protocol TCP -LocalPort 587 -Action Allow <br> IMAPSポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail IMAPS" -Direction Inbound -Protocol TCP -LocalPort 993 -Action Allow <br> POP3Sポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail POP3S" -Direction Inbound -Protocol TCP -LocalPort 995 -Action Allow <br> 正常にポート開放が行われているかどうかを確認する場合、別PCからPowerShellを起動して、以下に示すコマンドを実行する。<br> Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 25 Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 587 Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 993 Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 995 <br> ファイアウォールルールを削除する場合は、以下に示すコマンドを実行する。<br> Remove-NetFirewallRule -DisplayName "Mail SMTP" -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName "Mail SMTP Submission" -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName "Mail IMAPS" -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName "Mail POP3S" -ErrorAction SilentlyContinue <br> ==== Windows 10 ==== PowerShellを管理者権限で起動して、以下に示すコマンドを実行する。<br> <br> SMTPポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail SMTP" -Direction Inbound -Protocol TCP -LocalPort 25 -Action Allow <br> SMTP Submissionポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail SMTP Submission" -Direction Inbound -Protocol TCP -LocalPort 587 -Action Allow <br> IMAPSポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail IMAPS" -Direction Inbound -Protocol TCP -LocalPort 993 -Action Allow <br> POP3Sポートの受信ルールを追加する。<br> New-NetFirewallRule -DisplayName "Mail POP3S" -Direction Inbound -Protocol TCP -LocalPort 995 -Action Allow <br> 正常にポート開放が行われているかどうかを確認する場合、別のPCからPowerShellを起動して、以下に示すコマンドを実行する。<br> Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 25 Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 587 Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 993 Test-NetConnection -ComputerName <Windows PCのIPアドレス> -Port 995 <br> ファイアウォールルールを削除する場合は、以下に示すコマンドを実行する。<br> Remove-NetFirewallRule -DisplayName "Mail SMTP" -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName "Mail SMTP Submission" -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName "Mail IMAPS" -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName "Mail POP3S" -ErrorAction SilentlyContinue <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:コンテナ]]
コンテナ - メールサーバ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse