行動すれば次の現実

テック中心の個人ブログ

Heroku Postgresで発生する「sql_error_code = 28000 FATAL: no pg_hba.conf entry for host "xxx.xxx.xx.xx", user "xxxx", database "yyyy", SSL off」について

Heroku PostgresをHobbyプランからStandardにアップグレードしたところ以下のログが頻発するようになりました。

sql_error_code = 28000 FATAL: no pg_hba.conf entry for host "xxx.xxx.xx.xx", user "xxxxx", database "xx", SSL off

FATALレベルなのですが、アプリケーションからDBには正常に接続できており、特に影響はないように見えます。

弊社システムではPapertrailを使用してエラー系のログを吸い上げているのですが、当該ログが高頻度で出力されるため、ノイズになってしまい困っていました。

ログの原因

「sql_error_code = 28000」データベースへのログイン施行に失敗したことを意味するようです。また、その際のアクセスがSSL通信でないことに対するアラートになります。

Heroku Postgresはインターネットというパブリックな場所に存在するため、ある程度の不正アクセスは発生してしまいます。 不正アクセスと言っても、Heroku Postgresのユーザー名、パスワード、データベース名の組み合わせはランダムに生成されます。不正なログイン施行はほとんど無駄なアクセスになりますので過度に心配する必要はなさそうです。

対処方法

「sql_error_code = 28000をアラート対象から外す」などの対応が有効かと思います。

また、類似のログとして「sql_error_code = 0A000」というものもあります。 sql_error_code = 0A000 FATAL: unsupported frontend protocol x.x: server supports 2.0 to 3.0

これはサポート外のフロントエンドプロトコルによるアクセスの場合に発生します。nmapなどのツールがそれに該当されます。 これも同様にアラート対象から除外するのが良さそうです。

参考

Seeing "FATAL: no pg_hba.conf entry" errors in Postgres - Heroku Help

Why am I seeing connection errors for my Heroku Postgres database from an unexpected IP address? What are these unauthorized connection attempts? - Heroku Help