Я пытаюсь настроить свой сервер так, чтобы порт 5432 (Postgres) был доступен только с localhost. Поэтому я запретил все и добавил обратно порт 5432, однако я не могу подключиться к нему.
Вот моя конфигурация UFW:
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN Anywhere
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
127.0.0.1 5432 ALLOW IN 127.0.0.1
22 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
80 ALLOW OUT Anywhere
22 ALLOW OUT Anywhere
443 ALLOW OUT Anywhere
53 ALLOW OUT Anywhere
33434:33524/udp ALLOW OUT Anywhere
127.0.0.1 5432 ALLOW OUT 127.0.0.1
80 (v6) ALLOW OUT Anywhere (v6)
22 (v6) ALLOW OUT Anywhere (v6)
443 (v6) ALLOW OUT Anywhere (v6)
53 (v6) ALLOW OUT Anywhere (v6)
33434:33524/udp (v6) ALLOW OUT Anywhere (v6)
И нетстат:
$ netstat -an | grep "LISTEN "
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp6 0 0 :::55056 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::5432 :::* LISTEN
tcp6 0 0 :::443 :::* LISTEN
Просто чтобы подтвердить, что это действительно UFW мешает соединению, так как если я его отключу, то все будет нормально. Есть идеи, что я упускаю?
решение1
Из вашего netstat мы видим, что есть только одно упоминание о порте 5432 (а именно, строка tcp6, прослушивающая ) :::5432
. Это показывает нам, что ваша программа прослушивает только IPv6
. Ваш брандмауэр разрешает только IPv4
. Есть два варианта: один из них заключается в том, что вы разрешаете адресу IPv6 ::1
(который является IPv6
эквивалентом localhost) подключаться к этой службе в вашем брандмауэре, а другой — заставить вашу программу прослушивать IPv4
. Лучше всего, вероятно, сделать оба варианта.