管理人運営YouTube

PR

カテゴリ

プロフィール

最新記事

注目の商品

Facebookページ

本サイトの広告について

レビューマジック

こだわりモノを中心としたレビューブログ。商品評価、感想など

SRT100で安全に自宅サーバーを公開する(サーバー構築編)

2010.07.19/Mon/01:17:29

IMG_5099.jpgYAMAHA の高性能ファイヤーウォール・ルーター SRT100 で安全に自宅サーバーを公開する計画を立てました。

今回はその第三回目、サーバー構築編です。
【前回までのあらすじ】

我が家のインターネット環境が、Global IP アドレスを複数利用できる環境なので、その IP アドレスを利用して自宅サーバーを立てようと計画。その計画の核となるルーターには SRT100 を利用することにし、ネットワーク設計、ルーター設定を行いました。

実際にネットワーク配線を行った結果、玄関にある配線ボックスは下の写真のように、2台のルーターが同居することになりました。手前の白いルーターが Buffalo の BBR-4HG、その奥の青い箱が SRT100 です。

IMG_5099.jpg

ルーターの基本設定も終わり、あとはサーバーを用意すれば、port 80(www), port 443(https), port 25(mail) の公開がされる段階まで来ました。

【公開用サーバーマシン】

サーバーを立てる立場からすると、今は本当に良い時代になりました。昔はサーバーを立てようなんて考えたら、SUN の Solaris マシン、もしくは HP の HP-UX マシン、IBM の RS-6000 等を購入・設定するのが常套手段で、それだけで数百万円もかかってしまう状況でした。

今は Linux があるおかげで、PC をサーバーに仕立てることができるようになり、個人がサーバーを立てることが容易にできるようになりました。

また、OS も CentOS という Red Hat Enterprise Linux に準拠したフリーの OS があるおかげで、信頼性の高いサーバー OS が無償で利用可能です。

さて、今回の公開サーバーのハードウェア候補ですが、だいぶ年季物の以下のノートPCにしました。

IMG_5118.jpg

【サーバースペック】

IBM ThinkPad X23 2662-E3J

CPU: Intel Pentium III 866MHz
Memory: 640MB (PC-133 SD-RAM)
HDD: Hitachi GST HTS541260H9AT00 (2.5inch 60GB IDE 5400rpm)
chipset: Intel 830MP



IMG_5123.jpg

大して高性能なマシンではないですが、実験用とすればこれで大丈夫。CentOS の最新のディストリビューション(CentOS 5.5)も 32bit バージョンならばインストールできます。

また、ノートPCをサーバーするのは以下の点で有益です。

  • 消費電力が少ない
    常時通電しておくサーバーなので、個人ユースならば、なるべく低消費電力のものを選びたいところです。ノートパソコンならば、デスクトップタイプよりも電気代を節約することができます。
  • UPS(無停電電源装置)完備!
    ノートパソコンはリチウムイオンバッテリーを装備しているので、外部電源の供給が止まっても、ある程度動作を継続することができます。長時間の停電であれば、サーバー以外のネットワーク機器等が止まってしまうので、サービスを継続することはできませんが、システムを不調にする可能性の高い、いきなりの電源断を避けることができます。


この IBM の ThinkPad、内蔵ディスクを簡単に入れ替えることができます。ディスクの装着部分は、本体を裏返した底面の左側となっています。次の写真の左側面のプラスチックが艶消しでなくて、光っている部分。

IMG_5119.jpg

HDD を固定しているねじを1本外して引き抜くと、簡単に HDD を外すことができます。

IMG_5120.jpg

このような感じで、HDD 単体に1枚のコの字型の金属製カバーとプラスチックのカバーが装着されています。

IMG_5121.jpg

もともとこのノートPCでは Windows XP がインストールされていましたが、その環境を崩すのももったいないので、ディスクを余っていた別のディスクに交換してサーバー用 OS をインストールすることにしました(下の写真のディスクを利用)。

IMG_5124.jpg

【OS インストール】

さて、OS をインストールしてみます。ポリシーとしては以下を想定しました。

  • サーバー OS は、Red Hat クローンとして定評のある CentOS とする。ディストリビューションは、インストールできる範囲で可能な限り最新のもの(結果的に CentOS 5.5)
  • ぜい弱性をなるべく排除するため、OS のインストールオプションでは、追加が必要なモジュールは、yum で後ほど追加することにし、インストールモジュールを可能な限り最小限とする(追加が必要なモジュールは、yum で後ほど追加)。


上記ポリシーに基づき、CentOS 5.5 X86(32bit) を以下の要領でインストールしました。

CentOS サーバー インストールメモ

【サーバースペック】

IBM ThinkPad X23 2662-E3J

CPU: Intel Pentium III 866MHz
Memory: 640MB (PC-133 SD-RAM)
HDD:
chipset: Intel 830MP

<インストールOS>

CentOS 5.5 x86 (32bit version)

<インストールオプション>

DVD ブートを行い、ブートオプション指定時は、デフォルトブート

環境:       「カスタム」を選び「開発環境」のみ選択
          gnome やベース等のオプションはチェックを外す
          開発環境のオプションは expect のみチェックを追加
インストール言語: 日本語環境
キーボード:    日本語
追加言語サポート: 日本語
タイムゾーン:   東京(UTC clock チェックなし)
          ※ありの場合、9時間時間が進んでしまう

ネットワーク設定:

eth0: 172.16.20.21 / 255.255.255.0
hostname: exsvr01
default gw: 172.16.20.1
DNS: 172.16.20.1

<コンソールログイン>

chkconfig iptables off
chkconfig ip6tables off
※ ルーターで守るので、サーバーでのファイやウォールは off
chkconfig sshd on
※ リモートログイン手段として SSH を自動起動させる
再起動

<ログイン用ユーザー作成、パスワード付加>
※ root で直接ログインできるようにするのはセキュリティ上
  好ましくない。作業用の一般ユーザーを作成

useradd login_user ※ 実際は適切なユーザー名を決定

passwd login_user ※ パスワードを付与

<ssh 設定>
※ root で直接入れなくする

/etc/ssh/sshd_config で下記記述を追加
PermitRootLogin no

shutdown -r now ※再起動して変更した設定を有効化

<yum のアップデート>

※ CentOS 標準のネットワークアップデートアプリケーション
アプリのインストールや更新の入り口なので、まずは yum を
  アップデート

<Apache のインストール>

yum install httpd mod_ssl

<必要なモジュールのインストール>

※ お好みと他のアプリを動かすための必要性に応じて追加。(下記は私の場合)

yum install logwatch postfix ntp csh vixie-cron crontabs man tmpwatch unzip man-pages ftp rsync finger telnet eject time wget bc

<NTP の設定>
/etc/ntp.conf を下記のように修正

# server 0.centos.pool.ntp.org
# server 1.centos.pool.ntp.org
# server 2.centos.pool.ntp.org
server ntp.nict.jp
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp

/etc/sysconfig/ntpd を編集

# Set to 'yes' to sync hw clock after successful ntpdate
SYNC_HWCLOCK=yes

<不要なデーモンの停止と必要なデーモンの開始>

デフォルトでは不要なプロセスが動いている。不要な物は
自動起動しないようにする。

chkconfig avahi-daemon off
chkconfig haldaemon off
chkconfig httpd on
chkconfig ip6tables off
chkconfig iptables off
chkconfig kudzu off
chkconfig --level 1 lvm2-monitor off
chkconfig mcstrans off
chkconfig messagebus off
chkconfig netfs off
chkconfig rawdevices off
chkconfig restorecond off
chkconfig xfs off
chkconfig ntpd on

<SELinuxの無効化>

CentOS5では、インストール時にSELinuxの有効/無効を設定できなくなった。
よって、インストール後に無効にする。  /etc/sysconfig/selinuxをviで開き、次のように修正する。

SELINUX=disabled

※ 決して「SELINUXTYPE=targeted」の行は変えないこと。起動不能に陥る可能性がある。

shutdown -r now ※ 再起動

<この時点でのリソース利用状況>

top - 08:36:31 up 1 min, 1 user, load average: 1.71, 0.84, 0.31
Tasks: 59 total, 1 running, 58 sleeping, 0 stopped, 0 zombie
Cpu(s): 15.8%us, 8.5%sy, 0.0%ni, 68.7%id, 6.9%wa, 0.1%hi, 0.0%si, 0.0%st
Mem: 644448k total, 60684k used, 583764k free, 6392k buffers
Swap: 1310712k total, 0k used, 1310712k free, 33196k cached

※ top というリアルタイムでリソースの消費量を表示してくれる便利なコマンド。
640MB あるメインメモリのうち、上記では 60.6MB しか使っていないことを示している。
windows サーバーではこうは行かないはず。

<PHP, MySQL のインストール>

<MySQL のインストール>

yum install mysql mysql-devel mysql-server

chkconfig mysqld on ※ MySQL は自動起動する

/etc/init.d/mysqld start ※ MySQL の初回起動

MySQL データベースを初期化中: WARNING: The host 'exsvr01' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
100714 17:40:05 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
100714 17:40:05 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
OK
Filling help tables...
100714 17:40:05 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
100714 17:40:05 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h exsvr01 password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[ OK ]
MySQL を起動中: [ OK ]


mysqladmin -u root password XXXX
※ MySQL の root パスワードは最初は空なのでセキュリティ対策上パスワードを付与

/etc/init.d/mysqld restart ※ MySQL 再起動
MySQL を停止中: [ OK ]
MySQL を起動中: [ OK ]

<PHP のインストール>

※ 動的ページを表示するのを見据え、PHP をインストール。
静的ページ(HTML文)だけを表示するのであれば、apache のインストールだけで良い

yum install php php-mbstring php-gd php-mysql php-mcrypt

<最終アップデート>

yum update

※ 導入したモジュールを最新にするため、全体アップデートを行う

<各種設定ファイルの編集>

[/etc/php.ini]

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8

[/etc/httpd/conf/httpd.conf]

Options -Indexes FollowSymLinks

HostnameLookups On

<この時点でのリソース消費状況>

top - 18:22:47 up 19 min, 1 user, load average: 0.00, 0.02, 0.09
Tasks: 63 total, 2 running, 61 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 644448k total, 98904k used, 545544k free, 7360k buffers
Swap: 1310712k total, 0k used, 1310712k free, 52816k cached



※ DBMS など各種アプリケーションを仕込んだ後のリソース消費。
メモリ消費量は 99MBほど。


【ネットワークへの接続とページ表示確認】

さて実際に下の図のとおり、構築したサーバー(ノートパソコン)を部屋のLANケーブルのジャックに差し込んで電源を入れて見ます。

home_network05.png

すると、下記の通り apache ウェブサーバーの初期画面が表示され、ホームページが無事に公開されたことがわかります。

ApacheTestPage01.png

【ダイナミック・ドメイン・ネーム・サーバー(DDNS)の活用】

取得している Global IP アドレスは固定 IP アドレスではないので、ルーターを再起動したり電源を入れなおしたりすると変更されてしまいます。したがって、サーバーを公開するためには通常は「固定IPアドレス」を利用します。しかし、固定IPアドレスを利用するためには、普通プロバイダーに月々数千円のオプション料金を支払わなければなりません。

DDNS を利用するとそのオプション料金を節約することができます。IP アドレスが固定でない代わりに、ルーターが IPアドレスの変更をモニターしていて、変更があれば、DNS に新しい IPアドレスを通知してデータを書き換える仕組みです。SRT100 は YAMAHA ルーター利用者専用 DDNS「ネットボランチDNSサービス」 に対応していて、http://XXXXX.xxx.netovolante.jp/ という URL アドレスで構わなければ、固定 IP アドレスでなくても、決まった名前で HP を呼ぶことが可能です。この DDNS サービスが無償で利用できることも YAMAHA のルーターを利用する利点です。

ちなみに、この Netvolante DNS サービスを利用するのは SRT100 の GUI から登録可能です(まずは利用希望のDNS の冒頭の名前の登録作業が必要)。設定後の具体的コマンドラインは以下のようになります。

netvolante-dns hostname host lan1 server=1 xxxxxxxx.yyy.netvolante.jp



【まとめ】

自宅のサーバーを公開するというのは、単に HTML ページだけを公開するためならば、お勧めしません。大抵のプロバイダーの契約には、追加料金なしでホームページサービスを利用できるところが多く、FTP ソフトを利用して契約したホームページのディレクトリにファイルを入れればそれで他人が見ることができますし、自宅サーバーを公開すると、全世界から攻撃が来るためセキュリティ対策と定期的なメンテナンスが必須になるからです。

しかし、自宅のサーバーを立てると、そのサーバーは自分の自由にできます。たとえばメールを送受信したいとか、データベースと連動した動的なページを作りたいとか、通常のホームページサービスではやりづらいことが、自宅のサーバーであれば、制限なく実行させることができます。

その代り、悪意を持った人に攻撃・侵入され、自宅サーバーが乗っ取られることがないよう、細心の注意が必要になります。自由には義務が伴うということです。

自宅サーバーを公開する場合に、私が気を付けていることをまとめて今回の一連の記事を一旦終了したいと思います。

<自宅サーバーが乗っ取られないように気を付けること>

  • サーバーに直接 Global IP アドレスを割り当てるのは避け、ルーターの IP マスカレード等を利用し、公開するポートを限定する
  • サーバー(OS, データベース等)には容易に推測されないようなパスワードを付与する
  • OS のパッチを頻繁に適用する
  • 攻撃の標的になりやすいアプリ(ssh や PHPMyAdminなど)は、なるべく公開しない。やむを得ない場合は、デフォルトの設定やネーミングなどをカスタマイズし、その存在を攻撃者に容易に探り当てられないようにする
  • OSコマンド、last, lastlog, history などを頻繁に発行し、自分以外の利用者がいないかどうか発見に努める


YAMAHA の SRT100 にはパケットフィルタリング機能や、ポリシーフィルター機能、IPsec によるVPN接続機能など、今回紹介できなかった有用なセキュリティー対策機能が満載されています。このあたりの機能は、別の機会に紹介できればと考えています。

また、SRT100は業務で約2年間使い続けた経験がありましたが、1度たりともハングアップやフリーズしたことはありませんでした。その信頼性は一般の個人向けルーターとは比較にならないほど高いと感じています。



【関連ページ】
SRT100で安全に自宅サーバーを公開する(ネットワーク設計編)
SRT100で安全に自宅サーバーを公開する(ルーター設定編)
SRT100で安全に自宅サーバーを公開する(サーバー構築編)
web サーバーで SSH サービスを公開する場合
phpMyAdmin に対する攻撃について

----
最後までご覧いただきまして、どうもありがとうございました。

関連記事
tb: 0 |  cm: 2
go page top

 

この記事に対するコメント

館長さん、こんにちわ!
記事を読まさせて貰いましたが、ルーター周りの配線写真を見て感心しています。
綺麗な配線処理で、自分の環境が恥ずかしいです・・・穴があったら入りたい!
内容も読みやすく大変参考になりました。
コストや危険性、サーバー関係ソフトなど分かりやすく説明されていてGOOD。(*´∀`)b
有り難うございました。

URL | kakasi #z8Ev11P6
2010/07/19 20:36 * 編集 *

ありがとうございました

kakasi さま

返事が遅くなって済みません。配線盤の内部ですが、各部屋への
LAN配線は、業者がやったもので、私が施工したのではないのです。
あまり私が苦心した結果ではないので、心苦しい限りです。

今後ともよろしくおねがいします。
URL | 館長 #-
2010/07/20 23:36 * 編集 *
go page top

 

コメントの投稿













管理者にだけ表示を許可する

go page top

 

トラックバック

承認制としています。無関係なものは承認されない場合があります。
トラックバックURL
→https://ace.reviewmagic.jp/tb.php/262-e43f069c
この記事にトラックバックする(FC2ブログユーザー)
go page top