У меня есть сервер pgsql9.4, работающий на centos с pg_hba.conf, чтобы принимать соединения md5 с определенного диапазона IP-адресов. С отредактированными IP-адресами мой файл pg_hba.conf выглядит следующим образом:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all ident
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
#local #DBNAME# #USERNAME# md5
#host #DBNAME# #USERNAME# ###.###.###.0/24 md5
Эта конфигурация отлично подходит для IP-адресов в диапазоне от xxx.xx.xx.0 до xxx.xx.xx.24. Однако, когда я пытаюсь увеличить его, чтобы обеспечить доступ с сервера с более высоким IP-номером (112), и пытаюсь перезапустить службу postgres, при перезапуске служба не работает.
Я попытался увеличить число от 0/25 до числа, на котором работает наш марионеточный сервер.
Я также попытался добавить вторую идентичную запись, чтобы охватить только диапазон IP 111/112, но безрезультатно.
У кого-нибудь есть идеи относительно того, почему Postgres может считать их недействительным pg_hba.conf?
РЕДАКТИРОВАТЬ: забыл упомянуть, что для параметра listen_addresses установлено значение '*', чтобы доступ можно было контролировать для каждого пользователя внутри pg_hba.conf
Информация о хосте - это Обозначение CIDR, когда вы используете 172.16.33.0/24
вы не даете диапазон от 0 до 24, вы фактически даете диапазон от 172.16.33.1
к 172.16.33.254
(читать CIDR блоки чтобы лучше понять почему). ipcalc
инструмент может помочь вам определить, что:
$ ipcalc 172.16.33.0/24
Network: 172.16.33.0/24
Address space: Private Use
Address class: Class B
Netmask: 255.255.255.0 = 24
Broadcast: 172.16.33.255
HostMin: 172.16.33.1
HostMax: 172.16.33.254
Hosts/Net: 254
Так, 172.16.33.0/24
уже включает 172.16.33.111` and
172.16.33.112, meaning you don't need to do anything else in
pg_hba.confbut add the line with
172.16.33.0 / 24`.
Похоже, я неправильно понял синтаксис файла pg_hba.conf. Этот 0/24 не является диапазоном IP-адресов.
Изучение журналов postgres дало мне сообщение об ошибке неверная маска CIDR в адресе "###. ##. ##. 111/112" что предупредило меня о существовании и использовании нотации CIDR.
Я решил ошибку, добавив записи для каждого IP-адреса, который я хотел разместить, вместе с / 32 для каждого из них.
91 host DBNAME USERNAME 172.16.33.111/32 md5
92 host DBNAME USERNAME 172.16.33.112/32 md5
93 host DBNAME USERNAME 172.16.33.0/24 md5
Кажется, это отлично работает. Теперь мне просто нужно освежить свое понимание различных обозначений, используемых в pg_hba.conf :)