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

Изменение сетевого диапазона pg_hba.conf предотвращает перезапуск

У меня есть сервер 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` and172.16.33.112, meaning you don't need to do anything else inpg_hba.confbut add the line with172.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 :)