这里是普通文章模块栏目内容页
postfix邮件服务器安装过程

前提:使用时请确保您已经配置好指向此邮件服务器MX记录及其它DNS设置;本示例中的域名为benet.org,邮件服务器FQDN为mail.benet.org、www.benet.org、postfix.benet.org,IP地址为192.168.1.6;同时,如果您的服务器事先已经安装了sendmail,请卸载之;

所用软件包:

Postfix-2.4.5

Mysql-5.0.45

Sasl-2.1.22

DB-4.5.20

Openssl-0.98e

httpd-2.2.4

Php-5.2.3

courier-authlib-0.59.3

courier-imap-4.1.3

Extmail-1.0.2

Extman-0.2.2

maildrop-2.0.4

clamav-0.91.2

amavisd-new

SpamAssassin-3.2.3

一、安装mysql-5.0.45

#groupadd mysql

#useradd -g mysql -s /bin/false -M mysql

#tar zxvf mysql-5.0.45.tar.gz

#cd mysql-5.0.45

#./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/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 旧密码 password 新密码

说明:此时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

二、安装openssl-0.9.8e

# tar zxvf openssl-0.9.8e.tar.gz

# cd openssl-0.9.8e

# ./config shared zlib

# make

# make test

# make install

# mv /usr/bin/openssl /usr/bin/openssl.OFF

# mv /usr/include/openssl /usr/include/openssl.OFF

# rm /usr/lib/libssl.so

# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

# ln -s /usr/local/ssl/include/openssl /usr/include/openssl

# ln -sv /usr/local/ssl/lib/libssl.so.0.9.8  /usr/lib/libssl.so

配置库文件搜索路径

# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf

# ldconfig -v

检测安装结果

# openssl version

OpenSSL 0.9.8e 23 Feb 2007

三、安装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/libsasl2.la  /usr/lib/libsasl2.la.OFF

# mv /usr/lib/libsasl2.so.2.0.19  /usr/lib/libsasl2.so.2.0.19.OFF

# mv /usr/lib/sasl2  /usr/lib/sasl2.OFF

# rm /usr/lib/libsasl2.so

# rm /usr/lib/libsasl2.so.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

四、安装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/inculde/db4  /usr/inculde/db4.OFF

# rm  /usr/inculde/db_cxx.h

# rm  /usr/inculde/db.h

# rm  /usr/inculde/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.4

#tar jxvf httpd-2.2.4.tar.bz2

#cd httpd-2.2.4

#./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.local(系统启动时服务自动启动)

六、安装php-5.2.3

# tar -zvxf php-5.2.3.tar.gz

# mkdir -p /usr/local/php

# cd php-5.2.3

# ./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/main.cf

修改以下几项为您需要的配置

myhostname = mail.benet.org

myorigin = benet.org

mydomain = benet.org

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

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/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_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/main.cf,添加如下内容:

########################Virtual Mailbox Settings########################

virtual_mailbox_base = /var/spool/mail

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/spool/mail,你可以指定为别的目录,比如常见到的/var/mailbox,或者/home/domains等;但如果这里做了修改,请在后文中用到时作了相应的修改;

十、安装Courier authentication library

# tar jxvf courier-authlib-0.59.3.tar.bz2

# cd courier-authlib-0.59.3

#./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/inculde/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/spool/mail/',maildir)

MYSQL_NAME_FIELD  name

MYSQL_MAILDIR_FIELD  concat('/var/spool/mail/',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-4.1.3

# tar jxvf courier-imap-4.1.3.tar.bz2

# cd courier-imap-4.1.3

./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/spool/mail

#chown –R postfix /var/spool/mail

#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