postfix extmail邮件系统安装
配置extmail 过程详解所用软件包:(本文中, 以下软件包都将在/root中存放), 软件包都是最新的源代码包。Postfix-2.6.2Mysql-5.0.45Cyrus-sasl-2.1.22
配置extmail 过程详解
所用软件包:(本文中, 以下软件包都将在/root中存放), 软件包都是最新的源代码包。
Postfix-2.6.2
Mysql-5.0.45
Cyrus-sasl-2.1.22
DB-4.5.20
Openssl-0.9.8e
Php-5.2.3
courier-authlib-0.58
courier-imap-4.1.0
Extmail-1.1.0(依赖关系包:Unix-Syslog-1.1.tar.gz,DBD-mysql-3.0008.tar.gz)
Extman-0.2.5(依赖关系包:gd-2.0.35,GD-2.44,配置图形日志所需软件包:Time-HiRes-1.9719.tar.gz,File-Tail-0.99.3.tar.gz,rrdtool-1.2.30.tar.gz )
maildrop-2.0.2(需要pcre 的支持,pcre-7.3.tar.bz2)
clamav-0.91.2
amavisd-new-2.6.4
Mail-SpamAssassin-3.2.5
系统逻辑结构
前提:开始前请确保您已经配置好指向此邮件服务器MX 记录及其它DNS 设置;本示例中的域名为gdc8888.com ,邮件服务器FQDN 为mail.gdc8888.com ,IP 地址为192.168.1.11;同时,如果您的服务器事先已经安装了sendmail ,请卸载之;
一、安装mysql-5.0.45
# rpm -qa |grep mysql|xargs rpm -e --nodeps(删除系统自带的mysql )
# 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 &
# netstat -tnl(查看有没有打开3306端口)
# cd /root/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 -u root password '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
三、安装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.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 --with-suexec-caller=daemon --with-suexec-docroot=/var/www
# make
# make install
# echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local(系统启动时服务自动启动)
安装:libpng 以支持PHP
五、安装php-5.2.3
# tar -zvxf php-5.2.3.tar.gzmak
,# 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”(后文中我们还会注释掉此行,以启用虚拟主机)
找到
修改为:
找到<#ServerName www.example.com:80>
修改为:
说明:这个对本文来说并非是不可少的。
# mkdir /var/www
# /usr/local/apache/bin/apachectl start 启动apache 服务
最后一步重新启动apache 报如下错误:(NND 美好的事总是最后发生异常)
/usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied
解决办法:
原因是Linux 有一个SELinux 保护模式引起的。
1关闭SELINUX 的方法:
vi /etc/selinux/config 将SELINUX=enforcing 改成SELINUX=disabled 需要重启
2不关闭SELINUX 的方法:
# setenforce 0
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t
/usr/local/apache/modules/libphp5.so
# service httpd restart
# setenforce 1
六、安装Courier authentication library
1. 先添加vuser 用户和vgroup 组
# groupadd -g 1000 vgroup
# useradd -g 1000 -u 1000 -M -s /bin/false vuser
,# tar jxvf courier-authlib-0.58.tar.bz2
# cd courier-authlib-0.58
#./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --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-mailuser=vuser --with-mailgroup=vgroup --with-authmysqlrc=/etc/authmysqlrc --with-authdaemonrc=/etc/authdaemonrc CFLAGS="-march=i686 -O2 -fexpensive-optimizations" CXXFLAGS="-march=i686 -O2 -fexpensive-optimizations"
# make
# make install
# make install-migrate
# make install-configure
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon(这一步需注意,这一步若没有,则会出现authdaemon 权限拒绝。)
# cp /etc/authdaemonrc.dist /etc/authdaemonrc
# cp /etc/authmysqlrc.dist /etc/authmysqlrc
修改/etc/authdaemonrc 文件
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10
DEBUG_LOGIN=2
编辑/etc/authmysqlrc 为以下内容,其中1000,1000为vuser 用户的UID 和vgroup 的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 1000
MYSQL_GID_FIELD 1000
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/var/mailbox/',homedir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir)
MYSQL_QUOTA_FIELD quota
,# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
# chmod 755 /etc/rc.d/init.d/courier-authlib
# chkconfig --add courier-authlib
# chkconfig courier-authlib on
# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf # ldconfig
# ldconfig -v
# service courier-authlib start (启动服务)
,七、安装Courier-IMAP
# tar jxvf courier-imap-4.1.0.tar.bz2
# cd courier-imap-4.1.0
#./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";其它类同;
新建虚拟用户邮箱所在的目录,并将其权限赋予vuser 用户:
# mkdir –pv /var/mailbox
# chown -R vuser.vgroup /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
八、安装sasl-2.1.22
删除系统自带的cyrus-sasl
# rpm -qa|grep cyrus-sasl |xargs rpm -e --nodeps
# rm -rf /usr/lib/sasl
# rm -rf /usr/lib/sasl2
# tar zxvf cyrus-sasl-2.1.22.tar.gz
# cd cyrus-sasl-2.1.22
#./configure --disable-ntlm --disable-krb4 --disable-gssapi --disable-anon --disable-sample --enable-plain --enable-digest -enable-cram --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
,# ln -sv /usr/local/lib/sasl2 /usr/lib/sasl2
创建运行时需要的目录并调试启动
# mkdir -pv /var/state/saslauthd
# /usr/local/sbin/saslauthd -a shadow pam -d
启动并测试
# /usr/local/sbin/saslauthd -a shadow pam
# /usr/local/sbin/testsaslauthd -u root -p 用户密码 如果提示OK "Success.",则成功。
配置库文件搜索路径
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
# ldconfig -v
开机自动启动
# echo "/usr/local/sbin/saslauthd -a shadow pam">>/etc/rc.local
接下来配置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
九、安装Postfix-2.6.2
安装之前请先卸载掉sendmail
# /etc/init.d/sendmail stop
# rpm -qa |grep sendmail|xargs rpm -e --nodeps
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.6.2.tar.gz
# cd postfix-2.6.2
#make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/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/lib -lsasl2 -L/usr/local/BerkeleyDB/lib -L/usr/local/ssl/lib -lssl -lcrypto'
# make
# make install
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值) install_root: [/] /
tempdir: [/root/postfix-2.6.2]
,config_directory: [/etc/postfix]
daemon_directory: [/usr/libexec/postfix]
command_directory: [/usr/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]
manpages: [/usr/local/man]
readme_directory: [no]
说明:上面我全都采用默认安装,这样使用起来会更为方便些;
生成别名二进制文件,这个步骤如果忽略,会造成postfix 效率极低: # newaliases
2.进行一些基本配置,测试启动postfix 并进行发信
#vi /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.gdc8888.com
myorigin = gdc8888.com
mydomain = gdc8888.com
mydestination = $myhostname, localhost.$mydomain, localhost
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/sbin/postfix start
十、为postfix 开启基于cyrus-sasl 的认证功能
,使用以下命令验正postfix 是否支持cyrus 风格的sasl 认证,如果您的输出为以下结果,
则是支持的:
# 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 permit
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!
让postfix 重新加载配置文件
# postfix reload
十一、让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:1000
virtual_gid_maps = static:1000
virtual_transport = maildrop
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.