Chinaunix首页 | 论坛 | 博客
  • 博客访问: 610940
  • 博文数量: 244
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-27 09:53
个人简介

记录学习,记录成长

文章分类

全部博文(244)

我的朋友

分类: LINUX

2015-08-24 21:29:06

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系统监听的网络接口;

阅读(688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~