スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CentOS 5.6 x64のPostfixでバーチャルホストを設定(SMTP AUTH対応)

タックス

久々に設定関連ネタです。
今回はCentOS 5.6になりましたので、最新のPostgreSQL84、PHP53を利用してバーチャルホスト/SMTP AUTH認証対応のPostfix、Dovecotの設定を公開したいと思います。

    設定要件は以下のとおり。

    ・バーチャルホスト(マルチドメイン)対応
    ・SMTP AUTHに対応。
    ・認証にはSASLを使用。
    ・Outbound Port 25 Blocking対応は自身のISPのSMTPサーバをリレーするよう設定。
    ・ドメイン、メールアドレスの管理はpostfixadmin+PostgreSQLを使用する。

    また、パッケージ構成は以下のとおりです。

    ・postfix-2.6.7-1.el5_1.wing (wingリポジトリ)
    ・cyrus-sasl-2.1.22-5.el5_4.3
    ・cyrus-sasl-lib-2.1.22-5.el5_4.3
    ・dovecot-1.2.13-1.el5_0.wing (wingリポジトリ)
    ・dovecot-pgsql-1.2.13-1.el5_0.wing (wingリポジトリ)
    ・php53-5.3.6-2.el5_2.wing.1 (wingリポジトリ)
    ・php53-pgsql-5.3.6-2.el5_2.wing.1 (wingリポジトリ)
    ・php53-imap-5.3.6-2.el5_2.wing.1 (wingリポジトリ)
    ・postgresql84-8.4.7-1.el5_6.1
    ・postgresql84-libs-8.4.7-1.el5_6.1
    ・postgresql84-server-8.4.7-1.el5_6.1
    ・postfixadmin-2.3.3-2.el5_2.wing (wingリポジトリ)

    ※ Postfix 2.8.2、Dovecot 1.2.16でも動作確認しました。(2011/5/6)
    ※ Postfix 2.6.9、Dovecot 1.2.16でも動作確認しました。(2011/5/5)

    この構成では、php53、postfix、dovecot、postfixadminをwingリポジトリのものを使用し、postgresqlは最新のpostgresql84パッケージを使用しました。

    では、以下に手順を紹介しますので、参考にして下さい。


  • バーチャルユーザー用メールボックスユーザーの追加

  • # useradd vmailuser
    # passwd vmailuser
    (パスワードを入力する。)

    # less /etc/passwd
    vmailuser:x:(uid):(gid)::/home/vmailuser:/bin/bash

    ((uid)(gid)をメモしておく)

  • 各パッケージのインストール確認

  • # rpm -q dovecot dovecot-pgsql cyrus-sasl cyrus-sasl-lib postgresql postgresql-server postfixadmin php php-pgsql php-imap phpPgAdmin postfix

  • 念のためPostfixが入っていれば停止する

  • # service postfix stop

    Postfixが入っていなければインストールする。
    # yum -y install postfix
    # alternatives --config mta
    (2番を選択し、SendmailからPostfixに切り替える)

  • postgresql 8.1.xやphp 5.1.6(旧パッケージ)のアンインストール

  • # yum remove postgresql postgresql-server php php-cli php-common

  • Dovecot、cyrus-sasl、Postgresql 8.4.x、その他必要なパッケージをインストール

  • # yum -y install dovecot dovecot-pgsql cyrus-sasl cyrus-sasl-lib postgresql84 postgresql84-server postfixadmin php53 php53-pgsql php53-imap phpPgAdmin

  • php.iniのタイムゾーンの設定

  • # vi /etc/php.ini
    ;date.timezone =

    date.timezone = Asia/Tokyo

  • main.cf(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 = smtp.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
    relayhost = [ISPのSMTPサーバ名]
    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
    html_directory = /usr/share/doc/postfix-2.6.9-documentation/html
    manpage_directory = /usr/share/man
    sample_directory = /etc/postfix
    readme_directory = /usr/share/doc/postfix-2.6.9-documentation/readme
    alias_database = hash:/etc/postfix/aliases
    alias_maps = 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_maps = pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
    virtual_alias_domains = $virtual_alias_maps
    virtual_mailbox_domains = pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
    virtual_mailbox_maps = pgsql:/etc/postfix/pgsql_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
    # Enable IPv4, and IPv6 if supported
    inet_protocols = ipv4

    上記そのままファイルに書き出しても良いです。

  • master.cf(Postfix)の設定

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

    submission inet n - n - - smtpd

  • 送信元メールドメインの登録(必要に応じて)

  • # vi /etc/postfix/access
    example.jp	OK
    example2.jp REJECT

    # postmap hash:/etc/postfix/access

  • postfixadmin対応の設定

  • # vi /etc/postfix/pgsql_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/pgsql_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/pgsql_virtual_mailbox_maps.cf
    user = postfixadmin
    password = (パスワード)
    hosts = 127.0.0.1
    dbname = postfix
    query = SELECT maildir||'Maildir/' FROM mailbox WHERE username='%s'

  • Dovecotの設定

  • # vi /etc/dovecot.conf
    #protocols = imap imaps pop3 pop3s

    protocols = pop3 pop3s

    # SQL database
    #passdb sql {
    # Path for SQL configuration file, see doc/dovecot-sql-example.conf
    #args =
    #}

    passdb sql {
    args = /etc/dovecot/dovecot-sql-pgsql.conf
    }

    # SQL database
    #userdb sql {
    # Path for SQL configuration file, see doc/dovecot-sql-example.conf
    #args =
    #}

    userdb sql {
    args = /etc/dovecot/dovecot-sql-pgsql.conf
    }

    auth default {
    # Space separated list of wanted authentication mechanisms:
    # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
    # NOTE: See also disable_plaintext_auth setting.
    mechanisms = plain

    auth default {
    # Space separated list of wanted authentication mechanisms:
    # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
    # NOTE: See also disable_plaintext_auth setting.
    mechanisms = plain login

    passdb pam {
    :
    :
    }

    #passdb pam {
    :
    :
    #}

    #socket listen {
    #master {
    # Master socket provides access to userdb information. It's typically
    # used to give Dovecot's local delivery agent access to userdb so it
    # can find mailbox locations.
    #path = /var/run/dovecot/auth-master
    #mode = 0600
    # Default user/group is the one who started dovecot-auth (root)
    #user =
    #group =
    #}
    #client {
    # The client socket is generally safe to export to everyone. Typical use
    # is to export it to your SMTP server so it can do SMTP AUTH lookups
    # using it.
    #path = /var/run/dovecot/auth-client
    #mode = 0660
    #}
    #}

    socket listen {
    #master {
    # Master socket provides access to userdb information. It's typically
    # used to give Dovecot's local delivery agent access to userdb so it
    # can find mailbox locations.
    #path = /var/run/dovecot/auth-master
    #mode = 0600
    # Default user/group is the one who started dovecot-auth (root)
    #user =
    #group =
    #}
    client {
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = postfix
    group = postfix
    }
    }

    # mkdir /etc/dovecot
    # vi /etc/dovecot/dovecot-sql-pgsql.conf
    driver = pgsql
    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 '/home/vmailuser/'||maildir AS home, (uid) AS uid, (gid) AS gid FROM mailbox WHERE username='%u' AND active=true

  • Postgresqlの設定

  • # service postgresql status
    postgresqlが起動していないことを確認。

    # cd /var/lib/pgsql/data
    # rm -rf ./*
    # cd
    # su - postgres
    $ initdb
    $ vi /var/lib/pgsql/data/pg_hba.conf
    # IPv4 local connections:
    host all all 127.0.0.1/32 trust

    host postfix postfixadmin 127.0.0.1/32 md5
    host all all 127.0.0.1/32 md5

    $ exit
    # service postgresql start
    # su - postgres
    $ psql
    postgres=# CREATE ROLE postfixadmin WITH LOGIN PASSWORD '(パスワード)';
    postgres=# CREATE DATABASE postfix OWNER postfixadmin ENCODING 'UTF8';
    postgres=# \q
    $ createlang plpgsql postfix
    $ exit

  • postfixadminの設定

  • # vi /var/www/postfixadmin/config.inc.php
    $CONF['configured'] = true;
    $CONF['setup_password'] = '';
    $CONF['default_language'] = 'ja';
    $CONF['database_type'] = 'pgsql';
    $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';

    # vi /var/www/postfixadmin/backup.php
    # 以下一行だけ追加
    session_cache_limiter('public');
    require_once('common.php');

  • 各サービスの起動設定と起動

  • # chkconfig postgresql on
    # chkconfig saslauthd on
    # chkconfig postfix on
    # chkconfig dovecot on

    # service postgresql restart
    # service saslauthd restart
    # service postfix restart
    # service dovecot restart

    # service httpd restart

  • iptablesへ25と110と587ポートの許可を追加

  • # vi /etc/sysconfig/iptables
    -A INPUT -p tcp --dport 25 -j ACCEPT
    -A INPUT -p tcp --dport 110 -j ACCEPT
    -A INPUT -p tcp --dport 587 -j ACCEPT

    # service iptables restart

  • postfixadmin初期セットアップ

  • 1. 初期セットアップを開始する http://www.example.jp/postfixadmin/setup.php
    2. Change setup passwordを入力。
    3. 画面に表示された、$CONF['setup_password']を、config.inc.phpに記載する。
    # vi /var/www/postfixadmin/config.inc.php
    $CONF['setup_password'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

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

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

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


    以上が設定方法です。
    以前、wingリポジトリで配布していますPostfixで、SASL認証が使えない等の報告を頂いておりましたので、あえてPostfix、Dovecotの最新rpmの公開を控えておりましたが、検証した結果問題無くできましたので、引き続き最新版のrpmを公開していこうと思ってます。
    また、Apacheのバーチャルホストの設定と併用することで、第3者にWeb、FTP、Mailの3つのサービスを提供することができます。

    CentOS 5.3 x64のApacheでバーチャルホストを設定 - にわかSEの独り言

    一度、お試しくださいませ。

    以下、参考リンクです。

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

関連記事


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

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

コメントの投稿

非公開コメント

プロフィール

WING☆

Author:WING☆


カレンダー
10 | 2017/11 | 12
- - - 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コード
    ブロとも申請フォーム

    この人とブロともになる

    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。