IPTable 规则限制 eth1 访问端口 80 和 443

IPTable 规则限制 eth1 访问端口 80 和 443

我有一项服务(代理后的 Elasticsearch)正在监听 eth1 的 80 和 443 端口上的客户流量。托管我服务的服务器还在 eth0 和 localhost 上托管其他管理员/特权访问内容

我正在尝试设置 iptable 规则来锁定与客户端位于同一网络上的服务器上的 eth1(阻止通过 eth1 进行 ssh/访问在端口 9904 上运行的内部服务等)。我还想确保规则不会禁止对 eth1:80 和 eth1:443 的常规访问。我提出了以下规则,但想与 iptable 专家一起审查此规则可能存在的问题。

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth1 -j DROP
  • 上述规则是否足够
  • 上述内容与谷歌搜索时发现的规则有何不同
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -i eth1 -p tcp -j ACCEPT
-A INPUT -i eth1 -j DROP

答案1

第一组规则首先允许端口 80 和 443 上的所有传入数据包。然后,它丢弃所有其他传入数据包(已接受的数据包除外)。

第二组规则首先允许端口 80 和 443 上的所有传入数据包。然后,它会丢弃传入连接(不包括已经接受的 80 和 443),这些连接是具有仅有的SYN 标志已设置。然后它允许所有传入数据包。

此处的区别在于您的 OUTGOING 连接会发生什么情况。在第一个规则集中,如果您尝试连接到另一台服务器,该服务器响应发送的任何数据包都将被丢弃,因此您将永远不会收到任何数据。在第二种情况下,这些数据包将被允许,因为来自远程服务器的第一个数据包将同时设置 SYN 和 ACK,因此通过 SYN 测试,并且任何后续数据包都不会设置 SYN,因此通过测试。

传统上,这是使用conntrack内核来跟踪防火墙中的每个连接来完成的,命令如下

-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

将传入数据包与现有连接或与某些其他现有连接(例如 FTP 数据连接)相关的连接进行匹配。如果您未使用 FTP 或使用多个随机端口的其他协议,则第二条规则集基本可实现相同的结果,而无需跟踪和检查这些连接的开销。

相关内容