today's offers - xanax use in pregnancy xanax xr be abused soma internet pharmacies fedex soma without priscription fed ex phentermine parkinson drugs phentermine baclofen tramadol together ordering tramadol cod viagra find search 76k cialis pages cialis buy on line viagra for sale without a prescription buy onlinecom phentermine viagra ambien and klonopin drug interaction buy ambien overnight cheap online pharmacies valium saturday delivery valium online with no prescription or membership fioricet overnight no rx cheap fioricet without a prescription order meridia cod fedex meridia cheap fed ex delivery xanax bradycardia what does xanax look like american soma how to buy soma online without prescriptin phentermine overnight echeck c o d 375 mg phentermine rss feed cheap no prescription tramadol stop the tramadol generic prices online cialis generic cialis fedex chinese herbal viagra taking partial pill of viagra ambien and pregnancy smoking ambien cod online valium buy cheap valium without prescription no prescription fioricet with fedex fioricet without prescription in Brasilia order meridia meridia information

postfix,courier-imap,cyrus-sasl2,mysql,pam-mysql-虛擬主機


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

  1. #1 by Mr WordPress on February 14, 2006 - 5:51 pm

    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.

  2. #2 by Ian on September 2, 2007 - 2:31 am

    拜讀前輩的postfix整合mysql~以及proftpd整合mysql~覺得受益良多~不過請問有辦法做到由phpmyadmin統一建立帳號~然後此帳號可以同時使用於postfix和proftpd~甚至是openwebmail

  3. #3 by johnpupu on September 17, 2007 - 7:11 am

    我的帳號是透過postfixadmin 來管的
    現在ftp 則是用smbftpd
    基本上你看看 你的 postfix是不是用mysql 管的呀
    若是的話~~應該都還滿好整合的

(will not be published)

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word