У меня есть экземпляр 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