PostgreSQLはインストールしただけでは、自ホストからしか接続できず、他のホストから利用できない。ここでは、他ホストから接続するための設定を紹介する。
PostgreSQLは、デフォルトでは自ホストからの接続しか許可していない。他ホストからの接続を許可するよう、/usr/local/pgsql/data/postgresql.confを開き、次のように修正する。
listen_addresses = '*' ←コメントを解除し、''内を * に修正
なお、PostgreSQLはデフォルトではポート「5432」を使って通信を行う。ポートを変えたい場合、以下を修正する。
#port 5432 ←コメントを解除し、ポート番号を変更する
変更を保存し、PostgreSQLを再起動する。
# /etc/rc.d/init.d/postgresql restart
PostgreSQLは、デフォルトではポート5432で通信を行う。よって、ポートを開け、通信できるようにする。この作業はrootで行う。viで/etc/sysconfig/iptablesを開き、以下を追加する。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
保存したら、iptableを再起動する。
# /etc/rc.d/init.d/iptables restart
他ホストからの接続を許可し、ポートを開けただけでは他クライアントから接続できない。これは、PostgreSQLの設定ファイルである/usr/local/pgsql/data/pg_hba.confにより、接続できるホストを制限しているからである。よって、接続できるクライアントを設定する。
デフォルトでは以下のようになっている。# PostgreSQL Client Authentication Configuration File # =================================================== # # Refer to the "Client Authentication" section in the # PostgreSQL documentation for a complete description # of this file. A short synopsis follows. # # This file controls: which hosts are allowed to connect, how clients # are authenticated, which PostgreSQL user names they can use, which # databases they can access. Records take one of these forms: # # local DATABASE USER METHOD [OPTION] # host DATABASE USER CIDR-ADDRESS METHOD [OPTION] # hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTION] # hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTION] # # (The uppercase items must be replaced by actual values.) # # The first field is the connection type: "local" is a Unix-domain socket, # "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an # SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket. # # DATABASE can be "all", "sameuser", "samerole", a database name, or # a comma-separated list thereof. # # USER can be "all", a user name, a group name prefixed with "+", or # a comma-separated list thereof. In both the DATABASE and USER fields # you can also write a file name prefixed with "@" to include names from # a separate file. # # CIDR-ADDRESS specifies the set of hosts the record matches. # It is made up of an IP address and a CIDR mask that is an integer # (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies # the number of significant bits in the mask. Alternatively, you can write # an IP address and netmask in separate columns to specify the set of hosts. # # METHOD can be "trust", "reject", "md5", "crypt", "password", # "krb5", "ident", "pam" or "ldap". Note that "password" sends passwords # in clear text; "md5" is preferred since it sends encrypted passwords. # # OPTION is the ident map or the name of the PAM service, depending on METHOD. # # Database and user names containing spaces, commas, quotes and other special # characters must be quoted. Quoting one of the keywords "all", "sameuser" or # "samerole" makes the name lose its special character, and just match a # database or username with that name. # # This file is read on server startup and when the postmaster receives # a SIGHUP signal. If you edit the file on a running system, you have # to SIGHUP the postmaster for the changes to take effect. You can use # "pg_ctl reload" to do that. # Put your actual configuration here # ---------------------------------- # # If you want to allow non-local connections, you need to add more # "host" records. In that case you will also need to make PostgreSQL listen # on a non-local interface via the listen_addresses configuration parameter, # or via the -i or -h command line switches. # # CAUTION: Configuring the system for local "trust" authentication allows # any local user to connect as any PostgreSQL user, including the database # superuser. If you do not trust all your local users, use another # authentication method. # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trustこのファイルに設定を行い、データベースへ接続するホストを制限する。
全てのホストからの接続を許可する
全てのホストから、全てのデータベースへの接続を許可する場合、以下の記述を追加する。
host all all 0.0.0.0/0 trust
接続を制限する
pg_hba.confは1行で1レコードを構成しており、1行のフォーマットは以下のとおりである。
KIND DATABASE USER CIDR-ADDRESS METHOD
- KIND
「local」「host」「hostssl」「hostnossl」のいずれか。localはUNIXドメインソケット経由の接続、hostはTCP/IP経由の接続、hostsslはSSL経由の接続、hostnosslはSSLを使用しない接続を意味する。- DATABASE
接続を許可したいデータベース名を指定。「all」とすると全てのデータベースを意味する。複数のデータベース名を指定したい場合は、カンマで区切る。- USER
接続を許可するユーザ名を指定。「all」とすると全てのユーザを意味する。ユーザ名の前に「+」を付けるとグループ名を指定したことになる。複数のユーザ名を指定したい場合は、カンマで区切る。- CIDR-ADDRESS
KINDがlocal以外のときに指定する。接続を許可するクライアントのIPアドレスやネットワークアドレスを指定する。
例1)192.168.0.11/32・・・192.168.0.11からの接続のみを許可する
例2)192.168.0.0/24・・・IPアドレスが192.168.0.xであるクライアントのみを許可する
例3)0.0.0.0/0・・・任意のIPアドレスのクライアントを許可する- METHOD
ユーザの認証方式を指定する。代表的なものは以下のとおり。
trust・・・認証なし。無条件に接続を許可する。
reject・・・無条件に接続を拒否する。特定のホストやネットワークからの接続を拒否する際に使用。
md5・・・md5を利用したパスワード認証。パスワードを指定していないユーザは接続できない。
password・・・パスワード認証を行うが、BASIC認証のため、パスワードがそのままネットワークを流れてしまう。例えば、192.168.0.0/24であるクライアントに、SampleDBへの接続を全てのユーザにパスワード認証でのみ接続を許可する場合、以下の1行を追加する。
host SampleDB all 192.168.0.0/24 md5
設定後の作業
postmasterは書き換わったpg_hba.confを認識しないため、編集した後は必ずPostgreSQLを再起動する。
# /etc/rc.d/init.d/postgresql restart