快速搭建基于web的postfix邮件系统



服务器。 
   

 环境: 
   

 [root@cc ~]# cat /etc/redhat-release 
   
 CentOS release 4.6 (Final) 
   
 [root@cc ~]# uname -a 
   
Linux cc 2.6.9-67.ELsmp #1 SMP Fri Nov 16 12:48:03 EST 2007 i686 i686 i386 GNU/ 
   Linux 
   


 所有软件包: 
   

 postfix-2.4.7.tar.gz 
   
 mysql-5.0.45-linux-i686.tar.gz 
   
 cyrus-sasl-2.1.22.tar.gz 
   
 DB-4.5.20 
   
 httpd-2.2.6.tar.gz 
   
 php-5.2.5.tar.bz2 
   
 courier-authlib-0.59.1.tar.bz2 
   
 courier-imap-4.0.4.tar.bz2 
   
 extmail-1.0.2.tar.gz 
   
 extman-0.2.2.tar.gz    
   
 maildrop-2.0.4 
   
 Unix-Syslog-0.100.tar.gz 
   
 DBD-mysql-3.0002_4.tar.gz 
   
 DBI-1.604.tar.gz 
   

 libjpeg-devel-6b-33.i386.rpm 
   
 libpng-devel-1.2.7-3.el4_5.1.i386.rpm 
   
 zlib-devel-1.2.1.2-1.2.i386.rpm 
   


主机名:  
   
域名:    
   


 一. 卸载sendmail 
   

     shell> sudo rpm -e sendmail-8.13.1-3.2.el4 --nodeps 
   
     
   
 二. 安装mysql 
   

     # groupadd mysql 
   
     # useradd -g mysql -s /bin/false -M mysql 
   
     # tar -zxvf mysql-5.0.51a-linux-i686-glibc23.tar.gz 
   
     # cd mysql-5.0.51a-linux-i686-glibc23 
   
     # mkdir /usr/local/mysql 
   
     # ./configure --prefix=/usr/local/mysql --enable-thread-safe-client --enable-local-infile --with-charset=gbk --with-extra-charset=all --with-low-memory 
   
     # make 
   
     # make install 
   
     # cp support-files/my-medium.cnf  /etc/my.cnf 
   
     # cd  /usr/local/mysql 
   
     # chown -R mysql . 
   
     # chgrp -R mysql . 
   
     # ./bin/mysql_install_db --user=mysql 
   
     # chown -R root . 
   
     # chown -R mysql var 
   
     # ./bin/mysqld_safe --user=mysql & 
   

     # cd  /usr/local/src/mysql-5.0.45     (这里的目录指的是原压缩包解压后的目录) 
   
     # cp  support-files/mysql.server  /etc/rc.d/init.d/mysqld 
   
     # chmod  700  /etc/rc.d/init.d/mysqld 
   
     加入自动启动服务队列: 
   
     # chkconfig --add mysqld 
   
     # chkconfig  --level  345  mysqld  on 
   

     测试 
   
     # /usr/local/mysql/bin/mysqladmin  ping 
   
     # /usr/local/mysql/bin/mysqladmin  version 
   
     # /usr/local/mysql/bin/mysql 
   

     添加root密码 
   
     # /usr/local/mysql/bin/mysqladmin -uroot -p 'newpasswd' 
   
     说明:此时mysql的root用户的密码为空 
   

     配置库文件搜索路径 
   
     # echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf 
   
     # ldconfig -v 
   

     添加/usr/local/mysql/bin到环境变量PATH中 
   
     #export PATH=$PATH:/usr/local/mysql/bin 
   



 三、安装sasl-2.1.22 
   

 #tar zxvf cyrus-sasl-2.1.22.tar.gz 
   
 #cd cyrus-sasl-2.1.22 
   
 #./configure --prefix=/usr/local/sasl2  --disable-gssapi  --disable-anon  --disable-sample  --disable-digest --enable-plain --enable-login  --enable-sql  --with-mysql=/usr/local/mysql  --with-mysql-includes=/usr/local/mysql/include/mysql --with-mysql-libs=/usr/local/mysql/lib/mysql  --with-authdaemond=/usr/local/courier-authlib/var/spool/authdaemon/socket 
   
 #make 
   
 #make install 
   

 关闭原有的sasl: 
   
 # mv /usr/lib/libsasl2.a  /usr/lib/libsasl2.a.OFF 
   
 # mv /usr/lib/  /usr/lib/.OFF 
   
 # mv /usr/lib/.2.0.19  /usr/lib/.2.0.19.OFF 
   
 # mv /usr/lib/sasl2  /usr/lib/sasl2.OFF 
   
 # rm /usr/lib/ 
   
 # rm /usr/lib/.2 
   

 # ln -sv /usr/local/sasl2/lib/*  /usr/lib 
   

 postfix 2.3以后的版本会分别在/usr/local/lib和/usr/local/include中搜索sasl库文件及头文件,故还须将其 
   链接至此目录中: 
   
 # ln -sv /usr/local/sasl2/lib/*  /usr/local/lib 
   
 # ln -sv /usr/local/sasl2/include/sasl/*  /usr/local/include 
   

 创建运行时需要的目录并调试启动 
   
 # mkdir -pv /var/state/saslauthd       
   
 # /usr/local/sasl2/sbin/saslauthd  -a  shadow  pam  -d 
   

 启动并测试 
   
 # /usr/local/sasl2/sbin/saslauthd -a shadow pam 
   
 # /usr/local/sasl2/sbin/testsaslauthd -u root -p root用户密码 
   

 配置库文件搜索路径 
   
 # echo "/usr/local/sasl2/lib" >> /etc/ld.so.conf 
   
 # echo "/usr/local/sasl2/lib/sasl2" >> /etc/ld.so.conf 
   
 # ldconfig -v 
   

 开机自动启动 
   
 # echo "/usr/local/sasl2/sbin/saslauthd -a shadow pam">>/etc/rc.local 
   


 四、安装berkeley db。 
   

 #mkdir /usr/local/BerkeleyDB 
   
 #tar zxvf db-4.5.20.tar.gz 
   
 #cd db-4.5.20/build_unix 
   
 #../dist/configure --prefix=/usr/local/BerkeleyDB 
   
 #make 
   
 #make install 
   

 修改相应的头文件指向 
   
 # mv  /usr/include/db4  /usr/inculde/db4.OFF 
   
 # rm  /usr/include/db_cxx.h 
   
 # rm  /usr/include/db.h 
   
 # rm  /usr/include/db_185.h 
   
 # ln -sv /usr/local/BerkeleyDB/include  /usr/include/db4 
   
 # ln -sv /usr/local/BerkeleyDB/include/db.h  /usr/include/db.h 
   
 # ln -sv /usr/local/BerkeleyDB/include/db_cxx.h  /usr/include/db_cxx.h 
   

 配置库文件搜索路径 
   
 # echo "/usr/local/BerkeleyDB/lib" >> /etc/ld.so.conf 
   
 # ldconfig -v 
   


 五、安装httpd-2.2.6 
   

 #tar jxvf httpd-2.2.6.tar.gz 
   
 #cd httpd-2.2.6 
   
 #./configure 
   
 --prefix=/usr/local/apache 
   
 --sysconfdir=/etc/httpd 
   
 --enable-so 
   
 --enable-ssl 
   
 --with-ssl=/usr/local/ssl 
   
 --enable-track-vars 
   
 --enable-rewrite 
   
 --with-zlib 
   
 --enable-mods-shared=most   
   
 --enable-suexec                      (后面extmail切换”运行时用户”时要用到) 
   
 --with-suexec-caller=daemon   
   
 #make 
   
 #make install 
   

 #echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.d/rc.local(系统启动时服务自动启动) 
   

 六、安装php-5.2.5 
   

 # tar -zvxf php-5.2.5.tar.gz 
   
 # mkdir -p /usr/local/php 
   
 # cd php-5.2.5 
   
 # ./configure --prefix=/usr/local/php               
   
   --with-apxs2=/usr/local/apache/bin/apxs 
   
   --with-mysql=/usr/local/mysql 
   
   --with-mysqli=/usr/local/mysql/bin/mysql_config 
   
   --with-xml 
   
   --with-png 
   
   --with-jpeg 
   
   --with-zlib 
   
   --with-freetype 
   
   --with-gd   
   
   --enable-track-vars   
   
   --enable-mbstring=all 
   
 # make 
   
 # make install 
   
 # cp php.ini-dist  /usr/local/php/lib/php.ini 
   

 注:编辑apache配置文件httpd.conf,以apache支持php 
   
 # vi /etc/httpd/httpd.conf 
   
 1、添加如下二行 
   
   AddType application/x-httpd-php  .php 
   
   AddType application/x-httpd-php-source  .phps 
   

 2、定位至DirectoryIndex index.html 
   
   修改为: 
   
    DirectoryIndex  index.php  index.html 
   

 3、按照使用习惯,这里将网站根目录指定到/var/www: 
   
 找到DocumentRoot “/usr/local/apache/htdocs” 
   
 修改为:DocumentRoot “/var/www”(后文中我们还会注释掉此行,以启用 
   虚拟主机) 
   

 找到<Directory “/usr/local/apache/htdocs”> 
   
 修改为:<Directory “/var/www”> 
   

 说明:这个对本文来说并非是不可少的。 
   


 七、安装Postfix-2.4.5 
   

 1.安装 
   
 #groupadd -g 2525 postfix 
   
 #useradd -g postfix -u 2525 -s /sbin/nologin -M postfix 
   
 #groupadd -g 2526 postdrop 
   
 #useradd -g postdrop -u 2526 -s /bin/false -M postdrop 
   

 #tar zxvf postfix-2.4.5.tar.gz 
   
 #cd postfix-2.4.5 
   
 #make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/sasl2/include/sasl -I/usr/local/BerkeleyDB/include  -DUSE_TLS -I/usr/local/ssl/include/openssl ' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/sasl2/lib -lsasl2 -L/usr/local/BerkeleyDB/lib -L/usr/local/ssl/lib -lssl -lcrypto' 
   
 #make 
   
 #make install 
   

 按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值) 
   

   install_root: [/] / 
   
   tempdir: [/usr/local/src/ postfix-2.4.5] /tmp 
   
   config_directory: [/etc/postfix] /etc/postfix 
   
   daemon_directory: [/usr/libexec/postfix] /usr/local/postfix/libexec 
   
   command_directory: [/usr/sbin] /usr/local/postfix/sbin 
   
   queue_directory: [/var/spool/postfix] 
   
   sendmail_path: [/usr/sbin/sendmail] 
   
   newaliases_path: [/usr/bin/newaliases] 
   
   mailq_path: [/usr/bin/mailq] 
   
   mail_owner: [postfix] 
   
   setgid_group: [postdrop]    
   
     html_directory: [no] /var/www/postfix_html 
   
     manpages: [/usr/local/man] /usr/local/postfix/man    
   
     readme_directory: [no] 
   

 说明:这里的postfix将安装在独立的目录/usr/local/postfix中,目的是为了方便管理;您亦可以采用默认安装的方式,可能这样使用起来会更为方便些; 
   

 生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低: 
   
 #  newaliases 
   

 2.进行一些基本配置,测试启动postfix并进行发信 
   
 #vi /etc/postfix/ 
   
 修改以下几项为您需要的配置 
   
 myhostname =  
   
 myorigin =    
   
 mydomain =  
   
 mydestination = $myhostname, localhost.$mydomain, localhost, $hostname 
   
 mynetworks = 192.168.1.0/24, 127.0.0.0/8 
   

 说明: 
   
 myorigin参数用来指明发件人所在的域名; 
   
 mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件; 
   
 myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名; 
   
 mydomain参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值; 
   
 mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问; 
   
 inet_interfaces 参数指定postfix系统监听的网络接口; 
   

 注意: 
   
 1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的; 
   
 2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用; 
   
 3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix; 
   
 4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续; 
   

 启动postfix 
   
 /usr/local/postfix/sbin/postfix  start 
   

 连接postfix,验正服务启动状况: 
   
 # telnet localhost 25 
   
 Trying 127.0.0.1... 
   
 Connected to localhost.localdomain (127.0.0.1). 
   
 Escape character is '^]'. 
   
 220 mail.benet.org ESMTP Postfix 
   
 ehlo mail.benet.org 
   
 250-mail.benet.org 
   
 250-PIPELINING 
   
 250-SIZE 10240000 
   
 250-VRFY 
   
 250-ETRN 
   
 250-ENHANCEDSTATUSCODES 
   
 250-8BITMIME 
   
 250 DSN 
   
 mail from:root@benet.org 
   
 250 2.1.0 Ok 
   
 rcpt to:redhat@benet.org 
   
 250 2.1.5 Ok 
   
 data 
   
 354 End data with <CR><LF>.<CR><LF> 
   
 subject:Mail test! 
   
 Mail test!!! 
   
 . 
   
 250 2.0.0 Ok: queued as AB94A1A561 
   
 quit 
   
 221 2.0.0 Bye 
   
 Connection closed by foreign host. 
   

 切换到redhat用户进行收信: 
   
 # su - redhat 
   
 $ mail 
   
 Mail version 8.1 6/6/93.  Type ? for help. 
   
 "/var/spool/mail/redhat": 1 message 1 new 
   
 >N  1 
   root@benet.org        Wed Sep  5 10:59  15/488   "Mail test!" 
   
 & 
   


 八、为postfix开启基于cyrus-sasl的认证功能 
   

 使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的: 
   
 # /usr/local/postfix/sbin/postconf  -a 
   
 cyrus 
   
 dovecot 
   

 #vi /etc/postfix/ 
   
 添加以下内容: 
   
 ############################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_application_name = smtpd 
   
 smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available! 
   

 #vi /usr/local/lib/sasl2/smtpd.conf 
   
 添加如下内容: 
   
 pwcheck_method: saslauthd 
   
 mech_list: PLAIN LOGIN 
   

 让postfix重新加载配置文件 
   
 #/usr/local/postfix/sbin/postfix reload 
   

 # telnet localhost 25 
   
 Trying 127.0.0.1... 
   
 Connected to localhost.localdomain (127.0.0.1). 
   
 Escape character is '^]'. 
   
 220 Welcome to our mail.benet.org ESMTP,Warning: Version not Available! 
   
 ehlo mail.benet.org 
   
 250-mail.benet.org 
   
 250-PIPELINING 
   
 250-SIZE 10240000 
   
 250-VRFY 
   
 250-ETRN 
   
 250-AUTH PLAIN LOGIN 
   
 250-AUTH=PLAIN LOGIN               (请确保您的输出以类似两行) 
   
 250-ENHANCEDSTATUSCODES 
   
 250-8BITMIME 
   
 250 DSN 
   




 九、让postfix支持虚拟域和虚拟用户 
   

 1、编辑/etc/postfix/,添加如下内容: 
   
 ########################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 
   

 2、添加为支持虚拟域和虚拟用户所用到的配置文件 
   

 编辑/etc/postfix/mysql_virtual_alias_maps.cf ,添加如下内容: 
   
 user = extmail 
   
 password = extmail 
   
 hosts = localhost 
   
 dbname = extmail 
   
 table = alias 
   
 select_field = goto 
   
 where_field = address 
   

 编辑/etc/postfix/mysql_virtual_domains_maps.cf ,添加如下内容: 
   
 user = extmail 
   
 password = extmail 
   
 hosts = localhost 
   
 dbname = extmail 
   
 table = domain 
   
 select_field = description 
   
 where_field = domain 
   

 编辑/etc/postfix/mysql_virtual_mailbox_limit_maps.cf ,添加如下内容: 
   
 user = extmail 
   
 password = extmail 
   
 hosts = localhost 
   
 dbname = extmail 
   
 table = mailbox 
   
 select_field = quota 
   
 where_field = username 
   

 编辑/etc/postfix/mysql_virtual_mailbox_maps.cf ,添加如下内容: 
   
 user = extmail 
   
 password = extmail 
   
 hosts = localhost 
   
 dbname = extmail 
   
 table = mailbox 
   
 select_field = maildir 
   
 where_field = username 
   


 说明: 
   
 1、这里用到的 
   数据库及用户的建立可以后文中的extmail说明部分来实现,您可以参照那一部分来理解这里指定的 
   数据库及其用户名等; 
   
 2、以上新建文件亦可以从extman安装文件中获得,您也可以由此不用手动输入; 
   
 3、虚拟用户邮箱目录我这里沿用了/var/mailbox,你可以指定为别的目录,比如常见到的/var/spool/mail,或者/home/domains等;但如果这里做了修改,请在后文中用到时作了相应的修改; 
   


 十、安装Courier authentication library 
   

 # tar jxvf courier-authlib-0.59.1.tar.bz2 
   
 # cd courier-authlib-0.59.1 
   
 # ./configure --prefix=/usr/local/courier-authlib --sysconfdir=/etc --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc CFLAGS="-march=i686 -O2 -fexpensive-optimizations" CXXFLAGS="-march=i686 -O2 -fexpensive-optimizations" 
   
 # make 
   
 # make install 
   

 # chmod 755 /usr/local/courier-authlib/var/spool/authdaemon 
   
 # cp /etc/authdaemonrc.dist  /etc/authdaemonrc 
   
 # cp /etc/authmysqlrc.dist  /etc/authmysqlrc 
   

 修改/etc/authdaemonrc 文件 
   
 authmodulelist="authmysql" 
   
 authmodulelistorig="authmysql" 
   
 daemons=10 
   

 编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。 
   
 MYSQL_SERVER localhost 
   
 MYSQL_PORT 3306                   (指定你的mysql监听的端口,这里使用默认的3306) 
   
 MYSQL_USERNAME  extmail      (这时为后文要用的数据库的所有者的用户名) 
   
 MYSQL_PASSWORD extmail        (密码) 
   
 MYSQL_SOCKET  /tmp/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/',maildir) 
   
 MYSQL_NAME_FIELD  name 
   
 MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir) 
   

 # cp courier-authlib.sysvinit /etc/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 
   
 # ldconfig -v 
   
 # service courier-authlib start   (启动服务) 
   




 十一、安装Courier-IMAP 
   

 # tar jxvf courier-imap-4.1.3.tar.bz2 
   
 # cd courier-imap-4.1.3 
   
 # mkdir /usr/local/courier-imap 
   
 # ./configure 
   
   --prefix=/usr/local/courier-imap 
   
   --with-redhat 
   
   --enable-unicode 
   
   --disable-root-check 
   
   --with-trashquota 
   
   --without-ipv6 
   
   CPPFLAGS='-I/usr/local/ssl/include/openssl  -I/usr/local/courier-authlib/include'    
   
   LDFLAGS='-L/usr/local/courier-authlib/lib/courier-authlib'   
   
   COURIERAUTHCONFIG='/usr/local/courier-authlib/bin/courierauthconfig' 
   
 # make 
   
 # make install 
   

 # cp /usr/local/courier-imap/etc/imapd.dist /usr/local/courier-imap/etc/imapd 
   
 # cp /usr/local/courier-imap/etc/imapd-ssl.dist /usr/local/courier-imap/etc/imapd-ssl 
   
 # cp /usr/local/courier-imap/etc/pop3d.dist /usr/local/courier-imap/etc/pop3d 
   
 # cp /usr/local/courier-imap/etc/pop3d-ssl.dist /usr/local/courier-imap/etc/pop3d-ssl 
   

 配置Courier-IMAP,为用户提供pop3服务: 
   
 vi /usr/local/courier-imap/etc/pop3d 
   
 POP3DSTART=YES 
   

 注:如果你想为用户提供IMAP服务,则需在"/usr/local/courier-imap/etc/imapd"文件中设置"IMAPDSTART=yes";其它类同; 
   

 新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户: 
   
 #mkdir -pv /var/mailbox 
   
 #chown -R postfix /var/mailbox 
   

 #cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imapd 
   
 #chmod 755 /etc/rc.d/init.d/courier-imapd 
   
 #chkconfig --add courier-imapd 
   
 #chkconfig --level 2345 courier-imapd on 
   
 #service courier-imapd start 
   

 接下来重新配置SMTP 认证,编辑 /usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容: 
   
 pwcheck_method: authdaemond 
   
 log_level: 3 
   
 mech_list:PLAIN LOGIN 
   
 authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket 
   




 十二、安装Extmail-1.0.2 
   

 1、安装 
   
 # tar zxvf extmail-1.0.2.tar.gz 
   
 # mkdir -pv /usr/local/apache/htdocs/extsuite 
   
 # mv extmail-1.0.2 /usr/local/apache/htdocs/extsuite/extmail 
   
 # cp /usr/local/apache/htdocs/extsuite/extmail/.default  /usr/local/apache/htdocs/extsuite/extmail/ 
   

 2、修改主配置文件 
   
 #vi /usr/local/apache/htdocs/extsuite/extmail/ 
   

 部分修改选项的说明: 
   

 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 = postfix 
   
 SYS_MYSQL_PASS = 123456 
   


 SYS_MYSQL_HOST = localhost 
   
 指明数据库服务器主机名,这里默认即可 
   

 SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock 
   
 连接数据库的sock文件位置,这里修改为: 
   
 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_AUTHLIB_SOCKET = /var/spool/authdaemon/socket 
   
 此句用来指明authdaemo socket文件的位置,这里修改为: 
   
 SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket 
   


 3、apache相关配置 
   

 由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDA为postfix自带,因此将指定为postfix用户: 
   
 <VirtualHost *:80> 
   
 ServerName mail.benet.org 
   
 DocumentRoot /var/www/extsuite/extmail/html/ 
   
 ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi 
   
 Alias /extmail /var/www/extsuite/extmail/html 
   
 SuexecUserGroup postfix postfix 
   
 </VirtualHost> 
   

 修改 cgi执行文件属主为apache运行身份用户: 
   
 # chown -R postfix.postfix /usr/local/postfix/htdocs/extsuite/extmail/cgi/ 
   

 如果您没有打开apache服务器的suexec功能,也可以使用以下方法解决: 
   
 # vi /etc/httpd/httpd.conf 
   
 User postfix 
   
 Group postfix 
   

 <VirtualHost *:80> 
   
 ServerName mail.benet.org 
   
 DocumentRoot /var/www/extsuite/extmail/html/ 
   
 ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi 
   
 Alias /extmail /var/www/extsuite/extmail/html 
   
 </VirtualHost> 
   

 4、依赖关系的解决 
   

 extmail将会用到perl的DBD::Mysql和Unix::syslogd功能,可以去 
   http://search.cpan.org搜索 
   下载原码包进行安装。 
   
 # tar zxvf Unix-Syslog-0.100.tar.gz 
   
 # cd Unix-Syslog-0.100 
   
 # perl Makefile.PL 
   
 # make 
   
 # make install 
   

 DBD-Mysql目前最新的版本为DBD-mysql-4.005,但它和系统中的perl结合使用时会造成extmail无法正常使用,因此我们采用3的版本: 
   
 # tar zxvf DBD-mysql-3.0002_4.tar.gz   
   
 # cd cd DBD-mysql-3.0002_4 
   
 # perl Makefile.PL   (此步骤中如果出现类同Can't exec "mysql_config": No such file or directory at Makefile.PL line 76.的错误是因为您的mysql的bin目录没有输出至$PATH环境变量) 
   
 # make 
   
 # make install 
   

 十三、安装Extman-0.2.2 
   

 1、安装及基本配置 
   

 #tar zxvf  extman-0.2.2.tar.gz 
   
 # mv extman-0.2.2 /usr/local/apache/htdocs/extsuite/extman 
   

 修改配置文件以符合本例的需要: 
   
 # vi /usr/local/apache/htdocs/extsuite/extman/ 
   

 SYS_MAILDIR_BASE = /home/domains 
   
 此处即为您在前文所设置的用户邮件的存放目录,可改作: 
   
 SYS_MAILDIR_BASE = /var/mailbox 
   

 SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock 
   
 此处修改为: 
   
 SYS_MYSQL_SOCKET = /tmp/mysql.sock 
   

 使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库: 
   

 # cd /usr/local/apache/htdocs/extsuite/extman/docs 
   
 # mysql -u root -p <extmail.sql 
   
 # mysql -u root -p <init.sql 
   

 修改cgi目录的属主: 
   
 # chown -R postfix.postfix /usr/local/apache/htdocs/extsuite/extman/cgi/ 
   

 如果extman访问数据库权限不足的话,可采用以下命令将新生成的数据库赋予webman用户具有所有权限: 
   
 mysql> GRANT all privileges on extmail.* TO webman@localhost IDENTIFIED BY 'webman'; 
   
 mysql> GRANT all privileges on extmail.* TO 
   webman@127.0.0.1 IDENTIFIED BY 'webman'; 
   

 在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行: 
   
 ScriptAlias /extman/cgi /usr/local/apache/htdocs/extsuite/extman/cgi 
   
 Alias /extman /usr/local/apache/htdocs/extsuite/extman/html 
   

 创建其运行时所需的临时目录,并修改其相应的权限: 
   
 #mkdir  -pv  /tmp/extman 
   
 #chown postfix:postfix  /tmp/extman 
   


 将/usr/local/apache/htdocs/下所有的内容的所有者权限交付给postfix。 
   
 # chown -R postfix:postfix /usr/local/apache/htdocs/ 
   

 建立/var/www的映射: 
   
 #ln -s /usr/local/apache/htdocs /var/www 
   

 去掉登录管理界面中的验证码: 
   
 编辑/var/www/extsuite/extman/, 
   
 将:SYS_CAPTCHA_ON = 1 
   
 改为:SYS_CAPTCHA_ON = 0 
   

 在mysql数据库中新建postfix的用户,对extmail数据库有完全控制权限。    
   

 好了,到此为止,重新启动apache服务器后,您的Webmail和Extman已经可以使用了,可以在 
   浏览器中输入指定的虚拟主机的名称进行访问,如下: 
   
http:// 
   

 选择管理即可登入extman进行后台管理了。默认管理帐号为: 
   root@extmail.org  密码为:extmail*123* 
   

 说明: 
   
 (1) 如果您安装后无法正常显示校验码,安装perl-GD 
   模块会解决这个问题。如果想简单,您可以到以下地址下载适合您的平台的rpm包,安装即可:   
   http://dries.ulyssis.org/rpm/packages/perl-GD/info.html 
   
 (2) extman-0.2.2自带了图形化显示日志的功能;此功能需要rrdtool的支持,您需要安装此些模块才可能正常显示图形日志。 
   

 2、(新增2007.9.18)配置Mailgraph_ext,使用Extman的图形日志: 
   

 接下来安装图形日志的运行所需要的软件包Time::HiRes、File::Tail和rrdtool,其中前两个包您可以去 
   http://search.cpan.org搜索并下载获得,后一个包您可以到 
   http://oss.oetiker.ch/rrdtool/pub/?M=D下载获得; 注意安装顺序不能改换。 
   

 安装Time::HiRes 
   
 #tar zxvf Time-HiRes-1.9707.tar.gz 
   
 #cd Time-HiRes-1.9707 
   
 #perl Makefile.PL 
   
 #make 
   
 #make test 
   
 #make install 
   

 安装File::Tail 
   
 #tar zxvf File-Tail-0.99.3.tar.gz 
   
 #cd File-Tail-0.99.3 
   
 #perl Makefile 
   
 #make 
   
 #make test 
   
 #make install 
   

 安装rrdtool-1.2.23 
   
 #tar zxvf rrdtool-1.2.23.tar.gz 
   
 #cd rrdtool-1.2.23 
   
 #./configure --prefix=/usr/local/rrdtool 
   
 #make 
   
 #make install 
   

 创建必要的符号链接(Extman会到这些路径下找相关的库文件) 
   
 #ln -sv /usr/local/rrdtool/lib/perl/5.8.5/i386-linux-thread-multi/auto/RRDs/   /usr/lib/perl5/5.8.5/i386-linux-thread-multi/ 
   
 #ln -sv /usr/local/rrdtool/lib/perl/5.8.5/   /usr/lib/perl5/5.8.5 
   
 #ln -sv /usr/local/rrdtool/lib/perl/5.8.5/i386-linux-thread-multi/   /usr/lib/perl5/5.8.5 
   

 复制mailgraph_ext到/usr/local,并启动之 
   
 # cp -r /var/www/extsuite/extman/addon/mailgraph_ext  /usr/local   
   
 # / usr/local/mailgraph_ext/mailgraph-init  start 
   
 # /usr/local/mailgraph_ext/qmonitor-init  start 
   

 添加到自动启动队列 
   
 echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.local 
   
 echo "/usr/local/mailgraph_ext/qmonitor-init start" >> /etc/rc.local 
   

 好了,接下来您就可以到extman的后台查看图表日志了。 
   



 十四、安装maildrop-2.0.4 
   

 maildrop是一个使用C++编写的用来代替本地MDA的带有过滤功能邮件投递代理,是courier邮件系统组件之一。它从标准输入接受信息并投递到用户邮箱;maildrop既可以将邮件投递到mailboxes格式邮箱,亦可以将其投递到maildirs格式邮箱。同时,maildrop可以从文件中读取入站邮件过滤指示,并由此决定是将邮件送入用户邮箱或者转发到其它地址等。和procmail不同的是,maildrop使用结构化的过滤语言,因此,邮件系统管理员可以开发自己的过滤规则并应用其中。 
   

 我们在此将使用maildrop来代替postfix自带的MDA,并以此为基础扩展后文的邮件杀毒和反垃圾邮件功能的调用;在此可能会修改前文中的许多设置,请确保您的设置也做了相应的修改。 
   

 1、安装 
   

 将courier-authlib的头文件及库文件链接至/usr目录(编译maildrop时会到此目录下找此些相关的文件): 
   
 # ln -sv /usr/local/courier-authlib/bin/courierauthconfig   /usr/bin 
   
 # ln -sv /usr/local/courier-authlib/include/*   /usr/include 
   

 maildrop需要pcre的支持,因此,接下来将首先安装pcre 
   
 # tar jxvf pcre-7.3.tar.bz2 
   
 # cd pcre-7.3 
   
 # ./configure 
   
 # make 
   
 # make check 
   
 # make install 
   

 # groupadd -g 1001 vmail 
   
 # useradd -g vmail -u 1001 -M -s /sbin/nologin vmail 
   
 # tar jxvf maildrop-2.0.4.tar.bz2 
   
 # cd maildrop-2.0.4 
   
 # ./configure 
   
     --enable-sendmail=/usr/sbin/sendmail 
   
     --enable-trusted-users='root vmail' 
   
     --enable-syslog=1 --enable-maildirquota 
   
     --enable-maildrop-uid=1001 
   
     --enable-maildrop-gid=1001 
   
     --with-trashquota --with-dirsync 
   
 # make 
   
 # make install 
   

 检查安装结果,请确保有"Courier Authentication Library extension enabled."一句出现: 
   
 # maildrop -v 
   
 maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc. 
   
 GDBM extensions enabled. 
   
 Courier Authentication Library extension enabled. 
   
 Maildir quota extension enabled. 
   
 This program is distributed under the terms of the GNU General Public 
   
 License. See COPYING for additional information. 
   


 2、新建其配置文件/etc/maildroprc文件,首先指定maildrop的日志记录位置: 
   
 # vi /etc/maildroprc 
   
 添加: 
   
 logfile "/var/log/maildrop.log" 
   

 # touch /var/log/maildrop.log 
   
 # chown vmail.vmail /var/log/maildrop.log 
   

 3、配置Postfix 
   

 编辑 
   
 # vi /etc/postfix/ 
   
 启用如下两行 
   
 maildrop  unix  -       n       n       -       -       pipe 
   
    flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} 
   

 注意:定义transport的时候,即如上两行中的第二行,其参数行必须以空格开头,否则会出错。 
   

 编辑 
   
 # vi /etc/postfix/ 
   
 virtual_transport = virtual 
   
 修改为: 
   
 virtual_transport = maildrop 
   

 将下面两项指定的UID和GID作相应的修改: 
   
 virtual_uid_maps = static:2525 
   
 virtual_gid_maps = static:2525 
   
 修改为: 
   
 virtual_uid_maps = static:1001 
   
 virtual_gid_maps = static:1001 
   


 4、编辑/etc/authmysqlrc 
   

 # vi /etc/authmysqrc 
   
 MYSQL_UID_FIELD  '2525' 
   
 MYSQL_GID_FIELD  '2525' 
   
 更改为: 
   
 MYSQL_UID_FIELD  '1001' 
   
 MYSQL_GID_FIELD  '1001' 
   

 注意:没有此处的修改,maildrop可能会报告 “signal 0x06”的错误报告。 
   

 5、编辑/etc/httpd/httpd.conf,修改运行用户: 
   

 如果启用了suexec的功能,则将虚拟主机中指定的 
   
 SuexecUserGroup postfix postfix 
   
 修改为: 
   
 SuexecUserGroup vmail vmail 
   

 如果没有使用上面的功能,则修改User和Group指令后的用户为vmail 
   
 将前文中的如下项 
   
 User postfix 
   
 Group postfix 
   
 修改为: 
   
 User vmail 
   
 Group vmail 
   

 6、将用户邮件所在的目录/var/mailbox和extman的临时目录/tmp/extman的属主和属组指定为vmail 
   
 #chown -R vmail.vmail /var/mailbox 
   
 #chown -R vmail.vmail /tmp/extman 
   
 #chown -R vmail:vmail /usr/local/apache/htdocs/extsuite 
   


 接下来重新启动postfix和apache,进行发信测试后,如果日志中的记录类同以下项,则安装成功 
   

 Sep 16 12:04:43 Ixor postfix/pipe[14266]: 46B491A5CB: to=< 
   marion@>, relay=maildrop, delay=2306, delays=2306/0.04/0/0.07, dsn=2.0.0, status=sent (delivered via maildrop service) 
   


 [ 本帖最后由 marion 于 2008-1-8 12:25 编辑 ] 
   




 问题: 
   

 maillog日志中提示: 
   
 Apr 16 14:12:02 cc postfix/trivial-rewrite[3379]: warning: do not list domain  in BOTH mydestination and virtual_mailbox_domains,并且邮件被发送到了/var/mail/中,而不是/var/mailbox 
   

 解决: 
   

 编辑/etc/postfix/,将mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 改为 mydestination = $myhostname, localhost.$mydomain, localhost, $hostname 就好了 
   

 原因: 
   

 $mydestination和$virtual_mailbox_domains冲突了 
   

 问题: 
   
 如何对附件大小做限制。 
   
 解决: 
   
 编辑 /etc/postfix/ 
   
 写入 message_size_limit = 20000000 (限制为20M,已byte为单位) 
   

 编辑 extmail下的 
   
 修改 SYS_MESSAGE_SIZE_LIMIT = 20242880 (限制为20M,以byte为单位) 
   




问题: 
   

 如何限制外发邮件,即只允许向某个域发送邮件,下面的方法是限制某几个账户,将@以及前面的部分删掉就限制了域: 
   

 限制部分Postfix用户只能内部收发的例子(完整版) 
   

 原来的帖子: 
   http://www.extmail.org/forum/viewthread.php?tid=524 这里实现的功能有些缺陷,对于限制的用户,其实只能对其外发(或者说rcpt to)做限制,而对于任意来信人给其发来的email则没有限制能力,真正的内部收发邮件用户,应该是只允许它和指定的内部域名(用户)联系,对于发向任何外部邮件域,或任意外部邮件域发来的邮件,都是禁止的。 
   

 这里给出一个配置,仅供大家参考。 
   

 配置方法: 
   

 1)在里定义如下的smtpd_restriction_classes: 
   

 QUOTE: 
   
 # restrictions 
   
 smtpd_restriction_classes = local_out_only local_in_only 
   
 local_out_only = check_recipient_access hash:/etc/postfix/local_domains, reject 
   
 local_in_only = check_sender_access hash:/etc/postfix/local_domains, reject 
   

 2)将里的smtpd_recipient_restrctions定义为: 
   

 QUOTE: 
   
 smtpd_recipient_restrictions = 
   
         check_sender_access hash:/etc/postfix/local_out_only 
   
         check_recipient_access hash:/etc/postfix/local_in_only 
   
         permit_mynetworks 
   
         permit_sasl_authenticated 
   
         reject_non_fqdn_hostname 
   
         reject_non_fqdn_sender 
   
         reject_non_fqdn_recipient 
   
         reject_unauth_destination 
   
         reject_unauth_pipelining 
   
         reject_invalid_hostname 
   

 3)编辑/etc/postfix/local_in_only: 
   

 QUOTE: 
   
foo@extmail.org local_in_only 
   
bar@extmail.org local_in_only 
   

 4)编辑/etc/postifx/local_out_senders: 
   

 QUOTE: 
   
foo@extmail.org local_out_only 
   
bar@extmail.org local_out_only 
   

 5)编辑/etc/postfix/local_domains: 
   

 QUOTE: 
   
 internal.foo.com         OK 
   
          OK 
   

 6)为3,4,5建立对应的hash文件: 
   

 QUOTE: 
   
 # postmap hash:/etc/postfix/local_in_only 
   
 # postmap hash:/etc/postfix/local_out_only 
   
 # postmap hash:/etc/postfix/local_domains 
   

 这样就定义了extmail.org域名里两个用户foo和bar,只允许和internal.foo.com和 两个内部域的用户来往邮件,对于外部的邮件则没有收或发的能力。如果外部邮件企图给这2个用户发送,则遇到如下错误: 
   

 QUOTE: 
   
 554 5.7.1 < 
   foo@extmail.org>: Recipient address rejected: Access denied 
   

 如果这2个内部用户要给外部用户发email,将遇到如下错误: 
   

 QUOTE: 
   
 554 5.7.1 < 
   bar@extmail.org>: Sender address rejected: Access denied 
   

 目前这样的配置就可以比较完整的实现内部用户的功能需求了。其实这种配置的方法和之前的帖子道理一样,关键得分清楚什么阶段,调用什么restrictions即可。


 


转载于:https://blog.51cto.com/1122hong/478918