linux(CentOS6.5)之postfix服务器编译安装
基础知识:
手动编译Postfix时使用的环境变量,变量值中含有空格符或者shell特殊字符,整个变量值必须放在双引号中。
AUXLIBS
指出位于标准位置以外的函数库,使用此变量标出函数库的路径;
CC
指出需要使用的特定编译器,Postfix默认使用gcc编译器,如果不想使用,可以使用此变量指出想要使用的编译器路径;
CCARGS
提供额外选项给编译器,编译器支持特殊选项,或是所需要的支持文件不是在标准路径中,使用此变量指出特殊选项或路径。
-I选项,指出函数库路径,如CCARGS ‘-I/usr/local/include/‘,
-l选项指出函数库的名称(不是指函数库的文件名),如/usr/lib/mysql/目录下的libmysqlclient.so是mysqlclient函数库的文件名,函数名是mysqlclient,则链接形式为-lmysqlclient。
Postfix包定义了一系列的宏,代表在系统上找到的特定资源以及预先设定的选项,编译器选项提供
-D选项供用户定义编译宏,如Postfix具备查询mysql的能力,则定义HAS_MYSQL宏,CCARGS=‘-DHAS_MYSQL‘;
DEBUG
构造Postfix可执行文件时,编译器使用的调试等级,等级越高,调试工具得到更详细的调试信息,构建实际系统的Postfix时,建议关闭调试支持。
OPT
构造Postfix可执行文件时,编译器进行何种程度的优化。次选项提示所选择的默认优化程度。
本次配置使用的系统是CentOS6.5 64位版本。
一、安装前的准备工作:
安装前说明:邮件服务依赖于DNS服务,请事先确信您的DNS服务已经为邮件应用配置完成。
配置MX解析
1、安装所需的rpm包,这包括以下这些:
httpd, mysql, mysql-server, mysql-devel, openssl-devel, dovecot, perl-DBD-MySQL, tcl, tcl-devel, libart_lgpl, libart_lgpl-devel, libtool-ltdl, libtool-ltdl-devel, expect,cyrus-sasl,cyrus-sasl-devel、cyrsu-sasl-libs(后面三个软件很重要)
2、删除系统自带的postfix软件、postfix和postdrop账号;
# rpm -e postfix
# userdel -r postfix
# userdel -r postdroop
为什么要删掉系统自带的账号后面会予以说明。不删掉的话,后面配置extmail的时候会出错。
3、安装以下开发所用到的rpm包组:
Development Libraries
Development Tools
方法:
# yum groupinstall "packge_group_name"
二、启动依赖的服务:
1、启动mysql数据库,并给mysql的root用户设置密码:
# service mysqld start
# chkconfig mysqld on
# mysqladmin -uroot password ‘your_password‘
2、启动saslauthd服务,并将其加入到自动启动队列:
# service saslauthd start
# chkconfig saslauthd on
三、安装配置postfix
# groupadd -g 504 postfix
# useradd -g postfix -u 503 -s /sbin/nologin -M postfix
# groupadd -g 505 postdrop
# useradd -g postdrop -u 505 -s /sbin/nologin -M postdrop
备注:CentOS6.6版本中自带有postfix,但是版本较低,需要卸载掉。
下载好postfix
# tar zxvf postfix-2.11.7.tar.gz
# cd postfix-2.11.7
备注:64位版本的系统库文件在/usr/lib64文件夹下,因此编译选项中的/usr/lib都要替换为/usr/lib64。MySQL没有安装到标准目录的时候,要注明安装位置(我这里mysql是系统自带的,不需要修改),如下所示。
# make makefiles ‘CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ‘ ‘AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lm -L/usr/lib64/sasl2 -lsasl2 -lssl -lcrypto‘
make
make install
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)
install_root: [/] /
tempdir: [/root/postfix-2.9.3] /tmp/postfix
config_directory: [/etc/postfix] /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]/var/www/html/postfix
manpages: [/usr/local/man]
readme_directory: [no]
到此postfix编译完成。
生成别名二进制文件:
# newaliases
编译完成后检查cyrus模块是否支持,
postconf -a
观察是否显示cyrus
2.进行一些基本配置,测试启动postfix并进行发信
# vim /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.fei.com
myorigin = fei.com
mydomain = fei.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain (发往该域的邮件则负责接收,否则就中继)
mynetworks = 192.168.10.0/24, 127.0.0.0/8 (在此网段内的IP负责中继,不在则不予中继,192.168.10.0/24网段是我的虚拟机测试网段)
说明:
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的文本行视为上一行的延续;
5. 当mydestination的值里面没有$mydomain的时候,邮件发送时就不知道送往哪个域,此时会出现statu=bounced(mail for fei.com loops back to myself)的错误提示。
四、为postfix提供SysV服务脚本/etc/rc.d/init.d/postfix
内容如下(#END 之前):
#!/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 $?
# END
为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/postfix
将postfix服务添加至服务列表:
# chkconfig --add postfix
设置其开机自动启动:
# chkconfig postfix on
使用此脚本重新启动服务,以测试其能否正常执行:
# service postfix restart
此时可使用本地用户测试邮件收发了。
此时根据mynetwork的限制,只有本地IP地址和本地回环地址可以发收发邮件。
本文出自 “无飞天下” 博客,请务必保留此出处http://hf1208.blog.51cto.com/8957433/1728826