邮件传输代理postfix

1、MTA:邮件传输代理,SMTP服务器

                 sendmail,UUCP
                 单体结构,SUID,配置文件语法(m4编写)
                 qmail
                 postfix:模块化设计,安全,跟sendmail兼容,效率高
                 exim:MTA
                 Exchange (Windows,异步消息协作平台)

2、MDA:邮件投递代理

                procmail
                Maildrop

3、MRA:邮件检索协议(POP3、IMAP4)

               cyrus-imap
               dovecot依赖mysql客户端

4、MUA:邮件用户代理

               outlook express, outlook
               foxmail
               THunderbird
               Evolution
               mutt(文本界面)

5、postfix的配置文件

         a) postfix模块化:
                   master: /etc/postfix/master.cf
                   mail: /etc/postfix/main.cf
 
         b) postconf: 配置postfix
                  -d: 显示默认的配置
                  -n: 修改了的配置
                  -m: 显示支持的查找表类型
                  -A: 显示支持的SASL客户端插件类型
                  -e PARMATER=VALUE: 更改某参数配置信息,并保存至main.cf文件中

6、smtp状态码:

               1xx: 纯信息
               2xx: 正确
               3xx: 上一步操作尚未完成,需要继续补充
               4xx: 暂时性错误
               5xx: 永久性错误

7、smtp协议命令:

              helo (smtp协议)
              ehlo (esmtp协议)
              mail from:邮件来源
              rcpt to:邮件送给

8、alias: 邮件别名

             abc@magedu.com: postmaster@magedu.com

9、邮件服务器:mail server:

             SMTP:简单邮件传输协议

             ESMTP:扩展SMTP协议

             POP3:邮局协议

             IMAP4:互联网邮件访问协议

             UUCP:Unix主机复制文件的协议

10、安装配置postfix

             groupadd -g 2525 postfix

             useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

             groupadd -g 2526 postdrop

             useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop

             tar zxvf postfix-2.9.3.tar.gz

             cd postfix-2.9.3

             make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'

             make

             make instal

1、生成别名二进制文件

           newaliases

2、进行一些基本配置,测试启动postfix

           myhostname = mail.magedu.com

           myorigin = magedu.com

           mydomain = magedu.com

           mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

           mynetworks = 192.168.1.0/24, 127.0.0.0/8

3、为postfix提供SysV服务脚本/etc/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 $?

# END

4、为此脚本赋予执行权限

chmod +x /etc/init.d/postfix

5、将postfix服务添加至服务列表

chkconfig --add postfix

6、设置其开机自动启动

chkconfig postfix on

7、重新启动服务

service postfix restart

8、为postfix服务开启用户别名支持

启用

alias_maps = hash:/etc/aliases

在/etc/aliases文件中定义新的别名项

redhat: magedu

 

                    gentoo@126.com: admin@magedu.com

          将/etc/aliases转换为hash格式

让postfix重新载入配置文件

                   /usr/sbin/postfix reload

9、实现postfix基于客户端的访问控制

          例如:

                    禁止172.16.100.66这台主机通过工作在172.16.100.1上的postfix服务发送邮件。访问表使用hash的格式。

1、编辑/etc/postfix/access文件,以之做为客户端检查的控制文件

定义:

172.16.100.66 REJECT

2、将此文件转换为hash格式

                    postmap /etc/postfix/access

3、配置postfix使用此文件对客户端进行检查

编辑/etc/postfix/main.cf文件

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

4、让postfix重新载入配置文件即可进行发信控制的效果测试了。

                 /usr/sbin/postfix reload