Postfix邮件服务系统原理及配置(2)

为postfix服务开启用户别名支持:
  1、在配置文件开启基于hash的别名文件支持
      在main.cf中,找到如下指令,而后启用它(即移除前面的#号):
      #alias_maps = hash:/etc/aliases
  2、在/etc/aliases文件中定义新的别名项,其格式通常为以冒号隔开的两个字段,前一字段为别名用户,后一字段为实际用户
      RedHat: neo
  3、将/etc/aliases转换为hash格式:
      # postalias  /etc/aliases
  4、让postfix重新载入配置文件,即可进行测试;
  实现postfix基于客户端的访问控制
    1、基于客户端的访问控制概览
        postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制。客户端判别机制可以设定一系列客户信息的判别条件:
        smtpd_client_restrictions
        smtpd_data_restrictions
        smtpd_helo_restrictions
        smtpd_recipient_restrictions
        smtpd_sender_restrictions
        上面的每一项参数分别用于检查SMTP会话过程中的特定阶段,即客户端提供相应信息的阶段,如当客户端发起连接请求时,postfix就可以根据配置文件中定义的smtpd_client_restrictions参数来判别此客户端IP的访问权限。相应地,smtpd_helo_restrictions则用于根据用户的helo信息判别客户端的访问能力等等。
        如果DATA命令之前的所有内容都被接受,客户端接着就可以开始传送邮件内容了。邮件内容通常由两部分组成,前半部分是标题(header),其可以由header_check过滤,后半部分是邮件正文(body),其可以由check_body过滤。这两项实现的是邮件“内容检查”。
        postfix的默认配置如下:
        smtpd_client_restrictions =
        smtpd_data_restrictions =
        smtpd_end_of_data_restrictions =
        smtpd_etrn_restrictions =
        smtpd_helo_restrictions =
        smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
        smtpd_sender_restrictions =
        这限制了只有mynetworks参数中定义的本地网络中的客户端才能通过postfix转发邮件,其它客户端则不被允许,从而关闭了开放式中继(open relay)的功能。
        Postfix有多个内置的限制条件,如上面的permit_mynetworks和reject_unauth_destination,但管理员也可以使用访问表(access map)来自定义限制条件。自定义访问表的条件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access进行,它们后面通常跟上type:mapname格式的访问表类型和名称。其中,check_sender_access和check_recipient_access用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如admin@neo.com;也可以只使用域名,如neo.com;还可以只有用户名的部分,如jun@。


实验1
  禁止192.168.100.3这台主机通过工作在192.168.100.5上的postfix服务发送邮件为例演示说明其实现过程。访问表使用hash的格式。
      (1)首先,编辑/etc/postfix/access文件,以之做为客户端检查的控制文件,在里面定义如下一行:
          192.168.100.3  REJECT
      (2)将此文件转换为hash格式
          # postmap /etc/postfix/access
      (3)配置postfix使用此文件对客户端进行检查
          编辑/etc/postfix/main.cf文件,添加如下参数:
          smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
      (4)让postfix重新载入配置文件即可进行发信控制的效果测试了。

实验2
  禁止通过本服务器向baidu.com域发送邮件为例演示其实现过程。访问表使用hash的格式。
      (1)首先,建立/etc/postfix/deny文件(文件名任取),在里面定义如下一行:
          baidu.com  REJECT
      (2)将此文件转换为hash格式
          # postmap /etc/postfix/deny
      (3)配置postfix使用此文件对客户端进行检查
          编辑/etc/postfix/main.cf文件,添加如下参数:
          smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/deny, permit_mynetworks, reject_unauth_destination
      (4)让postfix重新载入配置文件即可进行发信控制的效果测试了。


  为postfix开启基于cyrus-sasl的认证功能
    查看postfix是否支持cyrus的sasl认证
    #postconf -a
    cyrus
    dovecot
  #vim /etc/postfix/main.cf
  添加以下内容:
############################cyrus-SASL###################################################
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!
########################################################################################


  # vim /usr/lib/sasl2/smtpd.conf
      添加如下内容:
      pwcheck_method: saslauthd
      mech_list: PLAIN LOGIN
  让postfix重新加载配置文件
      #/usr/sbin/postfix reload
  [root@mail ~]# telnet mail.neo.com 25
Trying 192.168.100.5...
Connected to mail.neo.com (192.168.100.5).
Escape character is '^]'.
220 Welcome to our mail.neo.com ESMTP,Warning: Version not Available!
ehlo mail.neo.com
250-mail.neo.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN
250-AUTH=LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
确保与我们刚开始测试postfix是否能工作,多出了两行,这样证名己成功了


  安装Courier authentication library
      1、courier简介
      courier-authlib是Courier组件中的认证库,它是courier组件中一个独立的子项目,用于为Courier的其它组件提供认证服务。其认证功能通常包括验正登录时的帐号和密码、获取一个帐号相关的家目录或邮件目录等信息、改变帐号的密码等。而其认证的实现方式也包括基于PAM通过/etc/passwd和/etc/shadow进行认证,基于GDBM或DB进行认证,基于LDAP/MySQL/PostgreSQL进行认证等。因此,courier-authlib也常用来与courier之外的其它邮件组件(如postfix)整合为其提供认证服务。
      # tar jxvf courier-authlib-0.64.0.tar.bz2
      # cd courier-authlib-0.64.0
      #./configure \
  --prefix=/usr/local/courier-authlib \
  --sysconfdir=/etc \
  --without-authpam \
  --without-authshadow \
  --without-authvchkpw \
  --without-authpgsql \
  --with-authmysql \
  --with-mysql-libs=/usr/lib/mysql \
  --with-mysql-includes=/usr/include/mysql \
  --with-redhat \
  --with-authmysqlrc=/etc/authmysqlrc \
  --with-authdaemonrc=/etc/authdaemonrc \
  --with-mailuser=postfix \
  --with-mailgroup=postfix \
  --with-ltdl-lib=/usr/lib \
  --with-ltdl-include=/usr/include
  # make &&make install
  # chmod 755 /usr/local/courier-authlib/var/spool/authdaemon/ 
  # cp /etc/authmysqlrc.dist /etc/authmysqlrc
  # cp /etc/authdaemonrc.dist /etc/authdaemonrc
  修改/etc/authdaemonrc 文件
      authmodulelist="authmysql"
      authmodulelistorig="authmysql"
      daemons=10
  配置其通过mysql进行邮件帐号认证
    编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。
 MYSQL_SERVER localhost
 MYSQL_PORT 3306                  (指定你的mysql监听的端口,这里使用默认的3306)
 MYSQL_USERNAME  extmail      (这时为后文要用的数据库的所有者的用户名)
 MYSQL_PASSWORD extmail        (密码)
 MYSQL_SOCKET  /var/lib/mysql/mysql.sock
 MYSQL_DATABASE  extmail
 MYSQL_USER_TABLE  mailbox
 MYSQL_CRYPT_PWFIELD  password
 MYSQL_UID_FIELD  '2525'
 MYSQL_GID_FIELD  '2525'
 MYSQL_LOGIN_FIELD  username
 MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)
 MYSQL_NAME_FIELD  name
 MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)
  提供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
    # echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
    # ldconfig -v
    # service courier-authlib start  (启动服务)
  配置postfix和courier-authlib
        新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
        #mkdir –pv /var/mailbox
        #chown –R postfix /var/mailbox
  接下来重新配置SMTP 认证,
    编辑 /usr/lib/sasl2/smtpd.conf ,确保其为以下内容:
    pwcheck_method: authdaemond
    log_level: 3
    mech_list:PLAIN LOGIN
    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_domains =
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
##############################################################################################

此处配置完后最好执行一次postconf -n检查是否有选项无效,如果有,注释或删除都行
    2、使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:
        # tar zxvf  extman-1.1.tar.gz
        # cd extman-1.1/docs
        # mysql -u root -p < extmail.sql
        # mysql -u root -p <init.sql
        # cp mysql*  /etc/postfix/
    3、授予用户extmail访问extmail数据库的权限
        mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
        mysql> GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';
    说明:
        1、启用虚拟域以后,需要取消中心域,即注释掉myhostname, mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的。
        2、对于MySQL-5.1以后版本,其中的服务脚本extmail.sql执行会有语法错误;可先使用如下命令修改extmail.sql配置文件,而后再执行。修改方法如下:
            # sed -i 's@TYPE=MyISAM@ENGINE=InnoDB@g' extmail.sql


    1  配置dovecot
    # vi /etc/dovecot.conf
##############################################################################################
    mail_location = maildir:/var/mailbox/%d/%n/Maildir
  ……
 auth default {
    mechanisms = plain
    passdb sql {
        args = /etc/dovecot-mysql.conf
    }
    userdb sql {
        args = /etc/dovecot-mysql.conf
    }
    ……
############################################################################################
# vim /etc/dovecot-mysql.conf   
############################################################################################     
driver = mysql
connect = host=localhost 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'
###########################################################################################
    说明:如果mysql服务器是本地主机,即host=localhost时,如果mysql.sock文件不是默认的/var/lib/mysql/mysql.sock,可以使用host=“sock文件的路径”来指定新位置;例如,使用通用二进制格式安装的MySQL,其soc文件位置为/tmp/mysql.sock,相应地,connect应按如下方式定义。
    connect = host=/tmp/mysql.sock dbname=extmail user=extmail password=extmail
  接下来启动dovecot服务:
        # service dovecot start
        # chkconfig dovecot on


    2  安装Extmail-1.2
        说明:如果extmail的放置路径做了修改,那么配置文件webmail.cf中的/var/www路径必须修改为你所需要的位置。本文使用了默认的/var/www,所以,以下示例中并没有包含路径修改的相关内容。
    1、安装
        # tar zxvf extmail-1.2.tar.gz
        # mkdir -pv /var/www/extsuite
        # mv extmail-1.2 /var/www/extsuite/extmail
        # cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf
    2、修改主配置文件
        #vi /var/www/extsuite/extmail/webmail.cf
    部分修改选项的说明:
############################################################################################
SYS_MESSAGE_SIZE_LIMIT = 5242880
用户可以发送的最大邮件
SYS_USER_LANG = en_US
语言选项,可改作:
SYS_USER_LANG = zh_CN
SYS_MAILDIR_BASE = /home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE = /var/mailbox
SYS_MYSQL_USER = db_user
SYS_MYSQL_PASS = db_pass
以上两句句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库,这里修改为:
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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/18411.html