Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1273764
  • 博文数量: 179
  • 博客积分: 3044
  • 博客等级: 中校
  • 技术积分: 2437
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-25 15:04
文章分类

全部博文(179)

文章存档

2021年(2)

2020年(1)

2019年(5)

2018年(13)

2017年(6)

2016年(10)

2015年(11)

2014年(11)

2013年(13)

2012年(23)

2011年(25)

2010年(2)

2008年(1)

2007年(5)

2006年(51)

分类: LINUX

2012-10-17 10:37:32

Linux上邮件服务postfix 2.9.3编译安装+extmail+extman
2012-07-13 15:47:23
标签:extmai postfix pop3 smtp
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://7ings.blog.51cto.com/5121572/929955

安装完后提示:

 Warning: you still need to edit myorigin/mydestination/mynetworks

    parameter settings in /etc/postfix/main.cf.


    See also

    for information about dialup sites or about sites inside a firewalled

    network.


    BTW: Check your /etc/aliases file and be sure to set up aliases

    that send mail for root and postmaster to a real person, then run

    /usr/bin/newaliases.   



电子邮件,就是用一种电子手段提供信息交换的通信方式。

   在生活当中,我们如果想邮寄出一封信,要写上收信人地址和发信人地址,然后交给我们当地的邮局,如果收信人是本地的,我们本地的邮局就派邮递员,将信发到收信人的邮箱里,收信人去拿就可以了,如果是外地的,本地的邮局将信件发送给收信人地方的邮局,投递给收信人,而我们的电子邮件的原理,和我们现实生活当中有很多的相似之处呢。

   整个电子邮件传输过程的参与者有4部分:

   1、MUA(Mail User Agent):邮件用户代理,帮助我们收发和查看邮件,常见的有微软的Outlook和Foxmail等,还有现在我们基本都是通过网页来管理邮件的,就是webmail。

   2、MTA(Mail Transfer Agent):邮件传输代理,在服务器上就收邮件,和我们的邮局很像呢,常用的软件有sendmail和postfix,sendmail是一个进程完成所有功能,在运行单个功能的过程中,被劫持,整个进程就被劫持了,postfix是有IBM开发,基于模块化设计,将各个功能做成模块,实现sendmail作用的同时安全性高,自带MDA,投递效率在同等调下能达到sendmail的4倍。

   3、MDA(Mail Delivery Agent):邮件投递代理,充当着邮递员的身份,帮助我们把邮件放到服务器中对应用户的邮件存储位置中(利用数据库最好),也就是我们的邮箱了,常见的有procmail(整合进sendmail中)和maildrop。

   4、MRA(Mail Retrieval Agent):邮件取回代理,通过这个和邮件服务器打交道取回我们的邮件,常使用到的有dovecot(支持数据库)和cyrus-imap(不支持)。

    了解了邮件服务器的组成,下面通过图1.1,帮助大家简单了解一下邮件传输的过程。

    

                           图1.1邮件传输过程

    邮件传输过程:

    1)通过MUA发送邮件到MTA,遵循smtp协议。

    2)如果发送的邮件的接收者和发送者在相同的区域,MDA将邮件存储到用户在邮件服务器中的邮箱中。

    3)如果发送的邮件的接收者和我们不在同一个区域中,MTA通过DNS中的MX记录,解析到收信人MTA的ip地址,然后转发给收信者所在区域的邮件服务器MTA,这个过程我们称之为中继,如果MTA不做任何认证就做中继,这时MTA就提供了开始式中继,如果一个邮件服务器是开放式中继,过不了多久,我们邮件服务器就会成为一个垃圾邮件服务器,在安装邮件服务器的时候,我们要尽量避免中继,使用到中继,也要对用户进行限制和认证。

    4)将接收者所在区域的MTA经过中继收到的邮件,投递到收信人所在服务器的邮箱当中。

    5)通过MUA从服务器上取回我们的邮件,遵循pop3和imap协议。

   那么,对邮件服务器的原理有一个简单的了解后,让我们自己构建使用webmial收发邮件的一个邮件服务器吧,实现整个邮件的传输过程。

一、DNS的安装,bind97
        大家可以查看我关于dns的安装博文,下面给出dns中MX记录的配置.
        正向域,如图1.2:

   

                   图1.2 正向域MX记录

        反向域,如图1.3:

   

                   图1.3 反向域MX记录

二、安装配置postfix
    1、从官网上下载postfix-2.9.3.tar.gz进行编译安装
         # tar zxvf postfix-2.9.3.tar.gz
        # cd postfix-2.9.3
        # make Makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'
         -D表示启用功能,-I使用的头文件
         -L表示辅助库,
         -lz解压缩工具
        -lm编码工具
        -lssl -lcrypto  使用ssl功能
    # make
    # make install
    make install 会给我们提供一个交互式的界面,使用默认选项按回车就可也了
    install_root: [/] /                            指定postfix的根,工作在chroot模式下
    tempdir: [/root/postfix-2.9.1] /tmp/postfix    临时目录
    config_directory: [/etc/postfix] /etc/postfix    配置文件
    command_directory: [/usr/sbin]                   命令位置
    daemon_directory: [/usr/libexec/postfix]      可执行程序
     data_directory:[/var/lib/postfix]              数据存放位置
     html_directory: [no]                                     网页形式的帮助文档
     queue_directory: [/var/spool/postfix]             邮件队列所在位置
     sendmail_path: [/usr/sbin/sendmail]               sendmail命令所在位置
     newaliases_path: [/usr/bin/newaliases]            二进制文件生成命令
     mailq_path: [/usr/bin/mailq]                            邮件队列命令
     mail_owner: [postfix]                                     邮件服务器的属主
     setgid_group: [postdrop]                               投递邮件的属组
     manpages: [/usr/local/man]                             man文档所在位置
     readme_directory: [no]
    2、创建运行postfix的用户和组
    # groupadd -g 2525 postfix
    # useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
    #groupadd -g 2526 postdrop   
    # useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop
       postdrop是用来实现MDA投递邮件的用户,用户的ID最好使用大于1000的,如果以后使用到maildrop,maildrop规定用户ID大于1000,以postfix用户运行maildrop的时候,避免冲突。
    3、修改postfix的配置文件
      # vim /etc/postfix/main.cf
         主要修改以下几项为我们所需要的配置
     myhostname = mail.magedu.com   运行postfix的主机名
     myorigin=$mydomain ,用来指明发件人所在的域名,发件人地址伪装持
     mydomain = magedu.com          说明自己负责的域,默认情况下,postfix将myhostnam
                                                      e的第一部分删除而作为mydomain的值
     mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain      
                                   本机负责接收的邮件的所在的域,包含在此定义中,为其中继 
     mynetworks = 127.0.0.0/8
                                   允许某个网段和本机通过我们进行中继,这里设定只允许本机中继,如果我们配置了认证,同样为认证通过的用户认证。
     #postfix reload                
     让我们对配置文件的修改立即生效,但需要特别说明的是,在配置文件有一个参数inet_interfaces 指定postfix系统监听的网络接口,如果我们队这个参数进行更改的话,只有重启postfix服务才能有效。
    4、为postfix提供sysv风格的脚本
        大家有能力的可以自己编译,简单点的我们从postfix的rpm包中获取
      #rpm2cpio  RPM.rpm | cpio -id 
       将rpm转化为cpio的类型,再通过cpio打开,实现对rpm的解压缩并不安装,最后复制到/etc/rc.d/init.d目录下。 
      #chkconfig --add postfix      添加至服务列表
      #chkconfig postfix on         设置开机启动
      # service postfix start       开启服务
    5、postfix扩展应用,为postfix开启用户别名支持
     1)在main.cf中添加
       alias_maps = hash:/etc/aliases
     2)/etc/aliases文件中定义新的别名项
       jerrry:       tom
       原来发给jerry的邮件,将转发给tom,当我们有多个邮箱,通过别名,可以使用一个邮箱接收所有的邮箱的邮件
     3)# postalias  /etc/aliases
       邮件别名功能使用的文件实际上是/etc/aliases.db,通过这个命令将aliase(ASCII文件)中的文件重写进aliases.db(Hash)
     4) # postfix reload 重新载入配置文件
三、为postfix开启基于cyrus-sasl的认证功能
    1、先验证我们的postfix是否支持sasl的认证(图3.1)。

                                        图3.1 验证
         # vim /usr/lib/sasl2/smtpd.conf ,这个文件本身是不存在,我们自己创建,文件中添加以下内容
      pwcheck_method: authdaemond    使用什么认证       
      log_level: 3                              记录日志,使用的时候最好关掉,进行测试的时候打开
      mech_list:PLAIN LOGIN        认证的机制
    2、# vim /etc/postfix/main.cf ,编译postfix的配置文件,支持sasl基于机制的认证
############################CYRUSSASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_path= smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
    3、service cyrus-sasl start 启用sasl服务
四、安装Courier authentication library
       使用courier-authlib提供基于Mysql用户认证服务
    1、编译安装
      #postconf -m
          查看postfix是否支持mysql
     编译安装
      # tar jxvf courier-authlib-0.62.4.tar.bz2
      # cd courier-authlib-0.62.4
      #./configure \
    --prefix=/usr/local/courier-authlib \       安装目录
    --sysconfdir=/etc \                               配置文件目录
    --without-authpam \                             禁用pam的认证
    --without-authshadow \
    --without-authvchkpw \
    --without-authpgsql \ 
    --with-authmysql \                               启用mysql认证
    --with-mysql-libs=/usr/lib/mysql \          mysql库文件
    --with-mysql-includes=/usr/include/mysql \             mysql的头文件
    --with-redhat \                                           针对系统做优化,只针对redhat和centos
    --with-authmysqlrc=/etc/authmysqlrc \       基于mysql认证使用到的配置文件
    --with-authdaemonrc=/etc/authdaemonrc \        认证进程的配置文件
    --with-mailuser=postfix \                                   基于哪个用户收发
    --with-mailgroup=postfix \                                基于哪个组收发
    --with-ltdl-lib=/usr/lib \                               需要安装libart_lgpl 和libtool_ltdl软件包
    --with-ltdl-include=/usr/include 
    # make
    # make install
    2、提供配置文件
    # cp /etc/authdaemonrc.dist  /etc/authdaemonrc 
    # cp /etc/authmysqlrc.dist  /etc/authmysqlrc
    修改/etc/authdaemonrc 文件,
    authmodulelist="authmysql"                 认证时使用的模块列表,只保留authmysql
    authmodulelistorig="authmysql"           原始认证时使用模块列表,只保留authmysql
    daemons=10          启动认证进程的个数,并发认证响应个数,和cpu的能力有关
    3、配置其通过mysql进行邮件帐号认证,依赖extmail数据库,extmail提供脚本直接创建
     编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。 
MYSQL_SERVER localhost            指定mysql服务器
MYSQL_PORT 3306                      指定你的mysql监听的端口,这里使用默认的3306)
MYSQL_USERNAME  extmail       这时为后文要用的数据库的所有者的用户名,使
                                                         用时候一定要修改,不要照搬
MYSQL_PASSWORD extmail              密码
MYSQL_SOCKET  /tmp/mysql.sock    套接字文件,源码安装在tmp下,rpm安装
                                                              在/var/lib/mysql/mysql.sock                 
MYSQL_DATABASE  extmail              用于认证的数据库
MYSQL_USER_TABLE  mailbox         存储用户账户的表              
MYSQL_CRYPT_PWFIELD  password             表中用户密码字段名
MYSQL_UID_FIELD  '2525'                   表中UID字段
MYSQL_GID_FIELD  '2525'                   表中GID字段
MYSQL_LOGIN_FIELD  username        登录时匹配的表中的字段
MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)  服务器MDA投递存储邮件目
                                                                                           录,postfix属主,postdrop属组
MYSQL_NAME_FIELD  name
MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir) 用户邮箱目录
       参数中指定的数据库,表我们可以自己创建,也可以通过脚本,extmail为我们提供了创建的脚本,这里我们先写上去
    4、提供SysV服务脚本,方便我们启动,为我们提供的有样本
       # cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
       # chmod 755 /etc/init.d/courier-authlib                      添加执行权限  
       # chkconfig --add courier-authlib                              添加到服务列表
       # chkconfig --level 2345 courier-authlib on               在2345级别开机自动启动

       #echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
                                                                                输出库文件                                   
       # ldconfig                        
       # service courier-authlib start   (启动服务)
    5、配置postfix和courier-authlib
       新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
        #mkdir –pv /var/mailbox
        #chown –R postfix /var/mailbox
        接下来重新配置SMTP 认证,编辑 /usr/lib/sasl2/smtpd.conf ,添加下面一行:   authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket   套接字文件,以后会多次使用
五、让postfix支持虚拟域和虚拟用户
    1、编辑/etc/postfix/main.cf,添加如下内容:
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox            虚拟用户邮箱位置
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf  
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual                            指定为虚拟用户的代理
maildrop_destination_recipient_limit = 1             一次投递一个
maildrop_destination_concurrency_limit = 1        并发投递限制
##########################QUOTA Settings########################
message_size_limit = 14336000                  单个邮件信息大小
virtual_mailbox_limit = 20971520               邮箱大小
virtual_create_maildirsize = yes                   邮箱大小初始值
virtual_mailbox_extended = yes                  邮箱是否支持扩展                    
virtual_mailbox_limit_maps = mysql:/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 Tidy your mailbox and try again later.   超出邮箱大小,处理信息
virtual_overquota_bounce = yes                     是否弹回邮件
     2、下面就可以重启服了,但是我们再配置中,支持数据库的参数,在mysql中还没没有创建,我们可以用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:
        # tar zxvf  extman-1.1.tar.gz
        # cd extman-1.1/docs
         导入extmail.sql和init.sql两个文件,这里要说明的是,由于mysql5.5以后的版本,不再支持TYPE的参数,对脚本内的参数进行更改
       #sed -i  extmail.sql
       #sed -i  init.sql
       # mysql -u root -p        # mysql -u root -p        # cp mysql*  /etc/postfix/
    3、授予用户extmail访问extmail数据库的权限
       #mysql
mysql> GRANT all  on extmail.* TO  IDENTIFIED BY 'extmail';
mysql> GRANT all  on extmail.* TO  IDENTIFIED BY 'extmail';
mysql>FLUSH PRIVILEGES
      说明:启用虚拟域以后,需要取消中心域,即注释掉myhostname, mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的,但是mydestination一定要去掉。
六、配置dovecot支持虚拟用户
     1、安装devecot软件包
     #yum install devecot
     # vi /etc/dovecot.conf
mail_location = maildir:/var/mailbox/%d/%n/Maildir
……              指定邮箱存储格式:邮箱所在目录/  域名 /用户 /用户邮箱目录 
     #dovecot如何认证
auth default {                           
    mechanisms = plain                                 认证机制
    passdb sql {
        args = /etc/dovecot-mysql.conf            
    }
    userdb sql {
        args = /etc/dovecot-mysql.conf
    }
    2、创建dovecot-mysql.conf,这个文件本身是不存的
     # vim /etc/dovecot-mysql.conf                 
     driver = mysql
     connect = host=localhost(如果是编译安装的mysql,修改成/tmp/mysql.sock)
     dbname=extmail user=extmail password=extmail
     default_pass_scheme = CRYPT
      password_query = SELECT username AS user,password AS password FROM mailbox   WHERE username = '%u'                            
       user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
     3、接下来启动dovecot服务,就OK了
     # service dovecot start
     # chkconfig dovecot on
七、安装Extmail-1.2 ,需要per-DBI 和per-DBD-Mysql模块用于连接数据库
     1、安装
      # tar zxvf extmail-1.2.tar.gz
      # mkdir -pv /web/vhosts/extsuite  
     # mv extmail-1.2 /var/www/extsuite/extmail
     # cp /var/www/extsuite/extmail/webmail.cf.default  /web/vhosts/extsuite/extmail/webmail.cf
     2、修改主配置文件
      #vi /web/vhosts/extsuite/extmail/webmail.cf
      部分修改选项的说明:
     SYS_MESSAGE_SIZE_LIMIT = 5242880
      用户可以发送的最大邮件,指定邮箱配额,可以取代postfix配置文件中的指定
     SYS_USER_LANG = zh_CN   
     SYS_MAILDIR_BASE = /var/mailbox
     SYS_MYSQL_USER = extmail
     SYS_MYSQL_PASS = extmail
     SYS_MYSQL_HOST = localhost  
                指明数据库服务器主机名,这里默认即可
     SYS_MYSQL_TABLE = mailbox
     SYS_MYSQL_ATTR_USERNAME = username
     SYS_MYSQL_ATTR_DOMAIN = domain
     SYS_MYSQL_ATTR_PASSWD = password
      以上用来指定验正用户登录里所用到的表,以及用户名、域名和用户密码分别对应的表中列的名称;这里默认即可
     SYS_AUTHLIB_SOCKET = /var/spool/authdaemon/socket
此句用来指明authdaemo socket文件的位置,这里修改为:
     SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
     这里需要另外说明的是,extmail的配置文件中,如果extmail放在了/var/www/extsuite下,配置文件无需更改,我们是在/web/vhosts中,所有/var/www都要替换成/web/vhosts。在配置extman的时候同样需要更改。
    3、apache相关配置
     #vim /etc/httpd/httpd.cong
     启用cgi模块
     LoadModule cgi_module modules/mod_cgi.so
    启用虚拟主机
    Include /etc/httpd/extra/httpd-vhosts.conf
    # vim /etc/httpd/httpd.conf
    User postfix
    Group postfix
   #vim /etc/httpd/extra/httpd-vhosts.conf

ServerName mail.magedu.com
DocumentRoot /web/vhosts/extsuite/extmail/html/
ScriptAlias /extmail/cgi /web/vhosts/www/extsuite/extmail/cgi
Alias /extmail /web/vhosts/extsuite/extmail/html
 
Options none
          AllowOverride none
         Require all granted
      


      要想访问虚拟用户中的文件,必须设定目录的权限。
      修改 cgi执行文件属主为apache运行身份用户:
# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
    4、依赖关系的解决
      extmail将会用到perl的Unix::syslogd功能,您可以去搜索下载原码包进行安装。
      # tar zxvf Unix-Syslog-0.100.tar.gz
      # cd Unix-Syslog-0.100
     # perl Makefile.PL
     # make
     # make install
   5、启动apache服务
# service httpd start
# chkconfig httpd on
八、安装Extman-1.1
    1、安装及基本配置
     # tar zxvf  extman-1.1.tar.gz
     # mv extman-1.1 /web/vhosts/extsuite/extman
     修改配置文件以符合本例的需要:
     # cp /web/vhosts/extsuite/extman/webman.cf.default  /web/vhosts/extsuite/extman/webman.cf
     # vi /web/vhosts/extsuite/extman/webman.cf
SYS_MAILDIR_BASE = /home/domains
     此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox
SYS_DEFAULT_UID = 1000
SYS_DEFAULT_GID = 1000
      此两处后面设定的ID号需更改为前而创建的postfix用户和postfix组的id号,本文使用的是2525,因此,上述两项需要修改为:
SYS_DEFAULT_UID = 2525
SYS_DEFAULT_GID = 2525
SYS_MYSQL_USER = webman   实际上extmail 只需要查找权限就可,这里最好创建一个web满用户,授权所有权限
SYS_MYSQL_PASS = webman
     修改为:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
     取消验证码
SYS_CAPTCHA_ON = 1
     修改为:
SYS_CAPTCHA_ON = 0
     而后修改cgi目录的属主:
# chown -R postfix.postfix /var/www/extsuite/extman/cgi/
     在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:
ScriptAlias /extman/cgi /web/vhosts/extsuite/extman/cgi
Alias /extman /web/vhosts/extsuite/extman/html
     创建其运行时所需的临时目录,并修改其相应的权限:
     #mkdir  -pv  /tmp/extman
     #chown postfix.postfix  /tmp/extman
     重新启动apache服务器后,Webmail和Extman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:

     选择管理即可登入extman进行后台管理了。默认管理帐号为:  密码为:extmail*123*
     这里特别说明下,当我们通过管理用户登入,extman,进行管理的时候,创建自己的域的时候,创建完成后,要再次编辑,允许自由注册,这样我们就允许新用户注册

阅读(3365) | 评论(0) | 转发(1) |
0

上一篇:postfix main.cf参数说明

下一篇:nginx ssl日志

给主人留下些什么吧!~~