注册 登录
远景论坛 - 前沿科技与智慧生态的极客社区 返回首页

joyjeo的个人空间 https://i.pcbeta.com/?1985279 [收藏] [复制] [分享] [RSS]

日志

邮件 (mage)

已有 364 次阅读2014-11-20 16:53 |个人分类:linux| mail

Mail Server:
SMTP: Simple Mail Tansfer Protocol (太简单,缺乏认证机制)  smtp带文件路由功能,邮件中继/邮件中继服务器 。对应的TSL协议是smtps(不怎么实用,但是pop3s比较实用)
    c/s架构 SMTPD 25/tcp <->smtp(sendmail) >5000/tcp  客户端-->服务端   smtp只负责传输,不负责投递。主机既要有客户端,又要有服务端。
     MT:邮件传输  MTA:邮件传输代理   MD:邮件投递  MDA:邮件投递代理  MU:邮件用户   MUA:邮件用户代理   
  MUA--(smtp协议)-->SMTPD(一般是本地),分拣出本地邮件和远程邮件。本地邮件用LMTP协议。远程邮件则调用SMTP客户端--(smtp协议)-->远程服务器端SMTPD-->调用MDA-->投递到用户邮桶-->用户查看-->家目录的mbox目录
    如果邮件中继了,那么中继服务器会给邮件盖邮戳,邮件来源是中继服务器,但是发件人不会因为中继而改变。
    Open Relay (开放式转发)容易产生垃圾邮件,一般要禁用。  允许本地用户中继(因为MUA-->SMTPD-->SMTP 中SMTPD做了中继),缺点是“家贼难防”,所以必须有用户来认证。但是SMTP不支持用户认证。必须借助额外认证工具:SASL协议(简单认证安全层)。SMTPD和SASL服务通讯来实现认证。

ESMTP: Extended
POP3: Post Office Protocol  对应的TSL协议是pop3s
     在SMTP基础上,将本机的MUA挪到PC机上,用MRA(邮件检索代理 Mail retrieval agent,比如POP3服务器)替换本机被挪走的MUA。而POP3协议工作在服务器上的MRA和PC机的MUA之间。发邮件用SMTP协议,收邮件用POP3协议(或IMAP4协议)。
IMAP4: Internet Mail Access Protocol (比POP3强大,但是资源消耗大)对应的TSL协议是imap4s

####################################################
WebMail:   邮件服务器上安装web服务,web服务通过PHP或perl等实现MUA的功能。客户就可以通过Web来收发邮件了。用户帐号不是服务器的系统帐号,而是虚拟用户(仅用于访问服务的标识)
          发邮件:在邮件服务器上,web服务后的程序和SMTP(客户端)联系,直接发到远程SMTPD。
          收邮件:在邮件服务器上,web服务后的程序和MRA(POP3服务器)连接,通过MRA来检索邮件。

        POP3服务器需要验证用户,如果用户量巨大(比如上亿用户),则需要LDAP协议(轻量级目录访问协议)能提供比MySQL数据库高一个数量级的检索性能。LDAP写的性能比MySQL慢一个数量级。一般情况用MySQL来存放用户账户信息。
        SMTPD服务需要SASL服务验证用户,SASL需要一个组建来链接Mysql服务。

MTA:  sendmail  、qmail 、postfix 、exim。
MDA:procmail(sendmail)、maildrop、postfix分为本地用户和虚拟用户的MDA
MRA:pop3、imap4  对应程序有cyrus-imap、dovecot
MUA:thunderbird、outlook、evolution、mutt(CLI)
            webmail: openwebmail、squirrelmail
SASL: cyrus-sasl
           courier-authlib(比cyrus-sasl强大)

邮件服务器搭建规划:
发邮件:POSTFIX+SASL+MySQL(courier-authlib)
收邮件:DOVECOT+MySQL
WebMail: Extmail + Extman + httpd
注意:POSTFIX 的RMP包不支持SASL的虚拟用户认证。所以需要源码编译安装。
          安装顺序:mysql-->postfix 
           如果系统25号端口被占用,需要停掉25号端口的服务,并卸载对应程序。

参考:
http://hypocritical.blog.51cto.com/3388028/1403385

服务脚本:
#!/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 $?

发邮件:
telnet localhost 25
 helo
mail from:root
rcpt to:root
data
      Subject:  主题
       text
      .
quit



路过

雷人

握手

鲜花

鸡蛋

全部作者的其他最新日志

发表评论 评论 (7 个评论)

回复 joyjeo 2014-11-28 18:10
/etc/postfix/master.cf  是主进程的配置文件
/etc/postfix/main.cf邮件主配置文件。
主配置文件中格式为:参数 = 值    注意,指令必须顶格写,空格开头的行被认为是上一行的延续
回复 joyjeo 2014-11-28 18:18
postconf是postfix的配置工具。  
postconf -d 显示postfix默认配置
postconf -n 显示postfix被修改的配置
postconf -m 显示postfix所支持的查找表类型。
postconf -A  显示可支持的SASL客户端插件类型(支持的SASL)
postconf -e parameter=value  更新main.cf配置文件。
回复 joyjeo 2014-11-28 18:26
SMTP和SMTPD的通讯过程:
Hello => Mail from => RCPT to => data (.表示正文结束)
回复 joyjeo 2014-11-28 18:30
smtp状态码:
1xx  信息
2xx  正确
3xx  上一步操作尚未完成,需要继续补充
4xx  暂时性错误
5xx  永久性错误
回复 joyjeo 2014-11-28 18:41
smtp协议原语:
helo 以smtp协议发送hello
ehlo 以esmtp协议发送hello
mail from:   指明发件人
rcpt to:   指明收件人
data   正文
回复 joyjeo 2014-11-28 18:43
newaliases 命令会自动将/etc/aliases hash成 /etc/aliases.db
回复 joyjeo 2014-11-29 22:26
postfix默认把本机ip所在的网络识别为本地网络,并为之中继邮件

facelist

您需要登录后才可以评论 登录 | 注册

小黑屋手机版联系我们

Copyright © 2005-2025 PCBeta. All rights reserved.

Powered by Discuz!  CDN加速及安全服务由「快御」提供

请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。

远景在线 ( 苏ICP备17027154号 )|远景论坛 |Win11论坛 |Win10论坛 |Win8论坛 |Win7论坛 |WP论坛 |Office论坛

GMT+8, 2025-4-5 02:56

返回顶部