こうして作ったAll in Oneインタネットサーバ
by takamura@itoh.net May 3,1999
FreeBSD 2.2.8-Releaseを使い一台でProxy,DNS,Mail,Webをさせるサーバを作りました。回線はNTTのOCNエコノミー。OCNエコノミーだけでなく、ODNやDIONなどにも活用可能です。(もちろんちゃんとした専用線だってオッケーです。)
世間ではこのようなセットアップ済みサーバを50万円位で売っているようです。これを読みながらなら誰にでも(?)のインタネットサーバが出来上がります。(のはず)
■組立
癖の無い標準的なAT互換機を用意しました。
仕様と材料、コスト
- Celeron300A 約10000円
- 電源付ミドルタワーケース 約10000円
- マザーボード Asus P2B 約18000円
- ビデオカード S3 Trio64V2 約4000円
- FDD無し 0円
- CD-ROM無し(インストール時には必要) 0円
- NIC2枚差し(3c905BとPCI Realtek NE2000互換) 2枚で約12000円
- IDE HDD(UATA10GB) 約25000円
- メモリ 64MB 約12000円
- FreeBSD 2.2.8-Release CD-ROM UNIX USER 1999/3月号付録 約1300円
- X-Windowは動かしません。
- 材料費合計 10万円弱
- 製作時間
なれた人なら4〜5時間で完成。
なれていない人で3日〜1週間くらい。
サッパリ何の事だか分からないけどやってみたいと意欲のある人なら勉強すれば3ヶ月〜半年くらい(?)掛ければできます。リモートメンテナンスを行う都合上、全てキャラクタコンソールベースでの稼働を目指しますのでX-Windowは動かしません。そんな訳でビデオカードはVGAのものを適当に入れておきます。キャラクタが表示できれば何でも良いです。実稼働のあかつきにはモニタも(基本的には)接続しませんのでビデオカードも省略したいところですが、さすがにこれが無いとブートしませんので・・・
同様にキーボード・マウスも全然必要無しです。
CDはインストール時にしか必要でなく、FDに至ってはCDブート可能なマザー(ASUS P2B)なのでホントに不要。組み立てたマシンを設置して見ると寂しいくらいにシンプルです。
NIC2枚差し時の注意。インストール時はNE2000のみ差しておいて、初めてディスクからboot後 shutdown -h nowしてから3c905Bを差して認識させます。
2度手間のようですが、2枚差した状態でインストールすると何故かどちらかのカード(ed1かxl0)が認識されない(ことも)あります。(不思議)
必ず認識しないとは言えませんが急がば回れで確実な方を取ります。内部のリセットスイッチの配線は繋げないようにしておくことも大事です。Windowsじゃないのでリセットする事はまず無いし、間違ってリセットするなんてのは言語道断のUNIX互換OSなのですから。
■BIOSセットアップ
組みたたったらCDドライブだけ繋げてBIOSのセットアップをします。
設定事項は
- PnP OSをNo
- 電源管理Off
- IDEはプライマリ・マスター/スレイブ・マスターのみ生かし残りはNone
- Bootの優先順位はCDROMを一番にしておく
- Boot時のエラーHaltをNo Errorsにしておく。
つまり起動時にキーボードやマウスが繋がってないとダダをこねるBIOSを無視するのです。
(ちなみに当たり前ですが、組立直後の動作チェックでエラーがでない事を確認してからNoErrors設定にしないといけません。)■FreeBSD2.2.8-Rのインストール
OSのCDを入れてCDブートします。
boot:が出たらリターン
Kernel Configuration Menu
では2番目の
Start kernel configuration in full-screen visual mode
(全然visualじゃないけど)
を選んでドライバ関係の設定をします。まず、要らない(接続されていない)デバイスはじゃんじゃんdelしておきます。残すのは
- Storage
Floppy disk controller fdc0
IDE/ESDI/MFM disk controller wdc0
IDE/ESDI/MFM disk controller wdc1- Network
全部削除- Communications
Parallel printer port lpt0
8250/16450/16550 Serial port sio0
8250/16450/16550 Serial port sio1- Input
Syscons console driver sc0- PCI関係は触らない
だけです。
マウスもこの際綺麗に削除(PS/2もMS BusMouseも)、SCSI関係もひとつも無いので削除です。ドライバ関係の削除をしたら Qを押してYで次に進みます。
/stand/sysinstall Main MenuはNoviceを選びます。
スライスは
/
500M
swap
64M
/var
2000M
/usr
残り全部(多分7G位になる)
と言うラインナップ。BootManager はデフォルトの BootMgrを選択。
Distributionの選択は2番のX-Developerでいきます。別にXを使うつもりは無いのですが、Muleを使おうとするとXのなんとかが無い!と言われて動かなくなるのを防ぐ措置です。
続いてDESをインストールするかどうか聞いてきますがこれはインストールしません。
portsはインストールに時間はかかりますが、IP reachableになった時には
make
make install
だけでソフトウェアのコンパイル・インストールができますのでCDの無い計算機には便利このうえありません。必ずインストールするようにします。XのディストリビューションはBasicを選んでおきます。それからCD-ROMをソースメディアにしてインストール開始。Celeron300AのCPUで約30分弱位でインストールファイルのコピーは終了します。
■OSインストール 第二部
Congratulations! You now have FreeBSD installed on your system.
と出たら、ネットワークカード関係の設定からスタートです。一枚だけ差さっているPCI NE2000(ed1)をインタネット(グローバルアドレス)に設定します。
- ホスト名
- Gateway
- Name server
- IPアドレス/ネットマスク
を入力して次画面へ。(前出のように3c905B(xl0)はこの時点では差さってないので当然認識されません。)
IP GatewayにするかはYes。
AnonymousFTP・NFSサーバ・NFSクライアントはNoで動作させません。
Console settingsはYesです。
ここでは
- KeyMap:日本語106キー(日本人なら)
- KeyRepeat:Fast(defaultだと遅すぎ)
- Saver:BSD Daemonちゃん(まったくの個人的な好み)
の3つだけ設定。
次にタイムゾーン設定。当然JSTにしておきます。
マウスは無し・X-Serverの設定はNoでしません。
次にPackage Collectionの設定でYesを選ぶとCD-ROMが唸り出します。(ホント最近のCDROMは高速なのが多いのでCDが回り出すとブンブンうるさい!)
で、ここで選ぶパッケージは
- japanese
ja-Canna-3.2.2
ja-kinput2-canna-2.0.4
ja-kon2-14dot-0.3
ja-kon2-16dot-0.3
ja-mule-canna-2.3
mule-common-2.3とコレくらいにしておいてinstallします。他は入れずに後でpkg_addした方が良いでしょう。(依存関係にあるライブラリがインストールされないバグがあるそうなので・・・)
次にinitial user/group accountsを作るか聞いてきますので
userは当面必要な(自分を含む)アカウント
groupはMailUserと言うメールのみ利用者のグループを作っておきます。続いてrootのパスワードを設定するとFreeBSDユーザの登録をするかどうか?と聞いてきます。可哀想ですが無視します。(No)
最後に他にまだ設定するか聞いてきますのでNo。
CD-ROMを抜いてからリブートします。(勝手にリブートしてくれます。)DefaultはF1にします。
■とりあえず立ち上がったら
rootでloginしてed1(NE2000)NICが認識されているか
ifconfig -a
で確認します。ついでに念のため
ping 設定したグローバルアドレスで返りがあるか確認します。
よければおもむろに
shutdown -h now
でシステム停止です。電源消して、ACケーブルを引き抜いて、3c905B(xl0)を差し込みます。再度電源投入後rootでloginしてdmesgすると2枚のNICを認識しているかどうかが分かります。認識していれば次。/stand/sysinstall
で3c905Bに対してプライベイトなIPアドレスをふります。
振り終わったら念のためshutdown -r now。(何度rebootしてもこの時点なら誰にも文句は言われません。)ifconfig -a
でインターフェイスが機能しているかどうか再度チェックしてから、念のためping プライベイトアドレス
ping インタネットアドレスで返りがあればオッケーです。
■ルータと接続・設定
これから先はIP reachableじゃないと作業に支障があるので、ルータの設定をして接続しておきます。NTT-ME(旧TE)のMN128-SOHOシリーズは余計な(?)IPパケットフィルタリングがなされているのでそれを外しておくこと。そうしないと
telnetを蹴られたりして外部からのメンテナンスができなくなります。■root環境の設定
何をどう設定するにもエディタが必要なので、まずはエディタee の設定です。
a)からd)までOFFにしておいて、saveします。次にshellを変更です。CDをmountして、bashをインストールしておきます。それからvipwで/usr/local/bin/bashに変更。ついでにどのドメインのRootからなのかrootからお知らせメールが届いてもさっぱり分からなくなるの防ぐためにrealnameも「HogeHoge Root」のように変更しておきます。
/etc/groupを編集して wheelグループに自分のアカウントを追加しておきます。
こうしないとtelnetでsuできません。bashの初期設定は手近なちゃんと動いているマシンから
/root/.bash_profile
/root/.bashrc
/root/.profile
/etc/bashrc
をコピーしてきて利用するのが簡単です。もちろんrootだけでなく自分のアカウントのホームにも.bash_profileと.profileと.bashrcをコピーしてきてchownしておくこと。これで設定ファイルの書き直し効率がアップします。(慣れてる環境に早く持っていくのが作業能率アップに繋がるはず。)
■tcp_wrapperの設定
いつまでも素通し計算機では危険なのでこれを先にやっておきます。CD1を用意して
mount /cdromcd /cdrom/package-2.2.8/All
pkg_add tcp_wrappers-7.6.tgz
してインストールします。
pkg_add でtcp_wrapperをインストール。/usr/local/etc/inetd.conf.wrapped.sample
を
/etc/inetd.conf
にコピーしてそのまま利用します。ee /etc/inetd.conf
を編集して
ftp
telnet
以外のサービスは全て止めておきます。(行頭に#をいれてコメントアウト)telnetdは
telnet stream tcp nowait root /usr/local/libexec/tcpd telnetd -h
のように最後に -hを付けておけばtelnetの要求が有ったときに余計な返事はしませんので-hオプションを付けておくことをお奨めします。
$ cat /usr/local/etc/hosts.allow
ftpd: .itoh.co.jp, 210.145.xxx.xxx/255.255.255.240, 192.168.0.0/255.255.255.0
telnetd: .itoh.co.jp, 210.145.xxx.xxx/255.255.255.240, 192.168.0.0/255.255.255.0
(xxxは伏せ字です。)
bash-2.02$ cat /usr/local/etc/hosts.deny
ALL: ALL: spawn = (/usr/bin/mail -s %d-%h root) &
念のためhosts.allow(deny)の内容をチェックしておきます。自分のサイトから繋げないなんて馬鹿な事になりますから。
/usr/local/sbin/tcpdchk
/usr/local/sbin/tcpdmatch telnetd www.itoh.co.jp
とか
/usr/local/sbin/tcpdmatch ftpd www.ibm.com
等のテストをします。おのおのgranted,denyと結果が出たら合格です。■時刻合わせ
xntpd(タイムサーバ)の設定はこの後やりますが、取りあえず自分の時計を合わせておかないとろくな事になりません。
/usr/sbin/ntpdate 210.145.46.226
(既知のxntpdが動いているマシンのIPアドレス)
で時刻を合わせておきます。■xntpdの設定
/etc/rc.confのxntpd_enableをYESにしておいて、
/etc/ntp.conf を作成。
server clock.nc.fukuoka-u.ac.jp
driftfile /etc/ntp.drift
とでも書いておいてから
cat /var/run/inetd.pid
でinetdのプロセス番号を調べてから
kill -HUP プロセス番号
で有効になります。■/etc/servicesの設定
一台でなんでもこなすマシンなのでdelegatedとポートの取り合いになるのを防ぐために23番ポートを別の(10023番とか)番号に変えておきます。
■それからpkg_add
必要なソフトウェアをpkg_addでインストールします。
その前にOSインストール時に/stand/sysinstallで入れたものをおさらいしてお
きます。japanese
ja-Canna-3.2.2
ja-kinput2-canna-2.0.4
ja-kon2-14dot-0.3
ja-kon2-16dot-0.3
ja-mule-canna-2.3
mule-common-2.3この他に必要なものは・・・
/cdrom/packages-2.2.8
japanese/ja-perl5
japanese/ja-p5-jcode.pl-2.6.tgz
japanese/delegate-5.7.2.tgz
nkfあたりでしょうか・・・popperは pkg_addで何故か(?)エラーになってしまったので、
cd /usr/ports/mail/popper
make
make install
でインストールしておきます。■perl5へのリンク
FreeBSD2.2.x系ではperl(/usr/bin/perl)はversion4がデフォルトです。perl5じゃないと動かないスクリプトも多いので
mv /usr/bin/perl /usr/bin/perl4
cd /usr/bin
ln -s /usr/local/bin/perl5 perl
とリンクを張っておきます。perl -vでversionが5になっていることを確認しておきます。(perlが/usr/bin/perlにあるものとして書かれているスクリプトが多いからです。)
■Muleの設定
.emacsをちゃんと設定しておかないと使いにくくてしようがありません。ここは時間短縮のためにも既に動いているマシンからftpしてきて済ますことにします。ホームに置いておくこと。最低限(canna)を記述しておかないと日本語入力をするのにいちいちM-x cannaと入力しないと・・・。
■DeleGateのインストール
pkg_addでインストールしましたが、5.8.8が安定しているようなので
ftp://wall.etl.go.jp
に行って取ってきてコンパイル
/usr/local/sbin/delegated
と入れ換えてしまいます。
設定ファイルはdelegateが動いている計算機から
/usr/delegate/conf以下をftpして来るのが簡単。
設定ファイルの詳細はここにあります。
起動スクリプト/usr/local/etc/rc.d/delegated.shも同様。
ただし実行権限を与えておくこと。# cat delegated.sh
#!/bin/shif [ -x /usr/local/sbin/delegated ]; then
/usr/local/sbin/delegated -P8080 \
+=/usr/delegate/conf/8080.conf \
> /dev/null 2>&1/usr/local/sbin/delegated -P23 \
+=/usr/delegate/conf/23.conf \
> /dev/null 2>&1/usr/local/sbin/delegated -P119 \
+=/usr/delegate/conf/119.conf \
> /dev/null 2>&1/usr/local/sbin/delegated -P210 \
+=/usr/delegate/conf/210.conf \
> /dev/null 2>&1fi
/usr/delegate
を作成して以下はchmod 777。/tmp/delegate以下の書き込み権限にも注意。
これもchmod777 ちゃんと動いているかどうかは/usr/delegate/log以下を点検すること。プロキシは23/119/8080/8110/8119/が中継されていれば良く他は当
面不要。(25/110番は1台でプロキシとメールサーバをさせているので不要)■sendmailのインストール
sendmailはOSインストール時に勝手にはいりますが、8.8.8でちょっと古め。やっぱり新しい方が何かと気分が良いので ftpしてきてコンパイル・インストールします。(sendmailとCF)
具体的にはこちらを参照
CFのsendmail.defのコピーをとってきてその計算機に合わせてちょっと手直し後make sendmail.cfで一丁上がり。/etcにコピーしておきます。
他に
/etc/sendmail.localdomain
/etc/sendmail.localip
も作成後、面倒なのでrebootして終わり。■popperのインストール
popperは標準ではインストールされてませんのでインストールします。何故かCD-ROMに入っているパッケージではエラーがでますのでportsからインストールします。(当然ipが張られていないとなりませんが。)
cd /usr/ports/mail/popper
make
make install
でお終いです。popperのインストールが終わったら /etc/inetd.confのpop3の行頭の#を外しておかなければpopサーバになりません。
popサービスにもtcp_wrapperを掛けるのでしたら、それも /usr/local/etc/hosts.allowに書いておきます。
■apache,kakasi,namazuのインストール
apache1.3.6を手近のftpサイトから取ってきてここを見ながらインストールします。余力もあればkakasiに分かち書きパッチをあててインストール。namazuも入れておきます。■sshのインストール
いつまでも暗号化されていないtelnetdを使うのも危険なのでssh1.2.26をインストールします。
ssh-1.2.26.tar.gzを取ってきて
tar zxvf ssh-1.2.26.tar.gz
cd ssh-1.2.26./configure --without-idea --without-x
make
make install/etc/sshd_config (/etc/ssh_configにあらず)
の中のPermitRootLogin は no にしておきます。
(暗号化されてるからyesでも良いような。。)/etc/inetd.conf は
ごく一部のサービスのみあけておくこと。
念のためtcp_wrapper経由のtelnetdとftpくらいをあけておいてsloginを使うようにすれば良いでしょう。(暗号化されていない通信は極力しないようにする。)
もっと言うとscpを使えばftpは使わなくてもよくなります。