AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1878512
Accepted
John
John
Asked: 2025-02-13 00:22:05 +0800 CST2025-02-13 00:22:05 +0800 CST 2025-02-13 00:22:05 +0800 CST

如何验证/检查 Linux 上的传出网络连接以确保内容和密码确实被加密?

  • 772
该问题已从 Information Security Stack Exchange迁移,因为可以在 Super User 上回答。2 天前迁移 。

背景

我是一名 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。简而言之:

  1. Windows 到 Linux:PuTTY。
  2. 列出网络设备:ifconfig -a | sed 's/[ \t].*//;/^$/d'。
  3. 检查传出的 993 端口请求:tcpdump -A -n -i [NETWORK DEVICE] "port 993"。
encryption
  • 1 1 个回答
  • 66 Views

1 个回答

  • Voted
  1. Best Answer
    grawity
    2025-02-13T02:21:54+08:002025-02-13T02:21:54+08:00
    • 显然,/ssl 标志确实使用了 TLS。
    • /tsl 标志不起作用。

    该程序使用术语“SSL”表示在专用端口上直接(又称‘隐式’;‘包装模式’)使用 SSL/TLS,其中 TLS 握手从第 1 个字节开始 - 方式与 HTTPS 相同 - 并且使用术语“TLS”表示在纯文本端口上显式使用 SSL/TLS,其中客户端首先获得纯文本问候语,发出命令STARTTLS,然后开始 TLS 握手。

    虽然两者都使用相同的 TLS 协议,并且都同样安全,但现在人们普遍认为专用端口上的直接 SSL/TLS 更安全,因为它更容易编程 - 它有效地保证了“TLS 或无” - 而纯文本端口上的 STARTTLS 有很多实施错误的机会。

    (例如,一些客户端没有明确说明哪个设置是“强制 STARTTLS”(安全)以及哪个设置是“如果提供则使用 STARTTLS”(不安全)。一些客户端存在错误,尽管没有提供 STARTTLS,但仍可以继续;我甚至见过一个 LDAP 客户端,如果将其设置为 STARTTLS,则根本不激活它并以纯文本继续。)

    每个服务器的管理员可自行决定是否要在端口 993 上为 IMAP 提供直接 TLS,或是否要在端口 143 上为 IMAP 提供 STARTTLS,或两者兼而有之。Gmail 仅提供直接 TLS。

    最后一个问题是我关注的用例。文档暗示,如果未设置 /secure 标志,则密码将以纯文本形式发送!(除非这是类似于加密字符串的事情,尽管连接本身可能已经加密?)如果是这样,那么其他所有内容是否加密并不重要,因为任何攻击者都可以转身使用他们刚刚找到的凭据。不,我们不是在谈论双因素身份验证,因为这明确避开了这个话题,并且是削弱基本身份验证强化的借口。

    该/secure选项在不同的级别上工作:它不与传输安全性交互(如在 IMAP“下方”运行并加密所有传输数据的 TLS),而是在 IMAP/POP/SMTP 协议级别请求安全身份验证握手。

    在当今无处不在的 TLS 时代之前创建的大多数协议都倾向于支持某种身份验证握手,这种握手不仅仅发送原始密码 - 通常是一种“质询/响应”的形式 - 这样即使您的邮件是以明文形式传输的,至少您的密码也不会被盗。

    例如,HTTP 有 Kerberos 和 Digest;SMB 有 Kerberos 和臭名昭著的 NTLM;同样,POP/IMAP/SMTP 有支持CRAM-MD5和 SCRAM-SHA1 的选项(实际上也有相同的 Kerberos 和 NTLM)。

    这就是该/secure选项的用途:它要求 IMAP 客户端库将机制的选择限制为不直接显示凭据的机制(将选项从“PLAIN/Kerberos/CRAM/NTLM”限制为仅“Kerberos/CRAM/NTLM”。)

    因此,总而言之:当选项文档中/secure说“以纯文本形式”时,它真正的意思是“除了 IMAP 连接的其余部分之外,没有其他保护” ——在撰写本文时,这确实意味着“没有任何保护”,因为很少有邮件服务器支持 SSL。当然,如果整个连接都使用 TLS,那么“纯”密码也将受到 TLS 的保护。

    (如今,服务器很少支持 CRAM 或 SCRAM,因为它在使用 TLS 时几乎没有任何优势,更不用说它自身的局限性,而 Kerberos 仅适用于企业内部邮件服务器。)

    我应该使用哪个嗅探程序以便检查网络请求的内容(而不仅仅是标题)?

    任何。

    旧版本的 tcpdump 确实有一个默认限制,即仅捕获每个数据包的前 64 个字节(可以使用 增加该限制-s);现代版本捕获整个数据包。使用-A或-x显示数据包的原始内容。

    Tshark 使用-V和-O选项来扩展单个“协议”(如 Wireshark GUI 中所示),例如-VO imap,data扩展 IMAP 和/或“原始数据”有效负载。

    如果这些适用:tshark 和 tcpdump 显然都是尾部程序;我如何将它们的输出限制到端口 993?

    两者都使用 libpcap 并相应地使用pcap-filter(7)语法作为捕获过滤器;tshark 使用选项-f来指定捕获过滤器;而 tcpdump 则不然。

    tcpdump -A -n -i eth0 "port 993"
    

    过滤器port 993匹配 TCP 和 UDP。您可以具体一点并使用tcp port 993。不过,考虑到这个问题,您应该捕获port 993 or 143。

    通过 SSH 捕获时,not port 22如果您没有通过主机/端口进行限制,请始终至少使用 - 不过滤任何内容会导致每个打印的数据包触发另一个数据包等等,即使网络相当空闲,也会给您大量的输出。

    如果端口 993 上发生了很多事情(服务器使用率最低但仍然存在),我该如何进一步减少输出以便找到我发出的请求?

    host使用或将其限制为特定服务器的 IP 地址net。

    tcpdump -Ai eth0 "host imap.example.com and (port 993 or 143)"
    

    或者,捕获到 .pcap 文件并将其加载到本地安装的 Wireshark,它允许您按特定的“对话”进行过滤 - 右键单击​​数据包并选择“关注 > TCP 流”以仅查看该连接的数据。

    tcpdump -i eth0 -w foo.pcap "port 993"
    

    有一种方法可以通过 SSH 直接捕获到本地 Wireshark GUI:

    ssh root@myserver "tcpdump -i eth0 -s 65535 -Uw - port 993" | wireshark -k -i -
    

    如果适用的话,我该如何澄清标题、内容或两者,以便我知道我在看什么?

    Wireshark 的“TCP 流”将自动提取 TCP 有效负载。

    有什么简单/容易的方法可以发送纯文本请求(在任何上下文中),我可以使用它来对比(希望)加密的端口 993 请求?

    基本 TCP 客户端(例如nc、ncat或 )telnet可用于连接到任何 TCP 端口并发送纯文本。如果您对端口 993 执行此操作,服务器将断开您的连接,因为它需要有效的 TLS 握手,但您的数据包在捕获中仍可见。

    为了进行更好的比较,您需要一个 IMAP 服务器,该服务器既接受端口 993 上的 TLS 连接,又接受端口 143 上的纯文本/starttls 连接。由于 Gmail 只执行前者,因此尝试在端口 993 上进行纯文本通信的 IMAP 客户端通常甚至不会进入身份验证步骤 - 它将永远等待 IMAP 服务器发送的初始“问候”。

    • 2

相关问题

  • 如何解决:警告:使用过时的密钥推导。使用 -iter 或 -pbkdf2 会更好

  • OpenSSL 支持 ed25519,加密内容?

  • LUKS 模式下 dm-crypt / cryptsetup 的默认加密密钥大小是多少?

  • 备份机密文件的最安全方法,可能没有云存储?

  • 挂载 encfs 目录后看不到文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve