Postgresとしても知られるPostgreSQLは、汎用のオブジェクトリレーショナルデータベース管理システムです。これは、利用可能な最も高度なオープンソースデータベースの1つです。ただし、アプリケーションが正しく保護されていない場合、多くのセキュリティ上の懸念と潜在的な脆弱性があります。
システム管理者またはデータベース管理者の場合は、本番環境に移行する前にPostgresを保護する方法を知っておく必要があります。
このチュートリアルでは、Ubuntu18.04でPostgreSQLサーバーを保護する方法を紹介します。
前提条件
- Atlantic.netクラウドプラットフォーム上の新しいUbuntu18.04VPS。
- サーバーで構成されているrootパスワード。
ステップ1–Atlantic.Netクラウドサーバーを作成する
まず、Atlantic.Netクラウドサーバーにログインします。少なくとも1GBのRAMを搭載したオペレーティングシステムとしてUbuntu18.04を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。
Ubuntu 18.04サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。
apt-get update -y
ステップ2–PostgreSQLをインストールする
apt-get install postgresql postgresql-contrib -y
インストールが完了したら、PostgreSQLサーバーを起動し、再起動時に起動できるようにします。
systemctl start postgresql systemctl enable postgresql
ステップ3–データベースとユーザーを作成する
次に、テスト用にデータベースとユーザーを作成する必要があります。
まず、次のコマンドを使用してPostgreSQLシェルにログインします。
sudo -i -u postgres psql
次の出力が表示されます。
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. postgres=#の場合は「help」と入力します
次に、testuserという名前のユーザーを作成し、パスワードを設定します。
postgres=# CREATE USER testuser WITH PASSWORD 'password';
次に、testdbという名前のデータベースを作成し、新しいユーザーにフルアクセスを許可します。
postgres=# CREATE DATABASE testdb OWNER testuser;
次に、次のコマンドを使用してPostgreSQLシェルを終了します。
postgres=# \q
ステップ4–リスニングアドレスを構成する
実稼働環境では、パブリックインターフェイスでリッスンするようにPostgreSQLを構成する必要があります。
この設定は、ファイル/postgresql.confを編集して変更できます:
nano /etc/postgresql/10/main/postgresql.conf
次の行を見つけます:
#listen_addresses = 'localhost'
次のように置き換えます:
listen_addresses = 'localhost,your-server-ip'
終了したら、ファイルを保存して閉じます。次に、PostgreSQLサービスを再起動して、変更を実装します。
systemctl restart postgresql
ステップ5–許可されるホストを構成する
セキュリティを強化するために、特定のIPのみがPostgreSQLデータベースにアクセスして変更できるようにすることをお勧めします。ファイルpg_hba.confを編集することでそれを行うことができます:
nano /etc/postgresql/10/main/pg_hba.conf
次の行を見つけます:
# local DATABASE USER METHOD [OPTIONS]
上記の行の下に次の行を追加します:
host testdb testuser client-ip-address/32 md5
終了したら、ファイルを保存して閉じます。次に、PostgreSQLサービスを再起動して、変更を実装します。
systemctl restart postgresql
場所:
ホスト :ホストはプレーンまたはSSL暗号化されたTCP/IPソケットです。
データベース :testdbは、ホストが接続できるデータベースの名前です。
ユーザー :testuserは、接続を許可されているユーザーの名前です。
アドレス :client-ip-address / 32は、クライアントコンピューターのIPアドレスを指定します。
auth-method :md5は認証方法の名前です。
ステップ6–UFWファイアウォールを構成する
apt-get install ufw -y
次に、PostgreSQLのデフォルトポート5432へのアクセスをクライアントのIPのみに許可するようにUFWファイアウォールルールを構成することをお勧めします。
重要: 開始する前に、UFWを介した着信SSH接続を許可する必要があります。これにより、シェルアクセスが失われます。ロックされ、インスタンスに接続できなくなります。
次のコマンドを使用してSSHサービスを許可できます:
ufw allow ssh
次に、次のコマンドでUFWファイアウォールを有効にします。
ufw enable
次に、次のコマンドを使用して、PostgreSQLポート5432にクライアントのIPアドレスのみを許可します。
ufw allow from client-ip-address to any port 5432
次に、次のコマンドを使用してUFWルールのステータスを確認します。
ufw status
次の出力が得られるはずです:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 5432 ALLOW client-ip-address 22/tcp (v6) ALLOW Anywhere (v6)
ステップ7–リモート接続を確認する
この時点で、PostgreSQLサーバーは保護されており、クライアントのIPからのみアクセスできます。
確認するには、クライアントのシステムからPostgreSQLデータベースに接続します。
psql -U testuser -h postgres-server-ip -d testdb
以下に示すように、testuserのパスワードを入力するように求められます。
Password for user testuser:
パスワードを入力してEnterを押します 。接続が確立されると、次の出力が表示されます。
psql (9.3.24, server 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) WARNING: psql major version 9.3, server major version 10. Some psql features might not work. SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256) Type "help" for help. testdb=>の場合は「help」と入力します
今のところ以上です。
結論
上記のガイドでは、特定のホストのみにアクセスを許可するようにPostgreSQLを構成することにより、PostgreSQLを保護する方法を学習しました。また、特定のホストからの接続のみを許可するようにUFWを設定する方法も学びました。これで、PostgreSQLサーバーを特定の種類の攻撃から保護できるようになります。 Atlantic.NetからのVPSホスティングを今すぐ始めましょう!