Vine Linux 6.1 Install Memo13/07/24版

研究室のLinuxサーバー群をインストールする際の備忘録として立ち上げたこのページだが,今回が第6版となる.前回の導入作業から2年半.Vine Linux 5系のサポートが終わって久しいが,忙しくて更新する暇が無かった.ようやく時間が取れたのでOS入れ替えを決意.

Vine Linux 5.2から6.1へのアップグレードインストールはそれほど困難では無い.サーバーの1台で試してみたら,インストール終了後,いくつかの設定変更とユーザアカウント情報の更新のみで完了した.主要なサービスも問題無く動いている.したがって今回は,サーバー更新は基本的にアップグレードで済ませようと思っているが,このページを更新するためだけの目的で,1台をクリーンインストールすることにした.

というわけで,これは,これからAT コンパチブルのデスクトップ機にVine Linux6.1をインストールしてサーバーを構築する人達に少しでも役立てればと思い,実際に成功した手順を記したものである.マシン構成はごく一般的なPentium D以降の世代,Windows 7が動く程度のスペックだ.インストールメディアのUSBからブート可能であるとしよう.

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

2. インストール作業

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

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

5. webminのインストール

6. リモートデスクトップでWindowsからリモートアクセス

7. DHCPとNATの設定

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

9. ntp daemonのインストール

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

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

12. OpenVPNによる仮想hub設置

13. Apache2の起動および設定

14. swatchによるログ監視

15. pflogsumによるメールサーバー監視


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

Vine Linuxのサイトでインストールディスクのイメージを配布している.無償のOSにもかかわらず絶え間ないメンテナンスとアップグレードがされている.関係者に感謝しつつダウンロード.いまどきのM/BはブータブルUSBからの起動を標準でサポートしているので,今回はUSBからのインストールに挑戦.USBメモリも,色々な所からもらったヤツが余っているし.Linuxのインストール記を書くたび,前回の記事からPCを取り巻く環境がどう変わったかがわかり興味深い.

今回,まな板に載ったのはMSI PM8M3 H-VというM/B.2006年のモデルだ.Pentium Dの2.8GHzが刺さっている.メモリは1GBで,HDDはIDEの120GB.オンボードEthernetに加え,外付けのPCI Ethernetカードを刺した.スペック的にはWindows 7がようやく使えるレベル.低スペック故引退したが,サーバー用途ならまだまだ現役.なにしろ,このページを送り出しているサーバーはPentium4 2.4GHzだ.

2. インストール作業

驚くほど簡単にできる.パーティション作成も全部お任せでフルインストール.しかも,ダイアログは日本語だし.ただし,今回に限り,ハードウェアの認識に関する問題が起こる.後述するが,2枚のEthernet cardが両方ともeth1になってしまった.こうなるとビギナーには対処不能だろう.インストールに使うマシンが常にVine Linuxのリリースから5年以上前のものであるせいだからだろうか.

インストールオプションは以下の通り.

という選択でインストールした.あとは待つだけ.20分ほどで終了.

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

ユーザendoでログイン.ネットワークに接続できなかった.調べたら,2枚のカードが両方eth1になっており,非アクティブだった.いったんデバイスを削除,再起動して再設定.このあたりはバッドノウハウなので詳細は記述せず.

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

[DNS]タブの[ホスト名]を「localhost.localdomain」から「Alpha3」に変更.DNSを環境に応じて設定.

/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-get update
# apt-get dist-upgrade

再起動して,カーネルのバージョンを確認.

# uname -r

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

# rpm -q kernel

とタイプ.

5. webminのインストール

aptでインストール.

# apt-get install webmin

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

miniserv.confを編集,アクセス可能なipアドレス制限を変更.赤字のように,アクセスを許すIPアドレスを記入する

# vi /etc/webmin/miniserv.conf

blockhost_failures=5
blockhost_time=60
syslog=1
allow=127.0.0.1
150.7.xx.xx
session=1
premodules=WebminCore
userfile=/etc/webmin/miniserv.users
keyfile=/etc/webmin/miniserv.pem

miniserv.confをセーブしたら,webminをリスタート.

# /etc/webmin/restart

ファイヤーウォールにWebminの穴を開けてやる.iptablesを直接編集する方法が楽.6番目のルールに追加する手順は以下の通り.

# /sbin/iptables -I 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.10 on Wed Jul 24 15:43:35 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4:448]
:INPUT - [0:0]
-A INPUT -j INPUT
-A FORWARD -j INPUT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -p esp -j ACCEPT
-A INPUT -p ah -j ACCEPT
-A INPUT -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
-A INPUT -p udp -m udp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Jul 24 15:43:35 2013

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

6. リモートデスクトップでWindowsからリモートアクセス

前回のインストールから,私のPC利用環境も大きく変わった.WindowsからWindowsをリモート操作するのにVNCを全く使わなくなり,Windowsの「リモートデスクトップ」を使うようになった.LinuxのためだけにVNCを使うのもなんだかなあ,と思って調べたら,やっぱりありました.

xrdpというソフトがあるのだそうだ.

xrdp
No hack, No chance - Linux にリモートデスクトップで接続
The NeGi project (xrdp-0.4.x for Japanease)
ふたごパパのサーバ構築日記 - 【xrdp】xrdp0.6.0の導入
システム管理者(私)のための忘備録 - xrdpをインストールする

これは,WindowsからはRDP(リモートデスクトッププロトコル)でアクセスする,Linux用VNCサーバー.世の中,優秀な人はいくらでもいるものです.

ただし,xrdpはまだ発展途上で,日本語との相性が悪いようだ.上述のリンクを参考にしながら,おそるおそる挑戦.

まずはxrdpが動くために必要な環境をインストール.

# apt-get install gcc openssl-devel pam-devel vnc-server
# apt-get install libX11-devel

続いて,xrdpのソースを入手,展開する.

# wget http://downloads.sourceforge.net/project/xrdp/xrdp/0.6.0/xrdp-v0.6.0.tar.gz
# tar xfz xrdp-v0.6.0.tar.gz

ビルドとインストール.

# cd xrdp-v0.6.0
# ./bootstrap
# ./configure
# make
# make install

これで,とりあえず動く様になった.起動確認の前にファイヤーウォールに穴を開ける.設定は「プロトコルがTCPで着信ポートが3389なら許可」とする.アクセス可能なIPアドレスを制限しないとセキュリティリスクとなるので,以下の様に設定.以降のリモート操作は150.7.zz.zzから行うものとする.

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

これでルールの6番目に設定が加わったはず.では,早速テスト.以下のメッセージが出て,コマンドプロンプトに制御が戻ってくれば成功!

# /etc/xrdp/xrdp.sh start
Starting: xrdp and sesman . . .

Windowsのリモートデスクトップから接続してみよう.アクセス許可された端末(150.7.zz.zz)から「リモート デスクトップ接続」を開き,サーバーのIPアドレスを指定.

以下の様なログイン画面が現れたら成功!

早速ログインしてみる.以下の様な,見慣れたデスクトップが現れる.いつもの事ながら,ちょっと感動した.

続いて,ロケールを日本語にする作業を行う./etc/xrdp/startwm.shの真ん中あたりに赤字の記述を追加.




#. /etc/environment

LANG=ja_JP.UTF-8; export LANG
XMODIFIERS="@im=SCIM"; export XMODIFIERS
GTK_IM_MODULE=scim; export GTK_IM_MODULE
QT_IM_MODULE=scim; export QT_IM_MODULE
echo '*inputMethod: SCIM' | xrdb -merge
USE_XOPENIM=t # for OpenOffice.org
scim -d

#export PATH=$PATH
#export LANG=$LANG



素のxrdpはキーマッピングが英語なので,これを日本語に変更.ファイルは→「xrdp 0.5.0 の日本語キーマップ」にて入手,これを/etc/xrdpにコピー.

# wget http://www.eonet.ne.jp/~smallbear/X/xrdpkeymap_jp.tar.gz
# tar xfz xrdpkeymap_jp.tar.gz
# cd xrdpkeymap_jp
# cp *.* /etc/xrdp/

シンボリックリンクを作成,init.dとRCに登録して,サービスとしてスタートできるようにする.

# cd /etc/init.d
# ln -s /etc/xrdp/xrdp.sh xrdp
# cd /etc/rc5.d
# ln -s /etc/xrdp/xrdp.sh S99xrdp

リブートして,外部からリモートデスクトップ接続ができたら成功!

...と思ったのだが,接続後,適当なウィンドウを開いてキー入力を行うと,2文字以上のキー入力ができなくなる.色々と調べたが,今のところ解決策はなし.xrdpをコンソールで実行し,エラーメッセージを見ると以下のエラーが出ている.

local keymap file for 0xe0230411 found and dosen't match built in keymap, using local keymap file



7. DHCPとNATの設定

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

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

# service network restart

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

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

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

# vi /etc/rc.d/rc.local

echo >> /etc/issue
fi

#### Vine stuff ends here

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

touch /var/lock/subsys/local

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

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

#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
allow unknown-clients;
ddns-update-style ad-hoc;
Subnet
subnet 192.168.137.0 netmask 255.255.255.0 {
        option domain-name-servers DD.DD.DD.DD;
        option broadcast-address 192.168.137.255;
        option subnet-mask 255.255.255.0;
        option routers 192.168.137.1;
        range 192.168.137.2 192.168.137.200;
}

上の内容でdhcpd.confを作り,/etc/dhcp/にコピーする.このサイトを設定中のサーバーから見ている人ならここからダウンロード

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

# vi /etc/sysconfig/dhcpd


# Command line options here
DHCPDARGS=
eth1

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

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

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

続いて,ファイアーウォールの設定.例によってAlpha3のアドレスは150.7.xx.xx.これは環境にあわせて変更する.

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

ここでいったんeth1にハブを接続,下流に適当なwindowsマシンを繋いでインターネットへアクセスできることを確認する.

Vine Linux 5.xではNetworkManagerが悪さをして,dhcpdの自動起動を妨げていた.当然,バージョンアップでその問題は解決しただろうと思っていたが,やはり解決している.念のためサーバーを再起動して,dhcpdが自動起動していれば成功!



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

SMTPサーバーはPostfixを使う.インストール手順はVine Linux5.2と同じ.

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

# apt-get install qpopper
.
.
変更を適用しています...
準備中 ############################## [100%]
更新/インストール中
qpopper-4.0.19-1vl6.i686 ############################## [100%]
完了


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


-A 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 =
alpha3.sp.u-tokai.ac.jp
myhostname = alpha3
mynetworks = 127.0.0.0/8
myorigin = $mydomain



allow_percent_hack =
yes
allow_mail_to_commands = alias,forward,include
disable_vrfy_command = yes

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

# postconf -n

alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
allow_mail_to_commands = alias,forward,include
allow_percent_hack = yes
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
inet_interfaces = all
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対応に書き換える.以下の行を末尾に追加.

※今回,セキュリティに関するポリシーを変更した.前回の設定で,去る13年2月にSMTPが不正中継の踏み台に使われたため.

# vi /etc/postfix/main.cf
.
以下の設定を末尾に追加

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit
smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_client, permit
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_auth_destination, reject
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions = reject_unknown_sender_domain

strict_rfc821_envelopes = yes

ここまでの設定ファイルmain.cfはこちらからダウンロード可能.

続いて,「/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専用のアカウント,パスワードペアを作る.ここでポイントは「ユーザー全員に同じユーザー名,パスワードを供用させる」ということだ.別に,これはユーザー相互に秘密にしておくことはないし,現実的な問題としてユーザーがパスワードを変える方法も無いのでこのような運用が最も合理的だろう.ユーザー名は「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の場合しか例示出来ないのでご容赦を.

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


9. ntp daemonのインストール

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

# chkconfig ntpd on

/etc/ntp.confを設定.

# vi /etc/ntp.conf


# modifications are in use and declare an unsynchronized condition.
#
server 127.127.1.0 # local clock

server 133.100.9.2
server 133.41.4.2
server 133.31.180.6

fudge 127.127.1.0 stratum 10

#
# Drift file. Put this in a directory which the daemon can write to.

ntpdを起動.

# service ntpd start

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

# ntpq -p


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



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

研究室サーバーの主要な役割として,MLサーバーがある.我が研究室でははfmlをPostfixと連携させる方法でMLを運営している.管理がやりやすいので,fmlはいつもユーザーendoの下にインストールしている.

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

# su endo
$ cd
$ mkdir fml
$ mkdir ml

superuser権限で,Postfixのmain.cfを編集.末尾に以下の記述を追加.ただし,このステップは既に「8. メールサーバー(Qpopper,Postfix)の設定」で実施済みなので,ここまで順番にやってきた人は不要.

$ exit
# vi /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の名前」で保存されるので心配ない.お疲れ様でした.


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

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

我が研究室では2005年ころから研究室ドメインを運用し,全員が全てのPC上で共通のデスクトップ環境を使えるようにしている.というわけで,サーバー入れ換えに伴い,Vine Linux 6.1をコントローラーにして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 5.1以降,SAMBAは既にインストールされている.5.1に同梱のバージョンは3.310145だった.今回は3.5.15-1vl6が同梱されていた.さて,インストール手順で手こずることはあるか?

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

# /sbin/iptables -I INPUT 6 -p udp -m udp --dport 137:138 -j ACCEPT
# /sbin/iptables -I INPUT 7 -p tcp -m tcp --dport 139 -j ACCEPT
# /sbin/iptables -I 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 = no
ea support = no

[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

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

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

# service smb start
# chkconfig smb on

続いて,WebminでSAMBAユーザーとUnixユーザーの同期の自動化を設定する.左ペーンから「サーバ」→「Samba Windows ファイル共有」をクリック.下の「Samba Shareマネージャ」画面が現れるので「モジュール設定」をクリック.

モジュールの設定を以下のように書き換える.Vine Linuxは伝統的にSAMBA関係のファイルが他のディストリビューションと違うのだ.一カ所,入力したテキストが隠れているところがあるが,「sambaパスワードファイル」の場所は「/etc/samba/smbpasswd」だ.Vine 6.1になって増えた項目,「winbindd」関連は空白としておく.

「Samba Shareマネージャ」画面に戻り,「ユーザの同期」をクリック.同期化を設定して,「適用」.

こうすると,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アカウント,パスワードの作成は自動でできているはずである.さて,ここでbishopの共有フォルダにアクセスできるかどうか試してみよう.適当なWindows PCから以下の様にタイプ.Windows PCのログオンユーザはbishopでなくても大丈夫.以下のコマンドは「150.7.xx.xx(Alpha3のIPアドレス)の共有フォルダbishopにユーザ名bishop,パスワードhogehogeで接続,dドライブに割り当てよ」だ.

C:\> net use d: \\150.7.xx.xx\bishop /USER:bishop hogehoge

※ここで,Linux上のbishopのホームディレクトリにアクセスできないときは,SAMBAアカウントのパスワードが正常に更新されていない.Webminから以下の手順でパスワードを更新するとアクセス可能となる.

「サーバ」→「Samba Windowsファイル共有」→「Sambaユーザ」→「bishop」で,開いた画面から新規パスワードを入力.

さて,続いてクライアント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上,ユーザーアカウントのホームディレクトリである.

できていないようなら,前述の手続きでSAMBAユーザアカウントのパスワード更新手続きを行う.

これに加え,研究室共有サーバー(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する.



12. OpenVPNによる仮想hub設置

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


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

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

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

VPNソフトウェアにも幾つか種類があって,有償のものもあればオープンソースのものもある.私が愛用しているのは「OpenVPN」というオープンソースのソフトウェアである.仮想hubを使い,CFD実行用PCが学内の任意の場所に置かれた端末から操作できるようになった状態のネットワーク構成を下に示す.


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

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

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

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

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

ここで,OpenSSL Cryptoを入れておかないと次のステップでエラーが出る.Vine Linux 6.1では以下のステップは不要だった.次版では削除しよう.

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

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

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

起動テスト.

# /usr/local/sbin/openvpn

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

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

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

# cp distro/rpm/openvpn.init.d.rhel /etc/rc.d/init.d/openvpn.init
# chkconfig --add openvpn.init

# chkconfig openvpn.init on

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

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

鍵作成用シェルスクリプトeasy-rsaを/etc/openvpn下にコピー.なぜか,最新版のOpenVPNではこれがソースに同梱されなくなってしまった.OpenVPNのダウンロードページを読むと,"もう,easy-rsaはソースコードに同梱しない.欲しければGitHubのeasy-rsaのページから持ってきなさい"との記述.

ここで,本来ならGitをインストールして,リポジトリをローカルディスクと同期するべきなのだろうが,試しても上手くいかなかった.エラーメッセージは以下の通り.

Cloning into /etc/openvpn/easy-rsa...
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/OpenVPN/easy-rsa/tree/master/easy-rsa/2.0/info/refs

SSLの認証エラーなのだそうだが,解決方法は結構面倒くさい.easy-rsaのためだけに回り道するよりは,素直にzipファイルをダウンロード,展開する.

# mkdir /etc/openvpn/easy-rsa/
# wget
--no-check-certificate https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master.zip
# cp easy-rsa-master/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

ダウンロードしたeasy-rsaは,デフォルトの暗号強度が2048bitになっている.しかし,これはパフォーマンス低下を招くので,1024bitに戻す.

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

53行目あたり

export KEY_SIZE=1024

(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.

enerating 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) [MyOrganizationalUnit]:[Enter]
Common Name (eg, your name or your server's hostname) [Tokai University CA]:[Enter]
Name [EasyRSA]:[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) [MyOrganizationalUnit]:[Enter]
Common Name (eg, your name or your server's hostname) [server]:[Enter]
Name [EasyRSA]:[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-1.0.0.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'
organizationalUnitName:PRINTABLE:'MyOrganizationalUnit'
commonName :PRINTABLE:'server'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'endo@tokai.ac.jp'
Certificate is to be certified until Jul 24 12:32:49 2023 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


# 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 INPUT 6 -s 150.7.0.0/16 -p udp --dport 1194 -j ACCEPT
# /sbin/iptables -I INPUT 6 -s 192.168.0.0/16 -p udp --dport 1194 -j ACCEPT
# /sbin/iptables -I INPUT 6 -i 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.3.2の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



# 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アドレスがテーブルになっている.これを書き換え,サーバー,クライアントの順に再起動すれば書き換えた内容が有効になる.ただしサーバー設定ファイルの「ifconfig-pool-persist ipp.txt」が有効になっていること.


13. 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

だ.

httpc.confを編集する.場所は/etc/apache2/conf/だ.

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

webページと同じディレクトリに置かれたcgiを実行可能にする設定は以下の通り.標準のhttpd.confから変えたところだけをピックアップする.赤字は追加テキスト,黒字はデフォルトの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 #
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
XBitHack on
</Directory>
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 # To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
AddHandler cgi-script .cgi
798 AddType text/html .shtml
AddHandler server-parsed .shtml
AddOutputFilter INCLUDES .shtml
837 Alias /error/ /home/httpd/error/

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

<Directory /home/httpd/error>

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

追記:日本語URLへの対応

前回のInstall Memoでは,日本語のファイル名を持ったファイルへのリンクを可能にする方法で苦労した.しかし,今回テストしたところ,特に何の設定もせずに日本語のURLへアクセスできることが判明.したがって特に設定は不要である.Apacheも日々進歩している.



14. 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] 
y[Enter]






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

上のボックスのコマンドを(# は外し)全てコピーしてコマンドラインにペーストすれば最後まで自動で作業が進む.15分は待たせるだろうか.

続いて本体.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/syslogを編集,以下の行を追加.
※Vine 6.1からsyslogが新しくなり,設定ファイルもsysklogdからsyslogになった.

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

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


15. pflogsumによるメールサーバー監視

去る2013年1月,メールサーバーが不正中継の踏み台にされた.顛末についてはパソコンつれづれ日記に書いてある.不正中継の対策は8. メールサーバー設置にあるように万全だ.しかし,不安なのでメールサーバーの活動を報告させるようにした.使うのはpflogsummというPerlスクリプト.導入に関しては大変分かりやすい解説サイトがあり,難なく成功.

黒川仁の文具堂ブログ三昧 Postfixログ解析 pflogsumm

(1) インストール

最新版はバージョン1.1.3だ.

# wget http://jimsun.linxnet.com/downloads/pflogsumm-1.1.3.tar.gz
# tar zxvf pflogsumm-1.1.3.tar.gz
# cd pflogsumm-1.1.3/
# cp pflogsumm.pl /usr/local/bin/pflogsumm

これでおしまい.

(2) テスト

# pflogsumm /var/log/maillog

Grand Totals
------------
messages

6 received
6 delivered
0 forwarded
0 deferred
0 bounced
2 rejected (25%)
0 reject warnings
0 held
0 discarded (0%)

8144 bytes received
8144 bytes delivered
3 senders
3 sending hosts/domains
2 recipients
2 recipient hosts/domains


Per-Day Traffic Summary
-----------------------
date received delivered deferred bounced rejected
--------------------------------------------------------------------
Jul 31 2013 1 1
Aug 1 2013 4 4
Aug 2 2013 0 0 0 0 1
Aug 3 2013 1 1 0 0 1




こんな感じで,メールサーバーの活動サマリーが出力される.

(3) cronに登録,自動実行

コマンドラインでもいけるが,Webminを使ったグラフィカルな設定が便利.左ペーンで「システム」→「予定済みCron作業」と辿ると以下の画面になる.

「新しいスケジュールのcronジョブを作成」をクリック.以下の様に入力する.この例は,「毎日午前8時に,/root/maillog.batを実行」というスケジュールだ.最後に「作成」でcronジョブが作成される.

maillog.batは以下の様な内容を持ったファイル.ダウンロードはこちら

#!/bin/sh

/usr/local/bin/pflogsumm /var/log/maillog

これを,実行可能属性で/rootに保存.Webminから「cron ジョブのスケジュール」→「/root/maillog.bat」と辿り,「今すぐ実行」でテスト.pflogsumが実行されたら設定は成功.あとはroot宛のメール(このサイトではendoに転送設定済み)を待つのみ.



管理人へのメール

Vine linux 3.1 Install Memo

Vine linux 3.2 Install Memo

Vine linux 4.2 Install Memo

Vine linux 5.1 Install Memo

Vine linux 5.2 Install Memo