pg

pg pg_hba.conf 设置IP白名单

2022-10-24  本文已影响0人  饱饱想要灵感
  1. 首先找到 找到pg路径
    ps -ef|grep postgre |grep -- -D
    pg位置.png
  1. 然后修改路径下的pg_hba.conf, 一般都是在IPv4下修改
    pg_hba.png
# PostgreSQL Client Authentication Configuration File
# ===================================================
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
 local   all             all                                     trust
# IPv4 local connections:
 host    all     postgres        127.0.0.1/32            trust

 host   test        popo        192.168.0.1     md5

# IPv6 local connections:
 host    all             all             ::1/128                 md5
  1. 最后找到pg服务, 重新加载
systemctl |grep postgre
service postgresql-10 reload
pg-service.png

pg_hba.conf 文件说明

pg_hba中hba的意思是 host-based authentication 即基于主机的认证。它用于控制安全访问,管理客户端的访问权限,包括:

它的常用格式是一组记录,每行一个。一个记录由多个空格或者制表符分隔的域组成。如果域值被加上引号,域可以包含空格。记录不能跨越多行。
每一行格式:
{连接方式} {连接的数据库} {连接的用户} {连接的主机IP} {认证方式}

每一个远程客户端访问记录具有如下的格式:
host database role CIDR-address authentication-method

每一个UNIX域套接字记录具有如下的格式:
local database role authentication-method

连接方式

选项 解释
local 这条记录匹配通过 Unix 域套接字进行的联接企图, 没有这种类型的记录,就不允许 Unix 域套接字的联接。
host 这条记录匹配通过TCP/IP网络进行的联接尝试。他既匹配通过ssl方式的连接,也匹配通过非ssl方式的连接。<br />注意:要使用该选项你要在postgresql.conf文件里设置listen_address选项,不在listen_address里的IP地址是无法匹配到的。因为默认的行为是只在localhost上监听本地连接。
hostssl 这条记录匹配通过在TCP/IP上进行的SSL联接企图。<br />要使用该选项,服务器编译时必须使用–with-openssl选项,并且在服务器启动时ssl设置是打开的,具体内容可见这里。
hostnossl 这个和上面的hostssl相反,只匹配通过在TCP/IP上进行的非SSL联接企图。

数据库

指定这一记录匹配的数据库名。all匹配所有数据库。可以提供多个数据库名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有数据库名的单独的文件。

用户名

指定这一记录匹配的数据库角色名。all匹配所有角色。如果指定的角色是一个组并且希望该组中的所有成员都被包括在内,在该角色名前面放一个+。可以提供多个角色名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有角色名的单独的文件。

主机IP

指定这一记录匹配的客户端机器的IP地址范围。本选项只能在连接方式是host, hostssl或者hostnossl的时候指定。

它包含一个标准点分十进制表示的IP地址和一个CIDR掩码长度。IP地址只能用数字指定,不能写成域或者主机名。

掩码长度指示客户端IP地址必须匹配的高位位数。给定IP地址中,在这些位的右边必须是零。IP地址、/和CIDR掩码长度之间不能有任何空格。

典型的CIDR地址例子是:192.0.2.89/32是一个单一主机,192.0.2.0/24是一个小网络,10.6.0.0/16是一个大网络。

要指定单一的主机,IPv4的掩码是32,IPv6是128。

ip地址(ip-address)、子网掩码(ip-mask)
这两个字段包含可以看成是标准点分十进制表示的 IP地址/掩码值的一个替代。
例如,使用255.255.255.0 代表一个24位的子网掩码。它们俩放在一起,声明了这条记录匹配的客户机的 IP 地址或者一个IP地址范围。

认证方法

方法 解释
trust 无条件地允许联接,这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期望的任意 PostgreSQL 数据库用户身份进行联接,而不需要口令。
reject 联接无条件拒绝,常用于从一个组中"过滤"某些主机。
md5 要求客户端提供一个 MD5 加密的口令进行认证,这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法。
password 和"md5"一样,但是口令是以明文形式在网络上传递的,我们不应该在不安全的网络上使用这个方式。

例子1: IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库。

host all all 10.10.56.17/32 md5

例子2: 允许地址为 10.10.56.17 的用户 pgtest通过 MD5加密方式连接主机上的 test 数据库。

host test pgtest 10.10.56.17/32 md5

例子3: 任意IP地址的用户 pgtest 无需密码验证可直接连接访问该主机的 test 数据库。

host test pgtest 0.0.0.0/0 trust

上一篇下一篇

猜你喜欢

热点阅读