Vine Linux 5.2 Install Memo11/03/18版

研究室のLinuxサーバー群をインストールする際の備忘録として立ち上げたこのページだが,今回が第5版となる.前回,OS導入作業を行ったのが1年前,そのときはVine Linuxは5.1だった.5.1から5.2へのアップデートはapt getで自動的にできてしまうのだが,今回はサーバーのうち1台のハードウェアを入れ換える必要があったため,クリーンインストールを行う..

というわけで,これは,これからAT コンパチブルのデスクトップ機にVine Linux5.2をインストールしてサーバーを構築する人達に少しでも役立てればと思い,実際に成功した手順を記したものである.マシン構成はごく一般的なPentium 4以降の世代,Windows XPが動く程度のスペックだ.インストールディスクを読み込むDVD-ROMドライブが利用できるとしよう.

ちょうど一週間前に東北・関東大震災があった.今,このページを書いている最中も計画停電が連日続いており,福島第一原発もまだ冷却に成功していない.被害に遭われた方々にお見舞い申し上げるとともに,生涯忘れられない大災害がこのときに起こっていたことをここに記しておきたい.

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

2. インストール作業

3. ホスト名の確認および変更

4. aptのアップデート

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

6. webminのインストール

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

8. DHCPとNATの設定

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

10. ntp daemonのインストール

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

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

13. swatchによるログ監視

14. OpenVPNによる仮想hub設置

15. Apache2の起動および設定

16. (おまけ) HDDの入れ換え


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

Vine Linuxのサイトでインストールディスクのイメージを配布している.無償のOSにもかかわらず絶え間ないメンテナンスとアップグレードがされている.関係者に感謝しつつダウンロード.さすがに,「CD一枚」を謳ったVineもソフトウェア肥大化の波には抗えず,Ver. 5からはDVD-ROMイメージによる配布となった.

今回は,たまたま購入した日経Linux 2011年2月号付録ディスクを使用.

2. インストール作業

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

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

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

3. ホスト名の確認および変更

インストーラーに癖があり,LANカード二枚差しの場合に指定したホスト名が反映されない場合があった.再現性はないので「どうして」そうなったかは不明.とりあえず,ここでいったん立ち止まって確認,ホスト名が設定されていなければここで設定する.

ツールバーから[システム]→[システム管理]→[ネットワーク]を開く.

[DNS]タブの[ホスト名]が「localhost.localdomain」になっていたら「Alpha3」に変更.

/etc/hostsの編集.「Alpha3」が無かったら加える.

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

4. aptのアップデート 

ルートでログオン,コンソールウィンドウを開いてaptのオプションを変更する.ここは5.x系列から大きく変わった.以前は「/etc/apt/sources.list」を編集する必要があったのだが今回は必要なし.

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

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

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

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

# apt-get dist-upgrade

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

# uname -r

カーネル更新の履歴を知りたければ

# rpm -q kernel

とタイプ.

6. webminのインストール

webminのインストール.

# apt-get install webmin

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

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

# gedit /etc/webmin/miniserv.conf

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

私は学生時代から20年このかた,UNIX系OSのコンソール画面でエディタといえばviを使っている.ところが,以前Vineのインストールを学生に手伝って貰おうとしたら「viが使えません」と来た.どうせ,コンソール画面もグラフィカルUIから開いているので,時代の流れに流されよう.geditは現代的UIを持つテキストエディタで,ここで必要なファイルの書き換え程度ならマニュアルを読む必要もない.

# /etc/webmin/restart

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
# service iptables restart

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

# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.4 on Mon Apr 5 19:15:32 2010
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16687:1097954]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Apr 5 19:15:32 2010

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

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

aptでインストール.

# apt-get install vnc-server

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

#su endo
$ cd
$ 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アドレスを制限しないとセキュリティ上問題となる.この作業はスーパーユーザーで.

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

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

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

おそらく下のようなエラーメッセージが表示され,デスクトップは見えないはずだ.ここはこのまま閉じてよし.

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

ツールバーから[システム]→[システム管理]→[ログイン画面]を開く.

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

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

# su endo
$ vncserver -kill :1

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

$ exit
# /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番目に設定が加わったはず.

次に進む.はじめにサービス一覧に二つのエントリを追加.それぞれ「vnc-small」と「vnc-large」としよう.

# gedit /etc/services

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

xinetdはinetdと設定作業が大きく異なる.xinetdの設定は,プロセスごとにファイルを作りそこに設定を書き込む様になった.従って,今回は"vnc-large"というファイルと"vnc-small"というフィアルを作る.

/etc/xinetd.d/vnc-smallというファイルを作り,以下の内容を記述する.

service vnc-small
{
socket_type = stream
protocol = tcp
wait = no
user = nobody
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -once -geometry 1024x768 -depth 24 -SecurityTypes None
}

/etc/xinetd.d/vnc-largeも同様.smallとの違いはスクリーンサイズ.

service vnc-large
{
socket_type = stream
protocol = tcp
wait = no
user = nobody
server = /usr/bin/Xvnc
server_args = -inetd -query localhost -once -geometry 1280x1024 -depth 24 -SecurityTypes None
}

タイプするのが面倒な人に,vnc-largevnc-small

inetd,gdmを再起動.

# service xinetd restart
# gdm-restart

接続テスト.クライアントマシンでVNC Viewerを起動,「サーバーのIPアドレス(150.7.xx.xx):50」「サーバーのIPアドレス(150.7.xx.xx):51」の2つの設定が使用可能.50のときは1024x768のデスクトップが,51のときは1280x1024のデスクトップが現れる.

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

8. DHCPとNATの設定

このサーバーをDHCPサーバーとして,NATでクライアントからインターネットへアクセス出来るようにする.サーバーにするからには,ネットワークカードが2枚刺さっており,eth0が固定ip(150.7.xx.xx)でインターネットにアクセスできる状態と仮定する.eth1は"192.168.0.1"の固定ipアドレスで,起動時に有効になるよう設定を変更する.

ネットワーク設定を変更したらサービスを再起動する.

# service network restart

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

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

だ.とりあえず実行しよう.しかし,このコマンドはリブートする毎にリセットされてしまうので,スタートアップにも記述しておく必要がある./etc/rc.d/rc/localの最後に同じコマンドを記述しておく.

# gedit /etc/rc.d/rc.local

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

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

※Vine 4.2とはdhcpd.confの場所が違う.これに気づかず, 嵌ること小一時間.どうして,勝手にこう言うところを変えるかねえ.

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.DD.DD;
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を作り,これをUSBメモリにコピーして/etc/にコピーする.このサイトを設定中のサーバーから見ている人ならここからダウンロード

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

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

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

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

# service dhcpd start
dhcpdを起動中: [ OK ]
# 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
# service iptables restart

ここでいったんeth1にハブを接続,下流に適当なwindowsマシンを繋いでインターネットへアクセスできることを確認する.ここまではVine 4.2と大体同じなのだが,ここからが違う.Vine 5.xはネットワーク制御にNetworkManagerというものを採用した.ところが,コイツがくせもので,起動時にdhcpdサービスを開始することを妨げるのだ.いったんデスクトップが出てしまえばdhcpサービスを手動で起動することはできる.この,新しいトラブルに対処するため一日の時間を要した.

やっと見つけた解決策は,NetworkManagerを切って従来のnetworkサービスを自動起動させるよう設定を変更するとのこと.そんなのわかるかい!!

# chkconfig NetworkManager off
# chkconfig network on

どうして,OSを入れ換えるたびにこんな苦労をしなくてはならないのか.ぼやきの一つも出ようと言うものだ.サーバーを再起動して,起動画面でdhcpdが自動起動すれば成功!

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

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

ではスタート.まずはメール受信の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
完了

# /etc/init.d/xinetd restart

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

# /usr/sbin/popauth -init

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

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

$ exit

xinetdにqpopperのconfigがあることを確認.

# cat /etc/xinetd.d/qpopper | more
.
.



service pop3
{
flags = REUSE NAMEINARGS
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.qpopper
server_args = qpopper -s
instances = 50
disable = no
port = 110
per_source = 10
}



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

# /sbin/iptables -I RH-Firewall-1-INPUT 6 -p tcp --dport 110 -j ACCEPT
# /etc/init.d/iptables save
# 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を編集.以下の行のコメントを外す,あるいは内容を変更.

# gedit /etc/postfix/main.cf

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

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

# 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
data_directory = /var/lib/postfix
debug_peer_level = 2
default_privs = nobody
mail_owner = postfix
mail_spool_directory = /var/spool/mail
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = alpha3.sp.u-tokai.ac.jp
myhostname = alpha3
mynetworks = 127.0.0.0/8
myorigin = $mydomain
queue_directory = /var/spool/postfix
unknown_local_recipient_reject_code = 550

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

Postfixの再起動

# postfix reload

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

# telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 alpha3 ESMTP Postfix
quit
221 2.0.0 Bye
Connection closed by foreign host.

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

続いてSMTP-authのインストール.では始めよう.まずmain.cfをSMTP-auth対応に書き換える.以下の行を末尾に追加.

# gedit /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」を作り以下の内容を記述.

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

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

# /usr/sbin/saslpasswd2 -c -u `/usr/sbin/postconf -h myhostname` alpha3-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 alpha3 ESMTP Postfix
EHLO localhost
250-alpha3
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH CRAM-MD5 PLAIN DIGEST-MD5
250-AUTH=CRAM-MD5 PLAIN DIGEST-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

quit
221 2.0.0 Bye
Connection closed by foreign host.

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

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

10. ntp daemonのインストール

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

# chkconfig ntpd on

/etc/ntp.confを設定.

# gedit /etc/ntp.conf

server 133.100.9.2
server 133.41.4.2
server 133.31.180.6

※server 127.127.1.0の行の下に追加

ntpdを起動.

# service ntpd start

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

# ntpq -p


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

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

ML復旧時の苦い経験

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

作業はユーザーendoで行うパートとスーパーユーザーで行うパートがある.まずはユーザーendoでfmlディレクトリ,MLディレクトリを作成.endoのホームディレクトリで

# su endo
$ cd
$ mkdir fml
$ mkdir ml

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

$ exit
# gedit /etc/postfix/main.cf

allow_mail_to_commands = alias,forward,include

Postfixの再起動

# postfix reload

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

解凍する.

# su endo
$ cd
$ 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

途中の質問に対する回答は以下の通り.ドメイン名(alpha3.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]
alpha3.sp.u-tokai.ac.jp[Enter]
FQDN            [ml.hogehoge.jp]
alpha3.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@alpha3.sp.u-tokai.ac.jp宛てのメールを受け取れるようになる.

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

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

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

管理者アドレスの登録.

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

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

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

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

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

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

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

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

我が研究室では2005年ころから研究室ドメインを運用し,全員が全てのPC上で共通のデスクトップ環境を使えるようにしている.というわけで,サーバー入れ換えに伴い,Vine Linux 5.2をコントローラーにしてPDCを立てる手順を記述する.クライアントマシンがWindows 7の場合,Vine 4.xパッケージのSAMBAではドメインに参加できないことが判明している.

我が研究室の独特な使用条件から,以下の要件を満たすドメインを構築している.

なお,通常ドメインコントローラーは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 5.1以降,SAMBAは既にインストールされている.DVDだから余裕があるのか?バージョンは3.310145だ.

何はともあれ,ファイアーウォールに穴を開けねば.東海大の場合,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

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

[global]
dos filetimes = Yes
display charset = utf-8
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 = yes
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 = utf-8
domain logons = yes
store dos attributes = yes
ea support = yes

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

[profiles]
path = /home/samba/profiles
browseable = no
read only = no
create mask = 0611
directory mask = 0700
profile acls = yes
csc policy = disable
guest ok = yes

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

Vine 5.xからキャラクタセットがUTF-8になったのでunix charsetを変更する必要がある.

できたものがこちらにございます

SAMBAの起動.ここで,ついでにsmbサービスが起動時に自動スタートするよう設定する.

# service smb start
# chkconfig smb on

続いて,WebminでSAMBAユーザーとUnixユーザーの同期の自動化を設定する.ところがVine 5.2に組み込まれたWebminにはSAMBAモジュールが無い.左の検索ペーンで「samba」と入力.

一番上に出てきた「Samba Windows ファイル共有」をクリック.下の画面が現れるので「モジュール設定」をクリック.

モジュールの設定を以下のように書き換える.Vine Linuxは伝統的にSAMBA関係のファイルが他のディストリビューションと違うのだ.

一カ所,入力したテキストが隠れているところがあるが,「sambaパスワードファイル」の場所は「/etc/samba/smbpasswd」だ.保存すると,「Samba Shareマネージャ」という画面が現れ,SAMBAの設定が可能になる.「UnixとSambaユーザーの同期の自動化を設定」をクリック.

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

こうすると,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

続いて,マシンアカウントの作成.ドメインにぶら下がるマシンにユニークな名前を付け,Alpha3上にアカウントを作らないとドメインに参加できない.マシンはグループmachinesに割り当てる.ここでは,クライアント"VAPO"を割り当てている.アカウントの大文字/小文字は無視される(らしい)ので,ここでは全て小文字で設定.

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

Active Directoryの"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

最後に,ここで旧サーバーのDomain SIDがあるときは新サーバーを同じSIDで登録する必要がある.sambaモジュールを止めて,以下のコマンドを打ち込む.

# service smb stop
# net setdomainsid S-1-5-21-186xxxxxx8-10008xxxx9-280796xxxx

# net getdomainsid (確認)

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

# smbpasswd -a root

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

次に,ドメインユーザーをAlpha3に登録する.ユーザー名はbishopとしよう.パスワードはhogehoge.ここでWebminを使えばユーザーアカウントと同時にドメインアカウントが作成される.

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

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

さて,続いてクライアントPCをドメインに参加させてみよう.まずは,vapoにPDCの在処を教えてあげなくてはならない.PDCとクライアントが同じHubにつながっているなら問題はないのだが,ルーターを越えるためには明示的にWINSサーバーを指定してやらなくてはならない.

Windows 7:コントロールパネル→から「ネットワークと共有センター」→「アダプターの設定の変更」→「プロパティ」→「TCP-IPv4」→「詳細設定」→「WINS」
Windows XP:コントロールパネルから「ネットワーク」→「プロパティ」→「TCP-IP」→「詳細」→「WINS」

と辿っていくと下のウィンドウに到達する.ここに,PDCのアドレスを登録.

さて,ここでWindows 7はレジストリを弄らないとドメインに参加できないことが知られている.レジストリエディタを開こう.

変更するのは

"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters"で,ここに新しい32ビットDWORDエントリを二つ追加する.

続いて,

"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters"に存在する二つのエントリを変更.

面倒なのでレジストリファイルにしておいた.使用は自己責任で.

Windows 7:「コンピューター」→「プロパティ」→「コンピュータ名、ドメインおよびワークグループの設定」→「設定の変更」→「変更」
WindowsXP:「マイコンピューター」→「プロパティ」→「コンピュータ名」→「変更」

と辿って行き,「所属するグループ」を「ドメイン」の「ENDOLAB」に変更.

続く画面で「ユーザー名」にはrootを「パスワード」にはsmbpasswdで指定したパスワードを入力する.

ドメインに参加できると,以下のダイアログが出る.これでほとんどゴール寸前だ.しかしここで慌てない.

ウィザードを閉じると,再起動を促すダイアログが出る.ここで,再起動を掛ける前に再びレジストリを変更.先ほど変更した以下のエントリを元に戻す.

"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters"下,

Windows 7の場合以下のような警告ダイアログが出るが無視しても大丈夫.

ようやく再起動がかけられる.再起動後の画面は,下のように見慣れたWindowsログオン画面とちょっとちがう.

ここからはWindows XPとWindows 7でちょっと操作が違う.とにかくAlt-Ctrl-Delキーを叩く.

XPのログオン画面はこんな感じ.いつもと違い,画面の入力欄が3段になっている.ログオン先を「このコンピューター」から「ENDOLAB」に変更,ユーザー名(bishop)とパスワードを入力.

Windows 7は普段のユーザー名の下に「ユーザーの切り替え」というボタンが現れるのでこれをクリック.

すると,「他のユーザー」という空のアイコンが現れるはずだ.それを選択して,ユーザー名とパスワードを入力.ログオン先はENDOLABになっていることを確認.

全てが上手くいけば,Windowsデフォルトの「始めてのデスクトップ」が現れる.

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

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

これで終了.

追記:起動時にいちいち[Alt]+[Atrl]+[Del]を押すのが面倒くさい,という諸兄には以下のtipsを紹介する.「ファイル名を指定して実行」で(分からなければDOS窓から)「Control userpasswords2」とタイプ.「詳細設定」の「ユーザーが必ずCtrl+Alt+Delキーを押す」をチェックoffする.


13. swatchによるログ監視

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

(1) インストール

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

まずは簡易ブラウザlynxをインストール.

# apt-get install lynx

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

# perl -MCPAN -e shell

最初に以下のようなダイアログが出る.これにデフォルトの[yes]([Enter]キー)で回答すると,一気にインストールが終了してしまう.最後に,プロンプトが出たら「q」で抜ける.

If you prefer to enter a dialog instead, you can answer 'no' to this
question and I'll let you configure in small steps one thing after the
other. (Note: you can revisit this dialog anytime later by typing 'o
conf init' at the cpan prompt.)
Would you like me to configure as much as possible automatically? [yes]






cpan[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

時々,「インターネットに接続してもいいですか?」といった質問が出るがすべて[Enter]で解答しておけば自動で作業が進む.

続いて本体.11/03/18現在の最新版は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

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

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

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

# 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を元に以下のようなファイルを作成した.ホスト名はAlpha3,これは適宜変更のこと.

#
# 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=Alpha3 swatch report

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

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

watchfor /ruserok/
mail=root,subject=Alpha3 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=Alpha3 swatch report

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

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

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

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

watchfor /sshd:/
mail=root,subject=Alpha3 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が自動起動するよう設定.

# chkconfig --add swatch
# chkconfig swatch on
# 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のエントリーを見つけたら成功!

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

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

#gedit /etc/postfix/aliases




# trap decode to catch security attacks
decode: root

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

エイリアス更新

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

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

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

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

/etc/logrotate.d/sysklogdを編集,以下の行を追加.

# gedit /etc/logrotate.d/sysklogd

/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
}

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

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

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

OpenVPNのサイトからファイルをダウンロード,展開してインストールする.11年3月現在のテストリリースは2.1.4.まずは,lzoライブラリのインストール.これはVPN通信時にパケットを圧縮するライブラリだ.

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

ここで,OpenSSL Cryptoを入れておかないと次のステップでエラーが出る.

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

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

# wget http://swupdate.openvpn.net/community/releases/openvpn-2.1.4.tar.gz
# tar zxvf openvpn-2.1.4.tar.gz
# cd openvpn-2.1.4
# ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
# make
# make install

起動テスト.

# /usr/local/sbin/openvpn

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

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

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

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

# chkconfig openvpn.init on

サーバー設定ファイルを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はudpを選択する.かつてはここでtcpを選択しないとNATを越えてアクセスすることが出来なかった.しかし,Windows XP以降のOSにこの制限はないのでここはUDPを選択しよう.※UDP接続のほうが断然パフォーマンスが高い.

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

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

# 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 udp --dport 1194 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 6 -s 192.168.0.0/16 -p udp --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」が有効になっていること.

15. Apache2の起動および設定

Vine Linux4.2から標準で入っているwebサーバーがApache2.2になり,サービスもhttpdでなくapache2となった.今回は,幸いなことに大きな変化は無いようだ.webminからApache2.2を設定出来るようにしよう.

まずはモジュールのセットアップ.Webminを開き,左ペーンで「apache」を検索.

一番上に出てきた「Apache Webサーバー」をクリック.下の画面が現れるので「モジュール設定」をクリック.

モジュールの設定を以下のように書き換える.Vine Linuxは伝統的にApache関係のファイルが他のディストリビューションと違うのだ.

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

OS起動時にApache2が起動する設定はコマンドラインで

# chkconfig apache2 on

だ.

Apache2のhttpc.confの場所は/etc/apache2/conf/だ.

Apache2はデフォルトのwebディレクトリが/home/httpd/html/から/var/wwwだ.しかし,これは好みの問題だと思うが,私は旧サーバーの/home/httpdの方が好き.旧サーバーの設定を受け継ぐようにした.

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

264 ServerName alpha3.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からmod_encodingとApache 2.2用パッチをダウンロードして展開

※2010年にWebDAV Resources JPがSourceForgeに移行した.調査の結果,以下のことが判明.WrbDABの最新版,

http://sourceforge.jp/projects/webdav/downloads/19350/mod_encoding-20060316.tar.gz/

は,mod_encoding.c.apache2.20040616が既に取り込まれたバージョン.しかし,展開したルートフォルダにconfigureが無いため,通常の手続きではmakeできない.これを使うのは断念した.

結局,使用するファイルは「Vine Linux 5.1 install memo」と同様,以下の二つ.

http://sourceforge.jp/projects/webdav/downloads/13902/mod_encoding-20021209.tar.gz/
http://sourceforge.jp/projects/webdav/downloads/13905/mod_encoding.c.apache2.20040616/

これをブラウザでダウンロードした/root下に置く.

# cd /root
# tar zxfv mod_encoding-20021209.tar.gz
# cp mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c

※一応,ここにもミラーしておこう.
mod_encoding-20021209.tar.gz
mod_encoding.c.apache2.20040616

(2) iconv_hookのインストール

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

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

# gedit /etc/ld.so.conf

/usr/X11R6/lib
/usr/local/lib (追記)

更新を反映させる.

# 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の編集 だいたい,似たようなグループの所に挿入するとあとでわかりやすい.

# gedit /etc/apache2/conf/httpd.conf


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


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

(7) Apacheをリスタート 

# service apache2 restart

結構たいへんな作業だった.最終的なhttpd.confはこちら.サーバーのFDQNを書き換えないと動かないので注意.

16. (おまけ) HDDの入れ換え

システムディスクをdisk to diskでコピーして引っ越しするときの手順.

"Boot Problems Open Source Tools"のサイトからツールRescatuxをダウンロード.→直リンク

UNetbootin for Windowsをこちらのサイトからダウンロード.

空のUSBドライブを刺して起動する.

ISOファイルを指定して,USBドライブがUNetbootinから見えているかどうかを確認した上で「OK」.


書き込み中...

Linuxのシステムディスクは,適当なdisk to diskコピーツールで引っ越しをする.私の愛用ソフトはAcronis True Imageだ.使用バージョンは2009 Home.

USB driveから起動する.するとUNetbootinの起動画面が現れる."Live"を選択(AMD64ベースのPCの人はLive amd64だろう).

LinuxベースのRescatuxが起動する.ダイアログから"grub(+)"→"Restore Grub"→"Run"とクリック.


 

交換したHDDが見えたら,それを選択して「OK」.これでおしまい.再起動を掛けると新しいHDDでVine Linuxが立ち上がる.

管理人へのメール

Vine linux 3.1 Install Memo

Vine linux 3.2 Install Memo

Vine linux 4.2 Install Memo

Vine linux 5.1 Install Memo