Назад | Перейти на главную страницу

Как настроить переадресацию портов для прослушивания postgresql на localhost?

У меня есть экземпляр postgresql, работающий на SLES.

Я хочу настроить его для прослушивания на localhost и включить iptables для перенаправления портов.

Моя текущая конфигурация

postgresql.conf:

listen_addresses = 'localhost'
port = 5432

pg_hba.conf:

local   all         all                               md5
host    all         all         127.0.0.1/32          md5
host    all         all         0.0.0.0/0          md5

iptables (правило добавлено через iptables -t nat -I PREROUTING -p tcp --dport 5432 -j REDIRECT):

Chain PREROUTING (policy ACCEPT 441 packets, 54049 bytes)
 pkts bytes target     prot opt in     out     source               destination
    6   420 REDIRECT   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5432

С такой настройкой я не могу открыть соединение psql с БД.

Без правила iptables я получаю Connection refused ошибка.

С правилом iptables я получаю Connection timed out ошибка.

Возможно, вам потребуется проверить таблицу фильтров. Например, какова политика по умолчанию для INPUT? Есть ли у вас явное правило, разрешающее порт 5432, если это не разрешено политикой CHAIN.

Кроме того, может быть недостаточно написать правило, указанное в вашем вопросе. Прочтите это из man iptables:

REDIRECT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT
    chains, and user-defined chains which are only called from those chains. 
    It redirects the packet to the machine itself by changing the destination IP
    to the primary address of the incoming interface (locally-generated packets are mapped to  the  127.0.0.1 address).

Таким образом, он будет перенаправлять запрос на IP-адрес, не обязательно localhost или 127.0.0.1. Возможно, вам потребуется явно добавить IP-адрес 127.0.0.1 в правило NAT. Можешь попробовать:

iptables -t nat -I PREROUTING -p tcp --dport 5432 -j DNAT --to-destination 127.0.0.1