背景
我是一名 Web 开发人员,试图确保传出的 IMAP 连接能够安全地完成。不幸的是,我只能使用 PHP 的 IMAP 扩展(暂时)。imap_open ()的文档不够完善。示例:
- 参数的标志顺序
mailbox
显然足够重要,可以破坏不兼容的字符串,但又不至于重要到需要记录下来。 - 显然,该
/ssl
标志确实使用了 TLS。 - 该
/tsl
标志不起作用。 - 该
/secure
标志导致Can't do secure authentication with this server
。
最后一个问题是我关注的用例。文档暗示,如果/secure
未设置标志,密码将以纯文本形式发送!(除非这是类似于加密字符串的事情,尽管连接本身可能已经加密?)如果是这样,那么其他所有内容是否加密并不重要,因为任何攻击者都可以转身使用他们刚刚找到的凭据。不,我们不是在谈论双因素身份验证,因为这明确避开了这个话题,并且是削弱基本身份验证强化的借口。
这有效:{mail.example.com:993/ssl/imap}
。
这不起作用:{mail.example.com:993/ssl/imap/secure}
。
搜索引擎返回的错误页面非常少Can't do secure authentication with this server
,这意味着我看到大多数人做的事情:盲目地复制粘贴代码,只做微小的修改,然后因为它完全有效就假定他们的实现是正确的。
但我坚持要验证外观。这让我想起了 2000 年代后期,微软重新开始开发 Internet Explorer 时 Windows 上的 Fiddler 程序。你可以检查每个网络连接的各种情况。
服务器环境
- 我有 cPanel 和 CloudLinux。
- 我有root权限。
- 我已经查看了一些其他线程;我的服务器已经安装
tshark
好了tcpdump
。 - 如果安装另一个程序能让我的生活更轻松的话,我很乐意。
- 电子邮件消息标题建议使用 TLS 1.2 连接,但我不知道这是我的发送服务器还是接收服务器。
- 我的服务器至少在 443 上配置了 TLS 1.2 和 1.3;443 上禁用了 1.1、1.0 和 SSL。
- 虽然我还没有弄清楚如何在端口 993 上禁用 TLS 1.0 和 1.1(离题,只是想澄清我至少知道一些事情),但 443 和 993 上的 SSL 协议已被禁用。
测试条件
我有意尝试对测试条件进行压力测试,否则我将看不到任何对比,因此不会学到任何东西。发件人和收件人的电子邮件说明:
- 从 example1.com 到 example1.com(永不离开服务器)。
- 从 example1.com 到 example2.com(虽然域名不同但仍未离开服务器)。
- 从 example1.com 到 differentserver.com(故意离开服务器)。
- 我想避免使用
/novalidate-cert
似乎对服务器到同一服务器的请求工作正常的标志。
解释意图
是的,端口 993应该再次加密,重点是验证正在发生的事情,而不是盲目信任。理想情况下,我想做一个明确的纯文本请求来对比加密请求。显然,对比是,使用嗅探器程序,我能够将纯文本请求视为纯文本!然后,我期望的加密示例基本上只是混乱的二进制数据。如果我可以验证请求是我所解释的请求,那么我就得到了我想要的验证!只要我能重复该验证过程,那就是我的答案!最重要的是凭据是加密的,在两个服务器“握手”后,我期望它加密吗?
嗅探器技术细节
虽然我不太熟悉服务器或 Linux,但我可以稍微熟悉一下终端。因此,我希望得到有关嗅探程序的帮助:
- 我应该使用哪个嗅探程序以便检查网络请求的内容(而不仅仅是标题)?
- 如果这些适用:
tshark
和tcpdump
显然都是尾部程序;我如何将它们的输出限制到端口 993? - 如果端口 993 上发生了很多事情(服务器使用率最低但仍然存在),我该如何进一步减少输出以便找到我发出的请求?
- 如果适用的话,我该如何澄清标题、内容或两者,以便我知道我在看什么?
- 有什么简单/容易的方法可以发送纯文本请求(在任何上下文中),我可以使用它来对比(希望)加密的端口 993 请求?
问题
如何以 root 身份从终端检查实时 Linux 服务器上的网络流量,以验证我关注的请求确实已加密?
实际上,在 Windows 上,我可以使用 Notepad++“检查”文本文件并正常读取。如果我打开光栅图像,我会看到二进制数据。我想确保凭据确实被加密,尽管 PHP 函数的文档令人困惑imap_open()
。
答案
非常感谢@grawity。简而言之:
- Windows 到 Linux:PuTTY。
- 列出网络设备:
ifconfig -a | sed 's/[ \t].*//;/^$/d'
。 - 检查传出的 993 端口请求:
tcpdump -A -n -i [NETWORK DEVICE] "port 993"
。