CentOS 6.4 x86_64でVirtualhost対応Postfix+Dovecot+Mailmanの設定

タックス

以前、Virtualhost環境のPostfix+Dovecotの設定手順をご紹介しましたが、これに加えてMailmanの設定方法を検証してみましたところ、思いのほか苦労してしまいました。
検索すると、抜粋のみの紹介やそもそもうちのblogで紹介していた手順と違うなど、非常に分かりにくい手順ばかりでしたので、今回はCentOS 6のPostfix+Dovecotの設定とMailmanの設定も加えてご紹介したいと思います。
また、今回はRHEL 7で採用が決まったMariaDBをDBとして使用してみました。

    今回ご紹介するMailmanの設定方法はエイリアス設定となり、例えばwing@example1.jpとwing@example2.jpというドメインが違ってもメールマガジン名が同じものは設定できない仕様となっていますので、注意して設定して下さい。

  • 今回の検証環境

  • CentOS 6.4 x86_64
    Repository epel、wing
    Apache 2.4.4 (wing-extras)
    PHP 5.4.16 (wing-extras)
    MariaDB 5.5.31 (wing)
    Postfix 2.9.6 (wing)
    Dovecot 2.2.3 (wing)
    postfixadmin 2.3.6 (wing)
    Mailman 2.1.12

  • wingリポジトリ導入

  • RHEL6互換OS用 wingリポジトリ を公開

  • 事前準備

  • # yum -y install httpd mod_ssl php54
    事前にApache、SSL証明書、PHPの設定をして下さい。

  • MySQLのアンインストールとMariaDBのインストール

  • # rpm -e --nodeps mysql mysql-libs ※ 依存関係で不必要にパッケージが削除されないように。
    # yum -y install mysqlclient16 perl-DBD-MySQL mariadb-server
    # yum -y update ※ 念のためOS全体をアップデートしておきましょう。

  • 必要なパッケージをインストール

  • # yum -y install php54-mysql php54-imap php54-mbstring dovecot dovecot-mysql postfixadmin

  • vmailuserユーザを登録

  • # useradd vmailuser
    # passwd vmailuser

  • uid/gidの確認

  • # cat /etc/passwd
    vmailuser:x:uid:gid::/home/vmailuser:/bin/bash

    uidgidを確認する。

  • postfixの設定

  • # vi /etc/postfix/main.cf
    queue_directory = /var/spool/postfix
    command_directory = /usr/sbin
    daemon_directory = /usr/libexec/postfix
    data_directory = /var/lib/postfix
    mail_owner = postfix
    myhostname = example.jp
    mydomain = example.jp
    myorigin = $mydomain
    inet_interfaces = all
    mydestination = localhost
    unknown_local_recipient_reject_code = 550
    mynetworks_style = subnet
    mynetworks = 127.0.0.0/8
    home_mailbox = Maildir/
    smtpd_banner = $myhostname ESMTP unknown
    debug_peer_level = 2
    debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5
    sendmail_path = /usr/sbin/sendmail.postfix
    newaliases_path = /usr/bin/newaliases.postfix
    mailq_path = /usr/bin/mailq.postfix
    setgid_group = postdrop
    manpage_directory = /usr/share/man
    sample_directory = /etc/postfix
    alias_database = hash:/etc/aliases, hash:/etc/postfix/aliases
    alias_maps = hash:/etc/aliases, hash:/etc/postfix/aliases
    smtpd_client_restrictions = permit_mynetworks,check_client_access hash:/etc/postfix/access
    smtpd_sender_restrictions = permit_mynetworks,check_sender_access hash:/etc/postfix/access,reject_unknown_sender_domain
    smtpd_recipient_limit = 10
    smtpd_hard_error_limit = 10
    disable_vrfy_command = yes
    local_transport = virtual
    virtual_mailbox_base = /home/vmailuser
    virtual_alias_domains = $virtual_alias_maps
    virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
    virtual_minimum_uid = uid
    virtual_uid_maps = static:uid
    virtual_gid_maps = static:gid
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    inet_protocols = ipv4

    確認したuidgidを置き換えます。
    直接メールが送れない場合や25番ポートで送信できない場合はrelayhostを環境に合わせて設定して下さい。

    # vi /etc/postfix/master.cf
    #submission inet n       -       n       -       -       smtpd

    submission inet n - n - - smtpd

    # vi /etc/postfix/mysql_virtual_alias_maps.cf
    user = postfixadmin
    password = パスワード
    hosts = 127.0.0.1
    dbname = postfix
    query = SELECT goto FROM alias WHERE address='%s' AND active=true

    # vi /etc/postfix/mysql_virtual_domains_maps.cf
    user = postfixadmin
    password = パスワード
    hosts = 127.0.0.1
    dbname = postfix
    query = SELECT domain FROM domain WHERE domain='%s' AND backupmx=false AND active=true

    # vi /etc/postfix/mysql_virtual_mailbox_maps.cf
    user = postfixadmin
    password = パスワード
    hosts = 127.0.0.1
    dbname = postfix
    query = SELECT CONCAT(maildir,'Maildir/') FROM mailbox WHERE username='%s'

    # postmap /etc/postfix/access

  • dovecotの設定

  • # vi /etc/dovecot/dovecot.conf
    protocols = pop3
    listen = *
    !include conf.d/*.conf
    !include_try local.conf

    # vi /etc/dovecot/conf.d/10-auth.conf
    disable_plaintext_auth = no
    auth_mechanisms = plain login
    !include auth-sql.conf.ext

    # vi /etc/dovecot/conf.d/10-master.conf
    service auth {
    unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
    }
    }

    # vi /etc/dovecot/dovecot-sql.conf.ext
    driver = mysql
    connect = host=127.0.0.1 user=postfixadmin password=パスワード dbname=postfix
    default_pass_scheme = MD5-CRYPT
    password_query = SELECT username as user, password FROM mailbox WHERE username='%u' AND active=true
    user_query = SELECT CONCAT('/home/vmailuser/',maildir) AS home, uid AS uid, gid AS gid FROM mailbox WHERE username='%u' AND active=true

    確認したuidgidを置き換えます。

  • 自動起動の設定

  • # chkconfig mysqld on
    # chkconfig postfix on
    # chkconfig dovecot on
    # chkconfig saslauthd on

  • サービスの起動

  • # service mysqld start
    # service postfix start
    # service dovecot start
    # service saslauthd start

  • MySQLの設定

  • # mysql -uroot
    > SET PASSWORD FOR root@localhost=PASSWORD('パスワード');
    > CREATE DATABASE postfix;
    > CREATE USER 'postfixadmin'@'localhost' IDENTIFIED BY 'パスワード';
    > GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfixadmin'@'localhost';
    > exit;

  • httpdの設定

  • # vi /etc/httpd/conf.d/postfixadmin.conf
    #
    # Postfix Admin is a Web Based Management tool created for Postfix
    #

    Alias /postfixadmin /var/www/postfixadmin

    <Directory /var/www/postfixadmin/>
    Options None
    SSLRequireSSL
    <IfModule mod_authz_core.c>
    # httpd 2.4
    Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
    # httpd 2.2
    Order allow,deny
    Allow from all
    </IfModule>
    </Directory>

  • iptablesの設定

  • # vi /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -s -m tcp -p tcp --dport 25 -j ACCEPT
    -A INPUT -m state --state NEW -s -m tcp -p tcp --dport 80 -j ACCEPT
    -A INPUT -m state --state NEW -s -m tcp -p tcp --dport 110 -j ACCEPT
    -A INPUT -m state --state NEW -s -m tcp -p tcp --dport 443 -j ACCEPT
    -A INPUT -m state --state NEW -s -m tcp -p tcp --dport 587 -j ACCEPT

  • 自動起動の設定

  • # chkconfig httpd on

  • サービスの起動

  • # service httpd restart
    # service iptables restart

  • postfixadmin初期セットアップ

  • (1) /etc/postfixadmin/config.inc.phpの設定

    # vi /etc/postfixadmin/config.inc.php
    以下の項目のみ修正
    $CONF['configured'] = true;
    $CONF['setup_password'] = '';
    $CONF['default_language'] = 'ja';
    $CONF['database_type'] = 'mysql';
    $CONF['database_host'] = 'localhost';
    $CONF['database_user'] = 'postfixadmin';
    $CONF['database_password'] = 'パスワード';
    $CONF['database_name'] = 'postfix';
    $CONF['admin_email'] = 'admin@example.jp';
    $CONF['default_aliases'] = array (
    'abuse' => 'abuse@example.jp',
    'hostmaster' => 'hostmaster@example.jp',
    'postmaster' => 'postmaster@example.jp',
    'webmaster' => 'webmaster@example.jp'
    );
    $CONF['domain_path'] = 'YES';
    $CONF['domain_in_mailbox'] = 'NO';
    $CONF['alias_control'] = 'YES';
    $CONF['alias_control_admin'] = 'YES';
    $CONF['fetchmail'] = 'NO';
    $CONF['user_footer_link'] = "main.php";
    $CONF['show_footer_text'] = 'NO';
    $CONF['emailcheck_resolve_domain']='NO';

    (2) 初期セットアップを開始する https://example.jp/postfixadmin/setup.php
    (3) Change setup passwordを入力。
    (4) 画面に表示された、$CONF['setup_password']を、config.inc.phpに記載する。

    # vi /var/www/postfixadmin/config.inc.php
    $CONF['setup_password'] = '~';

    (5) Create superadmin accountで管理者を追加する。
    (6) 「管理者を追加しました。」が表示されればOK
    (7) setup.phpを他のディレクトリに移動し、アクセスされないようにする。

    # mv setup.php ../

  • Postfixadminにログインし、アカウントを作成する。

  • (1) http://example.jp/postfixadmin/にアクセスする。
    (2) 新しいドメインを作成。
    (3) アドレスの追加。
    (4) メールソフトで、送受信できることを確認。(SMTP認証=あり、SMTPポート=587、アカウント=メールアドレスで設定)

    ※ Mailmanを設定しない場合はここまで

  • Mailmanのインストール

  • # yum -y install mailman

  • mailmanの設定

  • # vi /etc/mailman/mm_cfg.py
    DEFAULT_URL_HOST   = fqdn
    DEFAULT_EMAIL_HOST = fqdn
    add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)

    #DEFAULT_URL_HOST = fqdn
    #DEFAULT_EMAIL_HOST = fqdn
    #add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
    以下追加
    MTA = 'Postfix'
    POSTFIX_ALIAS_CMD = '/usr/sbin/postalias'
    POSTFIX_MAP_CMD = '/usr/sbin/postmap'
    POSTFIX_STYLE_VIRTUAL_DOMAINS = ['example.jp']
    add_virtualhost('example.jp','example.jp')
    DEFAULT_SERVER_LANGUAGE = 'ja'
    DEFAULT_URL_PATTERN = 'https://%s/mailman/'
    DEFAULT_LIST_ADVERTISED = No
    OWNERS_CAN_DELETE_THEIR_OWN_LISTS = Yes
    DEFAULT_SUBJECT_PREFIX = "[%(real_name)s:%%05d] "
    DEFAULT_REPLY_GOES_TO_LIST = 1
    DEFAULT_GENERIC_NONMEMBER_ACTION = 2
    DEFAULT_REQUIRE_EXPLICIT_DESTINATION = No
    DEFAULT_MSG_FOOTER = ''

  • Webの管理画面で使用するMailmanの管理者パスワードを設定

  • # /usr/lib/mailman/bin/mmsitepass パスワード

  • aliasファイルの作成

  • # touch /etc/mailman/virtual-mailman
    # chown apache:mailman /etc/mailman/virtual-mailman
    # /usr/lib/mailman/bin/genaliases
    # chmod 660 /etc/mailman/aliases
    # chmod 660 /etc/mailman/virtual-mailman
    # chmod 666 /etc/mailman/*.db

  • Postfixの設定

  • # vi /etc/postfix/main.cf
    queue_directory = /var/spool/postfix
    command_directory = /usr/sbin
    daemon_directory = /usr/libexec/postfix
    data_directory = /var/lib/postfix
    mail_owner = postfix
    myhostname = example.jp
    mydomain = example.jp
    myorigin = $mydomain
    inet_interfaces = all
    mydestination = localhost
    unknown_local_recipient_reject_code = 550
    mynetworks_style = subnet
    mynetworks = 127.0.0.0/8
    home_mailbox = Maildir/
    smtpd_banner = ESMTP unknown
    debug_peer_level = 2
    debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5
    sendmail_path = /usr/sbin/sendmail.postfix
    newaliases_path = /usr/bin/newaliases.postfix
    mailq_path = /usr/bin/mailq.postfix
    setgid_group = postdrop
    manpage_directory = /usr/share/man
    sample_directory = /etc/postfix
    alias_database = hash:/etc/aliases, hash:/etc/postfix/aliases
    alias_maps = hash:/etc/aliases, hash:/etc/postfix/aliases, hash:/etc/mailman/aliases
    smtpd_client_restrictions = permit_mynetworks,check_client_access hash:/etc/postfix/access
    smtpd_sender_restrictions = permit_mynetworks,check_sender_access hash:/etc/postfix/access,reject_unknown_sender_domain
    smtpd_recipient_limit = 10
    smtpd_hard_error_limit = 10
    disable_vrfy_command = yes
    local_transport = virtual
    virtual_alias_domains = $virtual_alias_maps
    virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf, hash:/etc/mailman/virtual-mailman
    virtual_mailbox_base = /home/vmailuser
    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
    virtual_minimum_uid = uid
    virtual_uid_maps = static:uid
    virtual_gid_maps = static:gid
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    inet_protocols = ipv4
    owner_request_special = no
    recipient_delimiter = +
    transport_maps = hash:/etc/mailman/transport

    確認したuidgidを置き換えます。

    # vi /etc/mailman/transport
    mailman@example.jp              local:
    mailman-admin@example.jp local:
    mailman-bounces@example.jp local:
    mailman-confirm@example.jp local:
    mailman-join@example.jp local:
    mailman-leave@example.jp local:
    mailman-owner@example.jp local:
    mailman-request@example.jp local:
    mailman-subscribe@example.jp local:
    mailman-unsubscribe@example.jp local:

    # postmap /etc/mailman/transport
    # chmod 666 /etc/mailman/transport*

    # service postfix restart

  • 管理者用メーリングリストの作成

  • # /usr/lib/mailman/bin/newlist mailman
    リスト管理者のメールアドレスを入力してください: 実在するメールアドレス
    mailman の初期パスワード: パスワード
    Enter を押して mailman の管理者にメール通知する... Enterキー

  • Mailmanの自動起動と起動の設定

  • # chkconfig mailman on
    # service mailman start

  • Apacheの設定

  • # vi /etc/httpd/conf.d/mailman.conf
    #
    # httpd configuration settings for use with mailman.
    #

    ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
    <Directory /usr/lib/mailman/cgi-bin/>
    AllowOverride None
    Options ExecCGI
    <IfModule mod_authz_core.c>
    # httpd 2.4
    Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
    # httpd 2.2
    Order allow,deny
    Allow from all
    </IfModule>
    </Directory>

    Alias /pipermail/ /var/lib/mailman/archives/public/
    <Directory /var/lib/mailman/archives/public>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    AddDefaultCharset Off
    <IfModule mod_authz_core.c>
    # httpd 2.4
    Require all granted
    </IfModule>
    <IfModule !mod_authz_core.c>
    # httpd 2.2
    Order allow,deny
    Allow from all
    </IfModule>
    </Directory>

    # Uncomment the following line, to redirect queries to /mailman to the
    # listinfo page (recommended).

    # RedirectMatch ^/mailman[/]*$ /mailman/listinfo

    # service httpd restart

  • メーリングリストの作り方

  • (1) https://example.jp/mailman/listinfo にアクセスします。
    (2) 「リスト管理一覧ページ」をクリックします。
    (3) 「新しいメーリングリストを作成する」をクリックします。
    (4) メーリングリストを作成します。
    (「リスト作成用の認証パスワード」は管理パスワードを入力)
    (5) 「リスト管理ページへ行く」をクリックします。
    (6) 「(メーリングリスト名) 管理用ページ」をクリックします。
    (7) 「新しいメーリングリスト: (メーリングリスト名)」のメールに書かれたパスワードでログイン。
    (8) 「会員管理」をクリックします。
    (9) 「まとめて入会登録」をクリックします。
    (10) MLのメンバーのメールアドレスを登録します。
    (11) transportに以下の設定を追加します。

    # vi /etc/mailman/transport
    mlname@example.jp              local:
    mlname-admin@example.jp local:
    mlname-bounces@example.jp local:
    mlname-confirm@example.jp local:
    mlname-join@example.jp local:
    mlname-leave@example.jp local:
    mlname-owner@example.jp local:
    mlname-request@example.jp local:
    mlname-subscribe@example.jp local:
    mlname-unsubscribe@example.jp local:

    # postmap /etc/mailman/transport

    (12) MLに投稿できることを確認します。

  • その他

  • メーリングリスト一覧の確認
    # /usr/lib/mailman/bin/list_lists

    メーリングリストの削除
    # /usr/lib/mailman/bin/rmlist -a メーリングリスト名

    /usr/lib/mailman/binにpathを設定する。
    # vi ~/.bashrc
    PATH=$PATH:/usr/lib/mailman/bin
    export PATH

    # source ~/.bashrc
    # list_lists

    以上です。
    transportを設定しなければいけないことに結構悩みました。
    もっとスマートに行ける方法がありましたら、アドバイス頂けると幸いです。
    あとCentOS 5ですが、MariaDBのところをMySQLに置き換えれば、CentOS 5でも同じように設定が可能と思います。
    一度お試し下さい。

    以下、参考リンクです。

    Wikipedia(Linux)
    Wikipedia(CentOS)
    Wikipedia(SMTP)
    Wikipedia(Outbound Port 25 Blocking)
    Wikipedia(Simple Authentication and Security Layer)
    Wikipedia(Postfix)
    Wikipedia(Dovecot)
    Wikipedia(MariaDB)
    Wikipedia(Mailman)

関連記事


FC2Blog Rankingblogram投票ボタンとれまが人気ブログランキングブログランキング・にほんブログ村へ
くる天 人気ブログランキングにほんブログ村 IT技術ブログ CentOSへ

テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

WING☆

Author:WING☆


カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
お問い合わせ

名前:
メール:
件名:
本文:

WING☆からのお知らせ
  • CentOS 7設定集
  •    └wingリポジトリ(el7)

  • CentOS 6 x64設定集
  •    └wingリポジトリ(el6)

  • CentOS 5 x64設定集
  •    └wingリポジトリ(el5)



    My Yahoo!に追加

    FC2ブログランキング



    リンク
    ブロとも一覧
    Virtualization & Sever Maniax
    RSSリンクの表示
    QRコード
    QRコード
    ブロとも申請フォーム

    この人とブロともになる