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)