AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 929965
Accepted
Martin Brown
Martin Brown
Asked: 2018-09-08 12:46:26 +0800 CST2018-09-08 12:46:26 +0800 CST 2018-09-08 12:46:26 +0800 CST

如何为 SSH 设置 AWS 网络访问控制列表到私有子网

  • 772

我正在做关于 AWS 的课程。我想要做的是设置一个带有两台 Linux 服务器的 VPC。我已经设置了具有两个子网的 VPC。我已经在每个服务器中放置了一台服务器。这个想法是一个子网是公共的,另一个是私有的。

我创建了两个网络 ACL,并与每个子网关联了一个。

我可以从我的机器通过 SSH 连接到公共子网中的服务器。当我尝试从该服务器通过 SSH 连接到我的私有子网中的服务器时,我遇到了连接超时。

我不确定我需要在两个网络 ACL 中设置什么规则才能使 SSH 正常工作。任何人都可以帮忙吗?鉴于我正在学习,我会很感激解释为什么规则应该是,而不仅仅是规则应该是什么。

我有一个名为 MyVPC 且 CIDR 10.0.0.0/16 的 VPC
我的第一个子网称为 MyVPCSub1 CIDR
10.0.1.0/24 我的第二个子网称为 MyVPCSub2 CIDR 10.0.2.0/24
我有一个名为 MyInternetRoute 的路由表,与 MyVPCSub1 关联的路由是:

|Dest        |Targ  |  
|10.0.0.0/16 |local |
|0.0.0.0/0   |igw   |

我有一个名为 MyPrivate 的路由表,与 MyVPCSub2 关联的路由是:

|Dest        |Targ  |
|10.0.0.0/16 |local |

我有一个名为 MyWeb 的网络 ACL 与 MyVPCSub1 相关联,其中包含以下规则:

入境:

| #   | Type | Protocol | Ports | Source     | A/D
| 99  | HTTP | TCP      | 80    | {My IP}/32 | D
| 100 | HTTP | TCP      | 80    | 0.0.0.0/0  | A
| 200 | HTTPS| TCP      | 443   | 0.0.0.0/0  | A
| 300 | SSH  | TCP      | 22    | {My IP}/32 | A
| *   | ALL  | ALL      | ALL   | 0.0.0.0/0  | D

出境:

| #   | Type   | Protocol | Ports      | Source     | A/D
| 50  | ALL    | ALL      | ALL        | 0.0.0.0/0  | A
| 100 | HTTP   | TCP      | 80         | 0.0.0.0/0  | A
| 200 | HTTPS  | TCP      | 443        | 0.0.0.0/0  | A
| 300 | Custom | TCP      | 1024-65535 | 0.0.0.0/32 | A
| *   | ALL    | ALL      | ALL        | 0.0.0.0/0  | D

我有一个名为 MyPrivate 的网络 ACL 与 MyVPCSub2 相关联,其中包含以下规则:

入境:

| #   | Type | Protocol | Ports | Source    | A/D
| 100 | ALL  | ALL      | ALL   | 0.0.0.0/0 | A
| *   | ALL  | ALL      | ALL   | 0.0.0.0/0 | D

出境:

| #   | Type | Protocol | Ports | Source    | A/D
| 100 | ALL  | ALL      | ALL   | 0.0.0.0/0 | A
| *   | ALL  | ALL      | ALL   | 0.0.0.0/0 | D
ssh
  • 2 2 个回答
  • 2561 Views

2 个回答

  • Voted
  1. Best Answer
    Alex Moore
    2018-09-08T14:18:24+08:002018-09-08T14:18:24+08:00

    首先是定义一些术语的含义。

    NACLS - 网络访问控制列表,是在子网级别应用的无状态数据包过滤器。记住“无状态”方面很重要,这意味着您需要明确所有进入和离开子网的流量。例如,使用“状态完整”规则方法(这是 AWS 中的安全组所应用的),您可以简单地为 SSH 指定 TCP/22 的入站流量,它将自动允许出站流量。对于 NACLS,情况并非如此,您需要在每个方向上指定一个规则以允许流量通过。

    安全组 - 这些是状态完整的规则组,可应用于 VPC 中的一个或多个实例。请注意,它们适用于实例级别。可以将安全组与传统的全状态防火墙进行比较,但由于它应用于单个实例级别,因此即使在同一子网中也可以将实例彼此隔离,这很好。而且因为它们是状态完整的,如果你想允许流量进入服务器(例如 TCP/22 用于 SSH),你不必担心创建相应的出站规则,平台会自动处理,所以它们更容易管理——这也意味着出错的机会更少。

    有一个很好的表格比较了这两者:VPC Security Comparison

    该页面上还有一个很好的图表,显示了根据流向应用流量的顺序......所以检查一下。

    然后就子网而言,我们有:

    公共子网 - 在 AWS 术语中,这只是一个附加了路由表的子网,该路由表通过附加的 Internet 网关具有 0.0.0.0/0 路由

    私有子网 - 这是相反的,即它没有通过连接的 Internet 网关的 0.0.0.0/0 路由。请注意,它仍然可以通过 NAT 网关或您环境中的类似代理拥有 0.0.0.0/0 路由,只是不是直接的。

    问题是,当您拥有 NACLS 和安全组时 - 您使用哪个。AWS 将 NACL 描述为“您的 VPC 的可选安全层”。确实,通常安全组就足够了,它们更灵活并提供相同的保护。以我的经验,在一些典型的情况下,我看到使用了 NACLS:

    1. 已知不良行为者的黑洞 - 如果您受到来自特定 IP 范围的攻击,只需添加一个完全阻止 IP/子网源的 NACL,这是一种简单的方法。
    2. 作为将控制权委派给团队的一种方式 - 安全团队应用广泛的刷 NACL 配置(例如只允许来自受信任的公司网络的流量),然后允许操作/开发团队配置他们自己的安全组规则。这样,即使工程师试图将其实例上的安全组开放到互联网进行测试,NACL 也会阻止它。您可以使用 IAM 来限制可以修改 NACL 的人员,但授予团队访问权限以控制其他所有内容,它可以作为大型环境中配置错误错误的重要后盾。

    AWS 还提供了一些关于此处可用的一些配置方案的指导:为您的 VPC 推荐的网络 ACL 规则

    虽然我的指导通常是安全组提供适当的保护,更易于理解和配置,并且在其应用程序中更加灵活和精细。NACL 确实为您提供了人为错误或更高级配置的额外支持,但对于基本用途,它们通常不使用。因此,我假设为什么 AWS 将它们称为“可选”。

    我会将 NACL 保留在其默认配置中(允许所有进出流量),而现在专注于安全组,因为使用 NACL 作为第二层只会增加额外的复杂性,这在您的场景中可能不需要。从学习的角度来看,很高兴知道它们在那里,它们是无状态的,它们适用于子网级别,并且它们在路由决策之后和安全组之前应用于进入子网的流量。

    关于您的具体情况,因为您使用的是 NACL,所以您需要记住它们是无状态的。因此,需要考虑进出子网的所有流量——这就是安全组如此简单的主要原因。所以在你的情况下,你有:

    • 从您的 IP 到 TCP/22 上的公共服务器的流量 - 是的 - 规则 #300 入站
    • 在返回 SSH 流量的高端口上从公共服务器返回流量 - 是的 - 规则 #50 出站(但不是规则 #300 - 见下文)
    • 在 TCP/22 上从您的公共子网出站到您的私有子网的流量 - 是的 - 规则 #50 出站
    • 来自公共网络的私有子网上的入站流量 - 是的 - 规则 #100 入站
    • 将流量从您的私有服务器返回到私有子网上的公共服务器 - 是的 - 规则 #100 出站
    • 将流量从您的私有服务器返回到公共子网上的公共服务器 - 啊 - 不,没有规则允许高端口(ssh 客户端在公共服务器上使用的临时端口来启动与私有服务器的连接)返回从私人服务器进入。

    您需要在您的出站公共子网 ACL 上添加一条类似规则 #300 的规则(但请注意,您的源 IP 格式稍有错误 - 见下文),但在绑定时,与私有子网的源一起使用。然后假设您的安全组配置良好,那么您应该一切顺利。

    希望有帮助。

    要添加 - 根据其他答案 - 公共子网的出站规则集上的规则 #300 格式错误。它应该是 0.0.0.0/0 而不是 0.0.0.0/32,但是在您的情况下,您并没有达到这一点,因为第 50 条规则首先被击中并且无论如何都允许所有流量 - 所以虽然它不起作用,但它是'实际上并没有导致你的问题。

    • 6
  2. Ryder
    2018-09-08T13:59:02+08:002018-09-08T13:59:02+08:00

    ACL 是无状态的。

    您的“公共”子网可能会阻止来自私有子网的 SSH 连接的返回路径。对于入站端的所有端口,您还需要一个与出站等效的规则,尽管您可以将其限制为子网范围 10.0.2.0/24。

    编辑添加:此外,0.0.0.0/32 的出站规则是错误的。除非你的 IP 正好是 0.0.0.0,否则它是行不通的。

    • 1

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve