EC2 VPC 实例 - 过滤端口

Posted

技术标签:

【中文标题】EC2 VPC 实例 - 过滤端口【英文标题】:EC2 VPC Instance - Ports are filtered 【发布时间】:2015-12-13 02:14:23 【问题描述】:

我已使用默认安全组配置我的服务器,该安全组具有以下入站规则:

| Type | Protocol | Port Range | Source |
| All TCP | TCP | 0-65535 | 0.0.0.0/0 |
| All UDP | UDP | 0-65535 | 0.0.0.0/0|

使用这些规则,netstat 显示以下输出:

netstat -atn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:1113            0.0.0.0:*               LISTEN     
tcp        0      0 10.0.1.31:2113          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:2113          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:11300           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::5432                 :::*                    LISTEN     
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::6379                 :::*                    LISTEN  

所以,理论上,我应该能够使用 TCP 从任何 IP 地址连接到端口 1113。但这不起作用,IP 地址显示为已过滤,您可以在以下输出中看到:

似乎正常(打开且未过滤)的唯一端口是 22 和 80。这是我使用 nmap 测试它们时得到的输出:

PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   open     http
1113/tcp filtered ltp-deepspace
2113/tcp filtered unknown
3306/tcp filtered mysql
6379/tcp filtered unknown

我什至尝试为我的 IP 和端口 1113 添加自定义入站规则,但结果是一样的。

我怀疑某些防火墙在我的实例中阻止了这些端口上的流量,但我不确定如何检查。

需要注意的一点是,此实例位于 Amazon VPC 中。但是,此实例的网络 ACL 具有以下入站规则,应该允许来自所有端口的收入通信:

|Rule # | Type | Protocol | Port Range | Source | Allow / Deny |
| 100 | ALL Traffic | ALL | ALL | 0.0.0.0/0 |ALLOW |

对这里可能出现的问题有什么想法吗?

非常感谢您的帮助!

【问题讨论】:

这是通过互联网网关还是通过 NAT 实例连接? @VernBurton 这是一个互联网网关,我相信。不知道如何检查。 lsof -i:3306 的输出是什么样的? 输出为空(对于 3306 和 1113,以防万一您指的是那个端口)。唯一有输出的端口是 80 端口。 基于此,当您在防火墙上打开端口时,服务器上似乎没有实际运行以接受连接的服务。 lsof -i 向我们显示正在使用这些端口的程序和服务,并且它没有显示任何内容意味着没有任何东西响应 1113 的呼叫。您希望连接什么服务?可以用 netcat 监听那个端口然后测试吗? 【参考方案1】:

对于 Windows AMI,这可能是由于启用了 Windows 防火墙。有关详细信息,请参阅我对 @Miles_Gillham 答案的编辑

【讨论】:

【参考方案2】:

[我知道这是一篇旧帖子,但我今天被同样的事情所困扰,并遇到了这个问题。已扩展以添加适用于 Windows AMI 的步骤]

总结

当您从新的 AMI 启动新的 EC2 实例时,似乎存在将本地防火墙设置为过滤除 SSH 之外的所有内容的情况。

现在这可能是较新 AMI 上的默认设置,或者是诸如 fail2ban 之类的工作。如果您使用的是 Windows AMI,这可能是 Windows 防火墙。

症状如您所描述 - 您有一个面向公众的 IP 地址(直接附加或通过弹性 IP),您有许可的安全组,其他一切都很好。来自另一台工作服务器的 nmap(注意,AWS 不喜欢人们从 EC2 实例甚至在您自己的服务器上运行 nmap)将显示端口 22 已打开,但其他所有内容均已过滤。

Linux

TLDR;为了刷新规则,快速修复可能很容易:

iptables -F

理想情况下,首先运行此命令以列出违规规则:

iptables -L

但是你应该好好看看为什么要这样设置。有可能诸如 firewalld 之类的东西正在运行,它会与规则发生冲突,您可以选择配置或禁用它。这些会告诉你它是否正在运行:

firewall-cmd --status
firewall-cmd --get-services

当然还有其他防火墙服务。

一旦您认为自己做对了,请确保您重新启动服务器以确保一切正常,而不是恢复到紧张状态(服务方面)。

窗口

如果您使用的是 Windows AMI,则需要调整防火墙。

    转到控制面板 > 系统和安全 > Windows Defender 防火墙 从这里,您可以将其关闭并仅依靠您的 AWS 安全性(不推荐)或选择性地启用某些应用程序/端口。

【讨论】:

【参考方案3】:

我知道这是旧帖子,但我认为它也可能对其他人有所帮助。我在运行 RHEL 7.6 时遇到了这个问题。我不得不重新启用防火墙并在防火墙规则中添加端口。然后它就像魅力一样。

【讨论】:

【参考方案4】:

对于那些正在寻求答案的人。这是因为您的 Linux 系统中还有一个额外的防火墙。例如,如果您使用的是 Ubuntu,您可能需要这样做:sudo ufw disable

请参阅此link 了解更多信息。

【讨论】:

以上是关于EC2 VPC 实例 - 过滤端口的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 无法访问同一 VPC 中的 EC2 端口

无法访问 AWS ECS EC2 实例中的端口

远程桌面连接到 ec2 实例

Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求

无法连接到端口 8080 上的 EC2 Windows 实例

AWS Fargate 网络 - 端口 80:连接被拒绝