中国青基会
RSS
热门关键字:  None  linux+moodle安装  mac  rhel5  199
当前位置 : Nixsky>服务器>Mail>列表

使用Postfix构建基于FreeBSD的邮件系统(简化版)

来源:www.freebsdchina.org 作者: 时间:2007-12-29 点击:

  由于写上一篇文章的时候也刚刚接触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/data/postfixadmin

  mysql -uroot -p

  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指定的域外,其他域用户登陆都需要输入完整的电子邮件地址。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册