关闭

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

标签: freebsdmysqldomainapacheapache模块table
809人阅读 评论(0) 收藏 举报
由于写上一篇文章的时候也刚刚接触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指定的域外,其他域用户登陆都需要输入完整的电子邮件地址。
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:481786次
    • 积分:6692
    • 等级:
    • 排名:第3509名
    • 原创:212篇
    • 转载:30篇
    • 译文:0篇
    • 评论:41条
    文章分类
    最新评论