PHP+Postgres時のiptables設定について

このQ&Aのポイント
  • PHPとPostgreSQLを動かすテストサーバでphppgadminへのログインができない現象が発生しました。
  • 調査の結果、iptablesで5432/tcpを許可することで問題が解決することがわかりました。
  • しかし、セキュリティ面を考慮して特定の接続元のみを許可する方法を知りたいです。
回答を見る
  • ベストアンサー

PHP+Postgres時のiptables設定について

ミズタともうします。 1台のテストサーバ(Turbo linux 8 server)でPHPとPostgreSQLを動かしています。 サーバ上のMozillaからphppgadminをつかってposrgreSQLにログインしようとしたところ「ログイン失敗」となりました。いろいろと調べているうちにiptablesで5432/tcpをINPUT、OUTPUTで許可すると動くことが分かりました。 ただ、セキュリティ上、すべての接続元に許可したくないので(1)localhostのみ許可、(2)127.0.0.1のみ許可としたら、どちらもログインに失敗してしまいます。 同様に、(3)192.168.0.xxx(ローカルPCのアドレス)を許可してローカルPC(IE)からログインを試みても「ログイン失敗」となりました。 iptablesをどのように設定すれば限定された接続元からのみphppgadminの操作を許可できるようになるのでしょうか。 ※バージョンは下記のとおりです。 Apache 2.0.59 PHP 5.1.6 PostgreSQL 8.1.4 phppgadmin 4.0.1 お手数おかけしますがご教授よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

phppgadminとPostgresは同じマシンで動いてるんですよね? であれば、「127.0.0.1」か「localhost」と指定すればiptablesで全閉じのままでアクセスできませんか? iptablesで5432閉じても、apacheのアクセス制限がゆるいと元も子もありませんが。

nihonnoinu
質問者

お礼

たびたびのご回答ありがとうございます。 ご指摘のとおり、localhostにしたところ無事動きました。 本当にありがとうございました! (PHPというよりphppgadmin固有の問題だったのでしょうか。) ※なお、apacheはpgadminディレクトリにはSSLRewriteして、IPアドレスで制限をかけてます。

その他の回答 (1)

回答No.1

config.inc.php で、接続先HOSTの設定はどうなってますか?

nihonnoinu
質問者

お礼

ありがとうございます。 config.inc.php で、接続先HOSTの設定は下記のとおりです。 // Hostname or IP address for server. Use '' for UNIX domain socket. // use 'localhost' for TCP/IP connection on this computer $conf['servers'][0]['host'] = '192.168.0.yyy'; yyyは、テストサーバ自身のローカルIPアドレスです。 これをiptablesで開けばよいのでしょうか。 どうぞよろしくお願いいたします。

関連するQ&A

  • Postgresでlocalhost以外の接続がはじかれる

    Postgresでlocalhost以外の接続がはじかれる Postgresにlocalhost以外から接続を行うと はじかれてしまうようなのですが、 外部からの接続を許可するようにすることは できますか? 当方レンタルサーバでDBの保守はブラウザ版のphpPgAdmin で行っております。 どうぞ、よろしくお願いいたします。

  • PHPからのDB接続がうまくいかない

    mysqlやpsqlからはつながるのに、phpMyAdminやphpPgAdminで同じホスト、ユーザー名、パスワードを指定してもアクセス拒否されてしまいます。 具体的には、仮想化環境にゲストとしてウェブサーバーとDBサーバーの2台があり、2台は別々の仮想ブリッジインターフェイスに接続されていて、仮想化ホストがiptablesでアクセス制限、ルーティングを行っております。 mysqlやphpMyAdmin、psqlやphpPgAdminはどちらも同じウェブサーバーからDBサーバーをホストとして指定してアクセスしています。 DBサーバーのMySQLもPostgreSQLも次のような感じでユーザーを追加してあります。(PostgreSQLはpg_hba.confもMySQLと同じ内容になるよう設定済み) GRANT ALL PRIVILEGES ON *.* TO 'ユーザー名'@'ウェブサーバーアドレス' IDENTIFIED BY 'パスワード'; phpMyAdminに接続先情報を設定して接続しようとすると次のようなメッセージが表示されます。 「#2003 - Can't connect to MySQL server on 'DBサーバーアドレス' (13) サーバが応答しません。」 phpPgAdminでは次のメッセージが表示されます。 「ログインに失敗しました」 ちなみに、すべてのアドレスからの接続を許可するようにSQLサーバーを設定しても同じでした。 どこか設定が抜けているのでしょうか。 宜しくお願いいたします。

  • Linux 複数ISP時でのiptablesの設定

    ローカルとサーバー用にISPを分けて使用したいのですがその際の設定についてお聞かせください。 環境としてましてはISP1とISP2共に動的IP。CentOS6.2にNIC二枚挿しでルータ兼サーバとして使用しています。 インターネット ― (eth1)サーバ兼ルーター(eth0) ― ローカルPC サーバーIP:192.168.0.10 ネットワークアドレス:192.168.0.0/24 ppp0:ISP1(ローカルPC用) ppp1:ISP2(サーバ専用) 上記のようにしたいのですが現在はppp0のみで接続しています。 これにppp1を追加しサーバ専用に使いたいのですが思うようにいきません。 ppp0の設定をコピーしppp1を追加しifconfigにてppp1が稼動している事を確認。ip routeを設定してみるもうまくいかず。iptablesの設定も変えないといけないと思うのですが今一わかりません。 現在のppp0のみの設定は下記になります。これにppp1をサーバ用に追加するにはどうしたらいいか。 WAN='ppp0' LAN='eth0' LOCALNET='192.168.0.0/24' #----------------# # デフォルトルール # #----------------# iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT #---------------------------------# # 自ホストからのアクセスをすべて許可 # #---------------------------------# iptables -A INPUT -i lo -j ACCEPT #---------------------------------------------# # ローカルネットアドレスからのアクセスをすべて許可 # #---------------------------------------------# iptables -A INPUT -i $LAN -j ACCEPT iptables -A FORWARD -i $LAN -j ACCEPT #------------------------------------------------# # ローカルネットワーク内からのインターネット接続を許可 # #------------------------------------------------# iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward #--------------------------------------------------------# # 内部から行ったアクセスに対する外部からの応答アクセスを許可 # #--------------------------------------------------------# iptables -A INPUT -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $WAN -m state --state ESTABLISHED,RELATED -j ACCEPT ~中略~ #----------------------------------------------------# # Webサーバー(80番ポート)HTTPへのアクセスをすべて許可 # #----------------------------------------------------# iptables -A INPUT -p tcp --dport 80 -j ACCEPT 上の設定の場合ppp1を追加する場合、WAN2を追加しWANを記述するべき箇所をコピーし追記するのか?もしくはeth1としたほうがいいのか? 例1: iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE WAN2='ppp1' iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE iptables -t nat -A POSTROUTING -o $WAN2 -j MASQUERADE 例:2 iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE WAN='eth1' iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE 正確な設定方法がわかりませんのでどこをどうすれば良いのか教えていただけると助かります。よろしくお願いします。

  • phpPgAdminへの初回ログイン

    phpPgAdminをインストールばかりなのですがログイン方法が分かりません。 いろいろ試したんですが「ログインに失敗」が出て入れません。 どうしたらログインできるでしょうか? バージョンを記しておきます。 Fedora Core 6 kernel-2.6.20-1.2962.fc6 postgres (PostgreSQL) 8.1.9 phpPgAdmin-4.1.3-2.fc6 php-pgsql-5.1.6-3.6.fc6

  • PHPとPostgreSQLがつながらない

    PHPとPostgreSQLの初心者です。PHPとPostgreSQLを 使ってプログラムを作ろうと思ってます。 開発はPC上で、PostgreとPHPサーバはLinuxマシンに あります。まず最初にPostgreのインストールですが、 Fedora Core5 に着いていたPotsgreSQL8.1.3を入れ ました。設定としては、 postgresql.confでは listen_address='localhost,192.168.1.3' としました。192.168.1.3はLinuxマシンのローカル アドレスです。 pg_hba.confではconnectionのところで host all all 192.168.1.3 255.255.255.0 tyust としました。その後 host all all 0.0.0.0 255.255.255.0 tyust とかいろいろ試してみました。 一方PHPの方はほとんど何も設定をしていません。と いうか設定方法がよくわかりません。 以上の環境で、簡単なPHPプログラムをPostgreにつなげないで実行したところ問題なく動きました。 20行くらいのPHPを書いてみましたが、特に問題はあ りませんでした。 PostgreSQLの方は、PCからSSHで入って、接続テスト 用のDBを作り、テーブルも3つ作って、データを数件 Insertしました。 いよいよPHPからDBにつなぐことになったのですが、 プログラム上では以下のように書きました。 <?php    print "こんにちは"; $conn = pg_connect ('host=192.168.1.3 port=5432 dbname=phptest user=postgres');    print "こんばんは"; if (!$conn) { print "PostgreSQLへの接続に失敗です"; exit(); } else ・ ・ して実行したところ、「こんにちは」は表示されま したが、「こんばんは」以下はは表示しませんで した。$conn の先には進んでいないようです。 当然ここに書いた以外にも設定を変えてみましたが、 つながりませんでした。よろしくお願いします。

    • 締切済み
    • PHP
  • PostgreSQLをインストールしたサーバーとは別のサーバー上で、phpPgAdminを動かせる?

    PostgreSQLがインストールされているDBサーバにはPHPがインストールされていません。 よって他のWebサーバへphpPgAdminをインストールして、 DBサーバへ接続し、データベースの編集を行おうと考えています。 このようなことはphpPgAdminで可能でしょうか? ご回答よろしくお願いします。

  • iptablesの設定について

    サーバから telent localhost 25 とやると、接続出来るのですが、別の離れた端末から telnet 192.168.1.11 25 等とやると、 接続中: ...ホストへ接続できませんでした。 ポート番号 25: 接続に失敗しました と出てしまいます。 おそらく、ファイアーウォールにはじかれているのでは、と思うのですが確認すると、以下のような項目があるため、ポートは空いているように思うのですが、ファイアーウォール的には大丈夫でしょうか? Chain SERVICE (1 references) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25

  • PHP5からPostgres6.5.3の接続の件で

    非常に初歩的な質問ですいません。 Postgres6.5.3の動作しているサーバーへ、別サーバーからPHP3でアクセスすることは正常にできます。しかし、さらに別のサーバーからPHP5でアクセスすると、pg_connectでエラーが出て接続できません。接続の際の認証等は設定していません。これは、PHP5に対応していないからということなのでしょうか? [postgres-Server] Red Hat Linux release 6.2 Kernel 2.2.14-5.0 on an i686 postgresql-6.5.3 [PHP3-Server] Red Hat Linux release 6.2 Kernel 2.2.14-5.0 on an i686 php-3.0.18-i18n-ja-3 apache_1.3.24 [PHP5-Server] Vine Linux 4.2 Kernel 2.6.16-0vl76.33 on an i686 php-5.2.5 apache_2.2.3

    • 締切済み
    • PHP
  • DNSとiptablesについて

    DNSの仕組みについて分からないので教えて頂きたいです。 現在、マスターとスレーブサーバを構築しており、外向きの 名前解決など動作的には正常に動作していると思われます。 サーバはCentosで構築しており、iptablesで設定しています。 iptablesの一部で以下のように設定をしているのですが・・・ ------------------------------------------------------------------------- iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT ------------------------------------------------------------------------- 1.まず、TCP/UDP共にポートを開けておかないといかないと思うのですが、送信元   はANYで許可しておかないとダメでしょうか?   上位DNSサーバからの参照などに使われますよね?   もちろんbindの設定で、ゾーン転送はスレーブサーバへのみ許可しています。 2.スレーブサーバへのゾーン転送もできているのですが、マスタサーバ側のiptables   のログに下記のようなものが残っています。   送信元IPはスレーブサーバのIPでUDP送信ポート53が使われているようなのですが   送信ポート53は何に使われているのでしょうか?宛先ポート53との違いは? -------------------------------------------------------------------------- SRC=送信元IP DST=宛先IP LEN=72 TOS=0x00 PREC=0x00 TTL=62 ID=20999 PROTO=UDP SPT=53 DPT=47046 LEN=52 -------------------------------------------------------------------------- スレーブの53ポートからの通信がDNSの動作に必要なものであれば、iptablesのルールを追加 しようと思います。 情報が少ない場合は補足できる範囲で補足させて頂きます。 よろしくお願いします。

  • windowsクライアントへのphpPgAdmin

    リモートホストのpostgresqlにwindows7ホストからつなぐために、windowsホストにphpPgAdminをインストールしようとしています。 windowsホストにはpostgresql, phpなどをインストールしていません。 windows側でサーバーソフトを動かす予定はありません。 多くの解説サイトではpostgresqlサーバーにphpPgAdminを導入するのを前提としているようでよくわからないのですが、この場合、phpPgAdminのみを単独でインストールすればよいでしょうか、あるいは、先立ってphpなどインストールしておく必要があるのでしょうか? 2013年11月1日