====== 04 Postfix+MySQL+Postfix AdminでバーチャルSMTPサーバの構築 ====== ===== 1. MySQL ===== === インストール === # yum install mysql-server # chkconfig mysqld on # service mysqld start === Postfix用のデータベース作成 === # mysql mysql> create database postfix; mysql> grant all privileges on postfix.* to postfix@localhost identified by 'xxpostfix'; ===== 2. Postfix ===== バーチャルに対応する為、パッチをあて再構築 === インストール === # 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 === procmailを利用する場合 === [[01_linux:03_mail:06_postfix_virtual_procmail]] === vquotaファイル作成 === ユーザやドメイン毎のメールボックスのサイズを指定(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 ===== 3. Dovecot ===== === インストール === # 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などなどのインストール === # 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 ===== 4. ファイアウォールの設定 ===== === 下記ポートを開ける === 25 110 143 465 番  SMTP over SSL 993 番  IMAP over SSL 995 番  POP3 over SSL === メールディレクトリを用意しておく === # mkdir /home/mail # chown 10000 /home/mail === mailユーザ・グループの変更 === mailユーザと、mailグループのIDを変更しておく。 # usermod -u 10000 -g 10000 mail # groupmod -g 10000 mail ===== 5. PostfixAdminインストール ===== ・ダウンロード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'] = 'hogehoge'; 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宛を転送するように設定。 ===== エラー ===== === ◆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 { #} } === ◆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の説明 ===== 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) {{tag>postfix dovecot mysql}}