Если клиенты службы живут на той же машине, надёжнее всего закрыть её привязкой: служба сама слушает только 127.0.0.1.
Приложение магазина работает на этом же сервере и ходит в базу по localhost. Значит, базе хватит петлевого адреса. Адрес привязки PostgreSQL задаёт параметр listen_addresses (в Вики). По умолчанию он равен 'localhost' — в postgresql.conf эта строка закомментирована. Найти, где его переопределили, поможет поиск по каталогу настроек:
Файлы из conf.d/ читаются после postgresql.conf, и последнее значение побеждает. Рядом с параметром в postgresql.conf стоит пометка (change requires restart): адрес меняется только перезапуском. После reload база перечитает файл, но сокеты останутся на 0.0.0.0.
Чужую машину база уже не пускала: pg_hba.conf отказал ей во входе. Но подключение она приняла — значит, к коду, который проверяет пароль, достучаться можно. Привязка убирает и это.
Бывает, что порт открывает не сама программа. У юнита .socket порт держит systemd, и в ss у такого порта стоит процесс systemd; адрес задаёт строка ListenStream= сокета (в Вики).
Закрой базу привязкой
Сделай так, чтобы PostgreSQL принимал подключения только с самого сервера, а приложение магазина на сервере по-прежнему до него доходило. Проверь с чужой машины: sudo ip netns exec lab-outside nc -zv -w 2 192.0.2.1 5432.
Цели · 0 из 2
- Закрыть базу для чужой машины её собственной настройкой ещё не выполнена
- Сохранить доступ к базе на самом сервере ещё не выполнена