iptables只接受安全连接

比方说,我想我的箱子上打开端口12345,但我只想通过一个安全套接字(SSL)的连接。 有没有可以添加到以下命令的标志:

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

谢谢!

思考了几天之后,我回到了这里,意识到这是一个非问题。 原因如下:

启用S​​SL的守护进程在端口上侦听,并且希望在做其他事情之前协商SSL连接。 如果您连接并尝试执行除协商SSL以外的其他任何操作,则在连接到Web服务器并键入MAIL FROM: [email protected] ,会出现错误。 连接将被简单地删除。 尝试连接到端口443上的HTTPS Web服务器并发出正常的GET请求:

 [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亲吻去。 下面是一个在995端口上使用POP / S服务器的类似实验:

 [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命令; 只是在这个对话中,守护进程要求我首先build立一个SSL连接,因为这是它被configuration来做的。 我给它喂了一些不是SSL的东西,就像一个麻疯病的马铃薯一样把我扔掉了。

顺便说一句,这个讨论不适用于TLS。 TLS是SSL协议的扩展,明确允许以纯文本forms进行连接,然后通过一端协商达到SSL连接,该端确定另一端具有TLSfunction。

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

在端口12345上运行一个守护进程,该守护进程要求使用SSL(即,不支持TLS),并完成您的工作。

不。 不幸的是,iptables只知道第2/3层的东西:端口,IP协议,src /目标IP或以太网地址等。

为了使iptables知道TCPstream包含SSL,需要分析内容。 它不这样做。 你需要的是第7层防火墙,比如l7-filter项目:

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