Postfix安装配置
本套邮件系统的搭建,从如何发邮件到收邮件到认证到虚拟用户虚拟域以及反病毒和反垃圾邮件等都有详细的介绍。在搭建过程中必须的参数解释以及原理都有告诉,这样才能更好地理解邮件系统。
一、卸载自带postfix
1 2 3 |
$ rpm -q postfix postfix-2.6.6-2.2.el6_1.x86_64 $ rpm -ev postfix --nodeps |
二、环境准备
1. YUM要配置好。
2. 编译环境要配置好。
PS: 这两步骤如果有问题,那么可以看本网站提供的YUM和编译章节。
三、安装MySQL服务器
1 2 3 4 5 |
$ yum install mysql-server mysql mysql-devel perl-DBD-MySQL $ <span style="font-family: arial, helvetica, sans-serif;">chkconfig</span> mysqld on $ service mysqld restart $ rpm -q mysql mysql-5.1.71-1.el6.x86_64 |
四、安装cyrus-sasl并启动saslauthd服务(默认已安装)
1 2 3 |
$ yum install cyrus-sasl cyrus-sasl-devel $ service saslauthd start $ chkconfig saslauthd on |
五、查看postfix用户
1 2 |
$ id postfix uid=89(postfix) gid=89(postfix) 组=89(postfix),12(mail) |
发送邮件的用户,这里就使用系统自带的postfix用户,记住UID:89、GID:89,后面很多地方都要用到这两个ID号,如果此ID号更改了,那么Postfix安装方面会有很多目录权限都需要更改。
六、 编译安装postfix-2.11.7
1 2 3 4 5 6 7 8 9 10 11 |
$ tar zxvf postfix-2.11.7.tar.gz $ cd postfix-2.11.7 $ 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/lib/sasl2 -lsasl2 -lssl -lcrypto' #-DHAS_MYSQL -I/usr/include/mysql //启用Mysql存储,指定头文件; #-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl //启用SASL(cyrus)认证框架; #-DUSE_TLS //启用SSL功能; #AUXLIBS=-L/usr/lib64/mysql -lmysqlclient //找Mysql客户端库文件; #-lz //压缩裤文件; #-lm -L/usr/lib64/sasl2 //模块文件; #-lsasl2 -lssl -lcrypto //加密库文件; |
有以下信息就表示配置成功了
1 2 3 4 |
………… [src/posttls-finger] cat ../../conf/makedefs.out Makefile.in >Makefile rm -f Makefile; (cat conf/makedefs.out Makefile.in) >Makefile |
1 2 |
$ make $ make install |
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
install_root: [/] #指定Postfix安装目录,默认 tempdir: [/root/postfix-2.11.7] /tmp/postfix #指定Postfix临时文件目录 config_directory: [/etc/postfix] #指定Postfix配置文件目录,默认 command_directory: [/usr/sbin] #指定Postfix二进制文件目录,默认 daemon_directory: [/usr/libexec/postfix] #指定Postfix服务器进程,默认 data_directory: [/var/lib/postfix] #指定Postfix可写文件目录,默认 html_directory: [no] /var/www/html/postfix #指定Postfix帮助文件,可以使用web服务器打开 mail_owner: [postfix] #指定Postfix属主,默认 mailq_path: [/usr/bin/mailq] #指定Postfix队列程序路径,默认 manpage_directory: [/usr/local/man] newaliases_path: [/usr/bin/newaliases] #指定Postfix生成别名命令位置,默认 queue_directory: [/var/spool/postfix] #指定Postfix队列目录,默认 readme_directory: [no] sendmail_path: [/usr/sbin/sendmail] #指定Postfix客户端(smtp),默认 setgid_group: [postdrop] #指定Postfix投递组(默认有这个组,但没有这个用户),默认 |
PS:如果输入错误可以按Ctrl+退格键删除字符。
六、添加SysV风格服务脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
[root@localhost ~]# vim /etc/rc.d/init.d/postfix #!/bin/bash # # chkconfig: 2345 80 30 # description: Postfix is a Mail Transport Agent, which is the program \ # 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 |
1 2 3 4 |
[root@localhost ~]# chmod +x /etc/rc.d/init.d/postfix [root@localhost ~]# chkconfig --add postfix [root@localhost ~]# chkconfig postfix on [root@localhost ~]# service postfix start |
七、Postfix相关命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# 开启postfix; $ postfix start # 检查配置; $ postfix check # 重新加载; $ postfix reload $ postconf [OPTION] -d:显示Postfix默认的配置; -n:显示新修改的配置; -m:显示支持的存储文件类型如hash,mysql等; -a:显示支持sasl的客户端插件类型; |
安装完毕
如果上面没有使用UID为89的postfix用户,那么检查postfix时就会报如下错误。
1 2 |
$ postfix check postsuper: fatal: scan_dir_push: open directory defer: Permission denied |
原因是一般编译安装时,Postfix队列目录/var/spoole/postfix/,下有几个目录会使用系统自带postfix的目录,由于系统默认使用postfix(UID:89)用户给删除了,所以这些目录就找不到postfix用户,开启时就会报错一些权限问题,把以下几个目录权限给修改以下就好了,如果还有一些别的目录一并修改即可。
1 2 3 4 5 6 |
$ chown -R postfix.root /var/spool/postfix/defer/ $ chown -R postfix.root /var/spool/postfix/deferred/ $ chown -R postfix.root /var/spool/postfix/private/ $ chown -R postfix.postdrop /var/spool/postfix/public/ $ chown -R postfix.postdrop /var/spool/postfix/maildrop/ $ chown -R postfix.root /var/lib/postfix/ |
Postfix进程
master:这条进程是 Postfix 邮件系统的大脑,它产生所有其他进程。
smtpd:作为服务器端程序处理所有外部连进来的请求。
smtp:作为客户端程序处理所有对外发起连接的请求。
qmgr:它是 Postfix 邮件系统的心脏,处理和控制邮件队列里面的所有消息。
local:这是 Postfix 自有的本地投递代理MDA,就是它负责把邮件保存到邮箱里。