Perl で Firebird にアクセス(DBI)

なんとなく。

Fedora Core 6 上で Perl スクリプトを実行して Firebird にアクセスしてみたいと思った。

まず、DBI をインストールする。

DBI 自体は Fedora Core 6 の標準パッケージにある。
yum でインストールしよう。

[root@localhost ~]# yum -y install perl-DBI(enter)
~略~
Installed: perl-DBI.i386 0:1.52-1.fc6
Complete!

さて、DBIをインストールしただけでは Firebird にアクセスできない。
Firebird 用の DBD をインストールしてあげる必要がある。

Firebird 用の DBD は yum で簡単インストール♪ とはいかない。
以下のサイトから dbi-interbase をダウンロードする必要がある。

http://sourceforge.net/project/showfiles.php?group_id=8563&package_id=8696

※ここにある DBD-InterBase-0.46.tar.gz をダウンロード。

DBD-InterBase-0.46.tar.gz をダウンロードしたら...
解凍して make して make install するワケですが。
make までは一般ユーザーでやる。

[user@localhost ~]$ tar -zxvf DBD-InterBase-0.46.tar.gz(enter)
~略~
DBD-InterBase-0.46/t/InterBase.dbtest
DBD-InterBase-0.46/t/40numrows.t
DBD-InterBase-0.46/t/00base.t

解凍したディレクトリに移動。

[user@localhost ~]$ cd DBD-InterBase-0.46(enter)

さて、make の準備をする。
解凍したフォルダにある Makefile.PL を実行するワケですが...
これの実行には以下の情報が必要になる。

1. Firebird の bin ディレクトリ
※rpm からインストールしている場合は /opt/firebird/bin

2. Firebird の include ディレクトリ
※rpm から(略) /opt/firebird/include

3. Firebird の lib ディレクトリ
※rpm(略) /opt/firebird/lib

4. 接続テスト用データベースのフルパス
※employee.fdb でいいんじゃない?
※rpm からインストールしている場合は /opt/firebird/examples/employee.fdb

5. 接続テスト用データベースへアクセス可能なDBアカウント
※SYSDBAでいいんじゃない?

さて、この 5 つを準備したら Makefile.PL を実行します。

[user@localhost DBD-InterBase-0.46]$ perl Makefile.PL(enter)
InterBase/Firebird bin directory : [/opt/firebird/bin] (bin ディレクトリ)(enter)
InterBase/Firebird include directory : [/opt/firebird/include] (include ディレクトリ)(enter)
InterBase/Firebird lib directory : [/opt/firebird/lib] (lib ディレクトリ)(enter)

Full path to your test database:   (接続テスト用データベースのフルパス)(enter)
(接続テスト用データベースのフルパス) exists.
Trying to use an existing database..
Please enter a username to connect.
Username :  (DBユーザー名)(enter)
Password :  (パスワード)(enter)
Checking if your kit is complete...
Looks good
Using DBI 1.52 (for perl 5.008008 on i386-linux-thread-multi) installed in /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/DBI/
Writing Makefile for DBD::InterBase

こんな感じになったら成功!

さて、make 。

[user@localhost DBD-InterBase-0.46]$ make(enter)
~略~
chmod 755 blib/arch/auto/DBD/InterBase/InterBase.so
cp InterBase.bs blib/arch/auto/DBD/InterBase/InterBase.bs
chmod 644 blib/arch/auto/DBD/InterBase/InterBase.bs
Manifying blib/man3/DBD::InterBase.3pm

これで make 成功(たぶん)。
途中、警告がずらずら出てきますが... とりあえず僕の環境ではちゃんと動きましたよ。

で、make が成功したら su して make install です。

[user@localhost DBD-InterBase-0.46]$ su(enter)
パスワード(P):(パスワード)(enter)
[root@localhost DBD-InterBase-0.46]#

(root で make install)
[root@localhost DBD-InterBase-0.46]# make install(enter)
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Writing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/InterBase/.packlist
Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod

これで完了。
DBI の使い方はググればぞろぞろ出てくるのでここでは説明しない。

あ、そう。
日本語の文字コード変換が必要な場合は Jcode をインストールするのがいいかと。

[root@localhost ~]# yum -y install perl-Jcode(enter)
~略~
Installed: perl-Jcode.noarch 0:2.06-1.fc6
Complete!

以上、PHP とは関係ないけど、Firebird 関連ってことで。

| | コメント (0) | トラックバック (0)

Firebird 2.0系 に関するメモ

Firebird 2.0系のお話。

僕は今のところ 1.5系をもう少し使っていくつもりでいる。だって、まだ 2.0系の日本語の情報少なすぎるんだもん。

...「だもん」 とは言いつつも、いつかは 2.0系に以降することになるワケで、いろいろと情報を集めたりしておく必要はある。

ってことで 2.0系に関して調べた情報をメモしていく。

・ODSのバージョンが11になった。
ODSとは 「On-Disk Stracture」 だから、データベースファイルの構造ってことですか。確か1.5系はODS10とか10.1とかだったと思った。まあ、「ODSのバージョン番号が10.1から11になった」 というのは別にどうでもいいことであって、重用なのは「データベースファイルの構造が1.5系と2.0系では違う」 ってこと。

1.5系から2.0系に以降する場合はこの情報を頭の中に入れておく必要がある。「2.0系から Firebird はじめます!」 って人にはどうでもいい情報だったりするのだけれども。

・security.fdb の仕様が変わった。
どうやら 2.0系は 1.5系から security.fdb の仕様が変更になっているらしい。まず、ファイル名が security.fdb じゃなくて security2.fdb になっている。もちろん中身も変わっている。1.5系 の security.fdb を security2.fdb にリネームしても 2.0系では使えない。

ただし、これは運用の仕方によっては別にどうでもいい場合がある。「1.5系でシステム運営しているけど、ユーザーアカウントは SYSDBA の他に 2つほどあるだけだよ。」 なんて場合は 1.5系の security.fdb を捨てて、2.0系の security2.fdb に 1.5系で使っていたのと同じユーザー名のアカウントを追加してあげるだけでいい。2つのアカウントを追加するだけなら手間ではない。

もちろん security.fdb から security2.fdb への以降手順はある。のだけれども... たぶんね、2つしかアカウントないなら以降手順を試すよりもアカウント2つ追加する方が楽。

security.fdb を security2.fdb へ変換しようと思ったときに関係してくるのは 「ODSのバージョンが11になった。」 ということ。まずは ODS10.1 な security.fdb を ODS11 に変換してあげる必要がある(らしい)。

Firebird 2.0.1 に含まれているドキュメントを読むと ODS10.1 から 11 へのコンバートは 「gbak 使ってバックアップリストアしないさい。」 とのこと。

どうやら 2.0系は 1.5系のデータベースファイル... ODS10.1 なファイルも扱える。そして 2.0系を使っているからといって、1.5系のデータベースファイルが自動的に 2.0系へ変換されることはない。ただし 「バックアップ/リストアをすると、1.5系のファイルは 2.0系のファイルへと変換されるよ。」 ってことなんだろう。

とりあえず 「へぇー」 って感じで覚えておく。サーバーを 2.0系に以降しても、ODS を 10.1 から 11 に変換しないと 2.0系で得られるすべての恩恵は受けられないのかも知れないが、逆に考えると ODS が 10.1 のままの場合はサーバーを 1.5系に戻してもそのデータベースファイルはそのまま扱える... ってことになる。

ああ、話が脱線。

兎に角、security.fdb を security2.fdb にコンバートするにはまず、ODS を 11 にコンバートする... gbak(もしくはそれのフロントエンドツール)を使って「バックアップ/リストア」する必要がある。

さて、ODS11 へのコンバートが終わったらどうするのか。

いろいろ読んでいくと、(ODS11 へコンバートされた)security.fdb を security2.fdb にコンバートするスクリプトが 2.0系には含まれているらしい。さがしてみると、Windows の場合は 「(2.0系のインストールフォルダ)\misc\upgrade\security」  に 「security_database.sql」 という名前で存在していた。

スクリプトってゆうか、SQLコマンドね。つまり変換したい security.fdb を(Firebird 2.0系のサーバーで)開いてそれに
security_database.sql に書いてある内容の SQLコマンドを実行してあげればいいのだろう。なるほどなるほど。

...

今日は Firebird 2.0 に関する情報を集めてみた。日本語の情報が少ないので苦労する。そして忘れたら困るのでここにメモとして書いておく。ちなみに、上記の情報はまったくテストしていない内容なので間違っていたらごめんなさい。

| | コメント (0) | トラックバック (0)

FC6 に Firebird 1.5.4 をインストール(アップグレード)

Firebird は 2.0 系が出ているけど、もう少し 1.5 系で行きたいと思う。(特に理由はない)

さて、1.5 系に新しいバージョン 1.5.4 がでた。どうやらこれが 1.5 系の最終バージョンになるらしい。十分に枯れた 1.5 系の最終バージョン。1年くらいはこのバージョンで引っ張ろうかな... InterBase と同じ ROWS 句のサポートが 個人的に 2.0 系一番のトピックスだったりするけど、まあ、いいや。

さて、Firebird 1.5.3 がインストールされた Fedora Core 6 に 1.5.4 をインストールしよう。http://www.firebirdsql.org/ から FirebirdSS-1.5.4.4910-0.nptl.i686.rpm をダウンロードする。

さて、インストールしようか... rpm -Uvh FirebirdSS-1.5.4.4910-0.nptl.i686.rpm ...と。

してはいけません!

ふっ、ええ、最初私は rpm -Uvh しましたよ。これしたらちゃんとインストールされませんね。ええ。なので、一度 1.5.3 をアインインストールしてから 1.5.4 をインストールすることにする。

まずは 1.5.3 をアインインストール。firebird が起動してても大丈夫。

[root@localhost ~]# rpm -e FirebirdSS (enter)
Stopping Firebird server: server shutdown completed
Saved a copy of SecurityDatabase (security.fdb) in /tmp

これで完了。security.fdb データベースファイルが /tmp にコピーされたらしい... ということがアンインストールメッセージからは読める。

この security.fdb は超重用。ここにユーザー情報などが保存されているので。まあ、このファイルをちゃんとコピーしてくれるので安心して rpm -e を実行してもいいということになる。

さて、firebird 1.5.4 をインストールする。

[root@localhost ~]# rpm -ivh FirebirdSS-1.5.4.4910-0.nptl.i686.rpm (enter)
準備中...                ########################################### [100%]
   1:FirebirdSS             ########################################### [100%]
Starting Firebird server: server has been successfully started
[  OK  ]
GSEC> GSEC>
Running ex to modify /etc/init.d/firebird

これでインストール完了。ここまでは簡単。firebird の起動プロセスを確認してみよう。

[root@localhost ~]# ps ax | grep fb (enter)
6883 ?          S      0:00 /opt/firebird/bin/fbguard -f
6884 ?          Sl      0:00 /opt/firebird/bin/fbserver
6909 pts/1    S+     0:00 grep fb

どうやらインストールは成功しているようだ。

と、ここで例の changeDBAPassword.sh を使って SYSDBA のパスワードをアンインストール前に戻してあげる。インストール時の初期 SYSDBA パスワードは /opt/firebied/SYSDBA.password ファイルに書かれているので確認しておこう(インストールするたびに違うパスワードが作成されるようだ)。

[root@localhost ~]# /opt/firebird/bin/changeDBAPassword.sh (enter)
Please enter current password for SYSDBA user: (初期パスワード)
Please enter new password for SYSDBA user: (アンインストール前のパスワード)
GSEC> Warning - maximum 8 significant bytes of password used
GSEC>

Running ex to modify /etc/rc.d/init.d/firebird

これで SYSDBA のパスワードはアンインストール前のパスワードに戻った。

だが、このままでは追加したユーザー情報などが消えてしまっている。changeDBAPassword.sh を使わないと firebird の起動スクリプトなどのパスワード情報が更新されないので changeDBAPassword.sh を使った。次は、アンインストール時にコピーされた security.fdb を上書きしてその他のユーザー情報を復元しよう。

firebird を停止する。

[root@localhost ~]# /etc/init.d/firebird stop (enter)
Stopping Firebird server: server shutdown completed

/tmp/security.fdb を /opt/firebird に上書きコピーする。

[root@localhost ~]# cp /tmp/security.fdb /opt/firebird/ (enter)
cp: `/opt/firebird/security.fdb' を上書きしてもよろしいですか(yes/no)? y (enter)

firebird を起動する

[root@localhost ~]# /etc/init.d/firebird start (enter)
Starting Firebird server: server has been successfully started
                                                           OK  ]

これで無事にアップグレードインストールが完了した... ハズ。後は IBConsole で接続していろいろするなり自分のアプリケーションを動かすなりして一通りの動作確認をするだけ。バックアップされた security.fdb をコピーしてあげれば、ユーザー情報などはちゃんと復元されているハズなので安心。

と、ここまで。データベースのアップグレードインストールなど滅多にしないので、やり方はどっかにメモされていた方がいい。Firebird Wiki に書けって? いやあ、たしかにそうなんだけど、何となく恥ずかしいというか... ごもごも。

| | コメント (0) | トラックバック (0)

FC6 に PHP をインストールする(後編)

さて、準備 はできた。今度はマジで PHP インストールします。

http://php.net/

から PHP の最新版ソースコードをダウンロードする。この記事を書いてる時点では、php-5.2.0.tar.gz が最新版。え? 「php-5.2.0.tar.bz2」 もあるよって? 別にどっちでもいいです。中身は同じです。

さて、ユーザー権限のお話し。php-5.2.0.tar.gz のダウンロード、解凍、configure (コンパイル準備)、make (コンパイル)、までは一般ユーザー権限で行なった方がいい。make install だけは root で行なう必要がある。

ってことで... ダウンロードした php-5.2.0.tar.gz を適当な場所に(一般ユーザーで)解凍する。

[user@localhost ~]$ tar -zxvf php-5.2.0.tar.gz(enter)
~略~
php-5.2.0/README.UNIX-BUILD-SYSTEM
php-5.2.0/buildconf.bat
[user@localhost ~]$

解凍が終わったら解凍したフォルダ(php-5.2.0)に移動。

 

[user@localhost ~]$ cd php-5.2.0(enter)
[user@localhost php-5.2.0]$

さて、PHP をどういう構成でインストールしようか?
とりあえず Firebird のサポートは必要。

PHP で Firebird にアクセスするには、Firebird/InterBase 関数(ibase_ ではじまる関数)を使うか、PDO の Firebird ドライバを使うか... がある。

が! PDO の Firebird ドライバは... これ、全然メンテナンスされてないでしょう? レコードの先頭行が NULL で返ってくるバグが長時間放置されてる気がする。少なくとも 5.1.6 では直ってなかった。5.2.0 は... コンパイルされたバイナリのファイルサイズが変わってない。

Windows 版のバイナリ(php_pdo_firebird.dll)で比較。
5.1.4 = 32,834byte 2006/05/04
5.1.6 = 32,834byte 2006/08/23
5.2.0 = 32,834byte 2006/11/02

何このやる気のなさ... これは PHP + Firebird の需要の少なさの証明なんでしょうか。それとも PDO がまだ一般的ではないってだけなんでしょうか。おそらく前者だな... まあ、気にしないことにして Firebird/InterBase 関数(これは十分に枯れてる気がする)でアクセスすることにしようね!

前置きが非常に長くなりましたが... 以下のような感じのオプションを付けて configure を実行しましょう。

--with-interbase=/opt/firebird (※Firebird のインストールフォルダを指定。)
↑Firebird/InterBase 関数サポート。必須です。

--with-gd
--with-zlib
↑gd と zlib をサポート。まあ、何となく付けてるだけ。

--with-apxs2=/usr/sbin/apsx(apsx を指定。)
↑Apache のモジュールを指定。yum で Apache 2.2 をインストールした場合はここにある。見つからなかったら root になって find /* -name apxs を実行してさがす。どこにもなかったら... httpd-devel パッケージがインストールされてない可能性がある。

--enable-mbstring
↑マルチバイト文字のサポート。必須ですね。

※PDO Firebird ドライバをサポートする場合は...
--with-pdo-firebird=/opt/firebird
↑ボク小心者なので。一応、PDO Firebird も組み込んじゃいます。でも使いません。ちなみに、PDO 本体(と、PDO SQLite ドライバ)は何も指定しなくても標準で組み込まれる。

 

[user@localhost php-5.2.0]$ ./configure --with-interbase=/opt/firebird --with-gd --with-zlib --with-apxs2=/usr/sbin/apxs --enable-mbstring --with-pdo-firebird=/opt/firebird(enter)
※パソコンの性能にもよりますが... 結構時間かかります。
※configure 中に警告が出るとしたら... 何かパッケージが足りないんだと思います。ないぞ! って言われたパッケージをがんばってさがして yum でインストールしてあげてください。
~略~
Thank you for using PHP.

[user@localhost php-5.2.0]$

configure が完了したら次は make (コンパイル)してください。

 

[user@localhost php-5.2.0]$ make(enter)
※パソコンの性能にもよりますが... 結構時間かかります。P4 2.8GHz メモリ 512MB の PC で 5 分とかかなあ。違ったらごめん。

~略~
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).


[user@localhost php-5.2.0]$

コンパイルが終わったらインストールしてあげます。インストール作業だけは root で行なう必要があります。

(わたし、root になる!)
[user@localhost php-5.2.0]$ su(enter)
パスワード(P):(パスワード)(enter)
[root@localhost php-5.2.0]#

(root で make install)
[root@localhost php-5.2.0]# make install(enter)
※configure とか make よりは時間かからないです。

~略~
Installing PDO headers:          /usr/local/include/php/ext/pdo/

[root@localhost php-5.2.0]#

とりあえずインストールできました!

インストールできたら... php.ini を作ってあげましょう。とりあえず、一般ユーザーに戻って、php-5.2.0.tar.gz を解凍したフォルダにある php.ini-dist を /usr/local/lib/ に php.ini とリネームしてコピーしてあげる。

[root@localhost php-5.2.0]# exit(enter)
※一般ユーザーに戻る
[user@localhost php-5.2.0]$ cp php.ini-dist /usr/local/lib/php.ini(enter)

php.ini の詳細は... まあ、ググって。とりあえず dist のままでも動作はすると思います。インターネット上に公開するサーバならいろいろいじった方がいいようですが。

また、make install では httpd.conf に

LoadModule php5_module /usr/lib/httpd/modules/libphp5.so

...は自動的に追加してくれますが、

AddType application/x-httpd-php .php

...は追加してくれません。これは追加してあげた方がいいですね。

とりあえずこの状態で httpd を起動すると、Firebird をサポートした PHP が Apache のモジュールとして動きます。がんばりました。

PHP の動作と手軽に確認したい場合は...

[root@localhost ~]# cd /var/www/html(enter)
[root@localhost html]# vi phpinfo.php(enter)
<?php
  phpinfo();
?>
:wq
[root@localhost html]#

phpinfo(); を実行する php ファイルを作成して、アクセスしてみてください。PHP の状態が確認できます。

| | コメント (0) | トラックバック (0)

FC6 に PHP をインストールする(準備編)

Fedora Core 6 に PHP をインストールしよう。
...っと、その前に。

このページでは Fedora Core 6 + Apache 2.2 + PHP + Firebird って構成を前提にしています。「なぜ Firebird ? MySQL でいいじゃん。」 ですって? いやあ、MySQL はライセンスがめんどくさい。Firebird なら作ったシステムを売るときに一緒に配布したりできたりとか自由度が高いのですよ奥さん。
#どちらの方が優れているとかは知らない。まあ、慣れてる分、ボクは Firebird が使いやすい。

話が多少脱線。

Fedora Core 6 には Apache 2.2 も PHP もパッケージが用意されていて、yum を使って簡単にインストールでき... なんだなこれが。Fedora Core で用意されているPHPパッケージには Firebird/InterBase サポートが含まれていません。

なので、PHP はソースコードからインストールする必要があります。やったことないと結構大変だったのでメモ。

まず、Apache をインストールする。

[root@localhost ~]# yum -y install httpd(enter)

Apache のインストールは yum を使って単純に。ソースからインストールはコンパイルに非常に時間がかかるのでやめる。アップデートが大変そうですよ。Fedora Core 6 のインストール時に Apache 入れたよ! って人は一応、アップデートでもしておきましょう。

[root@localhost ~]# yum -y update httpd(enter)

PHP をソースからインストールしようとした場合、Apache の開発ライブラリ系のパッケージもインストールしておく必要がある。Fedora Cora 6 を最小構成でインストールした場合、以下のパッケージをインストールする。

[root@localhost ~]# yum -y install httpd-devel(enter)

※依存関係のチェックが行なわれ、おそらく以下のパッケージがインストールされる。

  apr-util
  apr-devel
  expat-devel
  db4-devel
  cyrus-sasl-devel
  openldap-devel
  apr-util-devel
  http-devel


[root@localhost ~]# yum -y install libxml2-devel(enter)
[root@localhost ~]# yum -y install libpng-devel(enter)

とりあえずこれで Apache の準備は完了。http.conf の記述とかは PHP をインストールした後でいいんじゃないかな!

Apache の起動、終了などは root になって以下のコマンドで。

 

(httpd の開始)
[root@localhost ~]# /usr/sbin/apachectl start(enter)

(httpd の停止)
[root@localhost ~]# /usr/sbin/apachectl stop(enter)

(httpd の再起動)
[root@localhost ~]# /usr/sbin/apachectl restart(enter)

正しく httpd (Apache) が起動したら IP アドレスにアクセスすることでウェルカムページが開くハズ。

ちなみに、この Fedora Core 用の Apache ウェルカムページうざくね?って場合は以下のファイルをリネームしてあげる。

[root@localhost ~]# mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak(enter)

/etc/httpd/conf.d の中にある *.conf ファイルは httpd の起動時に自動的にインクルードされる... ように httpd.conf に書いてある。welcome.conf は中身を見ると 403 エラーが出たときに /var/www/error/noindex.html を表示するようになっている。この noindex.html が Fedora Core 6 のうざい ウェルカムページの正体。welcome.conf をリネームして httpd がインクルードしないようにしてあげれば表示されません。

さて、Fedora Core 6 には SELinux なるモノが組み込まれている。セキュアな Linux ... ってことらしいのだけれども、とりあえずイントール作業中には邪魔。PHP をソースコードからインストールした場合、SELinux が邪魔をして PHP モジュールを組み込んだ状態で Apache が起動してくれません。

インターネット上に公開するときまでには SELinux の勉強をするとして... とりあえず今は停止しちゃっておきましょう。

(SELinux の状態を確認)
[root@localhost ~]# getenforce(enter)
Enforcing ←SELinux 有効

(SELinux を停止する)
[root@localhost ~]# setenforce 0(enter)
[root@localhost ~]# getenforce(enter)
Permissive ←SELinux が permissive... 黙認された状態

(OS 起動時に SELinux を無効にする)
[root@localhost ~]# vi /ect/sysconfig/selinux(enter)
---
SELINUX=enforcing ←この行を...

SELINUX=disabled ←に変更する。

(OS を再起動する)
[root@localhost ~]# reboot(enter)

(再起動後に... SELinux の状態を確認)
[root@localhost ~]# getenforce(enter)
Disabled ←SELinux 無効

 

SELinux か... 昔はそんなの無かった(あったけど一般的じゃなかった?)な... ipchains は iptables になってるし。いろいろ変わってますねえ。(超余談)

とりあえず Apache はインストールできた。次は PHP をインストールしてみたいと思う。

| | コメント (0) | トラックバック (0)

FC6 + Firebird のための iptables 設定

Fedora Core 6 で外部から IBConsole などを使って Firebird に接続できるようにする。

Firebird サーバはローカルに置く。インターネットになど公開しない!

単純に iptables を停止するといい。ローカルに置いておくならファイヤーウォールなどいらないでしょう?少なくともボクはファイヤーウォールなど適用しない。

(iptables 停止)
[root@localhost ~]# /etc/rc.d/init.d/iptables stop(enter)
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]

(起動時に iptables を起動しない)
[root@localhost ~]# chkconfig iptables off(enter)

・Firebird サーバはインターネット上に置く。グローバル IP を与える!

個人的には... IP 1 個の環境で、ルータの NAT 機能を使ってサーバを公開するというときは、ファイヤーウォールなんて切っていいから、ルータ側でセキュリティを確保するべきだと思う。静的 NAT なんて使わず、ポート単位の静的 IP マスカレードを使ってあげる。

Fedora Core サーバをルータに? いやあ、ルーティングは専用機器に任せた方がいいんじゃないかな? まあ、ここは各自の判断で。

ここでは、インターネット上に専用サーバを借りたとき(この場合、サーバには思いっきりグローバル IP が設定されている... ハズ。)などを想定する。

http://fedorasrv.com/

↑こちらで公開されている、iptables 用の設定スクリプトを調整して、目的にそぐう形にしよう。

(ファイヤーウォール設定用のスクリプトを作成)
[root@localhost ~]# vi iptables.sh(enter)
#!/bin/bash


#---------------------------------------#
# 設定開始                              #
#---------------------------------------#

# インタフェース名定義
LAN=eth0

#---------------------------------------#
# 設定終了                              #
#---------------------------------------#

# ファイアウォール停止(すべてのルールをクリア)
/etc/rc.d/init.d/iptables stop

# デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
iptables -P INPUT   DROP   # 受信はすべて破棄
iptables -P OUTPUT  ACCEPT # 送信はすべて許可
iptables -P FORWARD DROP   # 通過はすべて破棄

# SYN Cookiesを有効にする
# ※TCP SYN Flood攻撃対策
sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf

# ブロードキャストアドレス宛pingには応答しない
# ※Smurf攻撃対策
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf

# ICMP Redirectパケットは拒否
sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
done

# Source Routedパケットは拒否
sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
for dev in `ls /proc/sys/net/ipv4/conf/`
do
    sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
    echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
done

# フラグメント化されたパケットはログを記録して破棄
iptables -N LOG_FRAGMENT
iptables -A LOG_FRAGMENT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FRAGMENT] : '
iptables -A LOG_FRAGMENT -j DROP
iptables -A INPUT -f -j LOG_FRAGMENT

# NetBIOS関連のアクセスはログを記録せずに破棄
iptables -A INPUT -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A INPUT -p udp -m multiport --dports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
iptables -A OUTPUT -p udp -m multiport --sports 135,137,138,139,445 -j DROP

# 1秒間に4回を超えるpingはログを記録して破棄
# ※Ping of Death攻撃対策
iptables -N LOG_PINGDEATH
iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A LOG_PINGDEATH -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES PINGDEATH] : '
iptables -A LOG_PINGDEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH

# 自ホストからのアクセスをすべて許可
iptables -A INPUT -i lo -j ACCEPT

# 内部から行ったアクセスに対する外部からの返答アクセスを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
# ※不要ログ記録防止
iptables -A INPUT -d 255.255.255.255 -j DROP
iptables -A INPUT -d 224.0.0.1 -j DROP

# 113番ポート(IDENT)へのアクセスには拒否応答
# ※メールサーバ等のレスポンス低下防止
iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からの22番ポート(SSH)へのアクセスを許可
# ※SSHサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
# ※外部向けDNSサーバーを運用する場合のみ
#iptables -A INPUT -p tcp --dport 53 -j ACCEPT
#iptables -A INPUT -p udp --dport 53 -j ACCEPT

# 外部からの80番ポート(HTTP)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 外部からの443番ポート(HTTPS)へのアクセスを許可
# ※Webサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 外部からの21番ポート(FTP)へのアクセスを許可
# ※FTPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 21 -j ACCEPT

# 外部からのPASV用ポート(FTP-DATA)へのアクセスを許可
# ※FTPサーバーを公開する場合のみ
# ※PASV用ポート60000:60030は当サイトの設定例
#iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT

# 外部からの25番ポート(SMTP)へのアクセスを許可
# ※SMTPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# 外部からの465番ポート(SMTPS)へのアクセスを許可
# ※SMTPSサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 465 -j ACCEPT

# 外部からの110番ポート(POP3)へのアクセスを許可
# ※POP3サーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT

# 外部からの995番ポート(POP3S)へのアクセスを許可
# ※POP3Sサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 995 -j ACCEPT

# 外部からの143番ポート(IMAP)へのアクセスを許可
# ※IMAPサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 143 -j ACCEPT

# 外部からの993番ポート(IMAPS)へのアクセスを許可
# ※IMAPSサーバーを公開する場合のみ
#iptables -A INPUT -p tcp --dport 993 -j ACCEPT

# 外部からの3050番ポート(Firebird)へのアクセスを許可
# ※Firebird を公開する場合のみ
iptables -A INPUT -p tcp --dport 3050 -j ACCEPT

#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここまで)               #
#----------------------------------------------------------#

# 拒否IPアドレスからのアクセスはログを記録して破棄
# ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
# (/root/deny_ipがなければなにもしない)
iptables -N LOG_DENYHOST
iptables -A LOG_DENYHOST -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES DENY_HOST] : '
iptables -A LOG_DENYHOST -j DROP
if [ -s /root/deny_ip ]; then
    for ip in `cat /root/deny_ip`
    do
        iptables -I INPUT -s $ip -j LOG_DENYHOST
    done
fi

# 上記のルールにマッチしなかったアクセスはログを記録して破棄
iptables -A INPUT -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES INPUT] : '
iptables -A INPUT -j DROP
iptables -A FORWARD -j LOG --log-tcp-options --log-ip-options --log-prefix '[IPTABLES FORWARD] : '
iptables -A FORWARD -j DROP

# 再起動時にも上記設定が有効となるようにルールを保存
/etc/rc.d/init.d/iptables save

# ファイアウォール起動
/etc/rc.d/init.d/iptables start

スクリプトファイルを作成したら、実行権限を与えよう。

[root@localhost ~]# chmod 700 iptables.sh(enter)

実行権限を与えたら、スクリプトを実行する。

[root@localhost ~]# ./iptables.sh(enter)
ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]

これでおーけー。iptables.sh の中身は、公開したいサービスに合わせてカスタマイズすること。このページのスクリプトでは、http と https 、 Firebird(3050) のみ公開している。

iptables を起動時から適用するためには、以下のコマンドを実行する。

[root@localhost ~]# chkconfig iptables on(enter)

Fedora Core 6 のデフォルトでは、iptables が起動するようになっているので、特にこのコマンドを実行する必要はない。

| | コメント (0) | トラックバック (0)

FC6 に Firebird 1.5.3 をインストール

Fedora Core 6 に Firebird 1.5.3 をインストールする。

システムに compat-libstdc++ がインストールされている必要がある。
compat-libstdc++ がインストールされているかどうかの確認方法。

[root@localhost ~]# yum -y list installed compat-libstdc++-33(enter)

※インストールされていたら...

compat-libstdc++-33.i386                 3.2.3-61               installed

...などと表示される。

compat-libstdc++ がインストールされていなければインストールする。

[root@localhost ~]# yum -y install compat-libstdc++-33(enter)
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for compat-libstdc++-33 to pack into transaction set.
compat-libstdc++-33-3.2.3 100% |=========================| 7.4 kB    00:00
---> Package compat-libstdc++-33.i386 0:3.2.3-61 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
compat-libstdc++-33     i386       3.2.3-61         core              232 k

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 232 k
Downloading Packages:
(1/1): compat-libstdc++-3 100% |=========================| 232 kB    00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: compat-libstdc++-33          ######################### [1/1]

Installed: compat-libstdc++-33.i386 0:3.2.3-61
Complete!

※最後に Complete! と出ていればインストール完了してる。 ...ハズ。

Firebird 1.5.3 の Superserver for Linux (NPTL threading model) を rpm でインストールする。

http://www.firebirdsql.org/ から、FirebirdSS-1.5.3.4870.nptl.i686.rpm をダウンロードしてインストール。

[root@localhost ~]# rpm -i FirebirdSS-1.5.2.4731-0.i686.rpm(enter)

正常にインストールされたら Firebird が自動的に起動する。

Starting Firebird server: server has been successfully started
                                                           [  OK  ]

※これで正常にインストールされている... ハズ。

インストールに成功したら sysdba アカウントのパスワードを変更する。rpm からインストールした場合、初期パスワードはランダムで設定されるようだが... /opt/firebird/SYSDBA.password ファイルに初期パスワードが書いてある。

また、rpm からインストールした場合、sysdba パスワードは以下のスクリプトから行なった方がいいようだ。

[root@localhost ~]# /opt/firebird/bin/changeDBAPassword.sh(enter)
Please enter current password for SYSDBA user: (初期パスワード)
Please enter new password for SYSDBA user: (新しいパスワード)
GSEC> Warning - maximum 8 significant bytes of password used
GSEC>

Running ex to modify /etc/rc.d/init.d/firebird

※Firebird のパスワードは8文字目以降が無視される。この画面では、8文字以上の新しいパスワードに8文字以上を設定しているので警告が出ている。

/opt/firebird/bin/changeDBAPassword.sh で sysdba のパスワードを変更すると、/etc/init.d/firebird などに書いてあるパスワードも一括して変換してくれる。なるべく /opt/firebird/bin/changeDBAPassword.sh でパスワードを変更するようにする。

ここまできたらインストール完了。Firebird 関連サービスの起動確認、開始、停止などは以下のコマンドで。

(プロセス確認)
[root@localhost ~]# ps ax | grep fb(enter)
0000 ?        S      0:00 /opt/firebird/bin/fbguard -f
0000 ?        Sl     0:00 /opt/firebird/bin/fbserver
0000 pts/1    S+     0:00 grep fb

(Firebird 起動)
[root@localhost ~]# /etc/init.d/firebird start(enter)
Starting Firebird server: server has been successfully started
                                                           [  OK  ]

(Firebird 停止)
[root@localhost ~]# /etc/init.d/firebird stop(enter)
Stopping Firebird server: server shutdown completed

外部から IBConsole などで Fedora Core 6 にインストールした Firebird に接続するには、iptables を編集する必要がある(デフォルトではポートが閉じている)。その辺は次回のエントリで。

| | コメント (0) | トラックバック (1)