无法连接到 AWS LAN 内的其他实例

无法连接到 AWS LAN 内的其他实例

我的客户安装了多个 AWS 实例,全部位于同一区域/数据中心。

我的任务是在其中一台机器上安装 Redis 和 Postgresql 实例,并使数据存储/数据库可以从另一个机器访问。数据库服务器的 LAN IP 为 172.26.14.232,运行数据库客户端的服务器的 IP 为 172.26.0.215。

Postgres 已启动并在数据库服务器上运行,使用 netstat 检查这一点:

[ubuntu@ip-172-26-14-232 DATABA ~]$ sudo netstat -tulpn | grep postgre
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      4539/postgres

当我尝试连接客户端盒子时,我收到“连接被拒绝”,就好像有防火墙阻止访问一样,netcat 确认了这一点:

[ubuntu@ip-172-26-0-215 GATE01 ~]$ sudo psql "sslmode=require"  --host 172.26.14.232 --user=postgres  --password
Password for user postgres:
psql: could not connect to server: Connection refused
        Is the server running on host "172.26.14.232" and accepting
        TCP/IP connections on port 5432?
        
[ubuntu@ip-172-26-0-215 GATE01 ~]$ nc -vz 172.26.14.232  5432
nc: connect to 172.26.14.232 port 5432 (tcp) failed: Connection refused

据我所知,我只能使用 nc 连接一个端口:

[ubuntu@ip-172-26-0-215 GATE01 ~]$ nc -vz 172.26.14.232 22
Connection to 172.26.14.232 22 port [tcp/ssh] succeeded!

我的客户说他删除了所有防火墙规则,但我不明白上面给出的结果。

我在某处读到,AWS 会阻止此类网络中的出站流量,但我无法自己检查这一点,因为我无法访问管理控制台。

奖金问题;-)

发现以下内容地点:

netcat -vzw 15 域名.com 21

如果成功,您将看到:

连接domain.com 21端口[tcp/ftp]成功!

如果端口连接被阻止或拒绝,您将看到:

nc:连接到域端口 21 (tcp) 失败:连接被拒绝

作者可能区分了“阻止”和“拒绝”,据此我认为,在后一种情况下,这意味着为此端口安装了固件规则“DENY”,但我不知道他的意思被“封锁”。是否存在第二种技术可能性,或者他只是将“阻止”和“拒绝”同义使用?

编辑:

令人惊讶的是,可以使用 nc 设置客户端-服务器连接(关闭数据库后):

[ubuntu@ip-172-26-14-232 DATABA ~]$ nc -l 5432

[ubuntu@ip-172-26-0-215 GATE01 ~]$ nc 172.26.14.232 5432
hello

在 172.26.14.232 上我们得到:

hello

答案1

根据您的netstat输出,您的 postgres 服务器仅侦听 127.0.0.1(环回接口)上的连接。

它不会接受任何其他接口上的连接,包括地址为 172.26.14.232 的接口。

您有三个主要选择:

  1. 重新配置 postgres 以接受 172.26.14.232 地址上的连接。

    为了安全起见,您还需要添加防火墙规则以确保只有某些主机(例如 172.26.0.215)能够连接到 postgres。

    我可以看到您正在使用 172.16/12 RFC-1918 私有地址,但我不知道您的子网是否与其他 AWS 客户完全隔离。如果您的子网是完全隔离的,那么在没有防火墙规则的情况下运行应该是安全的(尽管无论如何我都倾向于设置防火墙规则 - 如果需要,您可以随时打开访问权限,但您无法撤消被黑客攻击的情况)

  2. 在两台服务器之间建立某种 VPN。配置 postgres 以接受 VPN 接口上的连接。

  3. 使用ssh端口转发。例如,如果您在 172.26.0.215 上运行以下命令:

    ssh -N -L 5432:127.0.0.1:5432 [email protected]
    

    &如果您使用 ssh 密钥进行身份验证,您可能希望在后台运行此命令(或者在使用密码进行身份验证后按Ctrl-Z然后运行bg将其发送到后台),或者在一个单独的 ssh 会话中(来自您要运行 psql 或其他任何内容的会话),或者在一个tmuxscreen会话中。

    这会将本地计算机上的 127.0.0.1:5432 连接转发到远程计算机上的 127.0.0.1:5432。您可以使用 psql (或任何其他 postgres 客户端,包括使用 perl 脚本)连接到它数据库接口DBD::Pg或蟒蛇与心理PG3)。

    例如(在 172.26.0.215 上):

    psql "sslmode=require"  --host localhost --user=postgres  --password
    

    psql连接到本地计算机上的 localhost:5432,但 ssh 将其转发到远程计算机上的 localhost:5432。

    您将需要:

    1. 每当您需要连接到远程计算机上的 postgresql 时运行此命令,或者
    2. 设置一个 systemd 单元文件(或者其他文件,如果您不使用 systemd)来启动连接并在连接断开时重新启动它。为了使其自动化,您将需要使用 ssh 密钥而不是密码进行身份验证 - 无论如何您都应该这样做。

    如果需要,您可以对 redis (通常侦听 localhost:6379)执行相同的操作。


顺便说一句,你不需要sudo运行psql.

相关内容