FreeBSD下安装postfixl邮件系统

一、首先安装apache+mysql+php,
         在本文档中假设服务器的ip地址为172.16.27.23,域名为test.com,主机名为mail.test.com
   二、安装courier-imap,courier-imap主要提供Pop3及IMAP服务。

      1.ports安装courier-imap

cd /usr/ports/mail/courier-imap
make install clean

        选择mysql

[X] AUTH_MYSQL   MySQL support
      
         2.在/etc/rc.conf 加入

courier_authdaemond_enable="YES"
courier_imap_pop3d_enable="YES"
courier_imap_imapd_enable="YES"

        3.设置/usr/local/etc/authlib/authdaemonrc

cd /usr/local/etc/courier-imap
cp imapd.cnf.dist imapd.cnf
cp pop3d.cnf.dist pop3d.cnf
chmod -R  +x /var/run/authdaemond/


cd /usr/local/etc/authlib/
mv authdaemonrc authdaemonrc.bak

     编辑authdaemonrc文件,输入如下内容:

authmodulelist="authmysql"
authmodulelistorig="authmysql"
version="authdaemond.mysql"
daemons=5
authdaemover=/var/run/authdaemond
subsystem=mail
DEBUG_LOGIN=2
DEFAULTOPTIONS="wbnodsn=1"

     上面DEBUG_LOGIN=2 是为了调试方便,等系统完全测试完成,可改为 0,即不显示调试信息。

/usr/local/etc/rc.d/courier-authdaemond start

    authdaemond 启动完成后,检查/var/run/authdaemond 下面是否产生socket 文件,因为认证时是通过这个文件读取密码的。
      
      4.设置/usr/local/etc/authlib/authmysqlrc

cd /usr/local/etc/authlib/
mv authmysqlrc authmysqlrc.bak

       创建authmysqlrc文件输入以下内容:

MYSQL_SERVER            localhost
MYSQL_USERNAME          extmail
MYSQL_PASSWORD          extmail
MYSQL_SOCKET            /tmp/mysql.sock
MYSQL_PORT              3306
MYSQL_OPT               0
MYSQL_DATABASE          extmail
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         1000
MYSQL_GID_FIELD         1000
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_SELECT_CLAUSE     SELECT username,password,"",uidnumber,gidnumber,\
                        CONCAT('/services/data/domains/',homedir),       \
                        CONCAT('/services/data/domains/',maildir),      \
                        quota,                                          \
                        name                                            \
                        FROM mailbox                                    \
                        WHERE username = '$(local_part)@$(domain)'

    要注意,我的邮件保存的目录是/services/data/domains ,你可以跟据你的需要改为自己的目录。用户名和密码是extmail 这个具体需要看extman 软件包中的docs 目录中的extmail.sql,很多人无法通上发信认证,很可能以上面两个文件配置有关。

         三、安装配置cyrus-sasl2

     1.ports安装cyrus-sasl2

cd /usr/ports/security/cyrus-sasl2
make install WITH_AUTHDAEMON=yes
make clean

    2.创建 /usr/local/lib/sasl2/smtpd.conf 加入下面的内容

pwcheck_method:authdaemond
log_level:3
mech_list:PLAIN LOGIN
authdaemond_path:/var/run/authdaemond/socket

    至此,认证部分基本完成。

         四、安装配置Postfix
        
    1.ports安装postfix

cd /usr/ports/mail/postfix
make install clean

    2.编译选项选择

[X] VDA       VDA (Virtual Delivery Agent)
[X] MySQL     MySQL map lookups (choose version with WITH_MYSQL_VER)
[X] TLS       SSL and TLS
[X] SASL2     Cyrus SASLv2 (Simple Authentication and Security Layer)


安装过程中有两个提问,直接按回车,使用系统默认的回答。

   3.配置postfix

echo postfix:root >> /etc/aliases
/usr/local/bin/newaliases
ln -s /usr/local/sbin/sendmail /usr/sbin/sendmail

     如果出现ln: /usr/sbin/sendmail: File exists 提示,把/usr/sbin/sendmail改名再链接。

    设置postfix 随系统启动,在/etc/rc.conf中添加如下内容:

postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"


      创建/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/etc/postfix/main.cf

cd /usr/local/etc/postfix/
mv main.cf main.cf.bak

    创建main.cf文件输入如下内容:

###################BASE##################
myhostname=mail.test.com
mydomain = test.com
mydestination = $myhostname
#mydestination =
local_recipient_maps =
command_directory = /usr/local/sbin
#local_transport = virtual
smtpd_banner = test.com ESMTP Mail System
message_size_limit = 14680064
#mailbox_size_limit = 512000000
#################MySQL################
virtual_alias_maps =mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
#virtual_gid_maps = static:125
#virtual_gid_maps = static:1000
virtual_mailbox_base = /services/data/domains
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
#virtual_mailbox_limit = 512000000
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
#virtual_minimum_uid = 125
#virtual_minimum_uid = 1000
#virtual_transport = virtual
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1

strict_rfc821_envelopes = no
#virtual_uid_maps = static:125
#virtual_uid_maps = static:1000
################Quota################
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry,the user's Maildir has overdrawn his diskspace quota ,please tray again later.
virtual_overquota_bounce = yes

##############SASL####################
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination,
  reject_unauth_pipelining,
  reject_invalid_hostname,

readme_directory = no
sample_directory = /usr/local/etc/postfix
sendmail_path = /usr/local/sbin/sendmail
html_directory = no
setgid_group = maildrop
manpage_directory = /usr/local/man
daemon_directory = /usr/local/libexec/postfix
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix

    以下几个文件在extman软件包的docs目录下直接拷到/usr/local/etc/postfix下即可

mysql_virtual_alias_maps.cf
mysql_virtual_domains_maps.cf
mysql_virtual_limit_maps.cf
mysql_virtual_mailbox_maps.cf
mysql_virtual_sender_maps.cf


   至此postfix 基本设置完成,但还不能收发邮件。


   五、安装配置maildrop

      我们在设置邮件服务器时MTA 部分还是使用posfix 本身的帐户进行处理邮件,由于maildrop 不能和postfix 与同一用户身份处理邮件,所以我们新开一个用户用户maildrop 处理。
pw groupadd vgroup -g 1000
pw useradd vuser -g 1000 -u 1000 -s /sbin/nologin -d /sbin/nologin -c "virtual mail user"


     1.ports安装maildrop

cd /usr/ports/mail/maildrop
make install WITH_AUTHLIB=yes

     选择

[X] AUTH_MYSQL   MySQL support


make clean

    2.配置maildrop
   修改/usr/local/etc/postfix/master.cf ,把maildrop 原先已有的记录注译(即删除旧记录),加上下面的内容

maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vuser argv=/usr/local/bin/maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} ${nexthop}

    3.设置邮件存储目录

mkdir -p /services/data/domains/test.com/test
chown -R 1000:1000 /services/data/domains/
chmod -R 700 /services/data

     确保data目录为700权限以及所属的用户和组为vuser和vgroup

  至此,我们的邮件系统基础部分已经安装完成了。重启系统,开始进行测试。


     六、安装extmail和extman
    
      1.解压extmail和extman

tar xzvf extmail-1.2.tar.gz
tar xzvf extman-1.1.tar.gz
mkdir -p /services/extsuite
mv extman-1.1 /services/extsuite/extman
mv extmail-1.2 /services/extsuite/extmail

    2.修改httpd.conf文件,在末尾增加如下内容:

<VirtualHost *:80>
    ServerName 172.16.27.23
    DocumentRoot /services/extsuite/extmail/html
    ScriptAlias /extmail/cgi /services/extsuite/extmail/cgi
    Alias /extmail /services/extsuite/extmail/html
    <Directory "/services/extsuite/extmail">
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>
    #SuexecUserGroup postfix postfix
</VirtualHost>

#<VirtualHost *:80>
    DocumentRoot /services/extsuite/extman/html
    ScriptAlias /extman/cgi /services/extsuite/extman/cgi
    Alias /extman /services/extsuite/extman/html
    <Directory "/services/extsuite/extman">
#     Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>
#</VirtualHost>

    
    用户和组修改为

User vuser
Group vgroup


   3.配置webman.cf和webmail.cf

    修改/services/extsuite/extman/webman.cf文件,参考内容如下:

SYS_CONFIG = /services/extsuite/extman/
SYS_LANGDIR = /services/extsuite/extman/lang
SYS_TEMPLDIR = /services/extsuite/extman/html
SYS_MAILDIR_BASE = /services/data/domains
SYS_SHOW_WARN = 0
SYS_SESS_DIR = /var/tmp/extman/
SYS_CAPTCHA_ON = 0
SYS_CAPTCHA_KEY = r3s9b6a7
SYS_CAPTCHA_LEN = 6
SYS_PURGE_DATA = 0
SYS_PSIZE = 20
SYS_APP_TYPE = ExtMan
SYS_TEMPLATE_NAME = default
SYS_DEFAULT_EXPIRE = 1y
SYS_GROUPMAIL_SENDER = [email protected]
SYS_DEFAULT_SERVICES = webmail,smtpd,smtp,pop3,netdisk
SYS_ISP_MODE = no
SYS_DOMAIN_HASHDIR = yes
SYS_DOMAIN_HASHDIR_DEPTH = 2x2
SYS_USER_HASHDIR = yes
SYS_USER_HASHDIR_DEPTH = 2x2
SYS_MIN_UID = 500
SYS_MIN_GID = 100
SYS_DEFAULT_UID = 1000
SYS_DEFAULT_GID = 1000
SYS_QUOTA_MULTIPLIER = 1048576
SYS_QUOTA_TYPE = courier
SYS_DEFAULT_MAXQUOTA = 500
SYS_DEFAULT_MAXALIAS = 100
SYS_DEFAULT_MAXUSERS = 100
SYS_DEFAULT_MAXNDQUOTA = 500
SYS_USER_DEFAULT_QUOTA = 5
SYS_USER_DEFAULT_NDQUOTA = 5
SYS_USER_DEFAULT_EXPIRE = 1y
SYS_BACKEND_TYPE = mysql
SYS_CRYPT_TYPE = md5crypt
SYS_MYSQL_USER = webman
SYS_MYSQL_PASS = webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
SYS_MYSQL_TABLE = manager
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_PASSWD = password
SYS_LDAP_BASE = dc=test.com
SYS_LDAP_RDN = cn=Manager,dc=test.com
SYS_LDAP_PASS = secret
SYS_LDAP_HOST = localhost
SYS_LDAP_ATTR_USERNAME = mail
SYS_LDAP_ATTR_PASSWD = userPassword
SYS_RRD_DATADIR = /var/lib
SYS_RRD_TMPDIR = /tmp/viewlog


   修改/services/extsuite/extmail/webmail.cf文件,参考内容如下:


SYS_CONFIG = /services/extsuite/extmail/
SYS_LANGDIR = /services/extsuite/extmail/lang
SYS_TEMPLDIR = /services/extsuite/extmail/html
SYS_HTTP_CACHE = 0
SYS_SMTP_HOST = 127.0.0.1
SYS_SMTP_PORT = 25
SYS_SMTP_TIMEOUT = 5
SYS_SPAM_REPORT_ON = 0
SYS_SPAM_REPORT_TYPE = dspam
SYS_SHOW_WARN = 0
SYS_PERMIT_NOQUOTA = 1
SYS_SESS_DIR = /tmp
SYS_UPLOAD_TMPDIR = /tmp
SYS_LOG_ON = 1
SYS_LOG_TYPE = syslog
SYS_LOG_FILE = /var/log/extmail.log
SYS_SESS_TIMEOUT = 0
SYS_SESS_COOKIE_ONLY = 1
SYS_USER_PSIZE = 10
SYS_USER_SCREEN = auto
SYS_USER_LANG = zh_US
SYS_APP_TYPE = WebMail
SYS_USER_TEMPLATE = default
SYS_USER_CHARSET = utf-8
SYS_USER_TRYLOCAL = 1
SYS_USER_TIMEZONE = +0800
SYS_USER_CCSENT = 1
SYS_USER_SHOW_HTML = 1
SYS_USER_COMPOSE_HTML = 1
SYS_USER_CONV_LINK =1
SYS_USER_ADDR2ABOOK = 1
SYS_MESSAGE_SIZE_LIMIT = 5242880
SYS_MIN_PASS_LEN = 2
SYS_MFILTER_ON = 1
SYS_NETDISK_ON = 1
SYS_SHOW_SIGNUP = 1
SYS_DEBUG_ON = 1
SYS_AUTH_TYPE = mysql
SYS_MAILDIR_BASE = /services/data/domains
SYS_AUTH_SCHEMA = virtual
SYS_CRYPT_TYPE = md5crypt
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
SYS_MYSQL_ATTR_CLEARPW = clearpwd
SYS_MYSQL_ATTR_QUOTA = quota
SYS_MYSQL_ATTR_NDQUOTA = netdiskquota
SYS_MYSQL_ATTR_HOME = homedir
SYS_MYSQL_ATTR_MAILDIR = maildir
SYS_MYSQL_ATTR_DISABLEWEBMAIL = disablewebmail
SYS_MYSQL_ATTR_DISABLENETDISK = disablenetdisk
SYS_MYSQL_ATTR_DISABLEPWDCHANGE = disablepwdchange
SYS_MYSQL_ATTR_ACTIVE = active
SYS_MYSQL_ATTR_PWD_QUESTION = question
SYS_MYSQL_ATTR_PWD_ANSWER = answer
SYS_LDAP_BASE = o=extmailAccount,dc=test.com
SYS_LDAP_RDN = cn=Manager,dc=test.com
SYS_LDAP_PASS = secret
SYS_LDAP_HOST = localhost
SYS_LDAP_ATTR_USERNAME = mail
SYS_LDAP_ATTR_DOMAIN = virtualDomain
SYS_LDAP_ATTR_PASSWD = userPassword
SYS_LDAP_ATTR_CLEARPW = clearPassword
SYS_LDAP_ATTR_QUOTA = mailQuota
SYS_LDAP_ATTR_NDQUOTA = netdiskQuota
SYS_LDAP_ATTR_HOME = homedir
SYS_LDAP_ATTR_MAILDIR = maildir
SYS_LDAP_ATTR_DISABLENETDISK = disablenetdisk
SYS_LDAP_ATTR_DISABLEPWDCHANGE = disablePasswdChange
SYS_LDAP_ATTR_ACTIVE = active
SYS_LDAP_ATTR_PWD_QUESTION = question
SYS_LDAP_ATTR_PWD_ANSWER = answer
SYS_AUTHLIB_SOCKET = /var/run/authdaemon/socket
SYS_G_ABOOK_TYPE = file
SYS_G_ABOOK_LDAP_HOST = localhost
SYS_G_ABOOK_LDAP_BASE = ou=AddressBook,dc=test.com
SYS_G_ABOOK_LDAP_ROOTDN = cn=Manager,dc=test.com
SYS_G_ABOOK_LDAP_ROOTPW = secret
SYS_G_ABOOK_LDAP_FILTER = objectClass=OfficePerson
SYS_G_ABOOK_FILE_PATH = /services/extsuite/extmail/globabook.cf
SYS_G_ABOOK_FILE_LOCK = 1
SYS_G_ABOOK_FILE_CONVERT = 0
SYS_G_ABOOK_FILE_CHARSET = utf-8


    初始化extmail数据库,将/services/extsuite/extman/docs/init.sql中

mysql -uroot -p123456 < /services/extsuite/extman/docs/extmail.sql
mysql -uroot -p123456 < /services/extsuite/extman/docs/init.sql


    重启apache,登录web邮件系统http://172.16.27.23,出现如下错误

Unix::Syslog not found, please install it first! (in cleanup) Undefined subroutine &Ext::Logger::do_closelog called at /services/extsuite/extmail/libs/Ext/Logger.pm line 86.
  
   ports安装p5-Unix-Syslog

cd /usr/ports/sysutils/p5-Unix-Syslog
make install clean

  重新登录,问题解决.
  
  进入http://172.16.27.23/extman出现:

Can't locate DBI.pm in @INC (@INC contains: /services/extsuite/extman/libs /usr/local/lib/perl5/5.10.1/BSDPAN /usr/local/lib/perl5/site_perl/5.10.1/mach /usr/local/lib/perl5/site_perl/5.10.1 /usr/local/lib/perl5/5.10.1/mach /usr/local/lib/perl5/5.10.1 .) at /services/extsuite/extman/libs/Ext/Mgr/MySQL.pm line 13. BEGIN failed--compilation aborted at /services/extsuite/extman/libs/Ext/Mgr/MySQL.pm line 13. Compilation failed in require at /services/extsuite/extman/libs/Ext/Mgr.pm line 37.

      解决办法安装,ports安装p5-DBD-mysql

cd /usr/ports/databases/p5-DBD-mysql
make install clean

    出现下列错误解决办法:

Can't open /var/tmp/extman//sid_26da75f9aec35f2cbc6b4fa425ab525e, No such file or directory


mkdir /var/tmp/extman
chmor-R 777 /var/tmp/extman    

     重新登录,问题解决.


       七、测试邮件系统

   1.进入 http://172.16.27.23/extman [email protected]默认的密码是extmail*123*,添加一个域test.com
   2.进入 http://172.16.27.23 注册新用户
   3.安装p5-MIME-Base64

cd /usr/ports/converters/p5-MIME-Base64/
make install clean

    4.通过p5-MIME-Base64来取得用户名和密码的base64编码

perl -MMIME::Base64 -e 'print encode_base64("wq1\@test.com");'
d3ExQHRlc3QuY29t
perl -MMIME::Base64 -e 'print encode_base64("wq1");'
d3Ex

    5.测试发送邮件(端口:25):

#telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 test.com ESMTP Mail System
ehlo mail.test.com
250-mail.test.com
250-PIPELINING
250-SIZE 14680064
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
d3ExQHRlc3QuY29t           //此用户名为:[email protected]
334 UGFzc3dvcmQ6
d3Ex                               //此用户密码为:wq1
235 2.7.0 Authentication successful   //验证成功
MAIL FROM:<[email protected]>   //告诉服务器发信人Email地址
250 2.1.0 Ok
RCPT TO:<[email protected]> //告诉收信人Email地址
250 2.1.5 Ok
DATA                        //告诉服务器开始写信
354 End data with <CR><LF>.<CR><LF>
SUBJECT:test2          //SUBJECT后面是邮件主题
test                         //邮件正文
.                              //换行后输入.后按回车,表示信件内容书写完毕
250 2.0.0 Ok: queued as 42FB742CB
quit
221 2.0.0 Bye
Connection closed by foreign host.


      6.测试收取邮件(端口:110):

# telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
user [email protected]
+OK Password required.
pass wq2
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 397
.
retr 1                        //返回第一封信的全部内容
+OK 397 octets follow.
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from mail.test.com (localhost [127.0.0.1])
        by mail.test.com (Postfix) with ESMTPA id 7254842CB
        for <[email protected]> Wed,  9 Mar 2011 11:12:20 +0800 (CST)
SUBJECT:test2
Message-Id: <[email protected]>
Date: Wed,  9 Mar 2011 11:12:20 +0800 (CST)
From: [email protected]
To: undisclosed-recipients:;

test
.
dele 1             //删除第一封信
+OK Deleted.
quit
+OK Bye-bye.
Connection closed by foreign host.


至此,一个简单的邮件服务器搭建完毕。

你可能感兴趣的:(postfix,邮件系统)