Vine Linux 4.2 Install Memo09/02/25版

研究室のLinuxサーバー群をインストールする際の備忘録として立ち上げたこのページだが,今回が第3版となる.Vine Linuxもメジャーバージョンアップして4.2になり,前回のインストールから3年以上が経過したので情報も相当古くなった.久しぶりにヒマができたので,OSの入れ替えを行うこととしよう.ただし「入れ換え」といってもアップグレードではなく,新規インストールの手順を一からくり返すことにする.

これは,これからAT コンパチブルのデスクトップ機にVine Linux4.2をインストールしてサーバーを構築する人達に少しでも役立てればと思い,実際に成功した手順を記したものである.マシン構成はごく一般的な,Pentium IIやIIIでWindows2000が動く程度のスペックだ.インストールディスクを読み込むCDドライブが利用できるとしよう.実際,サーバーの一つはAMD K6-2の400MHzと化石のようなスペックだが,これでも充分活躍している.

1. インストールディスクの入手

2. インストール作業

3. aptのアップデート

4. パッケージのアップデート

5. webminのインストール

6. VNCによるリモートコントロール

7. DHCPとNATの設定

8. メールサーバー(Qpopper,Postfix)の設定

9. ntp daemonのインストール

10. メーリングリストサーバー fmlのインストール

11. Vine Linux 4.2をWindowsドメインのPDCに仕立てる

12. swatchによるログ監視

13. OpenVPNによる仮想hub設置

14. Apache2の起動および設定


1. インストールディスクの入手

Vine Linuxのサイトでインストールディスクのイメージを配布している.V3.2から3年,絶え間ないメンテナンスとアップグレードに感謝.i386用CDイメージをダウンロードして,B'sなどのツールでイメージのまま焼けばインストールディスクのできあがり.

2. インストール作業

驚くほど簡単にできる.パーティション作成も全部お任せでフルインストール.しかも,ダイアログは日本語だし,驚くほどマイナーなビデオカードも認識する.ハードウェアの認識に関する問題は皆無だった.インストールの難易度について言えば,「Linuxはたいへん」というのはもはや過去のこととなった.

ただし,インストールするパッケージの選択や,ネットワークの設定など,パソコンとネットワークに対する最低限の知識はもちろん必要.今回は

という選択でインストールした.インストーラーがファイアーウォールのon/offを訊いてくるのは4.x系からの新しい機能だ.

3. aptのアップデート 

ルートでログオン,コンソールウィンドウを開いてaptのオプションを変更する.以下のように「extras」を読み込む設定にする.これが結構面倒なようで,「自動化して欲しい」という要望が出ている.次のリリースでは改善されるらしい.extrasにはすぐ下でインストールするwebminも含まれるので,本ページの手順に従うなら以下の編集は必須.

# vi /etc/apt/sources.list

rpm [vine] http://updates.vinelinux.org/apt 4.2/$(ARCH) ...extras
rpm-src [vine] http://updates.vinelinux.org/apt 4.2/$(ARCH) ...
extras
※extrasの記述を追加.

# apt-get update
# apt-get update (2回実行)

学生時代から20年このかた,UNIX系OSのコンソール画面でエディタといえばviを使っている.現代の洗練されたユーザーインターフェースに慣れた諸兄からすると信じられないような愚鈍なものだが,新しいのを憶えるのも面倒なので.果たしてvi(とvi遣い)はこの先何年生き残るだろうか?

4. パッケージのアップデート

Vine Linux 4.2をインストールディスクからインストールしてもパッケージは最新版ではない.セキュリティ強化のためアップデートしておきましょう.

パッケージのアップグレード.

# apt-get dist-upgrade

Vine Linux 4.2はこれだけでカーネルのアップグレードまでやってくれる.進歩したものだ.再起動して,カーネルのバージョンが上がっていることを確認.

# uname -r

09/02/20時点配布CDのカーネルバージョンは「kernel-2.6.16-0vl76.27」のはず.カーネル更新の履歴を知りたければ

# rpm -q kernel

とタイプ.

5. webminのインストール

webminのインストール.

# apt-get install webmin

ローカルからWebブラウザを起動,アクセステスト.アドレスバーに「https://127.0.0.1:10000/」と入力する.Webminnの画面が出たら成功!

アクセス可能なipアドレス制限を変更.

# vi /etc/webmin/miniserv.conf

allow=127.0.0.1 xxx.xxx.xxx.xxx
※アクセスを許すリモート端末のipを追加

# /etc/webmin/restart

ついでに,ホスト名にこのサーバーの呼び名(Alpha0)を加える.

# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 Alpha0 localhost.localdomain localhost

Vine Linux 4.2ではデフォルトでファイヤーウォールが有効である(インストール時に選択した)ので,これだけでは外部からアクセスできない.ファイヤーウォールにWebminの穴を開けてやる.前回のセットアップ時はGUIで設定していたが,かなり面倒なのでiptablesを直接編集しよう.せっかくデフォルトで設定されたパケットフィルタのチェーンがあるのでそこに追加することにする.

# /sbin/iptables -I RH-Firewall-1-INPUT 6 -p tcp --dport 10000 -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

これでルールの6番目に「ポート10000に来たtcpの着信を受け取る」設定が加わった.念のため確認する.赤い行が今回付け加えた設定.

# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.3.6 on Mon Feb 23 19:16:34 2009
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [717:91205]
:RH-Firewall-1-INPUT - [0:0]
[1310:292276] -A INPUT -j RH-Firewall-1-INPUT
[0:0] -A FORWARD -j RH-Firewall-1-INPUT
[8:560] -A RH-Firewall-1-INPUT -i lo -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p ipv6-crypt -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p ipv6-auth -j ACCEPT
[15:2177] -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
[793:61816] -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[1:48] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
[493:227675] -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Feb 23 19:16:34 2009

アクセスを許すipアドレスから,https://[Vine Linuxのip]:10000でアクセステスト.これで,ログインダイアログが出たら成功.お疲れ様.

6. VNCによるリモートコントロール

Vine Linux 3.2のときはTightVNCを使っていたが,今回のディストリビューションでは本家VNCも4.1になり格段に性能が向上.しかも,aptでインストール可能なので今回は本家VNCを使うことにした.

aptでインストール.

# apt-get install vnc-server

これでインストール完了.続いて環境のコピーと動作テスト.ログオンするユーザーのアカウントで作業.まずは環境のコピー.

$ mkdir .vnc
$ cp -a /etc/X11/xinit/xinitrc ~/.vnc/xstartup

起動確認.

$ vncserver

You will require a password to access your desktops.
Passwd:
Verify:
※VNCログオンのパスワード.これは,この先使わないので適当でよいがLinuxログオンと違うパスワードを設定しよう.

ここまでで,VNCの正常動作が確認できた.次は外部からの接続テスト.まずはファイヤーウォールに穴をあける.設定は「プロトコルがTCPで着信ポートが5901なら許可」とする.アクセス可能なipアドレスを制限しないとセキュリティ上問題となる.この作業はスーパーユーザーで.

# /sbin/iptables -I RH-Firewall-1-INPUT 6 -s 150.7.zz.zz -p tcp --dport 5901 -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

これでルールの6番目に設定が加わったはず.

VNCでサーバーのデスクトップを開いてみよう.アクセス許可された端末(150.7.zz.zz)からVNC clientを開き,「サーバーのIPアドレス(150.7.xx.xx):01」で接続する.このときはいましがた設定したパスワードを使用.

Linuxデスクトップが表示されたらここまでは成功.

続いて,VNCをinetサービスで待ち受け,接続したらログイン画面が現れるように設定変更.せっかくだから,今開いているLinuxデスクトップで作業しよう.

GNOMEメニューから[デスクトップ]→[システム管理]→[ログイン画面]を開く.

[リモート]タブの[スタイル]を「ローカルと同じにする」に変更.

ユーザーレベルに戻り,サーバーをいったん終了.

$ vncserver -kill :1

VNCクライアントからリクエストがあったら自動的にサーバーが立ち上がるようにinetdを設定する.今度は着信ポートが5950,5951なのでファイヤーウォールの設定を変更.さっき開けた穴は塞いでおこう.もう一度スーパーユーザーになって作業.

# /sbin/iptables -D RH-Firewall-1-INPUT 6
# /sbin/iptables -I RH-Firewall-1-INPUT 6 -s 150.7.zz.zz -p tcp --dport 5950:5951 -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

これでルールの6番目に設定が加わったはず.

まずはinetdのインストール.

# apt-get install inetd
# /etc/rc.d/init.d/inet start

サーバ起動時,inetdが起動されるようにしておく

# /sbin/chkconfig inet on

サービスの設定.

# vi /etc/services

vnc-small 5950/tcp
vnc-large 5951/tcp
※末尾に追加

# vi /etc/inetd.conf

vnc-small stream tcp nowait nobody /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 800x600 -depth 24 securitytypes=none
vnc-large stream tcp nowait nobody /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 24 securitytypes=none
※末尾に追加

inetd,gdmを再起動.

# /sbin/service inet restart
# /usr/sbin/gdm-restart

接続テスト.VNCを起動,「サーバーのIPアドレス(150.7.xx.xx):5950」「サーバーのIPアドレス(150.7.xx.xx):5951」の2つの設定が使用可能.50のときは800x600のデスクトップが,51のときは1024x768のデスクトップが現れる.

ここまでの設定で,VNCを起動するといきなりログオン画面が現れる(VNCのパスワードは訊かれない).VNCを普通のX端末のように扱うことが出来る.前回,TightVNCをインストールしたときよりかなり楽になった.

7. DHCPとNATの設定

 このサーバーをDHCPサーバーとして,NATでクライアントからインターネットへアクセス出来るようにする.サーバーにするからには,ネットワークカードが2枚刺さっており,eth0が固定ip(150.7.xx.xx)でインターネットにアクセスできる状態と仮定する.前半の,2枚目のインターフェースの設定にはwebminを使う.

ネットワークカードeth1の設定.
[ネットワーク設定]→[ネットワークインターフェース]→[eth1]で設定画面に入る.


ipアドレスを上記のように設定.「保存して適用」すると,eth1がアクティブになる.

2枚のネットワークカードでルーター動作をさせるときのおまじないはコマンドラインでは

# echo 1 > /proc/sys/net/ipv4/ip_forward

だが,Vine Linux 4.2では撥ねられてしまう.調べるよりはGUIでやってしまおう.[ネットワーク設定]→[ルーティングとゲートウェイ]の「ルータとして動作させますか?」を「はい」に切り替え,「保存」.

続いて,dhcpの設定.ここからはコマンドラインで作業しよう.「全部インストール」を選択してインストールすれば既にパッケージは入っている.

以前はちまちまと設定画面から入力していたがかなり面倒な作業なので今回は省力化.上手くいっている設定を上書きしてしまおう.上手くいっている設定が以下.ファイル名は/etc/dhcpd.confだ.赤字はDNSサーバーのアドレスでこれは環境に依存する.

allow unknown-clients;
ddns-update-style ad-hoc;
# Subnet
subnet 192.168.0.0 netmask 255.255.255.0 {
option domain-name-servers 150.7.3.5;
option broadcast-address 192.168.0.255;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
range 192.168.0.2 192.168.0.200;
}

上の内容でdhcpd.confを作り,これをftpか何かでサーバーに転送して/etc/にコピーする.

待ち受けインターフェースの設定は,/etc/sysconfig/dhcpdに設定する.

# vi /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=
eth1

無くても待ち受けインターフェースは自動で決めてくれるのだが念のため.

続いてdhcpサービスをスタートさせ,起動時自動スタートに登録する.

# /sbin/service dhcpd start
dhcpdを起動中: [ OK ]
# /sbin/chkconfig dhcpd on

続いて,ファイアーウォールの設定.コイツもipconfigを使いコンソールからやってしまおう.例によってサーバーのアドレスは150.7.xx.xx.これは環境にあわせて変更する.

# /sbin/iptables -t nat -A PREROUTING -i eth0 --protocol tcp --dport 9000 -j DNAT --to-destination 192.168.0.2:80
# /sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source 150.7.xx.xx
# /sbin/iptables -I RH-Firewall-1-INPUT 6 -i eth1 -o eth0 -s 192.168.0.0/24 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 7 -i eth0 -o eth1 --protocol tcp --dport 80 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 8 -m state --state ESTABLISHED,RELATED -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

で,なぜかこの後サーバーの再起動が必要.何故必要なのか理由は分からなかったが,このtipsを発見するまで苦労した.きっと何かのサービスを再起動すればいいだけの話なのだが...再起動後,eth1にハブを接続,下流に適当なwindowsマシンを繋いでインターネットへアクセスできれば成功!

8. メールサーバー(Qpopper,Postfix)の設定

SMTPサーバーはPostfixを使う.さすがにVine 3.2をインストールした当時とは違い,SMTP-authが使えないメールクライアントなど存在しない.pop before smtpは廃止.Qpopperも現代のスタンダードにあわせてAPOP認証で運用する.

上の手順「6. VNCによるリモートコントロール」でinetdがインストールされていれば必要ないが,インストールされていないときはまずinetdをインストールしておこう.

# apt-get install inetd
# /sbin/service inet start
# /sbin/chkconfig inet on

ではスタート.まずはメール受信のQpopper.インストール後にinetサービスを再起動しないとQpopperの待ち受けが有効にならないので注意.

# apt-get install qpopper
.
.
準備中... ########################################### [100%]
1:qpopper ########################################### [100%]
Added pop3 entry to inetd.conf by qpopper package
create backup /etc/inetd.conf.rpmsave
完了

# /sbin/service inet restart

APOP認証はPOP用パスワードをメールアカウントごとに登録する必要がある.一人目のアカウント登録の前に初期化.

# /usr/sbin/popauth -init

続いて,ユーザーendoのパスワードを登録.これは各ユーザーにやってもらいましょう.

$/usr/sbin/popauth
Adding only APOP password for endo.
New password:
Retype new password:

inetd.confを開いて確認.#pop-3の行(赤)のコメントが削除されいることを確認.

# cat /etc/inetd.conf | more
.
.
#pop-2 stream tcp nowait root /usr/sbin/tcpd in.qpopper
#pop-3 stream tcp nowait root /usr/sbin/tcpd in.qpopper
pop-3 stream tcp nowait root /usr/sbin/tcpd in.qpopper
#imap stream tcp nowait root /usr/sbin/tcpd imapd
.
.

ファイヤーウォールに穴を開ける.110番ポートを開放.これはwebminの時にやったのと全く同じ手順.

# /sbin/iptables -I RH-Firewall-1-INPUT 6 -p tcp --dport 110 -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

これでルールの6番目に「ポート110に来たtcpの着信を受け取る」設定が加わった.

外部からアクセス,APOP認証ができるかどうかを確認.Thunderbirdがクライアントの時は以下のような設定となる.

サーバーとの接続が確立出来たらインストール成功.

続いて,SMTPサーバー,Postfixの設定に移ろう.作業の前にファイヤーウォールの設定を確認しよう.意外とこれに気づかず嵌る例は多いのだ.25番ポートが通ることを確認.

# cat /etc/sysconfig/iptables
.
.
[0:0] -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
.
.

では始めよう.まずはPostfixの設定ファイル,/etc/postfix/main.cfを編集.以下の行のコメントを外す,あるいは内容を変更.

# vi /etc/postfix/main.cf

inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain =
alpha0.sp.u-tokai.ac.jp
myhostname = alpha0
mynetworks = 127.0.0.0/8
myorigin = $mydomain

上の例はドメイン名がalpha0.sp.u-tokai.ac.jpの場合の設定.赤:書き換え. 黒:コメントを外すのみ.設定が正しく変更されたかどうかを確認する.「/usr/sbin/postconf -n」で,デフォルトから変更されたパラメータのみを抽出表示する.

# /usr/sbin/postconf -n
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
allow_percent_hack = no
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
default_privs = nobody
inet_interfaces = all
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = alpha0.sp.u-tokai.ac.jp
myhostname = alpha0
mynetworks = 127.0.0.0/8
myorigin = $mydomain
queue_directory = /var/spool/postfix
unknown_local_recipient_reject_code = 550

中には,編集していないのに表示される内容もある.これはVine Linuxに標準でインストールされた状態でデフォルトから変更されているためだ.

Postfixの再起動

# /usr/sbin/postfix reload

コマンドラインからSMTPサーバーへの接続テストをしてみよう.

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 alpha0.sp.u-tokai.ac.jp ESMTP Postfix
quit
221 Bye

上のように「220...」が表示されコマンド待ちになったら成功.「quit」で抜ける.

続いてSMTP-authのインストール.これが予想以上に難航した.Vine Linux 4.2に標準でインストールされているPostfixははじめからSMTP-authのオプション付きでコンパイルされているのでアンインストール→再インストールの手間をかける必要はない.しかし,必要なモジュールが全てそろっていないのでcyrus-sasl-md5 cyrus-sasl-plainを追加インストールしないとSMTP-authが動かない!これを発見するまでに二日かかった.

まずはインストール.

# apt-get install cyrus-sasl-md5 cyrus-sasl-plain

では始めよう.まずmain.cfをSMTP-auth対応に書き換える.以下の行を末尾に追加.

# vi /etc/postfix/main.cf
.
.
末尾に追加

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_relay_domains, reject
broken_sasl_auth_clients = yes

続いて,「/usr/lib/sasl2/smtpd.conf」を作り以下の内容を記述.

# vi /usr/lib/sasl2/smtpd.conf
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain

続いて,SMTP-auth専用のアカウント,パスワードペアを作る.ここでポイントは「ユーザー全員に同じユーザー名,パスワードを供用させる」ということだ.別に,これはユーザー相互に秘密にしておくことはないし,現実的な問題としてユーザーがパスワードを変える方法も無いのでこのような運用が最も合理的だろう.ユーザー名は「alpha0-smtp」,パスワードは「hogehoge」とする.

# /usr/sbin/saslpasswd2 -c -u `/usr/sbin/postconf -h myhostname` alpha0-smtp
Password:hogehoge
Again (for verification):hogehoge

sasldb2のパーミッション,グループを変更.

# chmod 640 /etc/sasldb2
# chgrp postfix /etc/sasldb2

続いて,Postfixが正常に起動するかどうか再確認する.「220...」が表示されたらとりあえずはオッケー.続いて「EHLO localhost」とタイプ.以下のような文字列が表示されたらSMTP-authで待ち受けしていることになる.

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 alpha0.sp.u-tokai.ac.jp ESMTP Postfix
EHLO localhost
250-alpha0.sp.u-tokai.ac.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH CRAM-MD5 LOGIN PLAIN DIGEST-MD5
250-AUTH=CRAM-MD5 LOGIN PLAIN DIGEST-MD5
250 8BITMIME

quit
221 Bye

ここまで来たら,あとはクライアントの設定.例によってThunderbirdの場合しか例示出来ないのでご容赦を.

適当なメッセージを,適当な相手に送ってみよう.パスワードを求めるダイアログが出て,正しいパスワードを入力したらメールが送れるはずだ.いやー,苦労した.

9. ntp daemonのインストール

サーバーたるもの,時間に正確でなければ.サーバー起動時にntpデーモンが起動するようにchkconfigで設定する.

# /sbin/chkconfig ntpd on

/etc/ntp.confを設定.

# vi /etc/ntp.conf

server 133.100.9.2
server 133.41.4.2
server 133.31.180.6

※server 127.127.1.0の行の下に追加

ntpdを起動.

# /sbin/service ntpd start

時刻あわせの確認をする.

# /usr/sbin/ntpq -p


こんな画面が出て,現在時刻の誤差を表示する.10分くらいたつとntpサーバーと同期がとれる.

10. メーリングリストサーバー fmlのインストール

ML復旧時の苦い経験

研究室サーバーの主要な役割として,MLサーバーがある.今回はfmlをPostfixと連携させる方法でインストールしよう.この方が管理がやりやすいので,fmlはいつもユーザーendoの下にインストールしている.前回インストール時に既にfml8があったが,今でも乗り換えの必要性は感じない.

まずはfmlディレクトリ,MLディレクトリを作成.endoのホームディレクトリで

$ mkdir fml
$ mkdir ml

superuser権限で,Postfixのmain.cfを編集.末尾に以下の記述を追加.

# vi /etc/postfix/main.cf

allow_mail_to_commands = alias,forward,include

Postfixの再起動

# /usr/sbin/postfix reload

再びユーザーendoでfmlのインストール.まずはfmlをダウンロード.在処はftp://ftp.fml.org/pub/fml/.正式リリースより,stableの最新版がいいでしょう.というわけで,fml-4.0-stable-20040215.tar.gzをダウンロード.fml4.0のバージョンは2004年以降上がっていない,「枯れた」ソフトウェアだ.

解凍する.

$ wget ftp://ftp.fml.org/pub/fml/4.0-stable/fml-4.0-stable-20040215.tar.gz
$ tar zvxf fml-4.0-stable-20040215.tar.gz
$ cd fml-4.0-stable-20040215

Vineは他のディストリビューションとperlのパスが違うので,全てのスクリプトでperlのパスを変更する必要がある.

$ find . -type f | xargs perl -pi -e 's|/usr/local/bin/perl|/usr/bin/perl|g'

インストール

$ perl makefml install

途中の質問に対する回答は以下の通り.ドメイン名(alpha0.sp.u-tokai.ac.jp)は1例です.

Personal Use or ML-Admin-Group-Shared or fmlserv you use?
Personal, Group, Fmlserv(personal/group/fmlserv) [personal]
[Enter]
DOMAIN NAME        [hogehoge.jp]
alpha0.sp.u-tokai.ac.jp[Enter]
FQDN            [ml.hogehoge.jp]
alpha0.sp.u-tokai.ac.jp[Enter]
EXEC FILES DIRECTORY    [/usr/local/fml]
/home/endo/fml[Enter]
TOP LEVEL ML DIRECTORY   [/var/spool/ml]
/home/endo/ml[Enter]
Language (Japanese or English)   [English]
Japanese[Enter]
TimeZone (TZ: e.g. +0900, -0300)  [+0900][Enter]

--- Install the Fml system to /usr/local/fml. (y/n)
y[Enter]

「-- Enjoy Internetworking!」の表示が出ればインストール完了.

MLの生成をテストする.

$ /home/endo/fml/sbin/makefml newml test-ml

superuserレベルでエイリアスを変更し,それを有効にする.これでtest-ml@alpha0.sp.u-tokai.ac.jp宛てのメールを受け取れるようになる.

# cd /home/endo/ml/test-ml
# cat aliases >> /etc/postfix/aliases
# newaliases
# chmod 755 /home/endo/ml/test-ml

メーリングリストの設定.

$ /home/endo/fml/sbin/makefml config test-ml

管理者アドレスの登録.

$ /home/endo/fml/sbin/makefml addadmin test-ml endo@tokai.ac.jp

あとは,test-ml-ctl@alpha0.sp.u-tokai.ac.jpにadminからコマンドメールを打ち,正しくコントロール出来るかどうかを確認.上手くいったらインストール完了

最後に,テスト目的で作ったmlを無効にする.

$ /home/endo/fml/sbin/makefml destructml test-ml

用の無くなったmlはこのようにdestructしておいた方がよい.mlのログは「@mlの名前」で保存されるので心配ない.お疲れ様でした.

11. Vine Linux 4.2をWindowsドメインのPDCに仕立てる

ドメインコントローラー入れ替え時の苦い経験

ドメインコントローラー(DC)の機能についてはここで語るほどの知識はないが,私の認識では複数のWindows PCに複数のユーザーがいて,ユーザーが全てのPCで共通のデスクトップ環境を使い,かつ管理者は1台1台のアカウント管理を行わずとも,PDCの上の変更だけで済む,というものだ.

我が研究室では2005年ころから研究室ドメインを運用し,全員が全てのPC上で共通のデスクトップ環境を使えるようにしている.というわけで,サーバー入れ換えに伴い,Vine Linux 4.2をコントローラーにしてPDCを立てる手順を記述する.我が研究室の独特な使用条件から,以下の要件を満たすドメインを構築している.

なお,通常ドメインコントローラーはPDC(プライマリドメインコントローラー)と最低一つのバックアップドメインコントローラー(BDC)から構成されるものだが,小規模な研究室なのでPDCのみで運用している.壊れたら1日がかりで再インストールすればよいのだ.

今回の作業は,実際にはPDCの新規作成ではなく旧資産の引き継ぎだ.引き継ぎの際必要になる旧PDCのドメインSID(Security Identifier)を,旧サーバーを停止する前に取得しておこう.旧サーバーにrootでログインし,

# net getlocalsid ENDOLAB
SID for domain endolab is: S-1-5-21-186xxxxxx8-10008xxxx9-280796xxxx

でドメインSIDを取得.ENDOLABは旧サーバーで活動していたドメイン名.

Vine Linux 4.2にapt-getでインストールされるSAMBAのバージョンはVine Linux 3.2と同じバージョン3.0だ.従って,Vine Linux 3.2の手順を踏めばそのまま移行が可能だろう.

何はともあれ,ファイアーウォールに穴を開けねば.東海大の場合,SMB関係のポートは外部からのアクセスをブロックしているのでここではノーガード.一般に通用する設定ではないので注意.

# /sbin/iptables -I RH-Firewall-1-INPUT 6 -p udp -m udp --dport 137:138 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 7 -p tcp -m tcp --dport 139 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 8 -p tcp -m tcp --dport 445 -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

では始めよう.まずはモジュールのインストール.

# apt-get install samba

ここで,旧サーバーのSIDがあるときは新サーバーを同じSIDで登録する必要がある.sambaモジュールが活動していないことを確認,以下のコマンドを打ち込む.

# /sbin/service smb stop   (念のため)
# net setdomainsid S-1-5-21-186xxxxxx8-10008xxxx9-280796xxxx

# net getlocalsid ENDOLAB   (確認)

SAMBAをPDCとして動作させるための設定./etc/samba/smb.confを以下のように書き換えた.なお,一部に「何で?」と思われるような設定があるかもしれないが理由は聞かないで欲しい.とにかく,あちこち探して試行錯誤して上手くいった結果が下のsmb.confなのだ.

[global]
dos filetimes = Yes
display charset = EUCJP-MS
smb passwd file = /etc/samba/smbpasswd
name resolve order = wins
interfaces = eth0 eth1 tap0
domain master = yes
preferred master = yes
encrypt passwords = yes
wins support = true
dos filetime resolution = Yes
logon script = netlogon.js
dos charset = CP932
local master = yes
logon path = \\%L\profiles\%U
workgroup = ENDOLAB
os level = 67
security = user
unix charset = EUCJP-MS
domain logons = yes

[homes]
comment = Home Directories
browseable = no
writeable = yes

[profiles]
path = /home/samba/profiles
profile acls = yes
writable = yes
browseable = no
guest ok = yes

[netlogon]
comment = Network Logon Service
path = /home/netlogon
guest ok = yes
writable = no
share modes = no


SAMBAの起動.

# /sbin/service smb start

続いて,webminでSAMBAユーザーとUnixユーザーの同期の自動化を設定する.「サーバー」→「SAMBA Windowsファイル共有」と降りて行き,下の図のアイコンをクリック.

同期化を設定して,「適用」.

こうすると,webminでユーザーを作ると同時にSAMBAアカウント,パスワードが設定される.

続いて,マシンアカウントとユーザーグループの作成.

# /usr/sbin/groupadd -g 200 admins
# /usr/sbin/groupadd -g 201 machines

ログオンスクリプトを入れるディレクトリ,プロファイルを入れるディレクトリを作成する.

# mkdir -m 0775 /home/netlogon
# chown root.admins /home/netlogon
# mkdir /home/samba /home/samba/profiles
# chmod 1757 /home/samba/profiles

続いて,マシンアカウントの作成.グループmachinesに割り当てる.ここでは,クライアント"IBM300PL"を割り当てている.アカウントの大文字/小文字は無視される(らしい)ので,ここでは全て小文字で設定.

# /usr/sbin/useradd -g machines -d /dev/null -c "Trust Account" -s /bin/false ibm300pl$
# passwd -l ibm300pl$
# smbpasswd -a -m ibm300pl

まだ確信は無いのだが,次のステップの作業はSAMBA3.01とSAMBA3.02で異なるようだ..3.02のセキュリティアップデートが原因で,WindowsのグループがSAMBAのグループに自動登録されないようなのだ.詳しい情報はこのサイトを参照してもらうとして,とにかく小数点以下2桁めのアップデートにしては大きな仕様変更をしたらしい.おかげで,以前と同じ手順でユーザーを"Domain Admins"に登録しようとして上手くいかず半日を無駄にした.

まず,WindowsのActive Directoryの"Domain Admins"がSAMBAグループとして登録されているかどうか確認する.

# net groupmap list
Domain Admins (S-1-5-21-3128xxxxxx-28851xxxx-2089xxxxxx-512) -> -1

の表示を見つけたらこのステップはクリア.(1)に進む.何も表示されなければグループが登録されていない.(2)に進む.

(1)ADのDomain ADminsをLinuxのadminsグループに関連づける.

# net groupmap modify NTgroup="Domain Admins" UNIXgroup=admins

(2)ADの"Domain ADmins"グループを作成,Linuxのadminsグループに関連づける.ポイントはrid=512を明示的に指定すること.これが,(S-1-...)という暗号のような文字列の最後の数列を決定し,この数列がActive DirectoryでDomain Adminsとして振る舞うための条件となる.

# net groupmap add rid=512 NTgroup="Domain Admins" UNIXgroup=admins

確認.

# net groupmap list
Domain Admins (S-1-5-21-3128xxxxxx-28851xxxx-2089xxxxxx-512) -> admins

クライアントPCをドメインに参加させることができるのはPDCのrootだけである.従って,rootをSAMBAユーザーにしなくてはならない

# smbpasswd -a root

パスワードを訊かれるので入力.これは,rootのログインパスワードと同一である必要はない.

さて,続いてクライアントPCをドメインに参加させてみよう.まずは,IBM300PLにPDCの在処を教えてあげなくてはならない.PDCとクライアントが同じHubにつながっているなら問題はないのだが,ルーターを越えるためには明示的にWINSサーバーを指定してやらなくてはならない.「ネットワーク」→「プロパティ」→「TCP-IP」→「詳細」→「WINS」と辿っていくと下のウィンドウに到達する.ここに,PDCのアドレスを登録.

続いて,
WindowsXP:「マイコンピューター」→「プロパティ」→「コンピュータ名」→「ネットワークID」
Windows2000:「マイコンピューター」→「プロパティ」→「ネットワークID」→「ネットワークID」
と辿って行き,ネットワークウィザードを開始する.

「ドメイン」にはsmb.confで指定した名前(ENDOLAB)を
「ユーザー名」にはrootを
「パスワード」にはsmbpasswdで指定したパスワードを入力する.

ところが,ここで「ENDOLAB上にコンピューターのアカウントが見つかりませんでした」と言われる.

再びドメイン名に「ENDOLAB」と入力し,「次へ(N)」.すると下のように,またユーザー名,パスワード,ドメイン名を訊くダイアログが出る.ここにもう一度同じ情報を入力.

ここで結構待たされる.しかし1分ほどしてPDCに認識されると,「rootをローカルユーザーに加えるか?」というダイアログが出る.ここは「追加しない」.

ウィザードを閉じると,再起動を促すダイアログが出るので,再起動を掛ける.再起動後の画面は,下のように見慣れたWindowsログオン画面とちょっとちがう.さて,ここでログオンする前に,PDCにユーザーアカウントを作らなくてはいけない.ユーザーyamadaを作ってみよう.

ここで,Webminを利用すれば,ユーザーアカウントとSAMBAアカウントがいっぺんに作れる.パスワードはtaroとしておこう.

グループを「admins」にするのを忘れないように.

「作成」で作業完了.SAMBAアカウント,パスワードの作成は自動でできているはずである.

クライアントPCのログオン画面でAlt-Ctrl-Delキーを叩くと,ログオン画面が現れる.いつもと違い,画面の入力欄が3段になっている.ログオン先を「このコンピューター」から「ENDOLAB」に変更,ユーザー名とパスワードを入力.

全てが上手くいけば,あのおなじみの「始めてのログオン画面」が現れる.

これで,yamadaさんのアカウントが無事作成されました.しかし,作業はここで終わりではない.「マイコンピューター」を開けると,ネットワークドライブZが自動的に作られていることがわかる.SAMBAの機能なのか,Windowsのドメインはみんなこうなのかは分からないが,自動的にサーバー上のディスクスペースにネットワークドライブが割り当てられるようだ.SAMBA版のばあいは,もちろん実体はPDC上,ユーザーアカウントのホームディレクトリである.

これに加え,研究室共有サーバー(Windows2000)の「共有フォルダ」と「ファイルサーバー」をそれぞれドライブX,Yに割り当てる必要がある.これにはWindows Scripting Hostを利用する.web上の情報ではnet useコマンドを利用したバッチファイルを使った方法が数多く紹介されているが,まあこれは趣味の問題.ipアドレスなどのプライバシー情報をぼかし,ダウンロードできるようにしたものがこちらにある.このファイルを,PDCのnetlogon上に置いておけば,勝手に実行してくれる.もちろん,smb.confにその旨の設定があるからだが.一度ログオフし,再度ログオンして,サーバーがX,Yドライブに割り当てられていることを確認.

これで終了.

12. swatchによるログ監視

Vine Linux 3.2の時代にサーバーがクラックされ,それをきっかけに導入したログ監視ソフトのswatch.便利に使っているので今回もインストール.当時とは状況が変わっているようなのでも改めて幾つかのwebサイトから最新情報を入手,インストールした.

(1) 導入

必要なアーカイブは以下の通り
1. Bit::Vector  <http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/
2. Date::Calc  <http://search.cpan.org/CPAN/authors/id/S/ST/STBEY/
3. Date::Parse <http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/
4. Time::HiRes <http://search.cpan.org/CPAN/authors/id/J/JH/JHI/
5. File::Tail   <http://search.cpan.org/CPAN/authors/id/M/MG/MGRABNAR/
6, 本体     <http://sourceforge.net/project/showfiles.php?group_id=68627

(2) インストール

便利なやり方をこのサイトで教わった.情報元のサイトでは一般ユーザーで作業,sudoでルート権限を得ていたがここでははじめからスーパーユーザーで作業.
ちょっと行儀が悪いがsudoの設定が面倒なので.

cpan installの初期設定が意外に面倒だった.まずは簡易ブラウザlynxをインストール.

# apt-get install lynx

続いてcpanの初期設定を行う.

# perl -MCPAN -e shell

大体全部デフォルトで回答すればよいが,詳しくはこちらで.一つだけデフォルトで答えてはいけない質問があるので注意.

Parameters for the 'make install' command?
Typical frequently used setting:

UNINST=1 to always uninstall potentially conflicting files

Your choice: []
UNINST=1

同じモジュールがあったとき,古いバージョンをアンインストールしてからインストールするよう指定.

終わったら「q」で抜ける.

続いて,cpanライブラリのインストール.

# cpan -i Bit::Vector
# cpan -i Date::Calc
# cpan -i Date::Parse
# cpan -i Date::Manip
# LC_ALL=C cpan -i Time::HiRes
# cpan -i File::Tail

続いて本体.09/02/24現在の最新版は3.2.3だ.これは手動で書き換える必要がある.

# cd /root
# wget http://jaist.dl.sourceforge.net/sourceforge/swatch/swatch-3.2.3.tar.gz
# tar zxvf swatch-3.2.3.tar.gz
# cd swatch-3.2.3
# perl Makefile.PL
# make
# make test
# make install

これだけを,上から順番に実行していけば自動的に今日現在の最新版がインストールされる.

(3) 起動チェック,自動起動の設定

まず,コマンドラインから起動チェック.

# swatch -V
This is swatch version 3.2.3
Built on May 7, 2008
Built by E. Todd Atkins <Todd.Atkins@StanfordAlumni.ORG>

起動メッセージが出たら成功.続いて,swatchが参照する.swatchrcファイルを/rootに置く.様々な例がいろんなサイトにあるが,私の場合はswatch添付の/examples/swatchrc.personalを元に以下のようなファイルを作成した.ホスト名はAlpha0,これは適宜変更のこと.

#
# Personal Swatch configuration file
#

# Alert me of bad login attempts and find out who is on that system
watchfor /INVALID|REPEATED|INCOMPLETE/
mail=root,subject=Alpha0 swatch report

# Important program errors
watchfor /LOGIN/
mail=root,subject=Alpha0 swatch report

watchfor /passwd/
mail=root,subject=Alpha0 swatch report

watchfor /ruserok/
mail=root,subject=Alpha0 swatch report

# Ignore this stuff
ignore /sendmail/,/nntp/,/xntp|ntpd/,/faxspooler/

# Report unusual tftp info
ignore /tftpd.*(ncd|kfps|normal exit)/
watchfor /tftpd/
mail=root,subject=Alpha0 swatch report

# Kernel problems
watchfor /(panic|halt|SunOS Release)/
mail=root,subject=Alpha0 swatch report

watchfor /file system full/
mail=root,subject=Alpha0 swatch report

ignore /vmunix.*(at|on)/
watchfor /vmunix/
mail=root,subject=Alpha0 swatch report

watchfor /fingerd.*(root|[Tt]ip|guest)/
mail=root,subject=Alpha0 swatch report

watchfor /sshd:/
mail=root,subject=Alpha0 swatch report

何があっても,root宛てにメールが行く設定だ.サブジェクトは,どのサーバーからのメッセージかが分かるように決定.
続いて,自動起動スクリプトswatchを/etc/rc.d/init.dの下に置く.中身は以下のようになっている.

#! /bin/sh
#
# chkconfig: 2345 99 99
# description: Execute swatch
# Source function library.
. /etc/rc.d/init.d/functions
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n "Starting Swatch: "
/usr/bin/swatch -c /root/.swatchrc -t /var/log/messages >/dev/null 2>&1 &
RETVAL=$?
echo
;;
stop)
echo -n "Stopping Swatch: "
killproc tail
RETVAL=$?
echo
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
status)
ps -ax | grep -E [n]/swatch
;;
*)
echo "Usage: swatch {start|stop|status|restart}"
exit 1
esac

サーバー起動時にswatchが自動起動するよう設定.

# /sbin/chkconfig --add swatch
# /sbin/service swatch start

起動を確認.

# ps ax | grep swatch
2251 pts/0 S 0:03 /usr/bin/perl /usr/bin/swatch -c /root/.swatchrc -t /var/log/messages
2252 pts/0 S 0:05 /usr/bin/perl /root/.swatch_script.2251
2261 pts/0 S+ 0:00 grep swatch

swatchのエントリーを見つけたら成功!

(4) root宛てメールのaliasを設定

今までの設定ではメールは全てroot宛てに送られるが,aliasをきちんと設定しないと受け取れない.私の場合,サーバーにログオンするアカウントはendoで,メールアカウントもendoを使用している.root宛てメールはendoに転送しよう./etc/postfix/aliasesを編集.
一番末尾にrootのエイリアスのエントリがある.

#vi /etc/postfix/aliases

.
.
.
# trap decode to catch security attacks
decode: root

# Person who should get root's mail
root:
endo

エイリアス更新

# /usr/sbin/postalias /etc/postfix/aliases
# newaliases
# /sbin/service postfix restart

いったんサーバーを再起動してみよう.するとendo宛てにメールが送られる.メールサーバーの設定が適切になされていれば,「再起動が掛かった」という通知メールを受け取ることが出来るはずだ.

(5) ログローテート対策

swatchは現在アクティブなログを監視するのだが,ログローテートでログファイルが書き変わった後も古いファイルを追いかける,という欠点があるらしい.これを防ぐため,ログローテートのあとにswatchを再起動する./etc/logrotate.d/syslogに1行追加.

# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/etc/rc.d/init.d/swatch restart
endscript
}

これにて終了.お疲れ様.

13. OpenVPNによる仮想hub設置

我が研究室のCFD(数値流体力学)計算用クラスタ,実はこれにはディスプレイ,キーボードがついていない.操作はVNC接続で他の端末から遠隔操作している.このとき,ネットワーク構成は下図のとおり.


CFD実行用クラスタと操作用端末のネットワーク構成

クラスタを構成するPCと操作用端末は全てWindows2000のNATサーバーからIPアドレスをもらい,外部へはNATサーバー経由で出て行く.この構成なら,操作用端末からクラスタの各ノードが「見える」ため,VNCでのリモート操作が可能だ.ところが,この構成だと,NATサーバーの外側,東海大学学内LANにぶら下がっている他のPCからはクラスタPCが「見えない」.従って操作は特定の端末まで行って行う必要があった.しかし,この状況を変える,うまい解決方法が見つかった.それが仮想プライベートネットワーク(VPN)ソフトウェアによる仮想hub設置である.

VPNとは,本来の目的は離れた2拠点間のローカルネットワークを,インターネットを介してあたかも一つのローカルネットの様に結ぶ技術で,インターネットを経由するパケットは暗号化されるので安心して2拠点間を結ぶことが出来る.今回はこのVPNソフトウェアを使い,CFD実行用PCと操作用端末が物理的に同じhubに繋がっていなくとも,同じ仮想hubで結ばれた状態を作り,遠隔操作を可能にする.

VPNソフトウェアにも幾つか種類があって,有償のものもあればオープンソースのものもある.調べた結果,最も優れているのが「OpenVPN」というオープンソースのソフトウェアということになった.今回はOpenVPNを使い,仮想hubを設置してNAT越えにPCを遠隔操作する方法について解説する.

仮想hubを使い,CFD実行用PCが学内の任意の場所に置かれた端末から操作できるようになった状態のネットワーク構成を下に示す.


VPNによる仮想LANを構成したネットワーク構成

研究室にあるVine Linux4.2の汎用サーバーをVPNサーバーに仕立てる.するとマシンの中に仮想のhubが構成される.CFD用クラスタ,操作用端末にはそれぞれVPNクライアントをインストールする.すると,各ノードに仮想LANカードが構成される.あとは,クライアントの設定ファイルでVPNサーバーに接続するよう設定すれば,全てのクライアントは仮想のLANケーブルで一つのhubにつながれた状態が実現する.このとき,仮想LANカードのIPアドレスはVPNサーバーにより配られる.この状態なら,離れた場所にある端末からCFD用マシンを操作することが出来る.では,早速インストール手順について説明しよう.

(1)VPNサーバーのインストール

OpenVPNのサイトからファイルをダウンロード,展開してインストールする.09年2月現在のテストリリースは2.1RC15.公式バージョンは未だ2.0.9だが,前から2.11のベータ版を使っていて特に問題はなかったのでRC版を使用する.まずは,lzoライブラリのインストール.これはVPN通信時にパケットを圧縮するライブラリだ.

# cd /root
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz
# tar zxvf lzo-2.02.tar.gz
# cd lzo-2.02
# ./configure
# make
# make install
# cd ..

続いて,OpenVPNのインストール.lzoライブラリがコンパイル時に有効になるためには下のオプションを指定する必要がある.

# wget http://openvpn.net/release/openvpn-2.1_rc15.tar.gz
# tar zxvf openvpn-2.1_rc15.tar.gz
# cd openvpn-2.1_rc15
# ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
# make
# make install

ここで,OpenSSL Cryptoがないよ,というエラーが出たら下のコマンドを試してみるとよろし.

# apt-get -y -f install openssl-devel

起動テスト.

# /usr/local/sbin/openvpn

起動オプション一覧が出ればインストールはとりあえず成功.

(2)各種設定ファイルのコピー

まずは,OpenVPNをサーバー起動時に自動起動するスクリプトをコピー,有効にする.

# cp sample-scripts/openvpn.init /etc/rc.d/init.d
# /sbin/chkconfig --add openvpn.init

サーバー設定ファイルをOpenVPNで一般的に用いられるディレクトリにコピー.

# mkdir /etc/openvpn/
# cp sample-config-files/server.conf /etc/openvpn

鍵作成用シェルスクリプトを/etc/openvpn下にコピー.

# mkdir /etc/openvpn/easy-rsa/
# cp -r easy-rsa/2.0/* /etc/openvpn/easy-rsa
/

(3)CA認証局の構築,鍵の作成

まずファイルvarsを編集,入力時の省略が可能なようにする.

# vi /etc/openvpn/easy-rsa/vars

※ファイル末尾を以下のように編集

export KEY_COUNTRY=
JP
export KEY_PROVINCE=
Kanagawa
export KEY_CITY=
Hiratsuka
export KEY_ORG=
"Tokai University"
export KEY_EMAIL=
"endo@tokai.ac.jp"

もちろん,編集内容は各自の環境によって異なる.続いてbuild-caを実行してCA証明書およびCA秘密鍵を作成.

# cd /etc/openvpn/easy-rsa/
# . ./vars
# ./clean-all
# ./build-ca

※すると以下の様に対話モードになる.全てデフォルトでOK.

Generating a 1024 bit RSA private key
.....................................................................................................................................++++++
..........................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:[Enter]
State or Province Name (full name) [Kanagawa]:[Enter]
Locality Name (eg, city) [Hiratsuka]:[Enter]
Organization Name (eg, company) [Tokai University]:[Enter]
Organizational Unit Name (eg, section) []:[Enter]
Common Name (eg, your name or your server's hostname) [Tokai University CA]:[Enter]
Name []:[Enter]
Email Address [endo@tokai.ac.jp]:
[Enter]

できたキーを/etc/openvpnへコピー

# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.key /etc/openvpn

(4)サーバー証明書,秘密鍵の作成

# . ./vars
# ./build-key-server server

※すると以下の用に対話モードになる.全てデフォルトで「Enter」.最後の質問は[y/n]なので注意.

Generating a 1024 bit RSA private key
.....++++++
.......++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
[Enter]
State or Province Name (full name) [Kanagawa]:
[Enter]
Locality Name (eg, city) [Hiratsuka]:
[Enter]
Organization Name (eg, company) [Tokai University]:
[Enter]
Organizational Unit Name (eg, section) []:
[Enter]
Common Name (eg, your name or your server's hostname) [server]:
[Enter]
Name []:
[Enter]
Email Address [endo@tokai.ac.jp]:
[Enter]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
[Enter]
An optional company name []:
[Enter]
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Kanagawa'
localityName :PRINTABLE:'Hiratsuka'
organizationName :PRINTABLE:'Tokai University'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'endo@tokai.ac.jp'
Certificate is to be certified until Feb 8 00:49:38 2019 GMT (3650 days)
Sign the certificate? [y/n]:
y[Enter]


1 out of 1 certificate requests certified, commit? [y/n]
y[Enter]
Write out database with 1 new entries
Data Base Updated

できたキーを/etc/openvpnへコピー

# cp /etc/openvpn/easy-rsa/keys/server.crt /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/server.key /etc/openvpn

(5)Diffie Hellman(DH)パラメータの生成

# ./build-dh

結構待ちます.出来たキーを/etc/openvpnへコピー

# cp /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn

(6)サーバー設定ファイルの編集

赤字のところがデフォルトの設定ファイルからの変更点.ほとんど変更無しでオッケー.150.7.xx.xxがサーバーのグローバルipアドレス.

#################################################
# Sample OpenVPN 2.0 config file for #
# multi-client server. #



local 150.7.xx.xx


# TCP or UDP server?
proto tcp
;proto udp


# the firewall for the TUN/TAP interface.
dev tap
;dev tun



# will also need to appropriately firewall the
# server's TUN/TAP interface.
client-to-client


tcp/udpはtcpを選択する.tcp over tcpとなり接続速度が極端に遅くなるが,これが,NATを越えてアクセス可能にするための必要条件.これに気がつくまで相当苦労した.

dev tapの選択はtunでも構わないのだが,tapを選択しておくとipアドレスの選択が割合自由になる.Phoenics0-8に連続したipアドレスを割り当てたいのでここはdev tapを選択.dev tunを選択するとクライアントのipアドレス選択に制限が生じるので注意.詳しくはこちらを参照のこと.なお実測したがパフォーマンスは変わらなかった.

早速,起動してみましょう.

# /sbin/service openvpn.init start

Starting openvpn: [OK]

(7)ファイヤーウォール設定

サーバをファイヤーウォール有効でセットアップしているので,新しいサービスを導入するたびに穴を開けて行かなくてはならない.以下は,150.7.__.__から来たOpenVPN宛の接続要求を許し,tap+インターフェースからの着発信は全て通す設定.

# /sbin/iptables -I RH-Firewall-1-INPUT 6 -s 150.7.0.0/16 -p tcp --dport 1194 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 6 -s 192.168.0.0/16 -p tcp --dport 1194 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 6 -i tap+ -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 6 -o tap+ -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

これでルールの6番目に設定が加わったはず.

(8)クライアント証明書,秘密鍵の作成

要領はサーバー秘密鍵と同じ.キー名はクライアントPCの名前にすると良いでしょう.ここではclient1とする.

# . ./vars
# ./build-key client1

手順はserverのキー作成と同じで,[Enter]だけタイプしておけばOK.最後だけ[y/n]なので注意.

出来た鍵,ca.crt,client1.crtとclient1.keyをフロッピーディスクなどを使いクライアントPCへコピーする.

(9)クライアントPCへのOpenVPNインストール

ダウンロードサイトから,2.1RC15のWindows版インストールファイルをダウンロード,インストールする.オプションは全てデフォルトでオッケー.インストールが完了すると新しいLANカードがインストールされ,ネットワークに繋がっていないことを示すアイコンがタスクトレイに現れる.

(10)クライアント設定ファイルの編集

C:\Program Files\OpenVPN\sample-configに「client.ovpn」というサンプルファイルがある.これをC:\Program Files\OpenVPN\configフォルダにコピー,編集.赤字のところがデフォルトの設定ファイルからの変更点.ほとんど変更無しでオッケー.

##############################################
# Sample client-side OpenVPN 2.0 config file #



# the firewall for the TUN/TAP interface.
dev tap
;dev tun


# on the server.
proto tcp
;proto udp



# to load balance between the servers.
remote 150.7.xx.xx


# file can be used for all clients.
ca ca.crt
cert client1.crt
key client.1key


# script in the easy-rsa folder will do this.
;ns-cert-type server


「remote」エントリは当然VPNサーバーのIPアドレス.キーファイル,証明書ファイル名はサーバーで作成したものに変更する.

(11)クライアント起動テスト

サーバーから持ってきたca.crt,client1.crt,client1.keyをC:\Program Files\OpenVPN\configにコピー.

「マイコンピューター」アイコンを右クリック,「管理」→「サービスとアプリケーション」→「サービス」と辿っていって「OpenVPN Service」をダブルクリック.下のようなウィンドウが表れる.

サービスを「開始」すると,タスクトレイのネットワーク切断アイコンが接続中にかわり,しばらくするとネットワーク接続が完了する.上手くいかないときはC:\Program Files\OpenVPN\logディレクトリのログを確認しましょう.

接続が上手くいったら「スタートアップの種類(E)を「自動」にしておけば,PC起動時に自動的にVPNサーバーへ接続に行く.Windowsのコマンドプロンプト(DOS窓)で「ping 10.8.0.1」と打ってみよう.返事が返ってきたら,それはVPNサーバーに接続が完了している証拠.あとは,(7)〜(10)の手続きをくり返せば,幾らでもクライアントをつなぎ込んで行くことが出来る(鍵はクライアントごとにユニークな名前で作成すること).そして,クライアント同士は「ping クライアント名」でpingが通るようになっている.

これで終了.お疲れ様.

(12)追記:クライアントのIPアドレス制御

上記設定ではipアドレスはサーバーが自動的に付与することになっているが,このipを任意に指定する裏技がある.サーバーの/etc/openvpn/ipp.txtファイルにはクライアントの名前とipアドレスがテーブルになっている.これを書き換え,サーバー,クライアントの順に再起動すれば書き換えた内容が有効になる.ただしサーバー設定ファイルの「fconfig-pool-persist ipp.txt」が有効になっていること.

14. Apache2の起動および設定

Vine Linux4.2は標準で入っているwebサーバーがApache2.2になった.そのため,旧サーバーの設定をそのまま引き継ぐことが出来ない.またwebminのapacheモジュールもApache1.3をコントロールするようになっているのでこのままでは不便極まりない.まずは今までのようにwebminからApache2.2を設定出来るようにしよう.

Webminを開き,[サーバ]→[Apache Webサーバ]を開く.すると「Apacheサーバの実行可能ファイル /usr/sbin/httpd が存在しません。」と出る.Apache2はもはやhttpdという名前では動いていない.とりあえず「モジュールの設定」をクリック.以下のように設定する.

「Apacheサーバのルートディレクトリ」→/etc/apache2
「httpdの実行可能ファイルのパス」→/usr/sbin/apache2

あとは全て「自動」をチェック.OS起動時にApache2が起動する設定はコマンドラインで

# /sbin/chkconfig apache2 on

だ.

Apache1と2ではconfig fileの場所も書式も大きく違う.Apache2のhttpc.confの場所は/etc/apache2/conf/に変わった.

あと大きな変化として挙げられるのは,デフォルトのwebディレクトリが/home/httpd/html/から/var/wwwに変わったこと.これは好みの問題だと思うが,私は旧サーバーの設定をなるべく受け継ぐようにした.

webページと同じディレクトリに置かれたcgiを実行可能にする設定は以下の通り.標準のhttpd.confから変えたところだけをピックアップする.

264 ServerName alpha0.sp.u-tokai.ac.jp:80
280 DocumentRoot /home/httpd/html
305 <Directory /home/httpd/html>
319 Options Indexes Includes FollowSymLinks MultiViews ExecCGI
333 XBitHack on
369 <Directory /home/httpd/html/*>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews IncludesNoExec ExecCGI
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order deny,allow
Deny from all
</Limit>
</Directory>
538 Alias /icons/ /home/httpd/icons/

<Directory /home/httpd/icons>
563 ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
569 <Directory /home/httpd/cgi-bin>
AllowOverride None
Options ExecCGI
777 AddHandler cgi-script .cgi
798 AddHandler server-parsed .shtml
837 Alias /error/ /home/httpd/error/

<IfModule mod_negotiation.c>
<IfModule mod_include.c>

<Directory /home/httpd/error>

これで旧サーバーの環境を引き継ぎ完了.

追記:日本語URLへの対応

研究室サーバーの用途の一つとして,どうしても日本語のファイル名を持った各種ファイルへのリンクを貼りたい.Apache 1.3で出来ていたことが2.2になったら出来なくなった.いろいろ調べたところ,このサイトにある手順通りにmod_encodingを導入すれば良いことが判明.しかし,面倒だねえ.

(1) WebDAV Resources JPからApachemod_encodingとApache 2.2用パッチをダウンロードして展開

# cd /root
# wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz
# wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616
# tar zxfv mod_encoding-20021209.tar.gz
# cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c

(2) iconv_hookのインストール

# cd mod_encoding-20021209/lib
# ./configure
# make
# make install

(3) ライブラリリスト更新

# vi /etc/ld.so.conf
/usr/X11R6/lib
/usr/local/lib (追記)

#/sbin/ldconfig

(4) apache2-develのインストール まだ導入していない人は必須.以下でapxsを使うので.

# apt-get install apache2-devel

(5) mod_encodingのインストール (mod_encodingを素直に導入すると,他のソフトで問題が起こるらしいのでパッチをあてる)

# cd /root/mod_encoding-20021209
# wget http://www.aconus.com/~oyaji/faq/mod_encoding.c-apache2.2-20060520.patch
# patch -p0 <mod_encoding.c-apache2.2-20060520.patch
# ./configure --with-apxs=/usr/bin/apxs --with-iconv-hook=/usr/local/include
# make
# gcc -shared -o mod_encoding.so mod_encoding.o -Wc,-Wall -L/usr/local/lib -Llib -liconv_hook
# cp mod_encoding.so /etc/apache2/modules/

(6) httpd.confの編集 だいたい,似たようなグループの所に挿入するとあとでわかりやすい.

# vi /etc/apache2/conf/httpd.conf


(199行めくらい)
LoadModule encoding_module modules/mod_encoding.so


(555行めくらい)
<IfModule mod_encoding.c>
EncodingEngine on
SetServerEncoding EUC-JP
DefaultClientEncoding JA-AUTO-SJIS-MS SJIS
AddClientEncoding UTF-8 "Mozilla .* Linux"
</IfModule>

(7) Apacheをリスタート 

# /sbin/service apache2 restart

結構たいへんな作業だった.

管理人へのメール