Mail Server 安裝
 先裝Mysql(這邊是裝mysql5)
 裝mysql來做認証管理和帳戶管理
  建postfix資料庫
create database postfix
 然後建資料表
 CREATE TABLE `admin` (
 `username` varchar(255) NOT NULL default '',
 `password` varchar(255) NOT NULL default '',
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `modified` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(4) NOT NULL default '1',
 PRIMARY KEY  (`username`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 CREATE TABLE `alias` (
 `address` varchar(255) NOT NULL default '',
 `goto` text NOT NULL,
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `modified` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(4) NOT NULL default '1',
 PRIMARY KEY  (`address`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 CREATE TABLE `domain` (
 `domain` varchar(255) NOT NULL default '',
 `description` varchar(255) NOT NULL default '',
 `aliases` int(10) NOT NULL default '-1',
 `mailboxes` int(10) NOT NULL default '-1',
 `maxquota` int(10) NOT NULL default '-1',
 `transport` varchar(255) default NULL,
 `backupmx` tinyint(1) NOT NULL default '0',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `modified` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(4) NOT NULL default '1',
 PRIMARY KEY  (`domain`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 CREATE TABLE `domain_admins` (
 `username` varchar(255) NOT NULL default '',
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(4) NOT NULL default '1'
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 CREATE TABLE `log` (
 `timestamp` datetime NOT NULL default '0000-00-00 00:00:00',
 `username` varchar(255) NOT NULL default '',
 `domain` varchar(255) NOT NULL default '',
 `action` varchar(255) NOT NULL default '',
 `data` varchar(255) NOT NULL default ''
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 CREATE TABLE `mailbox` (
 `username` varchar(255) NOT NULL default '',
 `password` varchar(255) NOT NULL default '',
 `name` varchar(255) NOT NULL default '',
 `maildir` varchar(255) NOT NULL default '',
 `quota` int(10) NOT NULL default '-1',
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `modified` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(4) NOT NULL default '1',
 PRIMARY KEY  (`username`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 CREATE TABLE `vacation` (
 `email` varchar(255) NOT NULL default '',
 `subject` varchar(255) NOT NULL default '',
 `body` text NOT NULL,
 `cache` text NOT NULL,
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(4) NOT NULL default '1'
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 開postfix權限
 
GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY "secret"; (密碼可以改你爽的)
GRANT ALL ON discuz.* TO postfix@localhost IDENTIFIED BY "密碼";
postfix 使用者有discuz 資料庫的權限
 
ps 也可以用匯入的方式。
 —————————————————————————————-
 實作:資料庫的備份
 使用Putty連線到主機。
 執行以下的指令,將資料匯出到 Script檔:
 mysqldump -p lib13 > db_backup.sql
 輸入你的密碼後,完成匯出。
 實作:刪除 Guestbook 資料表
 使用Putty連線到主機。
 在 Linux Shell 執行以下的指令:
 mysql -p
 輸入你的密碼後,進入 mysql 提示。
 在mysql 提示下,輸入以下的命令,選用匯入的資料庫。
 use lib13;
 在mysql 提示下,輸入以下的命令,刪除 Guestbook 資料表。
 drop table Guestbook;
 在mysql 提示下,輸入以下的命令,秀出資料庫中所有的資料表。
 show tables;
 實作:資料庫的還原
 使用Putty連線到主機。
 在 Linux Shell 執行以下的指令:
 mysql -p lib13 < db_backup.sql
 輸入你的密碼後,完成還原。
 —————————————————————————————
 接下來安裝pam-mysql(主要是要做courier 和mysql間的認証)
 安裝 pam_mysql
 # cd /usr/ports/security/pam-mysql;make install clean
 這兒有一些 pam_mysql 文件 /usr/local/share/doc/pam_mysql
建立捷徑
 # ln -s /usr/local/lib/pam_mysql.so /usr/lib/pam_mysql.so
然後到cd /etc/pam.d/
 加入一個smtp
 內容:
 auth optional pam_mysql.so user=postfix passwd=secret host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 sqllog=0
 account required pam_mysql.so user=postfix passwd=secret host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 sqllog=0
(
 方才 pam 的設定,其中
 ※ crypt=0 表示儲存的密碼為明碼,這對人類而言,是易讀易懂,但是不安全。
 ※ crypt=1 表示儲存的密碼為經由 UNIX系統中的 DES 所編碼過的密碼,據悉,它這有兩種加密方式;一種為普通的 DES 加密方式,也叫 crypt(),加密後的密碼有 13 位元長,另一種則為使用 MD5 演算法加密的,也叫 md5 crypt(),可說是 DES 的加強版,特點是以 $1$ 為開頭,加密後的密碼長度不定。
 ※ crypt=2 表示是用 MySQL 內建的函數 password() 所加密的密碼。)
安裝 cyrus-sasl2-saslauthd
 安裝 cyrus-sasl2-saslauthd 時,會自動一併安裝 cyrus-sasl2
 先編輯它的 Makefile
 # cd /usr/ports/security/cyrus-sasl2-saslauthd/ ; ee Makefile
 在 CONFIGURE_ARGS 這段新增那三個參數
 ## CONFIGURE_ARGS=
 –enable-sql=mysql 
 –with-mysql=/var/db/ 
 –with-dblib=none 
 開始安裝 Cyrus-sasl2-saslauthd
 # make install clean
設定啟動 FreeBSD 時執行 saslauthd,在 /etc/rc.conf 新增此行 saslauthd_enable="YES"
請認有無此檔,並且連結到正確路徑
 # ls -l /usr/local/lib/sasl2/libsql.so.2
 libsql.so.2 -> /usr/local/lib/mysql/libmysqlclient.so.12
 如果沒有 libsql.so.2 此檔,或者連到非以上路徑,請下此指令(到/usr/local/lib/mysql/看一下libmysqlclient.so是多少把他連結過來)
 # ln -s /usr/local/lib/mysql/libmysqlclient.so.12 /usr/local/lib/sasl2/libsql.so.2
啟動 saslauth daemon,注意,saslauthd 必需在 IMAP or POSTFIX 前啟動
 # /usr/local/etc/rc.d/saslauthd.sh start
為了要讓 saslauth daemon 支援 PAM,saslauthd 必須隨著 -a pam 參數一同啟動,檢驗看看
 # ps ax|grep sasl
 10174 ?? Is 0:00.10 /usr/local/sbin/saslauthd -a pam ##後面有 -a pam
安裝與設定 postfix
# cd /usr/ports/mail/postfix ; make install clean ; rehash
 選擇這些選項
 [X] SASL2
 [X] MySQL
安裝完記得看他的資訊
 如下
 # vim /etc/rc.conf
 加入下列資訊
 ## Postfix
 sendmail_enable="YES"
 sendmail_flags="-bd"
 sendmail_pidfile="/var/spool/postfix/pid/master.pid"
 sendmail_procname="/usr/local/libexec/postfix/master"
 sendmail_outbound_enable="NO"
 sendmail_submit_enable="NO"
 sendmail_msp_queue_enable="NO"
# vim  /etc/periodic.conf
 daily_clean_hoststat_enable="NO"
 daily_status_mail_rejects_enable="NO"
 daily_status_include_submit_mailq="NO"
 daily_submit_queuerun="NO"
 
安裝完後執行
 # /usr/local/sbin/postalias /etc/aliases
 # /usr/local/sbin/postmap /usr/local/etc/postfix/transport
設置開機時啟動 postfix,新建一個捷徑
 # ln -s /usr/local/sbin/postfix /usr/local/etc/rc.d/postfix.sh
然後修改postfix 的main.cf設定檔
 #vim /usr/local/etc/postfix/main.cf
 myhostname = 改成你的主機名
 mydomain = 改成你的domain
 myorigin = $mydomain
 inet_interfaces = all
 unknown_local_recipient_reject_code = 450
 mynetworks_style = subnet
 mynetworks = 127.0.0.0/8, 再加入你ip的網段(那個8的意思是你的子網路遮罩的位元數)
 alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
 home_mailbox = Maildir/
 mailbox_transport = virtual
 virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
 virtual_gid_maps = static:125
 virtual_mailbox_base = /home/mbox
 virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
 virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
 virtual_mailbox_limit = 512000000
 virtual_minimum_uid = 125
 virtual_transport = virtual
 virtual_uid_maps = static:125
 virtual_mailbox_limit_inbox = yes
 virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_vquota_maps.cf
 virtual_mailbox_limit_override = yes
 virtual_maildir_extended = yes
 virtual_create_maildirsize = yes
 message_size_limit = 50000000
 maximal_queue_lifetime = 2d
 bounce_queue_lifetime = 1d
 broken_sasl_auth_clients = yes
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, reject_rbl_client opm.blitzed.org, reject_rbl_client list.dsbl.org, reject_rbl_client relays.ordb.org, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl.spamhaus.org, check_client_access regexp:/usr/local/etc/postfix/regexp-access.cf
 smtpd_sasl_auth_enable = yes
 smtpd_sasl_local_domain = $myhostname
 smtpd_sasl_security_options = noanonymous
 smtpd_delay_reject = no
然後在postfix 目錄下加入這五個檔案
 
#vim /usr/local/etc/postfix/mysql_virtual_alias_maps.cf
 user = postfix
 password = (mysql中postfix的密碼)
 hotst = localhost
 dbname = postfix
 table = alias
 select_field  is NULL goto'
 where_field = address
 
#vim /usr/local/etc/postfix/mysql_virtual_domains_maps.cf
 user = postfix
 password = (mysql中postfix的密碼)
 hotst = localhost
 dbname = postfix
 table = domain
 select_field  is NULL description'
 where_field = domain
#vim /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
 user = postfix
 password = (mysql中postfix的密碼)
 hotst = localhost
 dbname = postfix
 table = mailbox
 select_field = maildir
 where_field = username
#vim /usr/local/etc/postfix/mysql_virtual_vquota_maps.cf
 user = postfix
 password = (mysql中postfix的密碼)
 hotst = localhost
 dbname = postfix
 table = mailbox
 select_field = quota
 where_field = username
#vim /usr/local/etc/postfix/regexp-access.cf
 /[a-z0-9].dynamic.*/  554 Service unavailable,Please see http://www.twia.org.tw/SPAM-930412(news).htm
安裝courier-imap
 #cd /usr/port/mail/courier-imap
 #make install clean
 #vim /etc/rc.conf
## Courier Authd
 courier_authdaemond_enable="YES"
## Courier IMAPD
 courier_imap_imapd_enable="YES"
 courier_imap_pop3d_enable="YES"
編輯authmysqlrc
 #vim /usr/local/etc/authlib/authmysqlrc
 MYSQL_SERVER    localhost
 MYSQL_USERNAME    postfix     (就是剛剛你在開mysql postfix這個user)
 MYSQL_PASSWORD    secret    (就是剛剛你在開mysql postfix這個user的密碼)
 MYSQL_SOCKET    /tmp/mysql.sock
 MYSQL_PORT    3306
 MYSQL_OPT   0
 MYSQL_DATABASE    postfix
 MYSQL_USER_TABLE  mailbox
 MYSQL_CRYPT_PWFIELD password
 DEFAULT_DOMAIN 你的domain
 MYSQL_UID_FIELD   125(POSTFIX 的uid)
 MYSQL_GID_FIELD   125(POSTFIX 的gid)
 MYSQL_LOGIN_FIELD username
 MYSQL_HOME_FIELD  '/home/mbox'
 MYSQL_NAME_FIELD  name
 MYSQL_MAILDIR_FIELD maildir
 
編輯smtp.conf
 #vim /usr/local/lib/sasl2/smtp.conf
 pwcheck_method: saslauthd
 
編輯smtpd.conf
#vim /usr/local/lib/sasl2/smtpd.conf
 pwcheck_method: saslauthd
 mech_list: plain login
 
最後再去home裡面建mbox這個目錄
 #cd /home
 #mkdir mbox
 #chown postfix:postfix mbox
 
這樣就大功告成了~~
 重開機~~測試你的mailserver吧
 
 修改於2005/9.7
 
Hi, this is a comment.
To delete a comment, just log in, and view the posts’ comments, there you will have the option to edit or delete them.
拜讀前輩的postfix整合mysql~以及proftpd整合mysql~覺得受益良多~不過請問有辦法做到由phpmyadmin統一建立帳號~然後此帳號可以同時使用於postfix和proftpd~甚至是openwebmail
我的帳號是透過postfixadmin 來管的
現在ftp 則是用smbftpd
基本上你看看 你的 postfix是不是用mysql 管的呀
若是的話~~應該都還滿好整合的