iptables 仅接受安全连接

iptables 仅接受安全连接

假设我想在我的机器上打开端口 12345,但我只想允许通过安全套接字 (SSL) 进行连接。我是否可以在以下命令中添加标志:

/sbin/iptables -A INPUT -p tcp --dport 12345 -j ACCEPT

谢谢!

答案1

经过几天的思考,我又回过头来思考这个问题,发现这不是什么问题。原因如下:

启用 SSL 的守护进程会监听端口,并期望在执行其他任何操作之前协商 SSL 连接。如果您连接并尝试执行除协商 SSL 之外的任何操作,考虑到您在代码路径中的位置,这肯定会造成错误,就像连接到 Web 服务器并键入 一样。连接将被断开。尝试连接到端口 443 上的 HTTPS Web 服务器并发出正常的 GET 请求:MAIL FROM: [email protected]

[madhatta@anni tmp]$ telnet www 443
Trying 193.219.118.100...
Connected to www.teaparty.net (193.219.118.100).
Escape character is '^]'.
GET /


[...]
<body>
<h1>Bad request!</h1>
<p>  
    Your browser (or proxy) sent a request that
    this server could not understand.

就 SSL 协议而言,这相当友好。以下是使用 POP/S 服务器在端口 995 上进行的类似实验:

[madhatta@risby video]$ telnet www 995
Trying 193.219.118.100...
Connected to www.
Escape character is '^]'.
USER fred
Connection closed by foreign host.

注意,这是一个完全合法的 POP 命令;只是在对话的这个阶段,守护进程需要我首先要建立一个 SSL 连接,因为它的配置就是这样的。我给它输入了一些非 SSL 的东西,它却把我像麻风土豆一样扔了下去。

顺便说一句,这个讨论不适用于 TLS。TLS 是 SSL 协议的扩展,它明确允许以纯文本形式建立连接,然后由一端协商建立 SSL 连接,该端已确定另一端支持 TLS。

但是您的问题具体询问的是 SSL,而不是 TLS,而且无论如何解决方案很简单:

在端口 12345 上运行一个强制使用 SSL(即不支持 TLS)的守护进程,您的工作就完成了。

答案2

不。不幸的是,iptables 仅知道第 2/3 层的内容:端口、IP 协议、源/目标 IP 或以太网地址等。

为了让 iptables 知道 TCP 流包含 SSL,它需要分析内容。但它不会这样做。您需要的是第 7 层防火墙,例如 l7-filter 项目:

http://l7-filter.sourceforge.net/

相关内容