![]() |
Copyright © 2000-2005 eazyfox. All Rights Reserved. | ||||
|
|
|||||
| Home > Hello > ホームサーバの構成 | |||||
当サイトのサーバとソフトウェアの構成をメモ代わりですが公開しておきます。
初代(2003/09/12〜2004/03/11)
| CPU | AMD K6-2 400MHz | 本来Pentium166が動くマシンですがメルコのアクセラレータを使って66MHz×6で動かしています |
| Memory | 160MByte SDRAM | 本体32M+128M増設です。66MHzの動作です |
| MotherBoard | NEC MA16C | リース切れのオフィス用途のPCを貰ってきました。Pen166〜233が動く機械です |
| HDD | ST32122A | DMA33で動く2GのHDD一本で動かしています。いらないものはすべて削除して空き容量600Mを確保していました |
現在は現役を引退していますがK6-3/400を載せてサーバ構成のテスト用マシンとして使っています。あらためてK6-3の速度には驚かされます。実質2代目のPen3-700と同じくらいの処理速度を持っています。
2代目(2004/03/11〜)
| CPU | Intel Pentium3 750MHz(Coppermine) | Coppermine(Socket370)です。今となっては旧式非力ですが消費電力は20W以下なので以前使用していたK6-2/400といい勝負。我が家で唯一の稼動中Intel製CPUです |
| Memory | 256MByte SDRAM | 規格はPC-100です。もう少し容量がほしいのですがPC-100/133の値段が高すぎですね |
| MotherBoard | Chaintech CT-6SFV | SiS630搭載のFlex-ATXマザーです。ドライバはChaintechには無く、SiSから630用のドライバを落してつかっています。どうやら欧州でOEM供給用の製品のようです。ドライバはSiSのHome > Support&Download から落とします |
| HDD | ST320413A | SeagateのATA100対応の20Gです。CT-6SFVがATA66対応なので性能を発揮していません。容量は1Gくらいしか使わないので、余ったスペースは遊んでいます。 パティションはシステム7G、データ10G、Norton Ghost用3Gになっています。NortonGhost用のパティションはWindows上ではドライブレターを振っていないのでGhost実行時のみ参照できるようにしています |
VGAやLANアダプタはSiS630内蔵の物を使っています。VAGは相当ひどいですが見る機会も少ないので我慢できます。サーバ専用のハード構成ですのでクライアントとして使用している機器に比べるとスペックは3世代くらい違いますが、充分な(主観的ですが)処理能力だと思います。
| OS | Windows2000 | OSはWindows系を選択しました。Linuxに移行するのはもう少し自信が付いてから・・・ |
| httpサーバ | apache2+ActivePerl | 定番です。mod_perlも入れてみましたがボトルネックはデータの参照のようで余り効果はありませんでした。それ以前に私のサイトの掲示板はアクセスが少ないので・・・ |
| ftpサーバ | CerBerusFTP | 余計な機能が一切無いFTPサーバです。サイトのコンテンツのUploadとLogの保存にだけ使用しています |
| smtp・popサーバ | ||
| Mail Enable | White/Black Listからメーリングリストまで使えるFreeなメールサーバです。ちょっと設定がややこしいけど | |
| NAT | RRAS | Windows標準のルーティングとリモートアクセスサービスのIPルータ機能を使用。LAN側のDHCPサーバ機能とDNS-Proxy機能があるのでNATを構成するには便利。 |
| Firewall | ||
| PktFilter | RRASからPktFilterに変えました。ルールは一回作るだけなのでテキストでも問題なし。ステートレスなので動作も機敏 | |
| AntiVirus | AVG6 | 定番。UpdateとScanをスケジュール実行しています。 |
| DynamicDNS | DiCE | 定期的に更新する設定になっています |
| 時刻同期 | Dimension4 | サービスとして動作する時刻同期ツール。時計の誤差がグラフで出る優れもの |
| リモート運用 | VNC | サーバのキーボードとマウスは外しています。操作は全てVNCを使ってリモートで行っています |
Firewallの詳細はパケットフィルタ方式のFirewallにまとめました。使っているソフトは全て定番の製品ばかりです(たぶん)。特別な設定ありませんが参考までに
| ftpサーバ | 接続許可アドレスを192.168.1.0/24と設定する。また動作するNICからInternet側を外して外部からの接続を受け付けない |
| Mailサーバ | ドメインは3つ指定。smtpは承認が必要とする |
| VNC | 接続可能アドレスを192.168.1.0/24と設定する |
現在運用しているドメインはdynDNSのeazyfox.homelinux.orgのほかにメール用のドメインと仕事用メールのドメインの3つが動いています。いずれapacheをバーチャルドメイン対応に設定を変更して別のサイトを立ち上げようと思っています。
サーバ設定の記録
apacheでCGIを高速化する手法の代表的なものがmod_perlの導入である。筆者はCGIもPerlもapacheも詳しくないのでサイトを巡って情報を集め、入れて試すだけなので間違っているかもしれないが、Windowsのapache2での事例が少ないため参考程度に見てください。
1〜2については他のサイトのほうが詳しいのでここでは省略します。ActivePerlのinstall時に必ず3.で実行するppm3を忘れずにインストールしてください。
3.のppm3を使ってのmod_perlインストールの実行は本家mod_perlのサイトの情報からDOSウィンドウを開いて
「ppm3 install http://theoryx5.uwinnipeg.ca/ppms/mod_perl.ppd」と入力します。
すると指定のサイトからモジュールをDownloadしてインストールまでを勝手に実行してくれます。まず最初にDownloadのメッセージが出て、数分で"install〜〜〜"というメッセージが大量に出てきます。
それが終わると"mod_perlのpleace〜"とmod_perlをどこにインストールするのか?というメッセージで止まるのでapache2をインストールした先にあるmodulesフォルダを指定します。例えば"C:\Program
files\Apache Group\Apache2\modules"というようにフルパスで指定します。するとすぐにインストールが終了しますが、この終了時にDOS画面に表示されたメッセージの下から5行くらいをよく見てください。
そこにはhttp.confに「LoadFile "C:/Perl/bin/perl58.dll"」と「LoadModule
perl_module modules/mod_perl.so」を追加しろ!とスタートスクリプトで「Apache2
();」を実行しろ!という内容が表示されているはずです。
最初のLoadFileの後のperl58.dllとそのパス名は環境により異なります。C:/ActiPerl/bin/perl59.dllかもしれないしC:/Perl/bin/perl56.dllかもしれません。ActivePerlのインストール先とバージョンにより異なるということです。
(注意) 筆者は最初ActivePerlをC:\Program Files\ActivePerlというフォルダにインストールしたところppmでの実行スクリプトがロングファイル名に対応していなかったためエラーが発生してインストールできませんでした。ActivePerlはC;\Perlにインストールしたほうがいいようです(ppmを使わずスクリプトを編集すればいいのですが、やり方がわかりません))
ではmod_perlをppmでインストールしたときに表示されたメッセージのとおりhttpd.confを編集(追加)します。Win32用の説明を参考にしてください。
| LoadFile "C:/Perl/bin/perl58.dll" | 必ずLoadModuleの前にこのLoadFileを挿入します |
| LoadModule perl_module modules/mod_perl.so | mod_perlのモジュールをLoadするように指定します |
| PerlRequire "C:/Apache2/conf/extra.pl" | スタートアップスクリプトを指定します。スクリプトの内容は下記に示します |
| Alias /perl/ "/Apache2/perl/" | エイリアスでmod_perlで実行したいperlモジュールを置くフォルダに別名を与えます |
| <Location /perl> | /perlという位置(ロケーション)についての設定 |
| SetHandler perl-script | |
| PerlResponseHandler | |
| ModPerl::Registry | レジストリモードで実行させるときの指定です |
| Options +ExecCGI | このフォルダでCGIの実行を許可させます |
| PerlOptions +ParseHeaders | perlの実行時にヘッダを付加させます |
| </Location> |
つぎにスタートアップスクリプトを作成してhttpd.confと同じフォルダに保存します(上記のhttpd.confの指定でextra.plのフォルダを変えればどこでもいいはず)。スクリプトは下記の内容です。
| use Apache2 (); use ModPerl::Util (); use Apache::RequestRec (); use Apache::RequestIO (); use Apache::RequestUtil (); use Apache::Server (); use Apache::ServerUtil (); use Apache::Connection (); use Apache::Log (); use Apache::Const -compile => ':common'; use APR::Const -compile => ':common'; use APR::Table (); use Apache::compat (); use ModPerl::Registry (); use CGI (); 1; |
スクリプトの内容はmod_perlのWin32用のサイトから持ってきたものなので詳細は???です。ただ最初のApache2()を実行しないとModPerl::registry()が@INCに無いぞ!とApacheのエラーログに出力されます。これはApacheとApache2で参照するモジュールの保存先が異なるためらしいです。
あとは実行するPerlモジュール実行させてみてください。
この記述の内容で一応mod_perlの元で実行されているのを環境変数から確認できました。でもapacheのベンチマークでテストしたところmod_perl導入で劇的な効果はありませんでした。ただしmod_perlの導入で遅くなることはありませんでした。やはりボトルネックは掲示板起動時のデータ参照のようです。もしどこかが抜けているか間違っているのであればここが違うぞ!というメールをお待ちしておりますのでご指導下さい。
Apache2で度々エラーログに
・セマフォがタイムアウトしました。 : winnt_accept: Asynchronous AcceptEx
failed
・指定されたネットワーク名は利用できません。 : winnt_accept: Asynchronous
AcceptEx failed.
・ネットワークに到達できません。: winnt_accept: Asynchronous AcceptEx failed.
とAcceptExのエラーが出力される。どうもWindowsのwinsockが原因らしいがVer.2.0.49
からconfに1行設定を入れることで回避できるようになった。
「MPM_WinNT」のモジュールのところに"Win32DisableAcceptEx"を追加するだけ。
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_winnt.c>
ThreadsPerChild 50
MaxRequestsPerChild 0
Win32DisableAcceptEx ←こいつを追加する
</IfModule>
これでログからいやなエラーは消滅する。Apache起動時にイベントログに
The Apache service named reported the following error:
>>> [Tue May 04 12:08:12 2004] [notice] Disabled use of AcceptEx() WinSock2 API
と赤Xで警告メッセージがでるが気にしなくてよい。
Windowsのwinsock2が実装しているAcceptExの仕様がUnix系のAcceptExと異なるためエラーが発生しているらしい。AcceptExは複数の要求が同時に来るようなケースではこまめに処理できるのでhttpサーバには適した処理なのだが、Microsoftに直す気が無いようなのであきらめるしかない。
apacheをヴァーチャルホスト(マルチドメイン・ヴァーチャルドメインとかの表現もある)の設定に変更した。変更はhttpd.confを編集するだけだが、気をつけないといけないことは単一ドメインで運用していたときのDirectory、CGI、Logに関する設定は全て無視されて全てVirtualHostの中にそれぞれのドメインごとに記述をしないといけないということらしい。単一ドメインの時との関係は
| 単一ドメインの設定 | ヴァーチャルホストの設定 | |
| ServerName DocumentRoot <Directory> </Directory> |
ServerName (単一ドメインのときのまま) DocumentRoot (単一ドメインのときのまま) <Directory> (ヴァーチャルホストに移動する) </Directory> <VirtualHost *> ServerName (上記の単一ドメインと同じものを記述する) DocumentRoot (上記の単一ドメインと同じもの) <Directory> (単一ドメインのときの記述をここに移動する) </Directory> <VirtualHost *> |
プライマリのVirtualHostではServerNameとDocumentRootは単一ドメインの指定と同じものを記述することになる。 |
設定した環境はシングルIP(DynamicDNS使用)で複数のホストを定義したものである。
NameVirtualHost * ←すべてのIPアドレスを対象とするときは"*"を使う(IPごとにホストを指定しないときは*ということ)
# Default Site eazyfox.homelinux.org (Firewall&Forestをプライマリのサイトにするため最初に定義する)
<VirtualHost *>
ServerAdmin xxxxxxx@softhome.net
DocumentRoot D:/http_Doc/Firewall_Forest/ ←ここは単一ドメインで記述していたDocumentRootと同じものを書く
ServerName eazyfox.homelinux.org ←ここは単一ドメインで記述していたServerNameと同じものを書く
ErrorLog "|\"D:/LogData/rotatelogs.exe\" \"D:/LogData/Apache/FF_error%Y%m%d.log\" 86400 540"←ここは単一ドメインで記述していたErrorlogを移動させた
# gif, jpg.png の呼び出しとLocalからのアクセス、カウンターへのアクセス記録をログに書き込まない
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)$" nolog
SetEnvIf Remote_Addr 192.168.1. nolog
SetEnvIf Request_URI "counter.cgi" nolog
CustomLog "|\"D:/LogData/rotatelogs.exe\" \"D:/LogData/Apache/FF_access%Y%m%d.log\"
86400 540" combined env=!nolog ←ここは単一ドメインで記述していたCustomlogを移動させる
<Directory "D:/http_Doc/Firewall_Forest/"> ←DocumentRootの設定はVirtualHostの中に移動させた
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin/ "D:/http_Doc/Firewall_Forest/cgi-bin/" ←CGI Scriptの設定はVirtualHostの中に移動させた
<Directory "D:/http_Doc/Firewall_Forest/cgi-bin">
Options ExecCGI
AddHandler cgi-script .cgi
Allow from all
</Directory>
</VirtualHost>
以上が1つのサイト分の定義。最初に設定したヴァーチャルホストがホストが見つからないときやIPアドレスだけでのアクセス時に表示されるプライマリのVirtualHostになる。以下同様に各サイトを<VirtualHost>〜</VirtualHost>に繰り返して定義する。単一ドメインのときに定義したログのローテーション、ScriptAliasもVirtualHostに移動していることに注意してほしい。
ついでに最近流行の30kを超えるIISのWebDavの脆弱性を狙ったアクセスの排除のためにダミーサイトをプライマリに変更した
| SEARCH /\x90\x02\xb1・・・・アクセスのログ排除の対応 | |
| <VirtualHost *> ServerAdmin xxxxxx@softhome.net DocumentRoot D:/http_Doc/Dummy/ ServerName dummy.com ErrorLog D:/LogData/Apache/dm_error.log CustomLog D:/LogData/Apache/dm_access.log common <Directory "D:/http_Doc/Dummy"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost> <VirtualHost *> ServerAdmin yyyyyy@softhome.net DocumentRoot D:/http_Doc/eazyfox/ ServerName eazyfox.homelinux.org |
プライマリのVirtualHostをダミーサイトに変更 ダミーサイトだが実際にフォルダを作成する(中身は空) ダミーサイトなので名前は何でもよい ここにダミーサイト専用のエラーログ名を設定する ここにダミーサイト専用のアクセスログ名を設定する Directoryも一応つけておいた。でもコンテンツは何も無い ここからが本当の公開サイト |
これでIPアドレスだけでサイト名が付随しないワーム系アクセスはダミーサイトへ行っていただける。
試していないのだがSetEnvIfやDirectoryの定義はVirtualHostの外でもいいように思われる。rotatelogs.exeを外部に出したのは筆者の趣味だけの問題だから気にしないでほしい。
RealVNCのレジストリを編集して192.168.1.xxxからのアクセスだけを許可するように設定する
HKEY_LOCAL_MACHINE\SOFTWARE\ORL\WinVNC3に "AuthHosts"をREG_SZで追加。設定値は"-:+192.168.1:"