暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Postgresql数据库常见安全加固配置

原创 萌大恩的妹子 2022-11-19
5328

1、密码复杂度策略

passwordcheck.so模块可以实现密码复杂度要求,创建用户或修改用户密码时,需满足复杂度要求,配置完成后,后续修改用户密码或新建用户时,密码需满足以下三点:

1.密码长度至少为8位

2.密码中必须同时包含字母和非字母(非字母可以是数字或特殊字符)

3.密码中不能包含用户名

操作方法:

STEP01:备份postgresql.conf文件,文件位于PG的data目录下

STEP02:检查配置文件中是否已配置shared_preload_libraries参数

cat postgresql.conf|grep shared_preload_libraries|grep -v '^#'

https://oss-emcsprod-public.modb.pro/image/editor/20221119-0ec114f9-9e42-4754-8885-bf3c1261a5c0.png

STEP03:打开postgresql.conf文件,找到shared_preload_libraries参数,在原有参数后加入passwordcheck模块(示例中的原有参数值为pg_stat_statements,不管原有参数值写了几个,都不要删!!以逗号分隔即可)。若文件中没有shared_preload_libraries参数或是注释掉了的,直接在最后一行新增即可

shared_preload_libraries = ' pg_stat_statements,passwordcheck'

STEP03:重启pg数据库

STEP04:验证,登录dbeaver执行命令【show shared_preload_libraries】确认是否配置passworkcheck模块,或者新建一个临时账户验证是否满足要求

2、数据库连接SSL加密

STEP01:验证当前pg是否开启ssl,部分版本自动开启ssl

Dbeaver登录,执行【show ssl】命令,若返回on,则说明已经配置,无需其他修改;若返回off,代表没有配置,可参照以下方案配置

检查当前版本pg数据库是否支持开启ssl

cd到pg的bin目录

./pg_config |grep CONFIGURE

若结果中有下图红框中的--with-openssl,说明当前数据库支持开启ssl,按照后续步骤开启即可;

若没有--with-openssl,则无法配置ssl

STEP02:cd进入到PG的data目录下,在该目录下创建私钥文件server.key

[root@HikvisionOS data]# openssl genrsa -des3 -out server.key 1024

【创建私钥文件,需要输入两次密码,密码自定义】

[root@HikvisionOS data]# openssl rsa -in server.key -out server.key

【删除以上设置的密码,需要再次输入密码】

私钥文件创建成功后,data目录下会出现server.key文件


STEP03:创建基于server.key文件的服务器证书,创建成功后,会在data目录下生成server.crt文件

[root@HikvisionOS data]# openssl req -new -key server.key -days 3650 -out server.crt -x509

STEP04:更改私钥文件server.key及证书文件server.crt的权限及所属者

[root@hikvisionos data]# chown postgres.postgres server.*

[root@hikvisionos data]# chmod 400 server.key

STEP05: 配置postgresql.conf文件。在data目录下找到postgresql.conf文件,请先备份。然后使用vim命令打开文件,配置以下参数(若参数前有#注释,需要删除#,否则配置不生效)

ssl = on

ssl_cert_file = 'server.crt'

ssl_key_file = 'server.key'

ssl_ca_file = 'server.crt'

STEP06: 配置pg_hba.conf文件。在data目录下找到pg_hba.conf文件,请先备份。然后使用vim命令打开文件,新增ssl连接规则

hostssl all all 127.0.0.1/32 md5

hostssl all all 0.0.0.0/0 md5

STEP07:重启pg服务,使配置生效

STEP08:验证,使用工具登录或服务器本地psql登录,验证是否开启ssl

3、日志审计

Postgresql数据库审计包括用户登录、退出、增删改查sql语法信息的审计,审计信息默认记录在pg_log目录中。开启方式请参照以下步骤

STEP01:备份postgresql.conf文件,文件位于PG的data目录下

STEP02:打开postgresql.conf文件,逐个按照如下参数值修改(#代表注释,文本中每个参数前默认的#要去掉)(此配置生成的日志是长期保存的,清理需手动清理)

log_destination = 'stderr'

logging_collector = on

log_directory = 'pg_log'

log_filename = 'postgresql-%Y-%m-%d.log'#一般要求保留180天日志,此配置为长期保存,若需删除,需要自动配置计划任务去删

log_truncate_on_rotation = off

log_rotation_age = 1d

log_rotation_size = 0

log_connections = on #用户session登陆时是否写入日志,默认off

log_disconnections = on #用户session退出时是否写入日志,默认off

log_statement = 'ddl' #none,即不记录;ddl(记录create,drop和alter);

#mod(记录ddl+insert,delete,update和truncate);

#all(记录mod+select)

注意:log_statement 参数值中,mod和all配置值可能会造成日志文件较大,若不满足于ddl的记录内容,可修改为mod,不建议使用all

STEP03:重启pg数据库生效

STEP04:验证是否配置成功

4、密码验证失败延迟(适用pg9.6及以上版本)

auth_delay.so模块会导致服务器在报告身份验证失败之前短暂停留,这个主要用于防止暴力破解. 验证失败后, 延迟一个时间窗口才能继续验证。请注意, 它不会阻止拒绝服务攻击, 甚至可能会加剧这些攻击, 因为在报告身份验证失败之前等待的进程仍将使用连接插槽。

需要配置以下参数,实现密码验证延迟失败延迟

STEP01:备份postgresql.conf文件,文件位于PG的data目录下

STEP02:打开postgresql.conf文件,找到shared_preload_libraries参数,将该参数的参数值中加入auth_delay模块,同时找到auth_delay.milliseconds参数,设置延迟时间,单位为毫秒,示例5000代表5秒,若文件中没有该参数,添加即可

shared_preload_libraries = 'auth_delay'

auth_delay.milliseconds='5000'

注意:若shared_preload_libraries参数已经配置其他值,如passwordcheck,添加auth_delay时不要删除原先值,只需在后面以逗号分隔添加即可,如shared_preload_libraries = 'auth_delay, passwordcheck'

STEP03:重启pg数据库使之生效

STEP04:登录验证

5、断开空闲会话

postgresql.conf文件中,修改以下参数:

#用于断开超时的idle in transaction

idle_in_transaction_session_timeout = 20000(单位:毫秒)(pg9.6后开始支持该参数)

#用于断开超时的idle

idle_session_timeout=20000(单位:毫秒)(pg14才支持这个参数)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论