プロジェクト

全般

プロフィール

Sympaメーリングリストサーバの構築

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

環境の準備

  • 必要なソフトウェアをインストールします
    # yum install httpd mod_ssl mariadb-server postfix dovecot wget mailx telnet
    
  • epelリポジトリおよびepel系パッケージをインストールします
    # yum install epel-release
    # yum install spawn-fcgi
    
  • テスト用ユーザを作成します
    # useradd test
    # passwd test
    ユーザー test のパスワードを変更。
    新しいパスワード:
    新しいパスワードを再入力してください:
    passwd: すべての認証トークンが正しく更新できました。
    

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/
    
  • サービスの登録・起動を行う
    # systemctl enable postfix
    # systemctl start postfix
    
  • メール送信のテストを行う
    # mail test@example.com
    Subject: test
    test
    .
    EOT
    
  • メール受信のテストを行う
    # su - test
    $ mail -f ~/Maildir
    Heirloom Mail version 12.5 7/5/10.  Type ? for help.
    "/home/test/Maildir": 1 message 1 new
    >N  1 root                  Tue Jul 17 12:47  17/514   "test" 
    & quit
    "/home/test/Maildir" complete
    $ exit
    

Dovecotの設定

  • サービス設定
    # vi /etc/dovecot/dovecot.conf
    -----------------------------
    #protocols = imap pop3 lmtp
    protocols = imap
    
  • 認証設定
    # vi /etc/dovecot/conf.d/10-auth.conf
    -----------------------------
    disable_plaintext_auth = no
    
  • 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 test 設定したパスワード
    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リポジトリをダウンロード・配置します
    # wget http://sympa-ja.org/download/rhel/sympa-ja.org.rhel.repo
    # mv sympa-ja.org.rhel.repo /etc/yum.repos.d/
    
  • リポジトリのキャッシュを更新します
    # yum makecache
    
  • Sympaのインストール
    # yum install sympa sympa-httpd perl-DBI perl-DBD-MySQL
    
  • SympaのエイリアスDBを再作成する
    # rm /var/lib/sympa/sympa_aliases.db
    # chown root.root /var/lib/sympa/sympa_aliases
    # postalias /var/lib/sympa/sympa_aliases
    # chown sympa.sympa /var/lib/sympa/sympa_aliases
    # chown sympa.root /var/lib/sympa/sympa_aliases.db
    

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

  • MariaDBの設定に下記を追加する
    # vi /etc/my.cnf
    -----------------------------
    [mysqld]
    character-set-server = utf8
    
    [client]
    default-character-set = utf8
    
  • 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_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 [sympa-test.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-JP
    
    * 対応言語
      ... ユーザインタフェースが対応する言語全て。適切な翻訳カタログがインストール
      されていないものは無視されます。
    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] : http://mail.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の設定を行う
    # vi /etc/rsyslog.conf
    -----------------------------
    # Sympa
    local1.* /var/log/sympa.log
    
  • rsyslogをリロードする
    # systemctl restart rsyslog
    
  • ログ出力のテスト
    # perl /usr/share/sympa/bin/testlogs.pl
    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
    Jul 20 16:42:33 sympa-test sympa/testlogs[11030]: info main:: Logs seems OK, default log level 0
    

Sympa、Postfix連携設定

  • aliasesファイルの編集
    # vi /etc/sympa/aliases.sympa.postfix
    -----------------------------
    viで「:%s/my.domain.org/example.com/g」を実行(一括置換)
    
  • aliasesファイルの更新
    # postalias hash:/etc/sympa/aliases.sympa.postfix
    
  • エイリアスの更新
    # sympa_newaliases.pl
    
  • postfix側の設定変更
    # vi /etc/postfix/main.cf
    -----------------------------
    #alias_maps = dbm:/etc/aliases
    #alias_maps = hash:/etc/aliases
    #alias_maps = hash:/etc/aliases, nis:mail.aliases
    #alias_maps = netinfo:/aliases
    alias_maps = hash:/etc/aliases, hash:/etc/sympa/aliases.sympa.postfix, hash:/var/lib/sympa/sympa_aliases
    
    #alias_database = dbm:/etc/aliases
    #alias_database = dbm:/etc/mail/aliases
    #alias_database = hash:/etc/aliases
    #alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
    alias_database = hash:/etc/aliases, hash:/etc/sympa/aliases.sympa.postfix
    
    #recipient_delimiter = +
    recipient_delimiter = +
    
  • Postfixをリロードする
    # systemctl restart postfix
    

HTTPサーバの設定

  • サービス起動スクリプトをダウンロード、配置します
    # wget https://sympa-community.github.io/manual/examples/systemd/wwsympa.service
    # mv wwsympa.service /usr/lib/systemd/system
    
  • サービス起動スクリプトを編集します
    # vi /usr/lib/systemd/system/wwsympa.service
    -----------------------------
    #Environment="FCGI_OPTS=-s /var/run/sympa/wwsympa.socket -M 0600 -U nginx" 
    Environment="FCGI_OPTS=-s /var/run/sympa/wwsympa.socket -M 0600 -U apache" 
    
  • サービスを登録・起動します
    # 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のメールアドレスにパスワード初期設定フォームのアドレスが発行される。

以上