pg pg_hba.conf 设置IP白名单
- 首先找到 找到pg路径
ps -ef|grep postgre |grep -- -D
pg位置.png
- 然后修改路径下的
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
- 最后找到pg服务, 重新加载
systemctl |grep postgre
service postgresql-10 reload
pg-service.png
pg_hba.conf 文件说明
pg_hba中hba的意思是 host-based authentication 即基于主机的认证。它用于控制安全访问,管理客户端的访问权限,包括:
- 哪些用户可以连接哪个数据库
- 哪些IP或者哪个网段的IP可以连接到本服务器
- 连接时的身份验证模式
它的常用格式是一组记录,每行一个。一个记录由多个空格或者制表符分隔的域组成。如果域值被加上引号,域可以包含空格。记录不能跨越多行。
每一行格式:
{连接方式} {连接的数据库} {连接的用户} {连接的主机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