Linux/Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築 の変更点


*Postfix+MySQL+PostfixAdminによるバーチャルSMTPサーバの構築 [#b6bab761]

[[dokuwiki.fl8.jp掲載済>http://dokuwiki.fl8.jp/01_linux/03_mail/04_postfix_mysql_postfix_admin]]
#contents

**添付 [#n3a941f2]
[[添付ファイル一覧>http://matsui.homeunix.com/index.php?plugin=attach&pcmd=list&refer=Linux%2FPostfix%2BMySQL%2BPostfix%20Admin%A4%CB%A4%E8%A4%EB%A5%D0%A1%BC%A5%C1%A5%E3%A5%EBSMTP%A5%B5%A1%BC%A5%D0%A4%CE%B9%BD%C3%DB]]

**MySQLインストール [#u81aed2e]
 # yum install mysql-server 
 # chkconfig mysqld on 
 # service mysqld start 

**Postfix用のデータベース作成 [#zd449694]
 # mysql 
 mysql> create database postfix; 
 mysql> grant all privileges on postfix.* to postfix@localhost identified by 'xxpostfix'; 


**Postfixインストール [#dad5c41b]
・バーチャルに対応する為、パッチをあて再構築 
 # cd /usr/local/src 
 # wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.4/os/SRPMS/postfix-2.3.3-2.1.el5_2.src.rpm 
 # mkdir -p /usr/src/redhat/SOURCES 
 # rpm -ivh postfix-2.3.3-2.1.el5_2.src.rpm 
 # 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 
 # wget http://k2net.hakuba.jp/pub/postfix-sleep.patch
 # cd /usr/src/redhat/SPECS/ 
 # cp postfix.spec postfix.spec.old 
 # vi postfix.spec 
 ------- 変更と追加 ------- 
 2 %define MYSQL 0 
      ↓ 
 2 %define MYSQL 1 
 
 84 Patch11: postfix-2.3.3-vda.patch 
 85 Patch12: postfix-sleep.patch 
 
 141 %patch11 -p1 -b .vda 
 142 %patch12 -p1 -b .sleep 
 
 # yum -y install pkgconfig rpm-build db4-devel zlib-devel openldap-devel cyrus-sasl-devel pcre-devel mysql-devel openssl-devel 
 # mkdir -p /usr/src/redhat/BUILD 
 # mkdir -p /usr/src/redhat/SRPMS 
 # mkdir -p /usr/src/redhat/RPMS/x86_64 
 # rpmbuild -ba postfix.spec 

・インストール 
 #rpm -Uhv /usr/src/redhat/RPMS/x86_64/postfix-2.3.3-2.1.x86_64.rpm 

・yumの設定でpostfixを除外しておく。 
 # vi /etc/yum.conf 
 --------- 最後に追加 ------------- 
 exclude=postfix* 

・chkconfig 
 # chkconfig postfix on 


・main.cfの作成 
 # vi /etc/postfix/main.cf 
     70 myhostname = test.flateight.com 
     92 myorigin = $myhostname 
    107 #inet_interfaces = all 
    109 inet_interfaces = $myhostname, localhost 
    155 #mydestination = $myhostname, localhost.$mydomain, localhost 
    158 mydestination = 
    288 relay_domains = $mydestination 
    256 mynetworks = 168.100.189.0/28, 127.0.0.0/8, 174.143.151.0/24 
    411 home_mailbox = Maildir/ 
    563 smtpd_banner = $myhostname ESMTP unknown 
    637 sendmail_path = /usr/sbin/sendmail 
 
 ---------- 追加 ---------- 
 smtpd_sasl_auth_enable = yes 
 smtpd_sasl_type = dovecot 
 smtpd_sasl_path = private/auth 
 smtpd_sasl_local_domain = $myhostname 
 smtpd_recipient_restrictions = 
     permit_mynetworks 
     permit_sasl_authenticated 
     reject_unauth_destination 
  
 message_size_limit = 10485760 
  
 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 
  
 #virtual_mailbox_domains = /etc/postfix/vdomain 
 #virtual_mailbox_base = /home/mail/vhosts 
 #virtual_mailbox_maps = hash:/etc/postfix/vmailbox 
 #virtual_minimum_uid = 100 
 #virtual_uid_maps = static:12000 
 #virtual_gid_maps = static:12000 
 #virtual_alias_maps = hash:/etc/postfix/virtual 
  
 local_transport = virtual 
 virtual_transport = virtual 
 virtual_mailbox_base = /home/mail 
 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 
 mailbox_size_limit = 51200000 
 message_size_limit = 10240000 
 virtual_mailbox_limit = 51200000 
 virtual_mailbox_limit_maps = hash:/etc/postfix/vquota 
 virtual_mailbox_limit_override = yes 
 virtual_overquota_bounce = yes 
 virtual_mailbox_limit_inbox = yes 

**vquotaファイル作成 [#v3df2446]
ユーザやドメイン毎のメールボックスのサイズを指定(virtual_mailbox_limit以下で指定)
 # vi /etc/postfix/vquota 
 test1@mail.flateight.com   51200000
 @test2.flateight.com         25600000
 @mail2.flateight.com        12800000

・MySQL認証用ファイルを作成 
 # vi /etc/postfix/mysql_virtual_alias_maps.cf 
 user = postfix 
 password = xxpostfix 
 hosts = localhost 
 dbname = postfix 
 table = alias 
 select_field = goto 
 where_field = address 
  
 #vi /etc/postfix/mysql_virtual_domains_maps.cf 
 user = postfix 
 password = xxpostfix 
 hosts = localhost 
 dbname = postfix 
 table = domain 
 select_field = domain 
 where_field = domain 
 additional_conditions = and active = '1' 
 
 # vi /etc/postfix/mysql_virtual_mailbox_maps.cf 
 user = postfix 
 password = xxpostfix 
 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=postfix host=/var/lib/mysql/mysql.sock password=xxpostfix 
 password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' 
 user_query = SELECT concat('/home/mail/', maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = '%u' AND active = '1' 

・TLS セッションキャッシュマネージャの設定(master.cf の編集) 
コメントを外す。 
 # vi /etc/postfix/master.cf 
 submission inet n - n - - smtpd 
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
 smtps inet n - n - - smtpd 
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject 


・証明書の作成、Dovecot の設定(dovecot.confの編集) 
 # yum install dovecot 
 # 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 
 listen = [::]
 log_path = /var/log/dovecot.log
 ssl_disable = no
 ssl_cert_file = /etc/pki/tls/certs/mail.pem
 ssl_key_file = /etc/pki/tls/certs/mail.pem
 verbose_ssl = yes
 mail_location = maildir:/home/mail/%d/%u
 last_valid_uid = 10000
 first_valid_gid = 10000
 protocol imap {
 }
   
 protocol pop3 {
 }
 protocol lda {
   postmaster_address = postmaster@example.com
 }
 auth_verbose = yes
 auth_debug = yes
 auth_debug_passwords = yes
 auth default {
   mechanisms = plain login digest-md5 cram-md5 apop
   passdb sql {
    args = /etc/dovecot-mysql.conf
   }
  
   userdb sql {
    args = /etc/dovecot-mysql.conf
   }
  
  socket listen {
   client {
    path = /var/spool/postfix/private/auth
    mode = 0660
    user = postfix
    group = postfix
   }
  }
   user = root
 }
 dict {
 }
 plugin {
 }

・認証ライブラリのインストール 
 # yum -y install cyrus-sasl-md5 cyrus_sasl_sql cyrus-sasl-plain 


**Apacheなどなどのインストール [#zc30d26d]
 # yum install httpd 
 # yum install php-mysql php-xml php-devel php-mbstring php-gd php-pear php-xmlrpc php-soap php-imap 

・chkconfig 
 # chkconfig httpd on 

・スタート 
 # service httpd start 

**ファイアウォールの設定 [#p97ff8d0]
このポートを開ける 
  25
 110
 143
 465 番  SMTP over SSL 
 993 番  IMAP over SSL 
 995 番  POP3 over SSL 

**メールディレクトリを用意しておく [#r5746630]
 # mkdir /home/mail 
 # chown 10000 /home/mail 

**PostfixAdminインストール [#m2a0617c]
・ダウンロードURL 
http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin_2.3.tar.gz?use_mirror=jaist 

 # cd /usr/local/src 
 # wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin_2.3.tar.gz?use_mirror=jaist 
 # tar zxvf postfixadmin_2.3.tar.gz 
 # mv postfixadmin_2.3 /var/www/html/postfixadmin 
 # cd /var/www/html/postfixadmin 
 # vi config.inc.php 
     26 $CONF['configured'] = true; 
     43 $CONF['default_language'] = 'ja'; 
     49 $CONF['database_type'] = 'mysqli'; 
     50 $CONF['database_host'] = 'localhost'; 
     51 $CONF['database_user'] = 'postfixadmin'; 
     52 $CONF['database_password'] = '01shop01'; 
     53 $CONF['database_name'] = 'postfix'; 
    100 // $CONF['encrypt'] = 'md5crypt'; 
    101 $CONF['encrypt'] = 'cleartext'; 
    130 $CONF['page_size'] = '100'; 
    158 $CONF['mailboxes'] = '100'; 
    159 $CONF['maxquota'] = '300'; 


・URLからアクセス 
 http://[アドレス]/postfixadmin/setup.php 

全部OKになっていればOKです。 ~

setupパスワードを入力し、表示されたsetup_passwordを~
config.inc.phpに入力する。 ~
    ↓ ~
管理者IDを作成する。 ~

・setup.phpを削除 
 # rm /var/www/html/postfixadmin/setup.php 


・URLからアクセス 
 http://[アドレス]/postfixadmin

・Web上からpostmaster宛とroot宛を転送するように設定。


**エラー [#f09810e4]
◆&color(Red){user unknown};
 Info: auth(default): passwd(hogehoge@flateight.com,::ffff:59.106.13.38): unknown user
-対処

これがあると、passwd認証をしようとするが、当然無いのでunknown userとなってしまう。~
dovecot.confの「auth default」内のpassdb passudをコメントアウトしてやる。
 # vi /etc/dovecot.conf 
 auth default {
  #userdb passwd {
  #}
 }

◆&color(Red){pam_authenticate() failed:};
 auth(default): pam(hogehoge@flateight.com,::ffff:59.106.13.38): pam_authenticate() failed: User not known to the underlying authentication module
 }

-対処

これがあると、まずpam認証を行ってうが当然認証できないので、エラーになってしまう。~
dovecot.confの「auth default」内のpassdb pamをコメントアウトしてやる。
 # vi /etc/dovecot.conf 
 auth default {
  #passdb pam {
  #}
 }



**postfix master.cfの説明 [#dd5b1fcf]
 smtpd_enforce_tls=yes 
デフォルト: no~
SMTP クライアントに TLS 暗号化を強制する。 

 smtpd_sasl_auth_enable=yes 
デフォルト: no~
SMTP Auth (SASL による) を有効にする。 

 smtpd_client_restrictions= 
デフォルト: empty~
SMTP クライアントが smtpd デーモンにアクセスするときの、アクセス制限設定。 ~
記述順にパラメータ値(アクセス制限)が評価される。最後は permit (許可) になる。 ~
基本的な書き方としては、 permit_ を書き、最後に reject を書く。~
(全部ふさいで一部分開くポリシー) ~
パラメータ値は、カンマかスペースで区切る。 


長くなる場合は、次の行の先頭にスペースを入れることで、行が継続される。 ~
例えば 
 smtpd_client_restrictions=permit_sasl_authenticated,reject 
SMTP Auth で認証が確認された接続を許可。 
それ以外は接続を拒否する。(デフォルト: 554)