linux - 同一端口上的多个 tcp 服务

标签 linux tcp firewall iptables markers

我正在做一个项目,其中一些客户端(嵌入式 Linux 系统)需要使用目前至少两种协议(protocol)连接到主服务器:HTTPS 和 SSH。其中一个要求是从每个客户端到服务器只允许一个流,所以我必须找到一种方法让这两个服务在同一个端口上工作。

我正在考虑的一个解决方案是使用 iptables 标记:在客户端将 SSH 数据包标记为 0x1,将 HTTPS 数据包标记为 0x2,然后在服务器端,根据标记重定向数据包在本地接口(interface)上监听正确的服务。这是一个可以接受的解决方案吗?标记是由网络路由器保留的,还是仅在同一台机器上本地工作的 iptables?

无论如何,如果您能就不同的解决方案提出建议,我们当然欢迎!

最佳答案

以后其他用户发现此问题的更多信息:

https://github.com/yrutschle/sslh有你可能需要的东西。我还没有使用它(还),但正在计划中。 来自 Github 网站: sslh -- 一个 ssl/ssh 多路复用器

sslh 接受指定端口的连接,并根据对远程客户端发送的第一个数据包执行的测试进一步转发它们。

实现了对 HTTP、SSL、SSH、OpenVPN、tinc、XMPP 的探测,并且可以识别可以使用正则表达式测试的任何其他协议(protocol)。一个典型的用例是允许在端口 443 上提供多项服务(例如,从企业防火墙内部连接到 SSH,这几乎从不阻止端口 443),同时仍在该端口上提供 HTTPS。

因此 sslh 充当协议(protocol)多路分解器或交换机。它的名字来源于它最初的功能,即在同一端口上提供 SSH 和 HTTPS。

关于linux - 同一端口上的多个 tcp 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36603309/

相关文章:

linux - 从日志文件中计算具有匹配模式的行

c++ - Linux 串行读取 block minicom

tcp - WebSockets 和纯 TCP 之间的根本区别是什么?

python - 与 NodeJS 的 TCP/IP 通信以获取多个写入消息

networking - 大多数防火墙默认配置是否允许与 HTTPS 一样的安全 TCP?

linux - grep 和 grep -v 同时

python - 通过 SSH 在远程服务器上运行 Python 脚本

Java tcp端口与eclipse连接

app-store - 使用防火墙规则限制应用商店访问

django - postgresql - django.db.utils.OperationalError : could not connect to server: Connection refused