当サイトをご利用頂き有難うございます。
当サイトは今月末日にモールタイプの総合検索サイトへリニューアルの予定です。
サイト名も変更となりますが、今後とも宜しくお願いいたします。

CentOS5で自宅サーバー構築(Postfix Admin)

| コメント(3) | トラックバック(0)

既にCUI型で稼動しているメールサーバに管理効率化のため、
Postfix Admin を搭載し構築し直します。
これによりバーチャルドメイン対応でのメール運用がGUI化され、
Webブラウザより楽に運用可能となります。

初めてメールサーバを稼動させる場合はCUI型のFedora10(メールサーバー)も参考に構築します。

Postfix Admin はおおまかですが下記のような事がWebブウウザから操作出来ます。

  ・ ドメインの追加、変更、削除
  ・ メールアカウントやパスワード、転送設定等の追加、変更、削除

また、現在稼動しているデフォルトでのPostfixはMySQLに対応していないので、
MySQLに対応するように再構築します
更に、通信の暗号化対策としてSSLを運用します。


再構築後の動作環境

 Postfix(今回MySQL対応に再構築) + Dovecot + MySQL
                   + Apache + PHP + SSL + Postfix Admin


①PostfixAdminが使用するデータベース作成 

    # mysql -u ユーザ名 -p パスワード(例: mysql -u root -p mysql )
                     →  MySQLへログイン

     mysql> create database postfix;
                     →  postfix データベース作成(環境により名前は変更)

     mysql> use postfix;   → postfix デーダースへ接続

     mysql> grant all privileges on postfix.* to abc@localhost identified by 'パスワード';
                     → ユーザabcに全ての権限を付与しパスワードを設定

     mysql> exit;

②PostfixAdmin用のバーチャルドメインユーザーと専用ディレクトリを作成

     * PostfixAdminでは、データベース化されたユーザーにメールを配送します。

    # groupadd -g 10000 vuser
    # useradd -g vuser -u 10000 vuser
    # mkdir /home/mailvirtual
    # chown vuser:vuser /home/mailvirtual
    # chmod 771 /home/mailvirtual


③postfixをMySQLに対応させる

      * postfixのデフォルトパッケージはMySQLに対応していません。

    # cd /usr/local/src/  →  で作業します。
    # wget http://ftp.riken.jp/Linux/centos/5.2/os/SRPMS/postfix-2.3.3-2.src.rpm
    # mkdir -p /usr/src/redhat/SOURCES  →  SOURCESは大文字で!!
    # rpm -ihv postfix-2.3.3-2.src.rpm

      * 「警告:mockbuild は存在しません -root を使用します」と出ますが、
         ユーザー名 mockbuild が存在しないというだけで影響無いので無視します。

    #cd /usr/src/redhat/SOURCES
    # wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
    # gunzip postfix-2.3.3-vda.patch.gz

    # cd /usr/src/redhat/SPECS/
    # cp postfix.spec postfix.spec.df  →  コピーしておきます。
    # vi postfix.spec  →  MySQLを有効にする設定とパッチの追加設定を行います。

      %define MYSQL 0  →  %define MYSQL 1 に変更 
         (省略)
      Patch10: postfix-2.3.3-vda.patch  →  追加
         (省略)
      %patch10 -p1 -b .vda  →  追加

    # yum -y install rpm-build db4-devel zlib-devel openldap-devel cyrus-sasl-devel pcre-devel mysql-devel openssl-devel
                       →  Postfixをリビルドする準備をします。(必要なものだけ)

       * リビルドするには下記パッケージが必要となります。

           # yum list | grep ファイル名(名前の一部でも可)

         としてインストール対象の確認をします。
              (installedと出たものは既にインストールされています。)

             ・ gcc
             ・ rpm-build
             ・ pkgconfig
             ・ db4-devel
             ・ zlib-devel
             ・ openldap-devel
             ・ cyrus-sasl-devel
             ・ pcre-devel
             ・ mysql-devel
             ・ openssl-devel


    # rpmbuild -ba postfix.spec  →  パッチをあてPostfixをリビルドします。

      * 暫し、先達たちの開発者に感謝しながら待ちます。

    # rpm -e postfix-2.3.3-2.1.el5_2  →  既にあるpostfixをアンインストールします。

      * 先の構築によりインストールしたpostfix関連のファイルで編集したものは、
                   xxx.xxx.rpmsave として保存されます。(同一ディレクトリ)

    # rpm -Uhv /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.i386.rpm
                    →  出来上がったMySQL対応のpostfixをインストールします。

      * rpm -Uhv --force /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.i386.rpm
        とすれば同一バージョンの場合はアンインストールとインストールが続けて行われます。

    # yum list | grep postfix  →  バージョンが変わっていることを確認。

    # vi /etc/yum.conf  →  postfixを自動アップデートしないように設定します。
                             (ここを飛ばすと後で大変なことになります。)

      exclude=postfix*  →  最後の行に追加

    # chkconfig sendmail off  →  sendmail の自動起動を停止
    # chkconfig postfix on  →  postfix の自動起動を開始


④バーチャル対応Postfixの設定(main.cfの編集)---右端の数値はおおよその行番号

      * postfixをアンインストールしたので新規の作成になります。
      * セーブ版より全コピーし修正すると間違いが発生する可能性大なので、
        ここは新規に作成としましょう。部分的に旧と同じところは、
                              rpmsave版 よりコピーします。

    # cd /etc/pki/tls/certs/
    # make mail.pem →  環境にあわせます。
    # /etc/postfix/main.cf

      myhostname = mail.abc.xyz.com →  追加71
      mydomain = abc.xyz.com →  追加79
      myorigin = $mydomain →  修正(アンコメント削除;必ず追加します)95 
      myorigin = $myhostname →  修正(アンコメント削除)96
      inet_interfaces = all →  修正(アンコメント削除)114
      #inet_interfaces = localhost →  修正(アンコメント追加)115
      #mydestination = $myhostname, localhost.$mydomain, localhost
                                   →  修正(アンコメント追加)159
     mydestination =
        →  空を追加(仮想サイトに登録したアドレス宛以外は受けない様にします。)163

      mynetworks = 192.168.0.0/24, 127.0.0.0/8 →  追加263
       relay_domains = $mydestination →  修正(アンコメント削除)294
      home_mailbox = Maildir/ →  修正(アンコメント削除)418
      smtpd_banner = $myhostname ESMTP unknown →  追加570
      #sendmail_path = /usr/sbin/sendmail.postfix →  修正(アンコメント追加)643
      sendmail_path = /usr/sbin/sendmail →  追加(CGIの挙動合わせ)644


----------------- 追加 ------------------------

     local_transport = virtual
     virtual_transport = virtual
     virtual_mailbox_base = /home/mailvirtual →  環境にあわせます。
     virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
     virtual_alias_domains = $virtual_alias_maps
     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 = 10000 →  環境にあわせます。
     virtual_uid_maps = static:10000 →  環境にあわせます。
     virtual_gid_maps = static:10000 →  環境にあわせます。

     smtpd_sasl_auth_enable = yes
     smtpd_sasl_type = dovecot
     smtpd_sasl_path = private/auth
     smtpd_sasl_local_domain = $myhostname
     smtpd_client_restrictions = reject_rbl_client bl.spamcop.net
                                       →  環境にあわせます。
     smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
     smtpd_sasl_security_options = noanonymous
     broken_sasl_auth_clients = yes

     smtpd_use_tls = yes
     smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem →  環境にあわせます。
     smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem →  環境にあわせます。
     smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
     tls_daemon_random_source = dev:/dev/urandom

----------------------------------------------------


⑤PostfixにあわせMySQL認証用ファイルを作成

    # vi /etc/postfix/mysql_virtual_alias_maps.cf

     user = abc
     password = ********
     hosts = localhost
     dbname = postfix
     table = alias
     select_field = goto
     where_field = address


    # vi /etc/postfix/mysql_virtual_domains_maps.cf

     user = abc
     password = ********
     hosts = localhost
     dbname = postfix
     table = domains
     select_field = domains
     where_field = domains
     additional_conditions = and active = '1'


    # vi /etc/postfix/mysql_virtual_mailbox_maps.cf

     user = abc
     password = ********
     hosts = localhost
     dbname = postfix
     table = mailbox
     select_field = maildir
     where_field = username


⑥MySQL用設定ファイル作成

    # vi /etc/dovecot-mysql.conf

     driver = mysql
     default_pass_scheme = PLAIN
     connect = dbname=postfix user=abc host=/var/lib/mysql/mysql.sock password=********
        →  環境にあわせ user host password を設定します。

     password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
     user_query = SELECT concat('/home/mailvirtual/', maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = '%u' AND active = '1'


⑦TLS セッションキャッシュマネージャの設定(master.cf の編集)

     * SSLの利用に必要です。

    # vi /etc/postfix/master.cf

      submission inet n - n - - smtpd  →  アンコメントを外します。
      smtps inet n - n - - smtpd  →  アンコメントを外します。
      -o smtpd_tls_wrappermode=yes  →  アンコメントを外します。
      -o smtpd_sasl_auth_enable=yes  →  アンコメントを外します。


⑧Dovecot の設定(dovecot.confの編集)

    # cd /etc/pki/tls/certs/
    # make mail.pem  →  鍵を作成します。
    # openssl x509 -in mail.pem -outform DER -out mail.der
                    →  クライアント向けインポート用サーバー証明書作成
    # cp /etc/dovecot.conf /etc/dovecot.conf.save
    # vi /etc/dovecot.conf

----------------- 修正内容--右端の数値はおおよその行番号--------------------------------

      protocols = imap imaps pop3 pop3s  →  変更(アンコメントを外す)20
      listen = [::]  →  変更(アンコメントを外す)39
      log_path = /var/log/dovecot.log  →  変更(アンコメントを外しパス追加)61
      ssl_disable = no  →  変更(アンコメントを外す。disable+no = yes。へんなの!!)85
      ssl_cert_file = /etc/pki/tls/certs/mail.pem  →  変更(追加。鍵ファイルを指定)93
      ssl_key_file = /etc/pki/tls/certs/mail.pem  →  変更(追加。鍵ファイルを指定)94
      verbose_ssl = yes  →  変更(アンコメントを外しno→yes;ログ解析用)119
      mail_location = maildir:/home/mailvirtual/%d/%u  →  変更(追加)213
      first_valid_uid = 10000  →  変更(アンコメントを外し数値は環境に合わせ変更)330
      first_valid_gid = 10000  →  変更(アンコメントを外し数値は環境に合わせ変更)338
      protocol pop3 {  →  変更しません。575
       pop3_uidl_format = %08Xu%08Xv  →  変更(アンコメントを外す)626
      } →  変更しません。652
      auth_verbose = yes  →  変更(アンコメントを外しno→yes;ログ解析用)740
      auth_debug = yes  →  変更(アンコメントを外しno→yes;ログ解析用)745
      auth_debug_passwords = yes  →  変更(アンコメントを外しno→yes;ログ解析用)750 
      auth default {  →  そのまま。762
       #mechanisms = plain  →  変更(アンコメントを付ける)766
       mechanisms = plain login digest-md5 cram-md5 apop  →  追加771
       passdb pam {  →  そのまま。805
       }  →  そのまま。838
       passdb sql {  →  変更(アンコメントを外す)879
       args = /etc/dovecot-mysql.conf  →  変更(アンコメントを外しパス追加)881
       }  →  変更(アンコメントを外す)882
       userdb passwd {  →  そのまま。906
       }  →  そのまま。913
       userdb sql {  →  変更(アンコメントを外す)940
       args = /etc/dovecot-mysql.conf  →  変更(アンコメントを外しパス追加)942
       }  →  変更(アンコメントを外す)943
       socket listen {  →  変更(アンコメントを外す)988
       client {  →  変更(アンコメントを外す)999
       path = /var/spool/postfix/private/auth  →  追加(authは自動的に生成される)999
       mode = 0660  →  変更(アンコメントを外す)1005
       user = postfix  →  追加1006
       group = postfix  →  追加1007
       }  →  変更(アンコメントを外す)1008
       }  →  変更(アンコメントを外す)1009
       }  →  そのまま。1010
--------------------------------------------------------------

⑨認証ライブラリ関連のインストール

    # yum -y install cyrus-sasl-md5 cyrus_sasl_sql

      *  cyrus-sasl-plain も必要ですが、インストール済みでした。


⑩postfixadmin のインストール

    # cd /var/www   →  環境により変更
    # wget http://nchc.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-2.3beta.tar.gz   →  ダウンロード

     * postfixadmin の最新版を確認します。バージョンpostfixadmin-2.3betaが最新版でした。

    # tar zxvf postfixadmin-2.3beta.tar.gz   →  展開
    # mv postfixadmin-2.3beta/ /var/www/postfixadmin   →  ディレクトリ名変更

⑪コンフィグファイルの編集

    # vi /var/www/postfixadmin/config.inc.php
----------------------------------------------------
     //$CONF['configured'] = false;
       $CONF['configured'] = true;   →  変更

     //$CONF['default_language'] = 'en';
       $CONF['default_language'] = 'ja';   →  変更

     $CONF['database_type'] = 'mysql';   →  既に登録されています。(mysqlの場合)
     $CONF['database_host'] = 'localhost';   →  既に登録されています。
     $CONF['database_user'] = 'abc';   →  登録
     $CONF['database_password'] = '********';   →  登録
     $CONF['database_name'] = 'postfix';   →  登録
     $CONF['database_prefix'] = '';   →  空のまま

     //$CONF['encrypt'] = 'md5crypt';
     $CONF['encrypt'] = 'cleartext';   →  変更

     $CONF['page_size'] = '100';   →  変更

     //$CONF['domain_path'] = 'NO';
     $CONF['domain_path'] = 'YES';   →  変更

     // Default Domain Values
     // Specify your default values below. Quota in MB.
     $CONF['aliases'] = '100';   →  変更
     $CONF['mailboxes'] = '100';   →  変更
     $CONF['maxquota'] = '300';   →  変更

     // Quota
     // When you want to enforce quota for your mailbox users set this to 'YES'.
     $CONF['quota'] = 'NO';   →  YESより変更
     $CONF['backup'] = 'NO';   →  YESより変更
     $CONF['sendmail'] = 'NO';   →  YESより変更
     $CONF['fetchmail'] = 'NO';   →  YESより変更
     $CONF['footer_text'] = 'Postfix Admin Top';   →  変更
     $CONF['footer_link'] = 'http://www.ホスト名ドメイン名/postfixadmin/';   →  変更
     $CONF['emailcheck_resolve_domain']='NO';   →  YESより変更
----------------------------------------------------

⑫Apache用の設定ファイル作成

    # vi /etc/httpd/conf.d/postfixadmin.conf

--------------  追加内容  (注:<>は大文字になっています。)--------------------------

     Alias /postfixadmin "/var/www/postfixadmin"

     <Directory "/var/www/postfixadmin">
      Order allow,deny
      Allow from all
     </Directory>

     <IfModule mod_rewrite.c>
     RewriteEngine On
     RewriteLog "logs/rewrite_log"
     RewriteLogLevel 0
     RewriteCond %{SERVER_PORT} !^443$
     RewriteRule ^/postfixadmin/(.*)?$ https://%{HTTP_HOST}/postfixadmin/$1 [L,R]
     </IfModule>
------------------------------------------------------------------------------------------

    # service dovecot start   →  dovecot の再起動
    # service postfix start   →  postfix の再起動
    # service httpd restart   →  Apache の再起動

⑬ファイアウォールの設定

   サーバーとルーターのポートへ設定

    465 番  SMTP over SSL
    993 番  IMAP over SSL
    995 番  POP3 over SSL

   を開けます。

    まさかと思いますが、25番(SMTP)、110番(POP3)、443番(https)もお忘れなく。

     * /etc/services にサービス名とポート番号の関連リストがあります。


⑬postfixadminのセットアップと管理者情報の登録

 クライアントpcより

   http://www.ホスト名ドメイン名/postfixadmin/setup.php を入力

     Postfix Admin Setup Checker が動作し環境のチェックをします。

      他はOKだったのですが

       # Warning: Depends on: IMAP functions - NOT FOUND
       To install IMAP support, install php5-imap

      と表示された(Warning情報は環境により違ってきます)ので、

     # yum -y install php-imap  としてインストール

            →  php5-imap の 5.1.6-20.el5_2.1 がインストールされました。

   再度

   http://www.ホスト名ドメイン名/postfixadmin/setup.php を入力 

     Checking for dependencies:の項目全て OK となりました。

   次にサーバーより

     # service httpd restart

   次にクライアントPCに戻り

      Postfix Admin Setup Checkerの最後にある、

       Admin(管理者のメールアドレス:唯のidなので架空アドレスでもok)、
       Password(パスワード) 
                                を入力しAdd Admin(登録)します。

         * 次の画面で表示された中にある click here からログインします。

⑭不要ファイルの削除

    # rm -f /var/www/postfixadmin/setup.php
    # rm -f /var/www/postfixadmin/motd*  →  不必要な表示をするので削除。


⑮動作確認

 クライアントpcより

   http://サイト名ドメイン名/postfixadmin/ を入力しログイン

 
 
 
 
いやー今回はハマリどころが多くどっぷりと浸かってしまいました。coldsweats02
とりあえずは完成です。
今回の構築をすることによりメールクライアントの設定も少々変更になります。
特にユーザー名にはPostfixAdminの仕様により「@ホスト名ドメイン名」が追加となります。


トラックバック(0)

トラックバックURL: http://www.kokonnya.com/mt/mt-tb.cgi/217

コメント(3)

大変参考になりました。
私もものすごくハマってしまいました。

Me To

今回は大変お世話になりました。
上記のとおり作業をしたら約丸一日かかりました。それを記録しウェブサイトを作られたことを想像しますと、相当な労力を費やされたことと思います。
一様ポストフィックスアドミンはすべてOKになりアドミンユーザーを追加し、ドメイン追加、メールユーザー追加をし送受信をやってみましたが、popでけられ、smtpでもけられ、まだまだ先は長そうです。

コメントする