プロジェクト

全般

プロフィール

Sympaメーリングリストサーバの構築(マルチドメイン)

メーリングリストSympaの構築手順
オフィシャルのドキュメントに基づいて構築します
https://sympa-community.github.io/manual/install

メールスプールとして2つの仮想ドメインを仮想メールボックスで作成し、
Sympaの仮想ドメインをそれと別に一つ作成します。

  • example01.com
    メールスプール用1
  • example02.com
    メールスプール用2
  • ml1.example.com
    メーリングリスト用1
  • ml2.example.com
    メーリングリスト用2

環境の準備

  • 必要なソフトウェアをインストールします
    # yum install httpd mod_ssl mariadb-server postfix wget mailx telnet
    
    • RHEL9以降は mailx → s-nail が互換パッケージ
  • epelリポジトリおよびepel系パッケージをインストールします
    # yum install epel-release
    # yum install spawn-fcgi
    
    • RHEL9ではspawn-fcgiがないが、httpdパッケージでfast-cgiが組み込まれている模様
  • バーチャルドメイン用のグループを作成します
    # groupadd -g 10000 vmail
    
  • バーチャルドメイン用のユーザを作成します
    # useradd -u 10000 -g vmail -s /sbin/nologin vmail
    
  • スプールディレクトリを作成します
    # mkdir /var/spool/vmail
    # chown -R vmail:vmail /var/spool/vmail
    
    

Postfixの設定

マルチドメイン・バーチャルメールボックスでの簡易設定

  • Postfixの設定を行う
    # vi /etc/postfix/main.cf
    -----------------------------
    myhostname = mail.example.com
    
    mydomain = example.com
    
    myorigin = $mydomain
    
    inet_interfaces = all
    #inet_interfaces = $myhostname
    #inet_interfaces = $myhostname, localhost
    #inet_interfaces = localhost
    
    #mydestination = $myhostname, localhost.$mydomain, localhost
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
    #       mail.$mydomain, www.$mydomain, ftp.$mydomain
    
    local_recipient_maps = unix:passwd.byname $alias_maps
    #local_recipient_maps = proxy:unix:passwd.byname $alias_maps
    #local_recipient_maps =
    
    #mynetworks_style = class
    mynetworks_style = subnet
    #mynetworks_style = host
    
    mynetworks = 192.168.0.0/24, 127.0.0.0/8
    home_mailbox = Maildir/
    
    virtual_mailbox_domains = /etc/postfix/virtual_domain
    virtual_mailbox_base = /var/spool/vmail
    virtual_mailbox_maps = hash:/etc/postfix/virtual_user
    virtual_uid_maps = static:10000
    virtual_gid_maps = static:10000
    
  • バーチャルドメイン設定ファイルの作成
    スプール専用ドメイン、ML専用ドメイン両方とも作成する。
    # vi /etc/postfix/virtual_domain
    -----------------------------
    example01.com
    example02.com
    ml1.example.com
    ml2.example.com
    
  • バーチャルメールアドレスとバーチャルメールボックスのパスを記載する
    # vi /etc/postfix/virtual_user
    -----------------------------
    user01@example01.com   example01.com/user01/Maildir/
    user02@example01.com   example01.com/user02/Maildir/
    user03@example01.com   example01.com/user03/Maildir/
    
    user01@example02.com   example02.com/user01/Maildir/
    user02@example02.com   example02.com/user02/Maildir/
    user03@example02.com   example02.com/user03/Maildir/
    
    postmaster@ml1.example.com   ml1.example.com/postmaster/Maildir/
    postmaster@ml2.example.com   ml2.example.com/postmaster/Maildir/
    
    • Maildir/の末尾/は必ず必要。忘れるとロックファイルが作成できないという配送エラーになる。
  • 上記のハッシュファイルを作成する
    # postmap /etc/postfix/virtual_user
    
  • サービスの登録・起動を行う
    # systemctl enable postfix
    # systemctl start postfix
    
  • メール送信のテストを行う
    # mail user01@example01.com
    Subject: test
    test
    .
    EOT
    
  • メール受信のテストを行う
    # mail -f /var/spool/vmail/example01.com/user01/Maildir/
    Heirloom Mail version 12.5 7/5/10.  Type ? for help.
    "/var/spool/vmail/example01.com/user01/Maildir/": 1 message 1 new
    >N  1 root                  Mon Aug  6 16:11  18/528   "test" 
    & q
    "/var/spool/vmail/example01.com/user01/Maildir/" complete
    
    • サブドメインのみでバーチャルドメインを切っている場合、maillogに下記が記載される。
      main.cfのvirtual_mailbox_domainsとmydestinationの重複はできないので、mydestinationで$mydomainを削除する。
      warning: do not list domain mail1.example.com in BOTH virtual_mailbox_domains and relay_domains
      

Dovecotの設定

ローカルメールスプールを併設する場合のみ。メーリングリストとして送信するだけなら不要。
  • パッケージのインストール
    # yum install dovecot
    
  • サービス設定
    # vi /etc/dovecot/dovecot.conf
    -----------------------------
    #protocols = imap pop3 lmtp
    protocols = imap
    
  • 認証設定
    # vi /etc/dovecot/conf.d/10-auth.conf
    -----------------------------
    disable_plaintext_auth = no
    
    !include auth-passwdfile.conf.ext
    !include auth-static.conf.ext
    
  • パスワードファイルの設定
    # vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
    -----------------------------
    passdb {
      driver = passwd-file
    #  args = scheme=CRYPT username_format=%u /etc/dovecot/users
      args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
    }
    
  • ユーザ情報ファイルの設定
    # vi /etc/dovecot/conf.d/auth-static.conf.ext
    -----------------------------
    #userdb {
    #  driver = static
    #  args = uid=vmail gid=vmail home=/home/%u
    #}
    userdb {
      driver = static
      args = uid=vmail gid=vmail home=/var/spool/vmail/%d/%n
    }
    
  • パスワードの登録
    # doveadm pw
    Enter new password:
    Retype new password:
    {CRAM-MD5}************
    ※ユーザとマッチさせながら必要数分だけ作成する
    
    # vi /etc/dovecot/users
    -----------------------------
    user01@example01.com:{CRAM-MD5}************
    …
    …
    ※ ユーザ名:パスワード形式で羅列する
    
  • SSL設定
    # vi /etc/dovecot/conf.d/10-ssl.conf
    -----------------------------
    #ssl = required
    ssl = yes
    
  • メール設定
    # vi /etc/dovecot/conf.d/10-mail.conf
    -----------------------------
    mail_location = maildir:~/Maildir
    
  • サービス登録・起動
    # systemctl enable dovecot
    # systemctl start dovecot
    
  • 動作確認
    # telnet localhost 143
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready.
    1 login user01@example01.com 設定したパスワード(非暗号化状態)
    1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE] Logged in
    2 list "" *
    * LIST (\HasNoChildren) "." INBOX
    2 OK List completed.
    3 select INBOX
    * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
    * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
    * 1 EXISTS
    * 1 RECENT
    * OK [UNSEEN 1] First unseen.
    * OK [UIDVALIDITY 1531798588] UIDs valid
    * OK [UIDNEXT 2] Predicted next UID
    3 OK [READ-WRITE] Select completed (0.014 secs).
    4 fetch 1 body[]
    * 1 FETCH (FLAGS (\Seen \Recent) BODY[] {529}
    Return-Path: <root@example.com>
    X-Original-To: test@example.com
    Delivered-To: test@example.com
    Received: by mail.example.com (Postfix, from userid 0)
            id 19D89200758A; Tue, 17 Jul 2018 12:47:43 +0900 (JST)
    Date: Tue, 17 Jul 2018 12:47:43 +0900
    To: test@example.com
    Subject: test
    User-Agent: Heirloom mailx 12.5 7/5/10
    MIME-Version: 1.0
    Content-Type: text/plain; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    Message-Id: <20180717034743.19D89200758A@mail.example.com>
    From: root@example.com (root)
    
    test
    )
    4 OK Fetch completed.
    5 logout
    * BYE Logging out
    5 OK Logout completed.
    Connection closed by foreign host.
    

Sympaのインストール

  • Sympaのインストール
    # yum install sympa sympa-httpd perl-DBI perl-DBD-MySQL
    
  • RHEL9系で下記のようなperl等のパッケージ不足エラーが出る場合
     問題 1: 競合するリクエスト
      - perl(File::Copy::Recursive) が提供されません sympa-6.2.72-2.el9.x86_64 に必要です
    
  • CodeReady(開発者向けノンサポートパッケージ)に移されたパッケージが必要なので、リポジトリを有効にする
    • RHEL9 の場合、ライセンス登録後に下記を実行
      subscription-manager repos --enable=codeready-builder-for-rhel-9-x86_64-rpms
      
    • Rockyなどでは、CRB(Code Ready Builder)リポジトリを有効にする
      ※Rocky Linux 9 の例
      vi /etc/yum.repos.d/rocky.repo
      ------------------------------
      [crb]
      name=Rocky Linux $releasever - CRB
      mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=CRB-$releasever$rltype
      #baseurl=http://dl.rockylinux.org/$contentdir/$releasever/CRB/$basearch/os/
      gpgcheck=1
      enabled=1  ←0を1にして有効化する
      countme=1
      metadata_expire=6h
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9
      

データベースの作成・設定

  • MariaDBの設定に下記を追加する
    # vi /etc/my.cnf
    -----------------------------
    [mysqld]
    character-set-server = utf8
    
    [client]
    default-character-set = utf8
    
    • RHEL9系ではmy.cnf.d以下のserverとclient系ファイルに設定
  • MariaDBを起動する
    # systemctl enable mariadb
    # systemctl start mariadb
    
  • 初期設定を行う
    # mysql_secure_installation
    -----------------------------
    NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
          SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
    
    In order to log into MariaDB to secure it, we'll need the current
    password for the root user.  If you've just installed MariaDB, and
    you haven't set the root password yet, the password will be blank,
    so you should just press enter here.
    
    Enter current password for root (enter for none):
    OK, successfully used password, moving on...
    
    Setting the root password ensures that nobody can log into the MariaDB
    root user without the proper authorisation.
    
    Set root password? [Y/n]
    New password:
    Re-enter new password:
    Password updated successfully!
    Reloading privilege tables..
     ... Success!
    
    By default, a MariaDB installation has an anonymous user, allowing anyone
    to log into MariaDB without having to have a user account created for
    them.  This is intended only for testing, and to make the installation
    go a bit smoother.  You should remove them before moving into a
    production environment.
    
    Remove anonymous users? [Y/n]
     ... Success!
    
    Normally, root should only be allowed to connect from 'localhost'.  This
    ensures that someone cannot guess at the root password from the network.
    
    Disallow root login remotely? [Y/n]
     ... Success!
    
    By default, MariaDB comes with a database named 'test' that anyone can
    access.  This is also intended only for testing, and should be removed
    before moving into a production environment.
    
    Remove test database and access to it? [Y/n]
     - Dropping test database...
     ... Success!
     - Removing privileges on test database...
     ... Success!
    
    Reloading the privilege tables will ensure that all changes made so far
    will take effect immediately.
    
    Reload privilege tables now? [Y/n]
     ... Success!
    
    Cleaning up...
    
    All done!  If you've completed all of the above steps, your MariaDB
    installation should now be secure.
    
    Thanks for using MariaDB!
    
  • データベースの作成
    # mysql -u root -p
    Enter password:
    -----------------------------
    MariaDB [(none)]> CREATE DATABASE sympa CHARACTER SET utf8;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON sympa.* TO sympa@localhost IDENTIFIED BY '任意のパスワード';
    MariaDB [(none)]> quit
    

初期設定

  • 「sympa_wizard.pl」または「sympa config create」コマンドでコンフィグファイルを生成します。(前者は旧バージョン
    ※ 初期配置してある「/etc/sympa/sympa.conf」を退避しておくことで、使用中の言語のコメントで再生成されます。
    ※ ここで設定する非仮想ドメインの設定は最終的に使用できなくなり、後述の仮想ドメイン設定のみが使用されます
    # sympa_wizard.pl
    err Conf::_set_listmasters_entry() Robot  config: No listmaster defined. This is the main config. It MUST define at least one listmaster. Stopping here
    
    ** サービスの説明 **
    
    * 基本メールドメイン名
    domain [mail.example.com] : mail.example.com
    
    * リスト システム管理者の電子メールアドレス
      ... Email addresses of the listmasters (users authorized to perform global
      server commands). Some error reports may also be sent to these addresses.
      Listmasters can be defined for each virtual host, however, the default
      listmasters will have privileges to manage all virtual hosts.
    listmaster [your_email_address@sympa-test.example.com] : postmaster@example.com
    
    * 言語の初期値
      ... Sympaが使う言語の初期値です。対応言語 (supported_language) のうちの一つ
      にします。
    lang [en-US] : ja
    
    * 対応言語
      ... ユーザインタフェースが対応する言語全て。適切な翻訳カタログがインストール
      されていないものは無視されます。
    supported_lang [ca,cs,de,el,en-US,es,et,eu,fi,fr,gl,hu,it,ja,ko,nb,nl,oc,pl,pt-BR,ru,sv,tr,vi,zh-CN,zh-TW] :
    
    * サービスの題名
      ... メーリングリストサービスの呼び名。これはウェブインタフェースのヘッダや
      サービスメッセージの件名に使われます。
    title [Mailing lists service] : 
    
    * Sympaの表示名
      ... このパラメータは、Sympa自身が送るメッセージの「From:」ヘッダフィールドの
      表示名に使います。
    gecos [SYMPA] :
    
    * 従来キャラクタセットへの対応
      ... 「有効」(on) に設定すると、charset.conf(5) 設定ファイルに基づく従来文字
      コード対応を有効にします。
      ... 言語によっては、電子メールメッセージで従来文字コード (キャラクタセット)
      を使うほうが望ましいです (たとえば日本語でのISO-2022-JP)。
    legacy_character_support_feature [off] : on
    
    ** データベース関連 **
    
    * データベースの種類
      ... Possible types are "MySQL", "PostgreSQL", "Oracle", "Sybase" and
      "SQLite".
    db_type [mysql] :
    
    * テータベースサーバのホスト名
      ... With PostgreSQL, you can also use the path to Unix Socket Directory,
      e.g. "/var/run/postgresql" for connection with Unix domain socket.
    db_host [localhost] :
    
    * データベース名
      ... With SQLite, this must be the full path to database file. With Oracle
      Database, this must be Oracle SID.
    db_name [sympa] :
    
    * データベース接続のユーザ名
    db_user [user_name] : sympa
    
    * データベース接続のパスワード
      ... パスワードを使うかどうかにかかわらず、SQLサーバへのアクセスは制限してく
      ださい (サービスをインターネットに公開してしまっていませんか)。
    db_passwd [user_password] : 任意のパスワード
    
    * Syslogサーバとの通信方式
    log_socket_type [unix] :
    
    * メッセージの最大サイズ
      ... Incoming messages smaller than this size is allowed distribution by
      Sympa.
    max_size [5242880] :
    
    * sendmailのパス
      ... Absolute path to sendmail command line utility (e.g.: a binary named
      "sendmail" is distributed with Postfix).
      ... Sympa expects this binary to be sendmail compatible (exim, Postfix,
      qmail and so on provide it).
    sendmail [/usr/sbin/sendmail] :
    
    ** 権限 **
    
    * リストを作成できるのは
      ... Defines who can create lists (or request list creation) by creating new
      lists or by renaming or copying existing lists.
    create_list [public_listmaster] :
    
    * ブラックリストの使用
      ... ブラックリストを適用する操作 (複数あるときはカンマで区切る)。このパラ
      メータを「何もしない (none)」に設定すると、ブラックリスト機能は画面に出なく
      なります。
    use_blacklist [send,create_list] :
    
    * List of required domains for list owner addresses
      ... Restrict list ownership to addresses in the specified domains. This can
      be used to reserve list ownership to a group of trusted users from a set of
      domains associated with an organization, while allowing moderators and
      subscribers from the Internet at large.
    owner_domain [] :
    
    * Minimum number of owners for each list that must match owner_domain
      restriction
      ... Minimum number of owners for each list must satisfy the owner_domain
      restriction. The default of zero (0) means *all* list owners must match.
      Setting to 1 requires only one list owner to match owner_domain; all other
      owners can be from any domain. This setting can be used to ensure that there
      is always at least one known contact point for any mailing list.
    owner_domain_min [0] :
    
    ** 投稿保管庫 **
    
    * 配送したメッセージを投稿保管庫に格納する
      ... 有効にすると、リストを通じて配信されるメッセージは投稿保管庫に入ります。
      そうでなければ投稿保管庫は無効になります。
      ... なお、このパラメータを無効にしても過去の投稿保管庫は削除されず、リスト毎
      のアクセス設定に従って閲覧できます。
    process_archive [off] :
    
    * カスタムのアーカイブ プログラム
      ... MHonArcの代わりにカスタム投稿保管ソフトウェアを使うようにする。パラメー
      タの値はカスタム投稿保管ソフトウェアのファイルシステム上での絶対パス。
      ... Sympaはこのファイルを次の2つの引数をつけて実行します。
      ... 「--list リスト名」
      ... ドメイン部を含むメーリングリストのアドレス。
      ... 「--file ファイル名」
      ... 投稿保管庫に入れるメッセージへの絶対パス。
    custom_archiver [] :
    
    ** 配送エラー管理とメッセージ追跡 **
    
    * Default bounce warn rate
      ... 配送したメッセージのうち配送エラーを起こした数 (パーセント) がこの値を超
      えたら、リストのオーナーに警告を送ります。
    bounce_warn_rate [30] :
    
    ** タグ付けによるスパム排除 **
    
    * スパムの印になるヘッダフィールド
      ... スパムフィルタ (SpamAssassinやj-chkmailなど) がスパムを検出したことを示
      すヘッダフィールドを追加しているとき、そのヘッダフィールドの名前 (たとえば
      「X-Spam-Status」)。
    antispam_tag_header_name [X-Spam-Status] :
    
    * スパムの印になるヘッダフィールドを検査する正規表現
      ... そのヘッダでメッセージがスパムかどうか確認する正規表現 (たとえば
      「Yes」)。
    antispam_tag_header_spam_regexp [^\s*Yes] :
    
    * スパムか非スパムかを判定する正規表現
      ... そのヘッダフィールドでメッセージがスパム*ではない*かどうか確認する正規表
      現 (たとえば「No」)。
    antispam_tag_header_ham_regexp [^\s*No] :
    
    * 結果を通知するヘッダフィールド
      ... メッセージがスパム排除ソフトウェアで処理されており、そのソフトウェアがあ
      るヘッダを追加するとします。このパラメータを使って、メッセージがスパムかどう
      かの状態 (「ham」、「spam」、「unsure」) を決定する特別なシナリオを選択しま
      す。このパラメータは次のパラメータを置き換えます。antispam_tag_header_name、
      antispam_tag_header_spam_regexp、antispam_tag_header_ham_regexp。
    spam_status [x-spam-status] :
    
    * 投稿を保管するディレクトリ
      ... Where to store HTML archives. This parameter is used by the
      "archived.pl" daemon. It is a good idea to install the archive outside the
      web document hierarchy to prevent overcoming of WWSympa's access control.
    arc_path [/var/lib/sympa/arc] :
    
    ** ウェブ インタフェースのパラメータ **
    
    * ウェブ インタフェースのURLプリフィクス
      ... ウェブ インタフェースでURLに使われます。
    wwsympa_url [http://sympa-test.example.com/sympa] : https://ml.example.com/sympa
    
    * 静的コンテンツのURL
      ... HTTPサーバはこのパスを static_content_path のディレクトリと対応させなけ
      ればいけません。
    static_content_url [/static-sympa] :
    
    ** ウェブ インタフェースのパラメータ――外見 **
    
    * メインページの種類
      ... 「lists」でリストの一覧ページ。「home」でホームページ。
    default_home [home] :
    
    * ウェブ投稿保管庫の初期の表示順
      ... thrd: Threaded index.
      ... mail: Chronological index.
    archive_default_index [thrd] :
    
    * 共有文書置き場の容量制限の初期値
    default_shared_quota [] :
    
    * HTMLエディタを使う
      ... 「on」に設定すると、利用者がJavaScriptのWYSIWYGエディタを使ってHTMLで
      メッセージを投稿できるようになります。
    use_html_editor [0] :
    
    ** S/MIME および TLS **
    
    * 信頼できる認証局の証明書を含むファイル
      ... This can be used alternatively and/or additionally to "capath".
    cafile [] :
    
    * 信頼できる認証局の証明書が置かれるディレクトリ
      ... CA certificates in this directory are used for client authentication.
      ... The certificates need to have names including hash of subject, or
      symbolic links to them with such names. The links may be created by using
      "c_rehash" script bundled in OpenSSL.
    capath [] :
    
    * リストの秘密鍵の暗号化パスワード
      ... 設定しなければ、Sympaは秘密鍵を暗号化されていないものとして扱います。
    key_passwd [] :
    
    ** ウィルス検出プラグイン **
    
    * ウィルススキャナエンジンのパス
      ... 対応しているウィルス検出ソフトウェアは、Clam AntiVirus (clamscan、
      clamdscan)、McAfee (uvscan)、Fsecure (fsav)、Sophos、AVP、Trend Micro/
      VirusWall
    antivirus_path [] :
    
    * ウィルス検出ソフトウェアのコマンドライン引数
    antivirus_args [] :
    
    ** パスワード強度検査 **
    
    * パスワード強度検査
      ... 利用者のパスワードの強度を検査する方法。Data::Passwordによるオプションを
      設定できます。
      <http://search.cpan.org/~razinf/Data-Password-1.07/Password.pm#VARIABLES>
    password_validation [] :
    /etc/sympa/sympa.conf を更新しました。
    前のバージョンは /etc/sympa/sympa.conf.2018-07-20-16-35-38 として保存してありま す。
    
  • データベースの投入
    # sympa.pl --health_check
    

ログの作成

  • 最初に空のログファイルを作成・設定する
    # touch /var/log/sympa.log
    # chmod 640 /var/log/sympa.log
    
  • rsyslogをリロードする
    # systemctl restart rsyslog
    
  • ログ出力のテスト
    # perl /usr/share/sympa/bin/testlogs.pl
    (6.2.72以降) sympa test syslog
    Ok, now check logs
    
  • ログの確認
    # cat /var/log/sympa.log
    Jul 20 16:42:33 sympa-test sympa/testlogs[11030]: info main:: Logs seems OK, default log level 0
    

Sympa、Postfix連携設定

  • list_aliases.tt2ファイルの作成
    # vi /etc/sympa/list_aliases.tt2
    -----------------------------
    #--- [% list.name %]@[% list.domain %]: list transport map created at [% date %]
    [% list.name %]@[% list.domain %] sympa:[% list.name %]@[% list.domain %]
    [% list.name %]-request@[% list.domain %] sympa:[% list.name %]-request@[% list.domain %]
    [% list.name %]-editor@[% list.domain %] sympa:[% list.name %]-editor@[% list.domain %]
    #[% list.name %]-subscribe@[% list.domain %] sympa:[% list.name %]-subscribe@[%list.domain %]
    [% list.name %]-unsubscribe@[% list.domain %] sympa:[% list.name %]-unsubscribe@[% list.domain %]
    [% list.name %][% return_path_suffix %]@[% list.domain %] sympabounce:[% list.name %]@[% list.domain %]
    
  • sympa.confに追記
    # vi /etc/sympa/sympa.conf
    -----------------------------
    sendmail_aliases /etc/sympa/sympa_transport
    aliases_program postmap
    aliases_db_type hash
    
  • マップファイルを作成する
    # touch /etc/sympa/transport.sympa
    # touch /etc/sympa/virtual.sympa
    # touch /etc/sympa/sympa_transport
    # chown sympa:sympa /etc/sympa/sympa_transport
    
  • マップファイルのデータベースを作成
    # postmap hash:/etc/sympa/transport.sympa
    # postmap hash:/etc/sympa/virtual.sympa
    # postmap hash:/etc/postfix/virtual
    # sympa_newaliases.pl
    
  • postfixのmaster.cfに追記
    # vi /etc/postfix/master.cf
    -----------------------------
    sympa   unix    -       n       n       -       -       pipe
      flags=hqRu user=sympa argv=/usr/libexec/sympa/queue ${nexthop}
    sympabounce unix -      n       n       -       -       pipe
      flags=hqRu user=sympa argv=/usr/libexec/sympa/bouncequeue ${nexthop}
    
  • postfixのmain.cfを編集
    # vi /etc/postfix/main.cf
    -----------------------------
    virtual_mailbox_domains = /etc/postfix/virtual_domain,
      hash:/etc/sympa/transport.sympa
    virtual_mailbox_base = /var/spool/vmail
    virtual_mailbox_maps = hash:/etc/postfix/virtual_user,
      hash:/etc/sympa/transport.sympa,
      hash:/etc/sympa/sympa_transport,
      hash:/etc/sympa/virtual.sympa
    virtual_alias_maps = hash:/etc/sympa/virtual.sympa,
      hash:/etc/postfix/virtual
    transport_maps = hash:/etc/sympa/transport.sympa,
      hash:/etc/sympa/sympa_transport
    virtual_uid_maps = static:10000
    virtual_gid_maps = static:10000
    recipient_delimiter = +
    
    • テスト送信時、maillogに下記のようなメッセージが出る場合、mydestinationからドメインを削除する
      mydestinationとvirtual_mailbox_domainsおよびrelay_domainsは重複できないが、サブドメインによる
      バーチャルドメイン化で意図せず重複してしまった場合に修正が必要となる。
      warning: do not list domain バーチャルドメイン名 in BOTH virtual_mailbox_domains and relay_domains
      -----------------------------
      # vi /etc/postfix/main.cf
      -----------------------------
      #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
      mydestination = $myhostname, localhost.$mydomain, localhost
      
  • Postfixをリロードする
    # systemctl restart postfix
    

新しい仮想ドメインの作成

※仮想ドメインを作成するたびに必要

  • 仮想ドメインのディレクトリを作成
    # mkdir -m 755 /etc/sympa/ml.example.com
    # touch /etc/sympa/ml.example.com/robot.conf
    # chown -R sympa:sympa /etc/sympa/ml.example.com
    # mkdir -m 750 /var/lib/sympa/list_data/ml.example.com
    # chown sympa:sympa /var/lib/sympa/list_data/ml.example.com
    
    • robot.confは最低限次のような設定を行うとよいと思われる。
      ## 基本メールドメイン名
      # was domain (You must define this parameter)
      domain  ドメイン名
      
      ## リストシステム管理者の電子メールアドレス
      ## リストシステム管理者 (サーバ全体を操作できる人) の電子メールアドレス (複数
      ## 可)。このアドレスにエラー報告を送ることがあります。リストシステム管理者を仮
      ## 想ホスト毎に決めることもできますが、初期設定のリストシステム管理者は全ての
      ## 仮想ホストの管理権限を持ちます。
      # was listmaster (Youmustdefinethisparameter)
      listmaster      管理者アドレス
      
      ## サービスの題名
      ## メーリングリストサービスの呼び名。これはウェブインタフェースのヘッダやサー
      ## ビスメッセージの件名に使われます。
      title   タイトル名
      
      ## ウェブ インタフェースのURLプリフィクス
      ## ウェブ インタフェースでURLに使われます。
      # was wwsympa_url http://ml.example.com/sympa
      wwsympa_url     https://ドメイン名またはIPアドレス/sympa
      
      
    • urlはきちんとhttp/httpsを指定する必要がある(画面遷移でログインしていないエラーとなる)
  • sympaを再起動する (※サービス稼働後の追加時のみ)
    # systemctl restart sympa
    
  • transport.sympaを編集する
    # vi /etc/sympa/transport.sympa
    -----------------------------
    ml.example.com                error:User unknown in recipient table
    sympa@ml.example.com          sympa:sympa@ml.example.com
    listmaster@ml.example.com     sympa:listmaster@ml.example.com
    bounce@ml.example.com         sympabounce:sympa@ml.example.com
    abuse-feedback-report@ml.example.com  sympabounce:sympa@ml.example.com
    
  • virtual.sympaを編集する
    # vi /etc/sympa/virtual.sympa
    -----------------------------
    sympa-request@ml.example.com  postmaster@localhost
    sympa-owner@ml.example.com    postmaster@localhost
    
  • データベースを更新する
    # postmap hash:/etc/sympa/transport.sympa
    # postmap hash:/etc/sympa/virtual.sympa
    
  • postfixを再起動する
    # systemctl restart postfix
    

HTTPサーバの設定

  • Sympa WebUIサービスの起動ユーザを編集します(デフォルトはnginx)
    # vi /etc/sysconfig/sympa
    -----------------------------
    # With sympa-httpd, uncomment folowing line.
    #FCGI_OPTS="-M 0600 -U apache" 
    FCGI_OPTS="-M 0600 -U apache" 
    
  • systemdの設定でmariadbのコメントを解除し優先順位を設定する
    vi /etc/systemd/system/sympa.service.d/dependencies.conf
    ------------------------------
    # Uncomment these lines if you use MariaDB service running on this host.
    Requires=mariadb.service
    After=mariadb.service
    
  • サービスを登録・起動します
    # systemctl enable wwsympa
    # systemctl start wwsympa
    
  • ApacheのSympaのアクセス権がローカルのみのため、全許可に変更する
    # vi /etc/httpd/conf.d/sympa.conf
    -----------------------------
        <Location /sympa>
            SetHandler fcgid-script
            # Don't forget to edit lines below!
            #Require local
            Require all granted
        </Location>
    
  • Apacheを登録・起動する
    # systemctl enable httpd
    # systemctl start httpd
    
  • sympaを登録・起動する
    # systemctl enable sympa
    # systemctl start sympa
    
  • ブラウザでセットアップ画面にアクセスする
    https://サーバのIPアドレス/sympa
    

初回ログイン

ログイン画面に移動し、「まだログインしたことがない」のリンクへ移動して
sympa.confに設定したlistmasterのメールアドレスを入力する。その後、
listmasterのメールアドレスにパスワード初期設定フォームのアドレスが発行される。

以上