コードに関しては触れない。
CentOS7 にPostgreSQLをインストールしてリモート接続まで
不正アクセスを防ぐ5つの方法
インジェクション対策をなどを取っていても直接DBにアクセスされてしまったら意味がない。
1 ssh接続できないようにする
PostgreSQLはインストール時にLunuxのユーザが作成される(DB接続時のユーザと紐づく)デフォルトだとssh接続できてしまうのでDBだけでなくlinuxにまで入られてしまう。
SSH専用のユーザを作成してその他はSSH接続を禁止する。
2 postgresユーザのパスワードを分かりにくいものに変える
インストール時にOSユーザ:postgresが作成される。
初夏明愛ログイン時にパスワードを設定しないといけないのでよくわからないまま進めるとpostgres/postgresといった悲劇が起こりやすい(気がする)
ユーザpostgresは常に攻撃にさらされているようなのでユーザ名を変えるだけでもましになる(OSとDBそれぞれにユーザを追加して元のpostgresを削除すればいけると思うが実際に可能かは調べていない)
3 PostgreSQLのPort番号を変更する
デフォルト5432から変更する。
postgresql.conf で設定する。
4 PostgreSQLのアクセス先を制限する
pg_hba.confで設定する。
いくつか接続時のオプションがあるがアドレスとサブネットマスクだけ注意するといい。
5 DBをプライベートネットワークにする
まずアプリとDBにネットワークを分けた後、アプリサーバからのみDB接続できるようにする。DBを確認したい場合はアプリサーバからSSH経由で接続する。
コードだけ書きたい人だとちょっと敷居高いかもしれない。
まず1はやっておく。
2 ある程度大丈夫だが絶対安全ではない。
1 2 3 はワンセットと捉えておく(どれか一つだけでも即侵入されるということは一応なくなる、3つ全部ガバガバだと数日経たずに侵入されると考えていい)
4 はある程度絞っていれば安全。設定ミスに注意すること。テザリングなどでチェックしてみると良い。
5 さえやっておけばDBに関しては特に問題はない(アプリ側に侵入された時点でいろいろ詰むのでそっちの対策は必要)。本番稼働前はオープンだったということがないようにはしたい(時限式スクリプトを仕込まれる可能性がある)
対策をしていなかった場合こうなるらしい。
https://www.dayaman.work/entry/yarakashi-2019-12-11
参考
上記対策を実現するための情報群
postgresユーザ追加
http://engineer-hiko.hatenablog.com/entry/2014/09/01/201350
アクセス制限
https://www.postgresql.jp/document/9.4/html/auth-pg-hba-conf.html
ssh制限
http://www.ksknet.net/cat13/ssh_1.html
PostgreSQLポート番号変更
https://nyanplus.hatenadiary.org/entry/20100910/1284079223
https://omohikane.com/centos7_postgreql_change_port/