使用Postfix構建基於FreeBSD的郵件系統(簡化版)

來源:互聯網
上載者:User
由於寫上一篇文章的時候也剛剛接觸postfix,對電子郵件系統理解也很膚淺,雖然勉強建立了可以啟動並執行郵件系統,但是也暴露了大量的問題。同時盲目的追求功能,使得整個安裝過程較為漫長,對於想入門的朋友來說難度較大。這次我將上一篇文章重新修改,並去掉查毒和反垃圾郵件的功能,完成安裝後,建立一個具有完整收發郵件功能,但安全性較低的郵件系統,供剛入門的朋友借鑒。
基於postfix的郵件系統按照功能劃分可分為3個部分,包括smtp、imap/pop3和身分識別驗證,這3部分功能分別由postfix/courier-imap和courier-authdaemond實現,其中courier-authdaemond又要調用cyrus-sasl2進行驗證。郵件系統的所有資料,可以儲存在ldap/pgsql或者mysql中。為了使安裝過程簡單易懂,本文將使用mysql。

0、 更新ports
pkg_add -r cvsup
cvsup -gL 2 -h cvsup.freebsdchina.org /usr/share/examples/cvsup/ports-supfile
1、 安裝sasl2
sasl2是smtp驗證所需要的軟體包,由於postfix安裝時採用預設配置,使得sasl不支援courier-authdaemond,因此需要首先用指定的選項進行安裝。
cd /usr/ports/security/cyrus-sasl2
make WITH_AUTHDAEMON=yes install clean
2、 安裝postfix
cd /usr/ports/mail/postfix
make config
選中[PCRE]、[SASL2]、[MySQL]、[VDA],sasl2用於smtp驗證,mysql用於存放資料表,vda用於支援虛擬投遞。
make WITH_MYSQL_VER=51 install clean
指定安裝5.1版本的mysql,注意這裡安裝的是mysql-client,稍後還需要安裝mysql-server。在安裝過程中兩次提示均選y,以啟用postfix
3、 安裝courier-imap
cd /usr/ports/mail/courier-imap
make config
選中[AUTH_MYSQL]
make install clean
4、 安裝mysql-server
cd /usr/ports/databases/mysql51-server
make WITH_CHARSET=gb2312 install clean
5、 安裝apache。安裝完成後編輯httpd.conf將主目錄設定為/usr/local/www
cd /usr/ports/www/apache22
make install clean

6、 安裝php。更新ports後的php安裝方式有所變化,首先在make config需要選中[Apache]以編譯apache模組,安裝完成後在httpd.conf中修改2處配置:
a、在DirectoryIndex中加入index.php
b、加入AddType application/x-httpd-php .php
cd /usr/ports/lang/php5
make config
make install clean
7、 安裝php5-extensions。根據需要選擇模組,保證[MYSQL]、[PCRE]、[SESSION]被選中。
cd /usr/ports/lang/php5-extensions
make config
make install clean

8、 安裝postfixadmin。安裝完成後將網頁移動至/usr/www/data/
cd /usr/ports/mail/postfixadmin
make install clean
mv /usr/local/www/postfixadmin /usr/local/www/data/
9、 安裝squirrelmail
cd /usr/ports/mail/squirrelmail
make install clean
至此,所需軟體全部安裝完畢,下面將依次進行配置。
注意:下面設定檔的每一行結尾必須保證沒有空格。

1、 配置sasl2
ee /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/authdaemond/socket
2、 配置mysql資料庫
chown -R mysql:mysql /var/db/mysql
cd /usr/local/bin/
./mysql_install_db
cd /usr/local/libexec
./mysqld --user=mysql&
cd /usr/local/www/postfixadmin
mysql -uroot -p < DATABASE_MYSQL.TXT
3、 配置postfix
使用和apache一樣的使用者來讀取郵件目錄,因為apache使用者為www,id:80,所以要注意/usr/local/etc/postfix/main.cf中的使用者id。
newaliases
mkdir -p /usr/local/virtual
chown -R www:www /usr/local/virtual
chmod -R 775 /usr/local/virtual
ee /usr/local/etc/postfix/main.cf
在最後添加:
#======= BASE ==============
#myhostname =
#mydomain = example.com
home_mailbox = maildir/
#mydestination = $myhostname
#local_recipient_maps =
#======= MYSQL =============
virtual_gid_maps = static:80
virtual_mailbox_base = /usr/local/virtual
virtual_uid_maps = static:80
virtual_minimum_uid = 80
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql/virtual_alias_maps.cf
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
#======= Quota ============
message_size_limit = 5242880
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql/virtual_mailbox_limit_maps.cf
virtual_mailbox_limit = 52428800
#======== SASL ================
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination reject
#smtpd_sasl_local_domain = $mydomain
smtpd_client_restrictions = permit_sasl_authenticated

從上面的配置可以看出,有4個表儲存在mysql資料庫中,分別是virtual_alias(虛擬別名)、virtual_domains(虛擬域)、virtual_mailbox_maps(虛擬郵箱映射)、和virtual_mailbox_limit(虛擬郵箱限額)。Postfix訪問mysql的特定表和欄位分別由4個對應的設定檔設定。
cd /usr/local/etc/postfix/
mkdir mysql
cd mysql

1、ee virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

2、ee virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain

3、ee virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

4、ee virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username

4、 配置courier-authdaemond
cd /usr/local/etc/rc.d
./courier-authdaemond start #指令檔名可能是courier-authdaemond.sh
chmod o+x /var/run/authdaemond
cd /usr/local/etc/authlib
ee authdaemonrc
修改authmodulelist和authmodulelistorig,指定只使用mysql進行驗證
authmodulelist="authmysql"
authmodulelistorig="authmysql"
設定authmysqlrc,使authdaemond能夠查詢mysql,注意刪除每行末尾的空格。
ee authmysqlrc
DEFAULT_DOMAIN example.com
MYSQL_CRYPT_PWFIELD password
MYSQL_DATABASE postfix
MYSQL_GID_FIELD '80'
MYSQL_HOME_FIELD '/usr/local/virtual'
MYSQL_LOGIN_FIELD username
MYSQL_MAILDIR_FIELD maildir
MYSQL_NAME_FIELD name
MYSQL_OPT 0
MYSQL_PASSWORD postfix
#MYSQL_PORT 0
#MYSQL_QUOTA_FIELD quota
MYSQL_SERVER localhost
MYSQL_UID_FIELD '80'
MYSQL_USERNAME postfix
MYSQL_USER_TABLE mailbox
5、 配置啟動項
ee /etc/rc.conf
添加下列條目:
sendmail_enable="NONE"
postfix_enable="YES"
apache22_enable="YES"
mysql_enable="YES"
courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_pop3d_enable="YES"
6、 重起電腦
Reboot
7、 配置postfixadmin
cd /usr/local/www/data/postfixadmin
ee config.inc.php
$CONF['default_language'] = 'cn';
$CONF['admin_email'] = 'postmaster@example.com';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['quota'] = 'YES';

通過http://localhost/postfixadmin/setup.php查看是否安裝成功。
進入http://localhot/postfixadmin/admin進入管理頁面,建立虛擬域和使用者。
觀察/usr/local/virtual下是否出現對應的網域名稱目錄和使用者目錄。
注意:如在postfixadmin中建立與本機網域名稱相同的虛擬域,則有可能無法建立相應的網域名稱和使用者的檔案夾。這種情況應通過mx記錄解決。如郵件伺服器位於example.com上,則應指定postfix的網域名稱為mail.example.com,再添加mx記錄指向mail.example.com,這樣即可建立example.com虛擬域。
8、 配置squirrelmail
cd /usr/local/www/data/squirrelmail
./configure
選擇10. Languages
設定如下:
1. Default Language : zh_CN
2. Default Charset : gb2312
儲存退出
進入http://localhost/squirrelmail/測試郵箱。

注意:除了在authmysqlrc中DEFAULT_DOMAIN指定的域外,其他域使用者登陸都需要輸入完整的電子郵件地址。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.