如何提高SMTP邮件的安全性?从而不被黑客窃听
简单邮件传输协议(SMTP)用于在邮件服务器之间进行邮件传输,并且传统上是不安全的,因此容易被黑客窃听。命名实体的基于DNS的认证(国家统计局)用于SMTP提供了邮件传输更安全的方法,并逐渐变得越来越流行。
在这篇文章中,我们将讨论与SMTP相关的风险以及DANE如何克服这些风险,并为您提供Internet.nl向那些在实施DANE时照顾邮件服务器的人建议的技巧。
关键点:
- 即使安装了STARTTLS扩展程序,SMTP也有遭受中间人攻击的风险。
- DANE有助于缓解此类攻击。有关DANE实施的指南,请参见我们的操作方法。
- DANE打算在MX域上发布。因此,如果您使用的是另一个域的邮件服务器,请确保通过设置一个或多个TLSA记录来要求该域的管理员支持DANE。
使用STARTTLS的机会性SMTP的风险
默认情况下,邮件传输以纯文本格式进行。通过引入STARTTLS扩展,机会安全性已添加到SMTP协议中。这意味着仅当接收邮件服务器请求发送邮件服务器使用加密的传输层安全性(TLS)连接时,邮件服务器之间的邮件传输才受到保护。如图1所示。
图1 —尽管与传统的未加密SMTP连接相比,STARTTLS被认为是一种改进,但仍使电子邮件传输容易受到风险的影响。
尽管STARTTLS可以对邮件传输进行加密,但是不会强制执行加密,并且发送邮件服务器不会对接收邮件服务器进行身份验证。这导致以下风险。
风险1:STRIPTLS /降级攻击
首先,发送邮件服务器无法预先确定接收服务器是否支持加密传输。仅在通信开始之后,发送服务器才可以从接收服务器支持的功能(在本例中为STARTTLS)中学习允许加密传输的功能。
结果,从一台邮件服务器到另一台邮件服务器的初始连接总是开始未加密,从而使其容易受到中间人(MITM)攻击。如果邮件服务器在SMTP握手期间不提供“ STARTTLS功能”(因为它已被攻击者剥离),则邮件传输将通过未加密的连接进行。
图2-此图显示了攻击者执行MITM攻击并通过从接收电子邮件服务器中剥离TLS功能来强制建立不安全的连接时会发生的情况。当攻击者控制发送服务器和接收服务器之间的网络通信时,攻击者可能会通过删除指示接收服务器支持加密传输的信息来降级会话。发送服务器将继续处理并传输未加密的消息,从而使攻击者可以看到消息中包含的所有数据。
风险2:将邮件流量转移到攻击者的邮件服务器
其次,默认情况下,邮件服务器不会验证其他邮件服务器证书的真实性;接受任何随机证书。尽管传统上认为邮件的传递比邮件的安全性更为重要,但从技术角度来看,尚不清楚要在证书中验证哪些名称。
邮件服务器的主机名是通过DNS邮件交换器(MX)查找获得的,但是如果没有DNSSEC,这些名称将无法被信任。结果,攻击者可以将任何随机证书插入连接过程。
图3 —该图显示了攻击者执行MITM攻击并将其自己的证书插入连接过程时会发生什么。这使攻击者可以解密发送和接收邮件服务器之间的通信。
需要更安全的邮件传输
据知名网络黑客安全专家,东方联盟创始人郭盛华的研究和事件表明,这些攻击不是理论上的,而是在日常实践中发生的,从而导致信息泄漏。我们需要一种更安全的邮件传输方法,以抵消攻击者推迟和/或篡改邮件传输的企图。这是DANE for SMTP出现的地方。
DANE for SMTP(RFC 7672)使用DNS TLSA资源记录的存在来安全地发出TLS支持信号,并发布发送邮件服务器可以成功验证合法接收邮件服务器的方式。这使安全连接可以抵抗降级和MITM攻击。
可以使用DANE减轻先前描述的带有机会性TLS的SMTP的风险。如图4所示,该图显示了使用DANE进行邮件传输。
图4-此图显示了接收域的邮件服务器的DNS TLSA记录的存在被发送邮件服务器解释为使用TLS的功能。因此,在与接收域的邮件服务器进行通信时,可以强制使用TLS。TLSA记录中嵌入的指纹可用于验证接收邮件服务器的证书。因此,在发送方进行DANE验证的情况下,具有已发布TLSA记录的接收服务器不再容易受到上述MITM攻击。
使用DANE时,最好的做法是在证书未通过验证时,发送邮件服务器中止连接并尝试另一台服务器或推迟发送消息。
对于那些想将MTA-STS替代DANE的人来说:这种相对较新的方法似乎最适合大型云邮件提供商,没有像DANE那样被广泛采用,并且由于“首先信任” 而被认为不如DANE安全。使用和缓存,这在RFC 8461中得到了认可。但是,您可以在DANE旁边使用它,因为两个标准可以有意地彼此并存。
实施DANE的提示和技巧
如果您打算实施DANE,请参考以下提示和技巧。
入门
首先在您的MX域上发布DANE记录,或要求您的邮件提供商这样做。
下一步是在您的发送邮件服务器上启用DANE验证(或要求您的提供商/供应商启用或实现它)。我们的方法可能对这些步骤有用。
注意:DANE向后兼容。因此,如果您的邮件服务器支持DANE而连接的邮件服务器尚不支持DANE,则通常仍将使用STARTTLS或纯文本。
发布DANE记录
- DANE打算在MX域上发布。因此,如果您使用的是另一个域的邮件服务器,请确保通过设置一个或多个TLSA记录来要求该域的管理员支持DANE。
- 要注意的另一件事是DANE依赖于DNSSEC提供的安全性。在实施DANE之前,使您的主域和MX域支持DNSSEC。
- 注意:DNSSEC工具已经非常成熟并且可以完全自动化。此外,DNSSEC得到许多DNS提供商的支持,包括一些较大的参与者。
- 由于邮件服务器默认情况下不验证证书,因此为邮件服务器购买昂贵的证书对机密性没有增值或几乎没有增值。
- 建议使用证书的公共密钥来生成TLSA签名(选择器类型为“ 1”),而不要使用完整的证书(选择器类型为“ 0”),因为这样可以重复使用密钥材料。尽管偶尔刷新一下密钥材料是明智的,但是请注意,使用“向前保密”可以减少每次使用新密钥对的需要。
- 仅当接收邮件服务器提供完整的证书链时,颁发者证书(使用类型'2')才有效。
- 确保TLSA记录的生存时间(TTL)不太高。这样可以在出现问题时相对快速地应用更改。建议在30分钟(1,800秒)和1小时(3,600秒)之间使用TTL。
- TLSA记录标识证书。如果证书被新证书替换,则相关的TLSA记录也需要及时更新。否则会出现不匹配,验证将失败,并且DANE感知的服务器不会将消息发送到接收者的域。DANE允许您发布多个TLSA记录来解决此问题。通过使用多个TLSA记录,您可以创建过渡方案。
- 实施对DANE记录有效性的监控。
验证DANE记录
- 越来越多的邮件服务器软件(如Postfix,Exim,Cloudmark,Halon,Cisco和PowerMTA)支持DANE验证。如果您使用的是此类软件,则可以启用DANE验证。
- 确保注意发送邮件服务器的日志,以查看哪些域未通过DANE验证。
- 某些软件允许测试模式。这意味着DANE验证已完成并记录下来,但如果DANE验证失败,则没有交付的后果。
欢迎转载分享
如何提高SMTP邮件的安全性?从而不被黑客窃听的更多相关文章
- SMTP邮件传输协议发送邮件和附件
在以前接触的项目中,一直都是在做网站时用到了发送mail 的功能,在asp 和.net 中都有相关的发送mail 的类, 实现起来非常简单.最近这段时间因工作需要在C++ 中使用发送mail 的功能, ...
- 免费SMTP邮件服务:Mandrill,Sendgrid,Mailjet,Postmarkapp,MailChimp
免费的SMTP发邮件服务平常几乎都没有怎么关注,Wordpress发邮件几乎用普通的邮箱的SMTP服务就可以完成任务,但是自从用了Discourse.Ghost博客后,发现找到一个合适的.免费配额大的 ...
- [转] Linux 中提高 VsFTP 服务器的安全性
FTP是互联网应用中的一个元老级人物了,其方便企业用户文件的共享.但是,安全问题也一直伴随在FTP左右.如何防止攻击者通过非法手段窃取FTP服务器中的重要信息;如何防止攻击者利用FTP服务器来传播木马 ...
- 使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误
使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误 这个错误是验证出现错误, $mail->Port = 25; //SMT ...
- python SMTP邮件发送(转载)
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...
- C# SMTP邮件发送 分类: C# 2014-07-13 19:10 334人阅读 评论(1) 收藏
邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...
- C# SMTP邮件发送 分类: C# 2014-07-13 19:10 333人阅读 评论(1) 收藏
邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...
- python学习笔记(SMTP邮件发送:带附件)
博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...
- SMTP邮件传输协议发送邮件和附件(转)
1. SMTP 常用命令简介 1). SMTP 常用命令 HELO/EHLO 向服务器标识用户身份 MAIL 初始化邮件传输 mail from: RCPT 标识单个的邮件接收人:常在MAIL ...
随机推荐
- 树链剖分&咕咕咕了好久好久的qtree3
前言 显然qtree系列都是树链剖分辣 发现自己没有专门整理过树链剖分耶 辣么就把这篇博客魔改成树链剖分好辣(貌似除了树剖也没什么好写的) 正文 废话了辣么多终于开始了 一.树剖怎么写鸭 二.树剖有什 ...
- Git-Runoob:Git 教程
ylbtech-Git-Runoob:Git 教程 1.返回顶部 1. Git 教程 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torva ...
- wpf进程间通讯
wpf进程间通讯 在联想智能识别项目中,需要用到进程间通讯,并且是低权限向高权限发送消息.首先声明一下,此项目是wpf的. 首先先简要说一下什么时候会用到进程间通讯,如:在Windows程序中,各个进 ...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_7 Mybatis中参数的深入-使用实体类的包装对象作为查询条件
pojo对象就是实体类 综合查询-实体类包装起来做查询 新建实体类QueryVo 提供一个User对象属性,并生成getter和setter 测试 修改dao接口中的返回类型为List<User ...
- 7.k8s.调度器scheduler 亲和性、污点
#k8s. 调度器scheduler 亲和性.污点 默认调度过程:预选 Predicates (过滤节点) --> 优选 Priorities(优先级排序) --> 优先级最高节点 实际使 ...
- Matlab 文件格式化/Matlab Source File Formattor
由于需要使用到别人编写的Matlab代码文件,但是呢不同的人有不同的风格,有的写得就比较糟糕了. 为了更好地理解代码的内容,一个比较美观的代码会让人身心愉悦. 但是在网上并没有找到一个比较好的实现,此 ...
- HTML5——web存储 Web SQL 数据库 应用程序缓存 Web Workers 服务器发送事件 WebSocket
web存储 比cookie更好的本地存储方式 localStorage - 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除. sessionStorage - 用于临时保存同一窗口( ...
- 如何保存不连着电脑跑monkey?如何跑多个APK的monkey?
哈喽,大家有没有遇到用真机跑monkey的时候,跑到一半结果小手一抖不小心把线碰掉了,结果报告就没获取到啦~ 今天就来解决这个问题 1.如何保存不连着电脑跑monkey? 1).输入命令进入shell ...
- WEB框架实战总结
Django 在新一代的 Web框架 中非常出色 使用Python开发Web,最简单,原始和直接的办法是使用CGI标准,可以用WSGI接口 一.WSGI接口实现web页面 运行WSGI服务 我们先编写 ...
- [DS+Algo] 004 栈、队列及其代码实现
1. Stack FILO (FirstInLastOut) 的链表结构 在程序编译环境上使用较多 常用操作 push pop peek is_empty size Python 代码示例 class ...