Vine Linux 3.2 Install memo06/03/29版

 昨年,研究室の2台のサーバーをVine Linux2.6から3.1へ入れ替えたときに立ち上げたこのページ.その後Linuxのバージョンが3.2に上がり,情報がいささか古くなってきた.そこで,タイトルも「Vine Linux 3.2 install memo」とし,実際に3.2をインストールした手順にしたがってアップデートした.

※3/29にサーバーの1台が謎のクラッシュ.再インストールを機会に情報を更新.

 これは,これからAT コンパチブルのデスクトップ機にVine Linux3.2をインストールしてサーバーを構築する人達に少しでも役立てればと思い,実際に成功した手順を記したものである.マシン構成はごく一般的な,Pentium IIやIIIでWindows2000が動いていたヤツだ.HDDはもちろんパラレルATA.スレーブにインストールディスクを読み込むCDがついているとしよう.

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

2. インストール作業

3. aptのアップデート

4. webminのインストール

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

6. DHCPとNATの設定

7. メールサーバー(Postfix)の設定

8. ntp daemonのインストール

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

10. カーネルのアップデート

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

12. アンチウィルスソフトの導入 06/02/02追加

13. hosts.allow/denyの設定 06/02/04追加

14. swatchによるログ監視 06/02/06追加

15. OpenVPNによる仮想hub設置 06/03/28追加


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

 Vine Linuxのサイトで,イメージディスクを配布している.i386アーキテクチャ用CDイメージが,たとえばここにある.ファイル名はVine32-i386.isoだ.これを,B'sなどのツールでイメージのまま焼けば,インストールディスクのできあがり.

2. インストール作業

 驚くほど簡単にできる.パーティション作成も全部お任せでフルインストール.しかも,ダイアログは日本語だし,驚くほどマイナーなビデオカードも認識する.ここで嵌る可能性としては,

どちらも,わりと新しいマシンを使っていればまず問題なし.両方嵌った私はなんなのだろう.

3. aptのアップデート 

aptのオプションを変更,extrasを読み込む設定にする.

# vi /etc/apt/sources.list

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

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


4. webminのインストール

webminのインストール.

# apt-get install webmin

ローカルからwebminにアクセスし,アクセステスト.アドレスは「https://127.0.0.1:10000/」

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

# vi /etc/webmin/miniserv.conf

allow=127.0.0.1 xxx.xxx.xxx.xxx
※リモート端末のipを追加

# /etc/webmin/stop
# /etc/webmin/start

任意のwebブラウザから,https://[Vine Linuxのip]:10000でアクセステスト.これで,ログインダイアログが出たら成功.お疲れ様.

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

 まずはパッケージの入手.今回はプレリリース版1.3dev7でのインストール方法について紹介する.1.2.9ももちろん試したが,大きな違いはない.

ダウンロードサイト:http://www.tightvnc.com/download.html.ダウンロードするのはtightvnc-1.3dev7-1.src.rpm.

source RPMからリビルド.まず,ライブラリパッケージをインストールする.,

# apt-get build-dep glibc
# apt-get build-dep gd

改めて,source RPMのリビルド.

# wget http://jaist.dl.sourceforge.net/sourceforge/vnc-tight/tightvnc-1.3dev7-1.src.rpm
# rpm --rebuild tightvnc-1.3dev7-1.src.rpm
# rpm -Uvh /root/rpm/RPMS/i386/tightvnc-server-1.3dev7-1.i386.rpm

これでインストール完了.続いて環境のコピーと動作テスト.ユーザーレベルに降りて,まずは環境のコピー.

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

起動確認

$ vncserver

You will require a password to access your desktops.
Passwd:
Verify:
※VNCログオンのパスワード.Linuxログオンとは別物なので,違うパスワードを設定した方がセキュリティー上有利.

いったん終了.

$ vncserver -kill :1

続いて,VNCクライアントからリクエストがあったら自動的にサーバーが立ち上がるようにinetdを設定する.

# vi /etc/services

vnc-800x600x8 5950/tcp
vnc-800x600x16 5951/tcp
vnc-1024x768x8 5952/tcp
vnc-1024x768x16 5953/tcp

※末尾に追加

# vi /etc/inetd.conf

vnc-800x600x8 stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/Xvnc -inetd -query xxx.xxx.xxx.xxx -once -geometry 800x600 -depth 8 -cc 3 -fp unix/:7100 -co /usr/lib/X11/rgb
vnc-800x600x16 stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/Xvnc -inetd -query xxx.xxx.xxx.xxx -once -geometry 800x600 -depth 16 -fp unix/:7100 -co /usr/lib/X11/rgb
vnc-1024x768x8 stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/Xvnc -inetd -query xxx.xxx.xxx.xxx -once -geometry 1024x768 -depth 8 -cc 3 -fp unix/:7100 -co /usr/lib/X11/rgb
vnc-1024x768x16 stream tcp nowait nobody /usr/sbin/tcpd /usr/bin/Xvnc -inetd -query xxx.xxx.xxx.xxx -once -geometry 1024x768 -depth 16 -fp unix/:7100 -co /usr/lib/X11/rgb

※末尾に追加.xxx.xxx.xxx.xxxはサーバーのipアドレスを入力.

inetdの再起動.

# /etc/rc.d/init.d/inet restart

/etc/hosts.allowを編集する.

# vi /etc/hosts.allow

Xvnc:ALL
※追加

続いて,ログイン設定の変更./etc/X11/gdm/gdm.confの以下の部分を編集して有効化する.

# vi /etc/X11/gdm/gdm.conf

Enable=1
KillInitClients=0

接続テスト.TightVNCを起動,「ipアドレス:50」「ipアドレス:51」「ipアドレス:52」「ipアドレス:53」の4つの設定が使用可能.

キーボードの"l"が打てないバグ修正./etc/X11/xinit/Xmodmap.jpのkeycodeの22をコメントアウトする.

# vi /etc/X11/xinit/Xmodmap.jp
#keycode 22 = BackSpace

お疲れ様でした.

6. DHCPとNATの設定

 このサーバーをDHCPサーバーとして,NATでクライアントからインターネットへアクセス出来るようにする.これはwebminを使い,ブラウザから操作.サーバーにするからには,ネットワークカードが2枚刺さっており,eth0が固定ipでインターネットにアクセスできる状態と仮定する.

 リモートクライアントでログオンしたら,まずはパッケージをアップデートしておこう.


ネットワークカードeth1の設定.
「ネットワーク設定」に入る.


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


「ルーティングとゲートウェイ」の画面で,「ルーターとして動作させますか?」を「はい」にする.

続いて,dhcpパッケージの導入.「ソフトウェアパッケージ」に入る.


APTからのパッケージに「dhcp」を入力,インストール.

インストール完了.

続いて,DHCPサーバーの設定.

「クライアント・オプションを編集」をクリック

デフォルトオプションの設定は二カ所.ダイナミックDNSの更新形式をアドホックに,未確認クライアントを許可にする.

新規のサブネットを追加.

サブネット作成.

クライアントオプションの設定.DNSサーバーはネットワークによって異なるので管理者に問い合わせる.

「ネットワークインターフェースを編集」に入り,

待ち受けインターフェースをeth1にセット.


「起動及びシャットダウン」画面でdhcpdを選び,

「起動時に開始しますか?」を「はい」にして「保存」する.これで,起動時に自動的にdhcpdが立ち上がる.

続いて,ファイアーウォールの設定.


「外部インターフェースでネットワークアドレス変換をする」を選び,「ファイヤーウォールを設定」をクリック.


ルーティング処理前のルールを追加.


設定が上手くいくとこうなる.続いて,ルーティング処理後のルールを変更.


「IPの範囲」に,サーバーのeth0のIPアドレスを入力.


成功するとこうなる.

 これで終了.eth1にハブを接続,下流に適当なwindowsマシンを繋いで,インターネットへアクセスできれば成功!

7. メールサーバー(Postfix)の設定

 今までのサーバーはqmailだったが,せっかくPostfixが初めから入っているので,今回はこっちを使うことにした.使ってみるとこっちの方が癖が無く設定は易しい.SPAM対策はpop before smtpと弱い.これは,研究室メンバーににOutlook Expressを使っている人が多い(私もそうだ)ためで,OEは未だにAPOPもSMTPAuthにも対応していない.裏技的な解決方法はあるらしいが,何とかしてよ,MSさん.

こんどは,こちらのサイトの情報にお世話になった.

# apt-get update
# apt-get install dracd db4 db4-devel db4-utils pam-devel gdbm-devel

※参照サイトはpam認証を前提とした設定だが私は使わない(使えない)ので普通のpop3認証.

portmapサービスを起動

# /etc/init.d/portmap start

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

# /sbin/chkconfig portmap on

dracの設定:設定値を確認.

# cat /etc/mail/dracd.allow

この時「255.255.255.255 127.0.0.1」の1行だけ記述があるかを確認.

rc.dracdの書き換え.

# vi /usr/sbin/rc.dracd

/usr/sbin/rpc.dracd -e 10 &
※10がipアドレスを保存する時間(min).ここはお好みで.10分だと,のんびり返事を書いているウチにタイムアウトになることもあるが,安全優先で.

dracサービスを起動

# /etc/init.d/dracd start

サーバ起動時にdracを起動させる.

# /sbin/chkconfig dracd on

qpopperをdracオプション付きでインストールするため,qpopperがインストール済みならアンインストールしておく.

# rpm -e qpopper

ソース「qpopperX.X.X.tar.gz(X.X.Xはバージョン番号)」を取得.http://core.ring.gr.jp/archives/net/mail/qpopper/がおすすめ.

ダウンロードした「qpopper4.0.8.tar.gz」を解凍.

$ wget http://core.ring.gr.jp/archives/net/mail/qpopper/qpopper4.0.8.tar.gz
$ tar zxvf qpopper4.0.8.tar.gz
$ cd qpopper4.0.8

configure,makeする.

$ ./configure \
--prefix=/usr \
--mandir=/usr/share/man \
--enable-bulletins=/var/spool/mail/bulletins \
--with-popuid=pop \
--enable-drac
$ make

qpopperのアカウント(pop)を作る.

$ su
# /usr/sbin/groupadd -g 110 pop
# /usr/sbin/useradd -c "Pop Account" -u 110 -g 110 -s /bin/false -r -d /var/spool/mail pop

インストール.

# make install
# mkdir /var/spool/mail/bulletins

/etc/hosts.allowを編集して、以下の行を追加

# vi /etc/hosts.allow

popper: ALL

inetd.confの編集

# vi /etc/inetd.conf

pop-3 stream tcp nowait root /usr/sbin/tcpd popper

inetデーモンを再起動

# /etc/init.d/inet restart

Postfixの設定ファイル,/etc/postfix/main.cfを編集.

# vi /etc/postfix/main.cf

mydomain = hogehoge.org
myhostname =
hoge.hogehoge.org
mydestination =
$myhostname, localhost.$mydomain $mydomain
mynetworks =
127.0.0.0/8 check_client_access btree:/etc/mail/dracd
relay_domains =
$mydestination

Postfixの再起動

# /usr/sbin/postfix reload

dracdの動作確認

  1. Outlook expressでアカウント作成,POP認証してみる.
  2. サーバー側で以下のコマンドを打ち込む.
    # db_dump -p /etc/mail/dracd.db
    この時,クライアントのipが表示されれば成功.
  3. 指定した時間待って,再び
    # db_dump -p /etc/mail/dracd.db
    を実行,ipアドレスが消えていれば成功.

メール送受信テスト.中継メール(サーバー以外の宛先)を試してみて,送ることが出来れば成功.

不正中継テスト.http://www.rbl.jp/の「第三者中継チェック」をクリック.ホスト名を入力.テスト終了まで10分以上かかるので辛抱強く待つ.テストに合格すればセットアップ完了.お疲れ様でした.

8. ntp daemonのインストール

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

# /sbin/chkconfig --add ntpd
# /sbin/chkconfig ntpd on

/etc/ntp.confを設定.

# vi /etc/ntp.conf

server 133.100.9.2
server 133.41.4.2
server 133.31.30.8

※server 127.127.1.0の行の下に追加

ntpdを再起動.

# /etc/rc.d/init.d/ntpd restart

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

# /usr/sbin/ntpq -p 


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

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

ML復旧時の苦い経験

 研究室サーバーの主要な役割として,MLサーバーがある.今回はfmlをPostfixと連携させる方法でインストールしよう.この方が管理がやりやすいので,fmlはいつもユーザーendoの下にインストールしている.fml8はroot権限で動くらしいが,fml4は一般ユーザー権限で動く.

まずは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をダウンロード.

解凍する.

$ 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

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

Personal Use or ML-Admin-Group-Shared or fmlserv you use? [Enter]
Personal, Group, Fmlserv(personal/group/fmlserv) [personal]
[Enter]
DOMAIN NAME        [hogehoge.jp]
alpha1.sp.u-tokai.ac.jp[Enter]
FQDN            [ml.hogehoge.jp]
alpha1.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@ml.hogehoge.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-ctrl@ml.hogehoge.jpにadminからコマンドメールを打ち,正しくコントロール出来るかどうかを確認.上手くいったらインストール完了.お疲れ様でした.

10. カーネルのアップデート

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

データベースのアップデート

# apt-get update

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

# apt-get dist-upgrade

この操作ではカーネルは変わらないので,もう一度アップデート,アップグレードの操作をくり返す.

# apt-get update
# apt-get dist-upgrade

/etc/lilo.confを書き換える.

# vi /etc/lilo.conf

prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=menu
message=/boot/message

image=/boot/vmlinuz
label=linux
initrd=/boot/initrd-2.4.27-0vl7.img
read-only
root=/dev/hda2
append=" resume2=swap:/dev/hda3"

書き換えるのは赤い行だけ.今度のディストリビューションから,カーネルのイメージがvmlinuxzにリンクされるようになったので,あの面倒くさい記号を書き写す必要が無くなったとさ.

あとはliloを書き換えて再起動.

# /sbin/lilo
# reboot

はい,これで完了.

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

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

 ドメインコントローラー(PDC)の機能についてはここで語るほどの知識はないが,私の認識では複数のWindows PCに複数のユーザーがいて,ユーザーが全てのPCで共通のデスクトップ環境を使い,かつ管理者は1台1台のアカウント管理を行わずとも,PDCの上の変更だけで済む,というものだ.
 本年度までの我が研究室では学部生,大学院生が日常業務に使う使うパソコン7台に,一つ一つ個人のアカウントを設定していた.ドメインコントローラー方式を採用してこなかった理由は,まあやり方がよく分からなかったこともあるが,それ以上にDC方式の悪い噂(遅い,デスクトップ情報の上書き時にトラブルが起こる)を聞いていたからだが,来年度から格的に導入することを決断した.これも,web上の数々のサイトから得た貴重な情報に基づく判断だ.キャンパスのネットワーク環境改善も追い風となった.
 というわけで,まずはPDCを一つ立て,それに1台のクライアントマシンを接続して色々と実験を行うことにした.我が研究室の独特な使用条件から,以下の要件が満足されることが必要.

Vine Linux 3.2は標準でSAMBA 3.0が入っている.web上の情報は主にSAMBA 2.2でPDCを立てるものが多く,さらにSAMBAのバージョンアップで仕様が大きく変わったため作業は難航した.こういう経験こそ,ここにやってくる人達のために書き残しておかなくてはならないのだろう.

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

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

[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

[tmp]
comment = Temporary file space
path = /tmp
read only = no
public = yes

SAMBAの再起動.

# /etc/rc.d/init.d/smb restart

続いて,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.0独特の儀式なのだが,WindowsのグループとLinuxのグループをnet groupmapコマンドで対応づけてやらなくてはならない.この設定で,adminsグループのユーザーは全てクライアントPC上ではAdministrator権限を持つことになる.

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

確認.

# net groupmap list

クライアント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. アンチウィルスソフトの導入

ドメインコントローラーのクラック騒動があったので,なにか仕込みが行われていないかHDD内を検査する必要が生じた.調べたところ,LinuxではドイツH+BEDV(http://www.hbedv.com/)社のAntiVir PersonalEditionが有名どころらしい.非常にわかりにくい階層にあるのでダウンロードページファイルへ直リンク.

バージョンアップは頻繁に行われているらしい.06/03/29現在はantivir-workstation-pers-2.1.6-16だ.ダウンロードしたら/rootに置き,解凍.

# wget http://free-av.com/personal/en/unix/antivir-workstation-pers.tar.gz
# tar zxf antivir-workstation-pers.tar.gz
# cd antivir-workstation-pers-2.1.5-24
# ./install

とすればよいはずだが

Not all the required tools were found. Please install
the following tools:
which

と言われて上手くいかない.Vine Linux特有の方言でコマンドwhichが違うところにあるのが原因らしい.インストールスクリプトを改造する.186行目を以下のように変更.

#if [ ! -x "`which $EXEITEM`" ]
if [ ! -x "`/usr/bin/which $EXEITEM`" ]

もう一度インストールを試みる.今度はすんなり通った.途中の質問はほとんどデフォルトで回答.automatic internet updaterは[y]で回答しておいた.一応途中のログ画面を示しておくが,大したことはない.

Do you agree to the license terms? [n] y[enter]


creating /usr/lib/AntiVir ... done
1) installing command line scanner
checking for existing /etc/antivir.conf ... not found
copying bin/antivir to /usr/lib/AntiVir/ ... done
copying vdf/antivir0.vdf to /usr/lib/AntiVir/ ... done
copying vdf/antivir1.vdf to /usr/lib/AntiVir/ ... done
copying vdf/antivir2.vdf to /usr/lib/AntiVir/ ... done
copying vdf/antivir3.vdf to /usr/lib/AntiVir/ ... done
copying etc/antivir.conf to /etc/ ... done

Enter the path to your key file: [hbedv.key]
copying hbedv.key to /usr/lib/AntiVir/hbedv.key ... done
copying script/configantivir to /usr/lib/AntiVir/ ... done
linking /usr/bin/antivir to /usr/lib/AntiVir/antivir ... done
installation of command line scanner complete


2) installing automatic internet updater
An automatic internet updater is available with version 2.1.5-24 of
AntiVir for UNIX Workstation. This is a daemon that will run in the background
and automatically check for updates (internet access is required).
You may also manually check for updates using:

antivir --update

You do not need to install the automatic internet updater in order
to manually check for updates. Please read the README file for more
information on updates and how they can best suit you.

Would you like to install the automatic internet updater? [n]
y[enter]
copying script/avupdater to /usr/lib/AntiVir/ ... done

Would you like to create a link in /usr/sbin for avupdater ? [y][enter]
linking /usr/sbin/avupdater to /usr/lib/AntiVir/avupdater ... done

Would you like the internet updater to start automatically? [y][enter]
setting up startup script ... done
installation of automatic internet updater complete


3) installing AvGuard
Version 2.1.5-24 of AntiVir for UNIX Workstation is capable of on-access,
real-time scanning of files. This provides the ultimate protection
against viruses and other unwanted software. The on-access scanner
(called AvGuard) is based on Dazuko, a free software project providing
access control. In order to use AvGuard you will need to compile Dazuko
for your kernel. Please refer to contrib/dazuko/HOWTO-Dazuko for
information about how to do this. There are several ways in which you
can install AvGuard.

module - Dazuko will be loaded by the avguard script

kernel - Dazuko is always loaded
(and should not be loaded by the avguard script)

no install - do not install AvGuard at this time

Note: Dazuko currently only works with GNU/Linux, FreeBSD and Solaris
systems. If you are interested in helping us port Dazuko to
OpenBSD, feel free to check out the Dazuko Project at:
http://www.dazuko.org

available options: m k n

How should AvGuard be installed? [n][enter]
AvGuard will NOT be installed. See contrib/dazuko/HOWTO-Dazuko
for more information about Dazuko.


4) installing GUI (+ SMC support)

Note: The AntiVir Security Management Center (SMC) requires this
feature, even if you do not intend to use the GUI.

This product comes with a GUI that allows you to monitor realtime
activity, view logs, and configure the product. This tool is optional
(not required) for the product to run.

The GUI requires Java 1.4.0 or higher.

Would you like to install the GUI (+ SMC support)? [n][enter]
checking for existing /etc/avguard.conf ... not found
copying etc/avguard.conf to /etc/ ... done
GUI will NOT be installed


5) configuring AntiVir
Would you like to configure AntiVir now? [y][enter]

This script requires 'which' to run.

Press <ENTER> to continue.


Installation of the following features complete:
AntiVir command line scanner
AntiVir Automatic Internet Updater
AntiVir Guard (previously installed)


Note: It is highly recommended that you perform an update now to
ensure up-to-date protection. This can be done by running:

antivir --update

Be sure to read the README file for additional information.
Thank you for your interest in AntiVir for UNIX Workstation.

ウィルス定義ファイルを1回アップデートしておく.

# antivir --update

/以下をウィルススキャンする.

# antivir / -s -z

ウィルスは見つからなかった.ほっと一息.

13. hosts.allow/denyの設定

先日のクラック騒動で,sshログインが常にinternetに対して開かれていることがセキュリティ上問題であると反省した.我が研究室のLinuxマシンは全てサーバー用途なので,sshログオンは私がローカルドメインからできるようにしてやればわざわざ外に向けて開けておく必要は無い.こういう時のお気軽なセキュリティ対策はhosts.allow,hosts.denyを定義して特定のサービスをインターネット上に開くか,開かないかを設定する方法だ.

現在の研究室サーバーの設定は以下の通りである.150.7.xxx.xxxは東海大学のIPアドレス.

hosts.allow

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#

ALL: 10.8.0.0/255.255.255.0,150.7.0.0/255.255.0.0
sshd: 10.8.0.0/255.255.255.0
Xvnc: ALL
popper:ALL

hosts.deny

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!

ALL : ALL

hosts.allow/denyで正常にアクセスが弾かれているかチェックする.まずは文法チェック

# /usr/sbin/tcpdchk

何のメッセージも出なければ文法は正常.続いて,アクセスチェック.

[root@Alpha0 endo]# /usr/sbin/tcpdmatch xvnc 150.7.0.0
client: address 150.7.0.0
server: process xvnc
matched: /etc/hosts.allow line 7
access: granted

[root@Alpha0 endo]# /usr/sbin/tcpdmatch xvnc 100.0.0.0
client: address 100.0.0.0
server: process xvnc
matched: /etc/hosts.deny line 10
access: denied

設定完了!念のために,外部からアクセスを試みても良いでしょう.

14. swatchによるログ監視

去る1月にAlpha2サーバーがクラックされ,その原因を調査している際にシステムログをじっくり見る機会を得た.正直言って「汚い」.システムの動作に致命的な支障は無いが,パフォーマンス低下に繋がりかねないエラーが頻繁に報告されている.エラーのログを見ながら対策を立てているうち,エラー報告が自動的になされたら便利なのではと考えた.もちろん,そういう需要に応えるソフトはあり,最もよく使われているのは恐らく"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

バージョンがしょっちゅう上がるので最新版の在所にリンクを貼っておいた.面倒くさい人は,1から6までの06/02/04現在の最新版をまとめてここに置いておいたのでこれをダウンロードして解凍すれば良いでしょう.

(2) インストール

作業は/rootで行う.インストールは,全てのパッケージで以下の操作を行えばよい.

# tar zxf [Archive name]
# cd
[Extracted directory]
# perl Makefile.PL
# make
# make test
# make install

はっきり言って面倒なので,06/02/04現在のファイルを全て解凍,インストールするスクリプトを下に示す.これをコピーして,tty端末に貼り付ければ最後まで自動でやってくれる.

tar zxf Bit-Vector-6.4.tar.gz
tar zxf Date-Calc-5.4.tar.gz
tar zxf File-Tail-0.99.3.tar.gz
tar zxf Time-HiRes-1.86.tar.gz
tar zxf TimeDate-1.16.tar.gz
tar zxf swatch-3.1.1.tar.gz

cd Bit-Vector-6.4
perl Makefile.PL
make
make test
make install

cd ../Date-Calc-5.4
perl Makefile.PL
make
make test
make install

cd ../File-Tail-0.99.3
perl Makefile.PL
make
make test
make install

cd ../Time-HiRes-1.86
perl Makefile.PL
make
make test
make install

cd ../TimeDate-1.16
perl Makefile.PL
make
make test
make install

cd ../swatch-3.1.1
perl Makefile.PL
make
make test
make install

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

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

# swatch

*** swatch version 3.1.1 (pid:12203) started at 2006年 2月 5日 日曜日 17:02:05 JST

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

#
# 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宛てにメールが行く設定だ.サブジェクトは,どのサーバーからのメッセージかが分かるように決定.
続いて,自動起動スクリプトを/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/chkconfig ntpd swatch
# /etc/rc.d/init.d/swatch start

起動を確認.

# ps ax | grep swatch

と起動中セスを確認,swatchのエントリーを見つけたら成功!

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

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

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

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

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

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

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

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

 OpenVPNのサイトからファイルをダウンロード,展開してインストールする.今回は2.11beta11のインストールを行った.2006年3月末時点での公式バージョンは2.0.5だが,Windows側の通信安定性が向上しているそうなのでベータ版を採用.まずは,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_beta11.tar.gz
# tar zxvf openvpn-2.1_beta11.tar.gz
# cd openvpn-2.1_beta11
# ./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下にコピー※2.0.5と2.11β11ではディレクトリ構成が違うので注意

# 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


※すると以下の様に対話モードになる.Common Name以外は先ほど設定した内容で良いので「Enter」.

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]
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
............++++++
...........++++++

(省略)

Common Name (eg, your name or your server's hostname) [server]:[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 Mar 25 09:02:03 2016 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へコピー

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

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

# ./build-dh

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

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

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

赤字のところがデフォルトの設定ファイルからの変更点.ほとんど変更無しでオッケー.

#################################################
# Sample OpenVPN 2.0 config file for #
# multi-client server. #
# #
# This file is for the server side #
# of a many-clients <-> one-server #
# OpenVPN configuration. #
# #
# OpenVPN also supports #
# single-machine <-> single-machine #
# configurations (See the Examples page #
# on the web site for more info). #
# #
# This config should work on Windows #
# or Linux/BSD systems. Remember on #
# Windows to quote pathnames and use #
# double backslashes, e.g.: #
# "C:\\Program Files\\OpenVPN\\config\\foo.key" #
# #
# Comments are preceded with '#' or ';' #
#################################################

# Which local IP address should OpenVPN
# listen on? (optional)
local 150.7.y.u

# Which TCP/UDP port should OpenVPN listen on?
# If you want to run multiple OpenVPN instances
# on the same machine, use a different port
# number for each one. You will need to
# open up this port on your firewall.
port 1194

# TCP or UDP server?
proto tcp
;proto udp


# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# Use "dev tap0" if you are ethernet bridging
# and have precreated a tap0 virtual interface
# and bridged it with your ethernet interface.
# If you want to control access policies
# over the VPN, you must create firewall
# rules for the the TUN/TAP interface.
# On non-Windows systems, you can give
# an explicit unit number, such as tun0.
# On Windows, use "dev-node" for this.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
dev tap
;dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel if you
# have more than one. On XP SP2 or higher,
# you may need to selectively disable the
# Windows firewall for the TAP adapter.
# Non-Windows systems usually don't need this.
;dev-node MyTap

# SSL/TLS root certificate (ca), certificate
# (cert), and private key (key). Each client
# and the server must have their own cert and
# key file. The server and all clients will
# use the same ca file.
#
# See the "easy-rsa" directory for a series
# of scripts for generating RSA certificates
# and private keys. Remember to use
# a unique Common Name for the server
# and each of the client certificates.
#
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12" directive in man page).
ca ca.crt
cert server.crt
key server.key # This file should be kept secret

# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

# Configure server mode and supply a VPN subnet
# for OpenVPN to draw client addresses from.
# The server will take 10.8.0.1 for itself,
# the rest will be made available to clients.
# Each client will be able to reach the server
# on 10.8.0.1. Comment this line out if you are
# ethernet bridging. See the man page for more info.
server 10.8.0.0 255.255.255.0

# Maintain a record of client <-> virtual IP address
# associations in this file. If OpenVPN goes down or
# is restarted, reconnecting clients can be assigned
# the same virtual IP address from the pool that was
# previously assigned.
ifconfig-pool-persist ipp.txt

# Configure server mode for ethernet bridging.
# You must first use your OS's bridging capability
# to bridge the TAP interface with the ethernet
# NIC interface. Then you must manually set the
# IP/netmask on the bridge interface, here we
# assume 10.8.0.4/255.255.255.0. Finally we
# must set aside an IP range in this subnet
# (start=10.8.0.50 end=10.8.0.100) to allocate
# to connecting clients. Leave this line commented
# out unless you are ethernet bridging.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# Push routes to the client to allow it
# to reach other private subnets behind
# the server. Remember that these
# private subnets will also need
# to know to route the OpenVPN client
# address pool (10.8.0.0/255.255.255.0)
# back to the OpenVPN server.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# To assign specific IP addresses to specific
# clients or if a connecting client has a private
# subnet behind it that should also have VPN access,
# use the subdirectory "ccd" for client-specific
# configuration files (see man page for more info).

# EXAMPLE: Suppose the client
# having the certificate common name "Thelonious"
# also has a small subnet behind his connecting
# machine, such as 192.168.40.128/255.255.255.248.
# First, uncomment out these lines:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# Then create a file ccd/Thelonious with this line:
# iroute 192.168.40.128 255.255.255.248
# This will allow Thelonious' private subnet to
# access the VPN. This example will only work
# if you are routing, not bridging, i.e. you are
# using "dev tun" and "server" directives.

# EXAMPLE: Suppose you want to give
# Thelonious a fixed VPN IP address of 10.9.0.1.
# First uncomment out these lines:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# Then add this line to ccd/Thelonious:
# ifconfig-push 10.9.0.1 10.9.0.2

# Suppose that you want to enable different
# firewall access policies for different groups
# of clients. There are two methods:
# (1) Run multiple OpenVPN daemons, one for each
# group, and firewall the TUN/TAP interface
# for each group/daemon appropriately.
# (2) (Advanced) Create a script to dynamically
# modify the firewall in response to access
# from different clients. See man
# page for more info on learn-address script.
;learn-address ./script

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# the TUN/TAP interface to the internet in
# order for this to work properly).
# CAVEAT: May break client's network config if
# client's local DHCP server packets get routed
# through the tunnel. Solution: make sure
# client's local DHCP server is reachable via
# a more specific route than the default route
# of 0.0.0.0/0.0.0.0.
;push "redirect-gateway"

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"

# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
client-to-client

# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
;duplicate-cn

# The keepalive directive causes ping-like
# messages to be sent back and forth over
# the link so that each side knows when
# the other side has gone down.
# Ping every 10 seconds, assume that remote
# peer is down if no ping received during
# a 120 second time period.
keepalive 10 120

# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
# openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
;tls-auth ta.key 0 # This file is secret

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES

# Enable compression on the VPN link.
# If you enable it here, you must also
# enable it in the client config file.
comp-lzo

# The maximum number of concurrently connected
# clients we want to allow.
;max-clients 100

# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nobody

# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
persist-key
persist-tun

# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
status openvpn-status.log

# By default, log messages will go to the syslog (or
# on Windows, if running as a service, they will go to
# the "\Program Files\OpenVPN\log" directory).
# Use log or log-append to override this default.
# "log" will truncate the log file on OpenVPN startup,
# while "log-append" will append to it. Use one
# or the other (but not both).
;log openvpn.log
;log-append openvpn.log

# Set the appropriate level of log
# file verbosity.
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 3

# Silence repeating messages. At most 20
# sequential messages of the same message
# category will be output to the log.
;mute 20

Tap/TunはTapを,TCP/UDPはTCPを選択する.これが,NATを越えてアクセス可能にするための必要条件.これに気がつくまで相当苦労した.

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

# /etc/rc.d/init.d/openvpn.init start

Starting openvpn: [OK]

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

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

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

※すると以下の様に対話モードになる.Common Nameだけ手動で入力,あとは全てデフォルトで「Enter」.後の質問は[y/n]なので注意.


Generating a 1024 bit RSA private key
............++++++
...........++++++

(省略)

Common Name (eg, your name or your server's hostname) []:
client1[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 Mar 25 09:02:03 2016 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

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

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

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

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

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

##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server. #
# #
# This configuration can be used by multiple #
# clients, however each client should have #
# its own cert and key files. #
# #
# On Windows, you might want to rename this #
# file so it has a .ovpn extension #
##############################################

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
dev tap
;dev tun


# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one. On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
;dev-node MyTap

# Are we connecting to a TCP or
# UDP server? Use the same setting as
# on the server.
proto tcp
;proto udp


# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote 150.7.y.u 1194
;remote my-server-2 1194

# Choose a random host from the remote
# list for load-balancing. Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server. Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here. See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets. Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
ca ca.crt
cert client1.crt
key client1.key


# Verify server certificate by checking
# that the certicate has the nsCertType
# field set to "server". This is an
# important precaution to protect against
# a potential attack discussed here:
# http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the nsCertType
# field set to "server". The build-key-server
# script in the easy-rsa folder will do this.
;ns-cert-type server

# If a tls-auth key is used on the server
# then every client must also have the key.
;tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
;cipher x

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20

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

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

サーバーから持ってきた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が通るようになっている.

いや〜,大変だったがようやく終了.お疲れ様.

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

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

管理人へのメール

Vine linux 3.1 Install Memo