本地Cavicat连不上阿里云轻量服务器的postgresql / Redis

128 阅读3分钟

一、问题描述

本地使用Cavicat连接阿里云服务器的postgresql,提示连接超时 image.png

二、原因

服务器防火墙策略,默认不允许连接 (如何确认是否是防火墙原因导致的?可见本章第四点)

三、解决方案

方案:设置对应的防火墙规则,放行相应连接的包。

1、在阿里云平台设置防火墙规则,允许postgresql、redis的连接。 这里仅做示例使用,所以简单粗暴的放行对应端口的包(如放行postgresql端口5432,redis端口6379的包) image.png

2、在阿里云平台放行对应端口的包,发现仍然连接不上,登录服务器查看iptables,发现iptables也没有放行该包,设置对应的规则放行。 如执行以下命令

iptables -I INPUT -j ACCEPT

:这里仅做示例使用,简单粗暴的放行了所有的包,实际使用中应配合安全防范要求,配置对应的安全策略,如只放行对应端口的包等

iptables -I INPUT -j ACCEPT -p tcp --dport 5432

四、如何确认是否是防火墙原因导致的?

1、先ping下远程服务器ip,看链路是否是通的(前提是服务器允许ping) image.png 本地收到来自服务器的ping包回复,就说明链路的通的

2、本地连接服务器,则在服务器用tcpdump抓包,看是否收到了来自本地的连接请求包。

以eth0网口5432端口的包为例:

sudo tcpdump -i eth0 port 5432 -n

3、开启抓包后,在本地触发连接请求,在服务器查看是否收到了对应的包

看到如下内容则说明抓到了对应的请求包,连接不上就可能是服务器的某些防火墙设置导致的。 image.png

看到如下内容则说明没抓到对应的包。 image.png

我这边是后者,没抓到对应的5432端口的包。由于阿里云轻量应用服务器默认设置了一些防火墙规则,默认只允许指定的几个端口包(见下图),所以要先在阿里云平台先添加规则以允许对应的包。 image.png

4、在阿里云平台上添加防火墙规则后,再去抓到,这次抓到了来自本地的连接包。 image.png 虽然抓到了来自本地的连接包,但是Cavicat仍然连不上服务器的postgresql。此时应该是服务器内部的防火墙设置了一些规则,可查看防火墙规则。

5、查看防火墙规则 可使用以下命令查看防火墙规则:

iptables -nvL

查看filter表的INPUT链 image.png 这里配置了一条防火墙的默认拒绝策略,不符合前面规则的包默认都被丢弃了,包括我们预期的postgresql端口5432的连接包,所以需要显式的设置规则来允许目标包。