1. 首先卸载系统原装的postfix
[root@www mail]# yum list all | grep postfix
postfix.i686 2:2.6.6-2.2.el6_1 @anaconda-CentOS-201311271240.i386/6.5
1.1 先停止服务然后卸载
[root@www mail]# service postfix stop
Shutting down postfix: [ OK ]
[root@www mail]# chkconfig postfix off
[root@www mail]# rpm -e postfix.i686 --nodeps
1.2 然后开启依赖的服务:
[root@www postfix-2.10.8]# mysqladmin -uroot password 'redhat'
[root@www postfix-2.10.8]# service mysqld status
SUCCESS! MySQL running (2107)
[root@www postfix-2.10.8]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@www postfix-2.10.8]# service saslauthd start
Starting saslauthd: [ OK ]
[root@www postfix-2.10.8]# chkconfig saslauthd on
2. 要实现postfix的MYSQL认证需要安装MYSQL,这里已经装过了省略不写,最重要的是MYSQL的开发环境要提供(比如头文件和库文件等)
2.1 添加帮助手册:
MANPATH /usr/local/mysql/man
2.2 输出头文件:
[root@www mail]# ln -sv /usr/local/mysql/include /usr/include/mysql
`/usr/include/mysql/include' -> `/usr/local/mysql/include'
2.3 输出库文件:
[root@www mail]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
3. 编译安装和启动服务
因为系统安装的有postfix所以也创建了postfix和postdrop组用户,这里我把它们删了重新创建。
3.1 先创建一个postfix组,用户(最好不能登陆系统而仅仅是为了运行postfix服务,且组号尽量大于1000)
[root@www postfix-2.10.8]# groupadd -g 2525 postfix
[root@www postfix-2.10.8]# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
3.2 再创建一个postdrop组,用户(postdrop用来进行邮件投递)
[root@www postfix-2.10.8]# groupadd -g 2526 postdrop
[root@www postfix-2.10.8]# useradd -g 2526 -u 2526 -s /sbin/nologin -M postdrop
注意:编译时没有了./configure不过可以看INSTALL里面有编译安装方法;
3.3 编译前确保安装上了:
[root@www postfix-2.10.8]# yum list all | grep sasl
cyrus-sasl.i686 2.1.23-15.el6_6.2 @base
cyrus-sasl-devel.i686 2.1.23-15.el6_6.2 @base
cyrus-sasl-lib.i686 2.1.23-15.el6_6.2 @base
cyrus-sasl-plain.i686 2.1.23-15.el6_6.2 @base
3.4 然后查看sasl的头文件和库文件的安装位置:
[root@www postfix-2.10.8]# rpm -ql cyrus-sasl-devel.i686
/usr/include/sasl
/usr/lib/sasl2.so #虽然虽然没这个文件,但是指向/usr/lib/sasl2即可,里面有一些是链接文件
[root@www postfix-2.10.8]# ll /usr/lib/sasl2/lib
3.5 开始编译:
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'
每个引号之间定义了选项:
CCARGS指定C编译参数,通过这种方式指定编译时连接到哪里,到哪里去找头文件
-DHAS_MYSQL:启用MYSQL的连接功能;
-I/usr/local/mysql/include:指定MYSQL的头文件路径;
-DUSE_SASL_AUTH:启用SASL认证;
-I/usr/include/sasl:指定SASL的头文件路径;
-DUSE_TLS:使SMTP支持SMTPS协议
AUXLIBS辅助库文件路径,编译时告知到哪里去找额外的库文件:
-L/usr/local/mysql/lib:指定MYSQL的库文件路径;
-lmysqlclient:MYSQL客户端的库文件;
-lz:压缩库文件;
-lm:模块文件;
-L/usr/lib/sasl2:指定sasl2的库文件路径;
-lsasl2:sasl2库文件;
-lssl:SSL库文件;
-lcrypto:加密库文件;
[root@www postfix-2.10.8]# 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'
[root@www postfix-2.10.8]# make
[root@www postfix-2.10.8]# make install #此时会让指定一些安装配置,一般默认即可
install_root: [/] #指定安装路径;
tempdir: [/root/postfix-2.10.8] /tmp/postfix #指定临时目录
config_directory: [/etc/postfix] #指定配置文件;
command_directory: [/usr/sbin] #命令目录
daemon_directory: [/usr/libexec/postfix] #服务进程文件;
data_directory: [/var/lib/postfix] #postfix可写文件的存放位置;
html_directory: [no] #是否创建postfix的HTML文件;
mail_owner: [postfix] #邮件服务器的运行者;
mailq_path: [/usr/bin/mailq] #邮件队列程序;
manpage_directory: [/usr/local/man] #手册的安装路径;
newaliases_path: [/usr/bin/newaliases] #生成新别名的路径;
queue_directory: [/var/spool/postfix] #邮件队列文件位置;
readme_directory: [no] #是否创建postfix的帮助文档readme文件;
sendmail_path: [/usr/sbin/sendmail] #sendmail客户端和sendmail兼容的;
setgid_group: [postdrop] #用到setgid实现将用户的邮件投递到其邮箱中;
3.6 为postfix服务提供SysV服务脚本至/etc/rc.d/init.d/postfix:
[root@www postfix-2.10.8]# vim /etc/rc.d/init.d/postfix
#!/bin/bash
#
# postfix Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
# that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ $NETWORKING = "no" ] && exit 3
[ -x /usr/sbin/postfix ] || exit 4
[ -d /etc/postfix ] || exit 5
[ -d /var/spool/postfix ] || exit 6
RETVAL=0
prog="postfix"
start() {
# Start daemons.
echo -n $"Starting postfix: "
/usr/bin/newaliases >/dev/null 2>&1
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
echo
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down postfix: "
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
echo
return $RETVAL
}
reload() {
echo -n $"Reloading postfix: "
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"
RETVAL=$?
echo
return $RETVAL
}
abort() {
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"
return $?
}
flush() {
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"
return $?
}
check() {
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"
return $?
}
restart() {
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
reload
;;
abort)
abort
;;
flush)
flush
;;
check)
check
;;
status)
status master
;;
condrestart)
[ -f /var/lock/subsys/postfix ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
exit 1
esac
exit $?
为该脚本提供执行权限:
[root@www postfix-2.10.8]# chmod +x /etc/rc.d/init.d/postfix
将postfix服务添加至服务列表:
[root@www postfix-2.10.8]# chkconfig --add postfix
设置postfix服务开机启动:
[root@www postfix-2.10.8]# chkconfig --level 35 postfix on
启动服务:
[root@www postfix]# service postfix start
Starting postfix: [ OK ]
补充:postfix初始化过程以及启动以后的信息放在/var/log/maillog中
[root@www postfix]# tail /var/log/maillog
Aug 24 02:32:40 www postfix/postfix-script[9957]: starting the Postfix mail system
Aug 24 02:32:41 www postfix/master[9959]: daemon started -- version 2.10.8, configuration /etc/postfix
4. postfix的配置文件介绍
postfix是模块化的,它有一个核心模块和一个功能模块:
核心模块/etc/postfix/master.cf主进程的配置文件;
功能模块/etc/postfix/main.cf所有其他实现邮件服务进程的配置文件;
master.cf中定义了许多的模块,而这些模块的配置都在main.cf中;
注意,在postfix的配置文件中:
1、参数行和注释行是不能处在同一行中的,否则会将参数行注释掉;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续,这就要求参数行必须顶格写不能有空格,否则就视为是上一行的延续行;
如:
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
mail.$mydomain, ftp.$mydomain此行不是独立行而是上一行的延续;
5. postconf命令介绍
postfix提供了一个配置工具postconf不需再打开文件修改:具体用法 man postconf
postconf -d:显示postfix的默认配置信息;
-n:显示修改了的配置信息;
-m:显示支持的查找表类型;比如其中有MYSQL说明支持到MYSQL表中查找用户名,密码等;
-A:显示支持的SASL客户端插件类型即基于哪些SASL服务完成认证功能;
-e name=value:更改指定参数配置信息并保存到main.cf中;
到此,postfix服务就安装完成了;
补充:可以在上述都完成后可以进行一些简单配置,启动postfix并进行邮件收发测试:
[root@www postfix-2.10.8]# vim /etc/postfix/main.cf修改以下几项需要的配置
myhostname = mail.a.com
myorigin = a.com
mydomain = a.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
inet_interfaces = all
说明:
myhostname #指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
myorigin #用来指明发件人所在的域名,即做发件地址伪装;
mydomain #指定您的域名,默认情况下postfix将myhostname的第一部分删除而作为mydomain的值;
mydestination #指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
mynetworks #指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;
inet_interfaces #指定postfix系统监听的网络接口;