AWS 防火墙 [vs] 通用 iptables 防火墙

AWS 防火墙 [vs] 通用 iptables 防火墙

服务器1:
受 iptables 防火墙保护。

服务器2:
受 Amazon 安全组防火墙保护。

让我们 ping 两个端口上的某个被阻止(关闭)(未打开)的端口。

服务器1:

nc -w 1 <ip> <port>
Ncat: No route to host.

服务器2:

nc -w 1 <ip> <port>
Ncat: Connection timed out.

为什么会有差异?

这两个错误消息有什么区别?与 iptables 防火墙
相比,Amazon 防火墙有何不同?

答案1

最有可能的是,AWS 防火墙会返回一个 ICMP 数据包,表明找不到主机,而 iptables 防火墙根本没有反应。

https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Destination_unreachable

与仅发送 TCP 重置相比,ICMP“无法访问”的优点是:

  • 对于 UDP 也有同样的作用,UDP 无法表示不愿意接受数据
  • 在 AWS 的情况下更加诚实,因为数据包不是来自主机,而是来自 AWS 基础设施;要生成 TCP 重置,AWS 必须代表受保护主机“伪造”数据
  • 如果主机似乎无法访问,一些自动端口扫描程序可能会放弃而不尝试所有端口

答案2

“没有到主机的路由”意味着您的主机甚至不知道如何抵达指定的主机。 “连接超时”表示找到了路由,但远程主机没有应答连接请求。

防火墙通常有两种方法关闭端口。一种是实际将其关闭 - 将其设置为阻止。这将使服务器主动拒绝传入连接。根据您的测试方式,这将导致“没有到主机的路由”、“连接被外部主机关闭”或在尝试建立连接时立即收到的类似消息。

另一种方法是简单地忽略端口上的传入请求。请求者永远不会得到答复,并且请求超时。这在某些说法中称为“隐形阻止”端口。

答案3

快速回答,服务器 1 的防火墙拒绝数据包,而服务器 2 的防火墙则丢弃数据包。

REJECT:拒绝数据包并通知发送者我们这样做了,并停止处理该链中的规则。

DROP:静默忽略该数据包,并停止处理该链中的规则。

服务器 1 (iptables) 拒绝数据包并回复 ICMP 主机不可达消息。

REJECT all -- anywhere anywhere reject-with icmp-host-unreachable

它表示主机像上游路由器一样无法访问,而这意味着服务器处于活动状态并且可以访问,因为其 IP 地址仍然可以在回复数据包的源 IP 上看到。

该规则可以配置为简单地拒绝:

REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

服务器 2(Amazon 防火墙)正在丢弃数据包,它会导致客户端重试连接,直到超过阈值时间,然后生成“连接超时”错误消息。

DROP all -- anywhere anywhere

相关内容