FreeBSDを始める時に候補に上げていて買わなかった一冊。理由はクライアントとして使用しないことと付属のFreeBSDのバージョンが古いことでしたが、もう今は付属パッケージに頼る必要もないしビギナーズバイブルでは情報不足感もあったので買いました。これでデスクトップも完全カスタマイズできるかな…。
FreeBSD: 2007年3月アーカイブ
# kldstat
Id Refs Address Size Name
1 7 0xc0400000 6f6544 kernel
2 1 0xc0af7000 59f20 acpi.ko
3 1 0xc3fad000 16000 linux.ko
もしかして、一昨日ndisドライバの組み込みに失敗してコア吐いたのはif_wiが入ってないから?
まだまだ試す余地はありそうだ。(でも内蔵無線LAN計画も進めたい)
と思ってカーネルにロードしようとしたら
# kldload if_wi
kldload: can't load if_wi: File exists
既にある見たい。
おまけ:
折角なんでサウンドドライバをロード
# kldload snd_driver
引き続きクライアントFreeBSDの設定。
こちらは無線LANに対応させたいのですがPlanexのGW-NS54Gを使おうとしたがドライバがない。
この場合WindowsドライバーがNDIS準拠であればラッパーを作成して使えるらしい。
早速最新ドライバーをダウンロードして必要ファイルを抜き出し下記コマンドを実行しました。
# ndiscvt -s N54GNDS.sys -i N54GNDS.inf -o ndis_driver_data.h
Segmentation fault (core dumped)
…………………………。コアダンプですか。N54GNDS.inf内ではN54GNDS.SYSと書いていたのでsysファイル名を変えて再チャレンジ
# cp N54GNDS.sys N54GNDS.SYS
# ndiscvt -s N54GNDS.SYS -i N54GNDS.inf -o ndis_driver_data.h
Segmentation fault (core dumped)
だめだ…。
別のバージョンのドライバーなら使えるかなー?(用意した最新はVer.1.1)
いまさら11MBPSなんて買いたくないし、一応X24にはCFがあるのでzaurusと共用で使うという手もありますがZaurus用のCF無線LANは故障で廃棄。CFタイプは結構高いしまた買うのも…。
他の古い3バージョンでも他のサーバのFreeBSD(バージョンは同じ6.2)でも全部コアダンプでした。orz
PCMCIAの11Mは探すのも大変だしZaurusと兼用ということでCF無線LANカード買うしかないのか。
持ち歩くFreeBSDクライアントの方は一応DHCPと固定IPの複合で使えるようにしたので、他のPCからもSSHログインできるようにします。
この場合、接続場所によってサブネットが変わるのでIPフィルタでは大変です。それでクライアント認証を使い、ログインできる端末を制限します。
[Windowsで鍵生成]
Windows側で鍵を作成する場合はTeraTermを利用します。
ターミナル:Tera Term Professional Version 4.48 with Japanese resource
SSHクライアント:TTSSH ( Tera Term同梱)
日本語化バージョンで説明します。
(デスクトップが日本語・ノートが英語バージョン使っている変わり者です)
メニューの[設定]-[SSHキー作成]をクリックします。
キーの種類を選択し(今回はDSA)[生成]ボタンをクリックします。
しばらく待つと秘密鍵パスワードの設定が可能になりますので、パスワードを入れて[公開鍵の保存]と[秘密鍵の保存]でそれぞれ保存します。ここで作成された公開鍵をサーバに送ります。
[UNIX系で鍵生成]
# ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
保存場所を聞かれますがデフォルトでよければそのままEnter
Enter passphrase (empty for no passphrase):
秘密鍵パスワードを聞かれたらパスワードを入力。
これで秘密鍵(id_dsa)、公開鍵(id_dsa.pub)が生成されます。
[UNIXサーバ側の設定]
ログインするユーザのホームディレクトリの下に認証用の公開鍵をまとめるファイルを生成します。
最初のキーの場合はcpでも良いのですが、下記コマンドであれば新規・追加両方使えます。
> cat public_keyfile >> ~/.ssh/authorized_keys
通常公開鍵はid_dsa.pubなので
> cat id_dsa.pub >> ~/.ssh/authorized_keys
authorized_keysは複数の公開鍵を追加できるので、同じユーザ利用で他のクライアント用に別の秘密鍵を用いて認証することが可能です。
httpsの通信ではネームベースのバーチャルホストでは鍵の識別ができなくなるので、複数IPを振ってみることにしました。その他の利用法としてLAN内のみで開発する場合に複数のサブネットを作成することでLAN用サブネットではウェブアクセス、エイリアスの新サブネットではDB接続等の構成が可能になります。
ではやり方。
# ee /etc/rc.conf (一部抜粋)
ifconfig_fxp0="inet xxx.yyy.zzz.11 netmask 255.255.255.248"
ifconfig_fxp0_alias0="inet xxx.yyy.zzz.12 netmask 255.255.255.255"
rc.confにこのように設定します。
netmaskが255.255.255.255なのは同じカードで同じネットマスクの場合に、同じサブネットですよ~という意味らしい。これを255.255.255.248のように設定すると同じIP帯のサブネットを別途生成することになり後々わかわからない傷害に悩まされる可能性がある。
次に、増設したLAN側(CardBus)の設定も多重化します。こちらはIPだけでなくサブネットも多重化してみます。
# ee /etc/devd/rl0.conf (一部抜粋)
device-name "rl0";
action "ifconfig $device-name inet 192.168.0.11 netmask 255.255.255.0";
action "ifconfig $device-name inet 192.168.0.12 netmask 255.255.255.255 alias";
action "ifconfig $device-name inet 192.168.3.11 netmask 255.255.255.0 alias";
action "ifconfig $device-name inet 192.168.3.12 netmask 255.255.255.255 alias";
action "route add default 192.168.0.1";
action "route add default 192.168.3.1";
追加サブネットについては2台とも設定してお互いに通信できるようにしました。(念のため片方だけ設定したときに、もう片方からpingが通らないことを確認)
あとは新規に追加したグローバルIPの方はファイヤーウォールの穴あけないと接続できない。(出来た方が問題なのでこれ良い)。ウェブとメールだけは空ける必要があるので後で空けておこう。
この前、SUEXEC対応でインストールしたので、各バーチャルホストで別々のユーザ設定。SSLのバーチャルホストをやってみたいと思います。
./configure --prefix=/usr/local/apache \
--enable-module=so \
--enable-ssl \
--enable-suexec \
--with-suexec-docroot=/home \
--with-suexec-uidmin=1000 \
--with-suexec-gidmin=1000
実はwith-suexec-docrootでやっぱり後悔して/homeで再インストしました。
VirtualHostディレクティブの中で
SuexecUserGroup uid gid
を設定するとSUEXECが有効になります。このときに気をつけるのは、Apacheをインストールした後にAppacheのUserとGroupは変更しないこと。SuexecUserGroupで指定するuidとgid(idじゃなく名称でも良い)は--with-suexec-uidminと--with-suexec-gidminの値を超えていること。そして実際にCGI等を配置するディレクトリは--with-suexec-docrootで指定したディレクトリ内にあることです。
次に、IPベースとネームベースの両方を用いたバーチャルホスト設定をしてみました。
※但し現在はグローバルを1個だけしか振ってないのでポートで分けた。
NameVirtualHost *:80
NameVirtualHost *:8080
ServerName vhost1.exsample.com:80
ServerAlias vhost1.exsample.com:80
ServerName vhost2.exsample.com:80
ServerAlias vhost2.exsample.com:80
ServerName vhost3.exsample.com:8080
ServerAlias vhost3.exsample.com:8080
ServerName vhost4.exsample.com:8080
ServerAlias vhost4.exsample.com:8080
ざっとこんな感じSSL側もNameVirtualHostを入れることによってサブドメイン毎に表示を分けることができましたがサーバ認証はどうしても最初のディレクティブで設定したものが使用されてしまう。SSL側だけはIPベースのバーチャルホストにしないと問題がでそうだ。
バーチャルホストについても本当のIPベースとネームベースの複合もやりたいので、追加を行ってみます。
【CAを立てない場合】
1. Apache用サーバ秘密鍵(パスワード付き)の作成
# openssl genrsa -des3 -out server.key -rand /var/log/maillog 1024
2. 証明書発行要求(CSR)を作成
# openssl req -new -key server.key -out server.csr
3. 自己署名
# openssl x509 -req -days 365 -signkey server.key -out server.crt -in server.csr
4. 自動起動できるように秘密鍵のパス入力を省略させる
# cp server.key server.key.bak
# openssl rsa -in server.key.bak -out server.key
5. Apacheのconfigで下記を設定する。
# サーバ証明書
SSLCertificateFile /usr/local/apache/conf/server.crt
# サーバ秘密鍵
SSLCertificateKeyFile /usr/local/apache/conf/server.key
【プライベートCAを立てて認証する場合】
1. 認証局の秘密鍵の作成
CA関連のファイルを保存するディレクトリを作成
# mkdir /etc/ssl/ca
# cd /etc/ssl/ca
2. 認証局の秘密鍵を作成
# openssl genrsa -rand /var/log/maillog -out ca.key 1024
3. 自己署名してCA証明書発行
# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
これで出来上がったca.crtがCA証明書です。
4. CAの設定
今回一時的な使用のためコンフィグのコピーを作成
# cp /etc/ssl/openssl.cnf /etc/ssl/ca/
# cd /etc/ssl/ca/
# mkdir newcerts
# mkdir crl
FreeBSDの場合、素ではdemoCAが無かったので別途ソースを入手してindex.txtやserialファイルをコピーしました。
5. CAでサーバ証明書の発行
# cp /usr/local/apache/conf/server.csr /etc/ssl/ca/
# openssl ca -config /etc/ssl/ca/openssl.cnf -in server.csr -days 365 -keyfile ca.key -cert ca.crt -out server-ca.crt
6. 出来たサーバ証明書とCA証明書をコピー
# cp server-ca.crt /usr/local/apache/conf/
# cp ca.crt /usr/local/apache/conf/
7. Apacheで設定変更
# サーバ証明書
SSLCertificateFile /usr/local/apache/conf/server-ca.crt
これで下記のBタイプになります。
8. CA証明書の情報を表示するなら以下の設定を有効にしてもOK
#SSLCertificateChainFile /usr/local/apache/conf/ca.crt
ここで下記のCタイプになります。
9. クライアント認証を行うなら以下も有効に
#SSLCACertificatePath /usr/local/apache/conf
#SSLCACertificateFile /usr/local/apache/conf/ca.crt
これで
A. サーバ自己署名
B. プライベートCA署名
C. プライベートCA署名、CA証明書情報あり
の3通りの設定ができます。でもIE7で見たら
A. 証明書が信用できないエラー
B. 証明書はOK,CAが見つからないエラー
C. 証明書はOK,CAが信用できないエラー
どれも証明書エラーで大差なかったです。
今度はプラウザにインポートした時にどうなるかを検証します。
A. サーバ証明書兼CAなので正常になる
B. CA証明書がないのでインポートが無意味
C. CA証明書がないのでインポートが無意味
BとCで正常化するには別途CA証明書をエクスポートしてインストールする必要があるようです。
以上より単純にセキュアサイト開発するだけなら自己署名のみの方がいいですね。
せっかく2台目を用意したのに何もインストールしていないまま随分過ぎてしまったなー。元々負荷分散の勉強用に立てたのでApacheロードバランサーとMySQLレプリケーション、そしてPgClusterをしなきゃいけない…。
ちょっとググったらすごく丁寧にMySQLレプリケーションを解説しているサイトを発見。参考にさせていただきます。
何年も前から、SSL関係で参考にしているサイトです。第16回 OpenSSLでPKIシリーズは毎度毎度大変助かっています。
今回もここを参考に自己認証のSSLサーバを構築します。
※探していた印刷物はここのです。かなり前に印刷したので若干違うかな(広告とかないしw)
ずっとデフォルトのままで使用していて不便な点が出てきたので、SSLとSUEXECを組み込んでみた。
コンフィグはこれ
./configure --prefix=/usr/local/apache \
--enable-module=so \
--enable-ssl \
--enable-suexec \
--with-suexec-docroot=/usr/local/apache/htdocs \
--with-suexec-uidmin=1000
バーチャルホストで使用するなら
--with-suexec-docroot=/home
の方が融通が利いたかな…。
userdirで/~user/の形式は使用しないのでuserdir設定は無意味なのです。
マズければもう一回入れなおせばいいし、さっさと自己認証局作ってhttpsでアクセスできるようにしようかなぁ。(サーバ認証のみだとワーニングじゃなくエラーになるので。。。)
インストール結果のモジュール組み込み状態は下記の通り
# /usr/local/apache/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_ssl.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_suexec.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
さて、CA作成の資料(印刷物)を探しますか…。
UNIX系OSのデスクトップ環境のスクリーンショットが多数掲載されているサイトですがどれもこれもカッコよすぎる!折角クライアントも構築中なので最終的にはこんなカッコいい環境にしたいなぁ。twmとかだと如何にも低水準OSに見えてサーバ管理端末ですねで終わってしまいますが、『私はUNIXを使っています』といってこんなデスクトップだったらみんなビックリするだろうなー。
相変わらず中途半端構成のまま使い続けています。とりあえず下記のパッケージを全部入れたら十分だと思うけど、
windowmaker
ja-kterm
firefox
sypheed
xcalender
ja-openoffice
emacs21
vim
gimp
gqview
ja-tgif
ja-ghostscript-gnu-jpnfont
acroread-4.05
gv
vlc
xmms
zip
unzip
lha
psutils-a4
ja-FreeWnn-server
tamago-emacs21
ja-kinput2-freewnn
実際にはいろいろと足りないものがあるみたいでうまくインストール完了しかなったりしています。
またLinuxと違ってFreeBSD用ソースが無いソフトもあるのでここが難しいところかな。
意外とクライアントもセルフコンパイル導入の方がうまく行きそうなきがする。(一部ライセンス上の問題で絶対インストールできないパッケージ出てきそう…)

なんかアプリによっては中途半端にマルチバイト表示できてないなー。意地でも完成させてメインモバイルマシンにするぞ…。別にクライアントまでBSDにこだわる必要もないけど…。
