Vine Linux install memo

18/03/28版

研究室のLinuxサーバー群をインストールする際の備忘録として立ち上げたこのページだが,今回が第7版となる.前回の導入作業から4年半が経過した.WebサーバーのHDDが手狭になったので,2TBのディスクと交換しようとして失敗.LVMは私のようなライトユーザーにはちょっと重すぎた.結局,再インストールとなった.

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

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

2. インストール作業

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

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

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

6. Webminのインストール

7. DHCPの設定

8. OpenVPNによる仮想hub設置

9. Webサーバー(Apache2)の設定

10. メールサーバーの設定

11. ntp daemonのインストール

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

13. SambaによるActive Directory構築

14. swatchによるログ監視

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

 


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

Vine Linuxのサイトでインストールディスクのイメージを配布している.無償のOSにもかかわらず絶え間ないメンテナンスとアップグレードがされている.関係者に感謝しつつダウンロード.USBメモリーにブータブルでコピー.ツールは"USBWriter"を使用.もはや,インストールにDVDを使う人は少数派だろう.前回の記事からPCを取り巻く環境がどう変わったかがわかり興味深い.

今回,まな板に載ったのはGIGABYTE GA-G41M-ES2というM/B.2009年のモデルだ.Core 2 Quadの2.66GHzが刺さっている.メモリは4GBで,HDDはSATAの2TB.オンボードEthernetに加え,外付けのPCI Ethernetカードを刺した.スペック的にはWindows 7が快適に使えるレベル.シミュレーション計算用に活躍していたが,世代交代のため引退.Webサーバー用途ならオーバースペックなくらいだ.

2. インストール作業

驚くほど簡単にできる.パーティション作成も全部お任せでフルインストール.しかも,ダイアログは日本語だし.インストール時にはオンボードのEthernetをグローバルIPで設定,セットアップ終了後にsecondary ethernetを刺すこととする.

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

  • パッケージは全て選択(デフォルト).
  • ネットワーク設定は,あらかじめ与えられた学内のグローバルipアドレスを手動入力.
  • ファイアーウォールはon.デフォルトでリストにある全てのサービスを透過させる.
  • 一般ユーザーendoを作成.

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

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

ユーザendoでログイン.ネットワークに接続できることを確認.Secondary ethernetカードを刺す.

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

[DNS]タブの[ホスト名]はインストール時に指定したものになっているはず.忘れていたら変更.


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

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

ルートでログオン,コンソールウィンドウを開いてaptのアップデート.

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

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

# uname -r

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

# rpm -q kernel

とタイプ.

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

私の場合,サーバーのメンテナンスはほとんどコンソールとWebminから行っているので,デスクトップの必要性は少ない.それでも,あったらそれなりに便利なので,リモートデスクトップを設定する.前回は,苦労してxrdpをインストールしたが,今回は,素直にVNCを使う.Vine LinuxはVNC Serverが既にインストールされており,僅かな設定でWindowsクライアントからアクセスが可能になる.

  1. [システム]→[設定]→[インターネットとネットワーク]→[リモート・デスクトップ]と辿り,共有をonにする.



  2. [システム]→[システム管理]→[セキュリティレベルとファイヤーウォールの設定]と辿って,「その他のポート」をクリック
  3. 5900 tcp と 5901 tcp を追加.

これで,サーバー側は設定終了.

クライアント側は,Windlowsで動く適当なVNCアプリをインストール.今回はRealVNCを使用した.


6. Webminのインストール

Webminとは,サーバーの設定のほとんどをブラウザーから行うことができるツールである.いつもはaptでインストールするのだが,Vine 6.5は上手く行かない.依存性が解決していない模様.仕方ないのでWebminのサイトからTARファイルをDL,指示に従いインストール.2018/03/28現在のバージョンは1.881だ.

To download the Webmin tar.gz package, either follow the link on the downloads page , or run commands like :[root@yourhost /]# cd /tmp
[root@yourhost /tmp]# wget http://prdownloads.sourceforge.net/webadmin/webmin-1.881.tar.gz

When unpacked, the distribution creates a subdirectory called webmin-1.881 under the current directory. Since recent versions of Webmin support installation into a directory of your choice, you can pick a destination directory such as /usr/local/webmin. Then run the following commands in the directory containing the webmin-1.881.tar.gz file :[root@yourhost /tmp]# gunzip webmin-1.881.tar.gz
[root@yourhost /tmp]# tar xf webmin-1.881.tar
[root@yourhost /tmp]# cd webmin-1.881
[root@yourhost /tmp/webmin-1.881]# ./setup.sh /usr/local/webmin

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

miniserv.confを編集,アクセス可能なipアドレスを制限する.末尾に追加.

# vi /etc/webmin/miniserv.conf

allow=127.0.0.1 150.7.xx.xx

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

# /etc/webmin/restart

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

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

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

# cat /etc/sysconfig/iptables

# Generated by iptables-save v1.4.10 on Wed Mar 28 16:14:04 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [21:10434]
: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 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 -p tcp -m tcp --dport 10000 -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 21 -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 25 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 5901 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Mar 28 16:14:04 2018

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

[Webmin]→[Webmin Configuration]のペーンに入り,[Language and Locale]アイコンをクリック.言語を「Japanese (JA-JP, UTF-8)」に変更.以降は,Webmin関連の設定は日本語ダイアログを前提とする.

RPMインストールだとWebminが自動起動するよう設定されるが,ソースからのインストールだと設定されない.せっかくだから,Webminを使って設定する.Webminにアクセス,メニューから[システム]→[起動及びシャットダウン]と辿って,「Create a new upstart service」をクリック.下のような設定画面が現れる.


こんな感じで設定,念の為リブートして確認.Webminにアクセスできたら成功.

 

7. DHCPの設定

サーバーをDHCPサーバーとして,クライアントからインターネットへアクセスできるようにする.ネットワークカードが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.これは環境にあわせて変更する.

# iptables -I RH-Firewall-1-INPUT 9 -i eth1-j ACCEPT
# /etc/init.d/iptables save
# service iptables restart

ここでいったんeth1にハブを接続,下流に適当なwindowsマシンを繋いでインターネットへアクセスできることを確認する.Vine Linux 5.xではNetworkManagerが悪さをして,dhcpdの自動起動を妨げていたが,バージョンアップで問題は解決.念のためサーバーを再起動して,dhcpdが自動起動していれば成功!

8. OpenVPNによる仮想hub設置

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


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

クラスタを構成するPCと操作用端末は全てVine LinuxのDHCPサーバーからIPアドレスをもらい,外部へはDHCPサーバー経由で出て行く.この構成なら,操作用端末からクラスタの各ノードが「見える」ため,VNCでのリモート操作が可能だ.ところが,この構成だと,DHCPサーバーの外側,東海大学学内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のサイトからファイルをダウンロード,展開してインストールする.18年3月現在のテストリリースは2.4.5.まずは,lzoライブラリのインストール.これはVPN通信時にパケットを圧縮するライブラリだ.

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

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

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

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

# wget http://swupdate.openvpn.net/community/releases/openvpn-2.4.5.tar.gz
# tar zxvf openvpn-2.4.5.tar.gz
# cd openvpn-2.4.5
# ./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib64
# 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のページから持ってきなさい"との記述.zipファイルをダウンロード,展開する.

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

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

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

# cd /etc/openvpn/easy-rsa/
# cp vars.example vars
# vi ./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秘密鍵を作成.

# ./easyrsa init-pki
# ./easyrsa build-ca

※すると以下の様に対話モードになる.適当なパスフレーズを入力.

# ./easyrsa build-ca

Note: using Easy-RSA configuration from: ./vars
Enter New CA Key Passphrase:
hogehoge
Re-Enter New CA Key Passphrase:hogehoge
Generating RSA private key, 2048 bit long modulus
...........................................................................................................................................................................................+++
.......+++
e is 65537 (0x10001)
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.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:[Enter]

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt

できたCA証明書を/etc/openvpnへコピー

# cp ./pki/ca.crt /etc/openvpn

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

# ./easyrsa build-server-full server nopass

※すると以下の用に対話モードになる.パスフレーズは,CA秘密鍵で使ったものと同じものを使用.

# ./easyrsa build-server-full server nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.............................................................................+++
.....+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/server.key.DIR4bFlNeH'
-----
Using configuration from ./openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
hogehoge
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Mar 27 03:30:39 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

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

# cp ./pki/issued/server.crt /etc/openvpn
# cp ./pki/private/server.key /etc/openvpn

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

# ./easyrsa gen-dh

結構待ちます.出来たDHパラメータを/etc/openvpnへコピー.デフォルトのserver.confと整合させるため,名前を変更する.

# cp ./pki/dh.pem /etc/openvpn/dh2048.pem

(6)TLS認証鍵を作成

# openvpn --genkey --secret /etc/openvpn/ta.key

(7)サーバー設定ファイルのserver.confの編集

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


# Enable compression on the VPN link and push the
# option to the client (v2.4+ only, for earlier
# versions see below)
compress lz4-v2
push "compress lz4-v2"

tcp/udpはudpを選択する.※UDP接続のほうが断然パフォーマンスが高い.

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

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

# service openvpn.init start

Starting openvpn: [OK]

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

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

# /sbin/iptables -I RH-Firewall-1-INPUT 2 -p udp --dport 1194 -j ACCEPT
# /sbin/iptables -I RH-Firewall-1-INPUT 2 -i tap+ -j ACCEPT
# /etc/init.d/iptables save
# /sbin/service iptables restart

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

(9)クライアント証明書,秘密鍵の作成(パスフレーズ認証なし)

要領はサーバー秘密鍵と同じ.キー名はクライアントPCの名前にすると良いでしょう.ここではclient1とする.途中パスフレーズを聞かれるが,これはCA秘密鍵を作ったときのものを使う.

# ./easyrsa build-client-full client1 nopass
# ./easyrsa build-client-full client1 nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
..........................................................................................+++
........................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/client1.key.mot8INkWGN'
-----
Using configuration from ./openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:
hogehoge
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client1'
Certificate is to be certified until Mar 27 05:13:10 2028 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

出来た鍵,ca.crt,client1.crt,client1.key,ta.keyをクライアントPCへコピーする.

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

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

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

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



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

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

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

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

これで終了.お疲れ様.

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

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

 

9. Webサーバー(Apache2)の設定

Vine Linux 6.5はデフォルト状態ではWebサーバーが動作していない.まずは,自動起動にセット.Webminの[システム]→[起動及びシャットダウン]メニューから,「apache2」のエントリーを探す.

「Start at boot time」を選択.ついでに起動しておく.他のPCからサーバーにアクセス,Webページが表示されればオーケー.

続いて,WebminからApacheを制御できるよう設定する.Vineは,標準的なRed Hat系やUbuntu Linuxとディレクトリ配置が異なるので,始めに設定ファイルの場所を教えてやる必要がある.メニューの「未使用モジュール」から「Apache Webサーバー」を探す.「configuration fileがないよ」と警告が出るので,左上のアイコンをクリック,設定.設定は「システム設定」の以下のみでよい.httpd.confのパスは「/etc/apache2/conf/apache2」.

すると,メニューの「サーバ」の項目にApache2のエントリーが現れる.Webminから設定することも可能だが,結構たいへんなので,私はいつも動いている設定ファイルをコピーして使っている.このWebページを表示しているサーバーの設定ファイルがこれ.主な設定項目は,

  • ルートディレクトリは /home/httpd/htdocs
  • cgiを使用可能にする
  • ディレクトリリスティング禁止

など.

 

10. メールサーバーの設定

(1)SMTPサーバーの設定

SMTPサーバーはPostfixを使う.まずは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対応に書き換える.以下の行を末尾に追加.

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

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

(2)POP3サーバーの設定

POP3サーバーにはDovecotを使う.既にインストールされているので,設定ファイルの書き換えだけで動く.やたらといろいろなファイルを設定する必要があるが,辛抱強く書き換える.

# vi /etc/dovecot/dovecot.conf

ilisten = *

# vi etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no

auth_mechanisms = plain login

# vi /etc/dovecot/conf.d/10-mail.conf

disable_plaintext_auth = no

auth_mechanisms = plain login

mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u

ここで,メールボックスの場所を/var/spool/mailとした場合,permissionを変えないとエラーになる.ここを参照のこと.

# chmod 0600 /var/spool/mail/*

# vi /etc/dovecot/conf.d/10-master.conf

 # Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
 mode = 0666
 user = postfix
 group = postfix
}

 

# vi /etc/dovecot/conf.d/10-ssl.conf

ssl = yes

ssl_cert = /etc/ssl/server.crt

ssl_key = /etc/ssl/server.key

PostfixとDovecotを再起動,自動起動に設定.

# /etc/rc.d/init.d/postfix restart
# chkconfig postfix on
# /etc/rc.d/init.d/dovecot start
# chkconfig dovecot on

これでインストールは終了.続いて,不正中継テストを行う.何だか,不正中継チェックサイトはDoSに使われるのか,すぐ閉鎖されてしまうらしい.2018年3月現在で利用できたところがここ.適当なWindows PCから,設定中のサーバーのIPを入力してチェックしよう.

(3)クライアントの設定

Thunderbirdを例にとって解説.まずはPOP3の設定.

続いて,SMTPの設定.

11. 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サーバーと同期がとれる.


12. メーリングリストサーバー 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の名前」で保存されるので心配ない.お疲れ様でした.


13. SambaによるActive Directory構築

WindowsのActive Directory(AD)とは,サーバーがWindowsユーザーの情報を一元管理するシステムである.非常に大きな規模のADは私の手にあまるので,最も簡単な形態について説明すると,システムは1台のADサーバーと複数台のWindows10 Professional端末からなる.ユーザーは,どの端末でも,同じユーザー名とパスワードでログインができ,ログイン後のデスクトップはどの端末でも同じになるというものだ.この仕組みを実現するため,ADサーバーは各ユーザーのログイン情報のほか,デスクトップは「ユーザー」下フォルダの情報を持っていて,ログイン毎に最新版がWindowsクライアントにコピーされ,ログオフ毎に書き戻される.

正統なADはWindows Serverを用いて構築するが,値段が高い.ところが,ほぼ同等の機能をLinuxとSambaで実現する仕組みが提供されている. 我が研究室では2005年ころからLinux+SambaでADを構築,運用しているが,サーバー設定で最もややこしいのがこのステップだ.

※正確に言えば,Samba3はNTドメインで,今回,はじめてSamba4を使いADを構築.

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

  • ファイルサーバーはLinuxのSamba上でなく,ファイルサーバー(Windows10 Pro.)上に置く.従って,Sambaサーバーにはファイルサーバー機能は求めない. ただし,各ユーザー専用の「zドライブ」を提供.
  • 全てのクライアントにおいて,全てのユーザーがAsministrator相当の権限を持ちうる.研究室という特殊な環境なので簡便してほしい.

いままではSamba3で幸せに暮らしていたが,Windows10はSamba3のドメインメンバーに慣れない.そこで,2年ほど前に,苦労してSamba4を導入した.この記事は,当時を思い出しながら新しいLinuxサーバーに同等のサーバーを導入したときの記録である.

(1)Samba3のアンインストール

# apt-get remove samba

(2)Sambaの動作に必要なパッケージを予めインストール

# apt-get install attr
# apt-get install binutils-devel
# apt-get install cups-devel
# apt-get install docbook-style-xsl
# apt-get install gdb
# apt-get install gnutls-devel
# apt-get install krb5-workstation
# apt-get install libacl-devel
# apt-get install libaio-devel
# apt-get install libidn-devel
# apt-get install libpcap-devel
# apt-get install libxml2-devel
# apt-get install openldap-devel
# apt-get install perl-Test-Base
# apt-get install popt-devel
# apt-get install python-crypto
# apt-get install python-devel
# apt-get install sqlite-devel

ここで,ncursesを以下の手順に従い再インストールしないとsambaのコンパイルが通らない.ソースはここここ.このノウハウにたどり着くまで2日...

# wget https://invisible-mirror.net/archives/ncurses/ncurses-6.1.tar.gz
# tar xfz ncurses-6.1.tar.gz
# tar xfz ncurses-6.1.tar.gz
# cd ncurses-6.1
# ./configure --prefix=/usr \
                 --mandir=/usr/share/man \
                 --with-shared \
                 --without-debug \
                 --without-normal \
                 --enable-pc-files \
                 --enable-widec
# make
# make install
# mv -v /usr/lib/libncursesw.so.6* /lib
# ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so
# for lib in ncurses form panel menu ; do
# rm -vf /usr/lib/lib${lib}.so
# echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so
# ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc
# done
# rm -vf /usr/lib/libcursesw.so
# echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so
# ln -sfv libncurses.so /usr/lib/libcurses.so

※"samba 4.6.4への update"には,いろいろと試行錯誤した結果が書いてあるが,このページのとおりにやっても結局上手く行かない.

(3)Samba4のダウンロード,インストール

もし,一度インストールに失敗した後再インストールするなら,アンインストールは「make uninstall」.関連するファイルを削除しておくこと.

# rm -rf /usr/local/samba/var/locks/sysvol/*
# rm -rf /usr/local/samba/private/*
# rm -f /usr/local/samba/etc/smb.conf
# rm -rf /home/samba/profiles/*

2018年3月28日現在の最新版は4.8.0だが,コイツはPythonのバージョンとの競合があり動かない(参照).一つ前の4.7.6をダウンロードする.

# wget https://download.samba.org/pub/samba/stable/samba-4.7.6.tar.gz
# tar xfz samba-4.7.6.tar.gz
# cd samba-4.7.6
# ./configure
# make
# make install

(4)起動前の下準備

ファイアーウォールに穴を開ける.

# iptables -I RH-Firewall-1-INPUT 11 -p tcp --dport 53 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 12 -p udp --dport 53 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 13 -p tcp --dport 88 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 14 -p udp --dport 88 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 15 -p tcp --dport 135 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 16 -p udp --dport 137 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 17 -p udp --dport 138 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 18 -p tcp --dport 139 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 19 -p tcp --dport 389 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 20 -p udp --dport 389 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 21 -p tcp --dport 445 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 22 -p tcp --dport 464 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 23 -p udp --dport 464 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 24 -p tcp --dport 636 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 25 -p tcp --dport 3268 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 26 -p tcp --dport 3269 -j ACCEPT
# iptables -I RH-Firewall-1-INPUT 27 -p tcp --dport 49152:65535 -j ACCEPT
# /etc/init.d/iptables save
# service iptables restart

/etc/hostsの修正.赤字の行を追加.

# vi /etc/hosts
127.0.0.1       localhost. localdomain localhost
150.7.26.xx     endolab endolab.local

Sambaにパスを通す.

# export PATH="/usr/local/samba/bin:/usr/local/samba/sbin:${PATH}"

インストールの確認.

# samba -V

Version 4.7.6

(5)ADのセットアップ

ドメイン「endolab.local」を作成.

# samba-tool domain provision --use-rfc2307 --interactive

Realm [LOCALDOMAIN]: endolab.local
Domain [endolab]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [150.7.26.xx]: 150.7.3.5
<- 環境依存
Administrator password:
Retype password:
Looking up IPv4 addresses
More than one IPv4 address found. Using 150.7.26.xx
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=endolab,DC=local
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=endolab,DC=local
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba AD has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba AD server will be ready to use
Server Role: active directory domain controller
Hostname: MS5203
NetBIOS Domain: ENDOLAB
DNS Domain: endolab.local
DOMAIN SID: S-1-5-21-.....

(6)起動,動作確認

# samba
# smbclient --version
Version 4.7.6

# smbclient -L localhost -U%


Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.7.6)
Reconnecting with SMB1 for workgroup listing.

Server Comment
--------- -------

Workgroup Master

# smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter ENDOLAB\Administrator's password:
. D 0 Tue Apr 3 15:39:46 2018
.. D 0 Tue Apr 3 15:40:48 2018

1916488888 blocks of size 1024. 1790989960 blocks available

(7)AD DNSのテスト

# samba-tool dns zonelist 127.0.0.1 -U Administrator

Password for [ENDOLAB\Administrator]:
2 zone(s) found

pszZoneName : endolab.local
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : DomainDnsZones.endolab.local

pszZoneName : _msdcs.endolab.local
Flags : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE
ZoneType : DNS_ZONE_TYPE_PRIMARY
Version : 50
dwDpFlags : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED
pszDpFqdn : ForestDnsZones.endolab.local

# host -t SRV _ldap._tcp.endolab.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_ldap._tcp.endolab.local has SRV record 0 100 389 Alpha3.endolab.local.

# host -t SRV _kerberos._udp.endolab.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

_kerberos._udp.endolab.local has SRV record 0 100 88 Alpha3.endolab.local.

# host -t A adserver.endolab.local 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

Host adserver.endolab.local not found: 3(NXDOMAIN)

(8)DNSサーバーの変更

resolv.confを変更,自身がDNSになるようにする.

# vi /etc/resolv.conf

domain endolab.local
nameserver 150.7.26.xx
  <- サーバーのアドレス

/etc/sysconfig/network-scripts/ifcfg-eth0,/etc/sysconfig/network-scripts/ifcfg-eth1の情報を書き換えないと,起動時に勝手にresolv.confが書き換えられてしまう.結構有名な問題.

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

# Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=none
BROADCAST=150.7.26.255
HWADDR=00:24:1D:BA:42:D1
IPADDR=150.7.26.xx
NETMASK=255.255.255.0
NETWORK=150.7.26.0
ONBOOT=yes
TYPE=Ethernet
DNS1=150.7.26.xx  <-DNS1が自分のアドレス,DNS2がサーバーが置かれた環境のDNS
DNS2=150.7.3.5

NM_CONTROLLED=yes
GATEWAY=150.7.26.254
IPV6INIT=no
USERCTL=no
PREFIX=24
PEERDNS=no <-追加

(9)/etc/krb5.confの書き換え

/usr/local/samba/private/krb5.confに雛形があるのでコピー.

# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
# vi /etc/krb5.conf

[libdefaults]
default_realm = ENDOLAB.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = true

(10)Kerberosの動作確認

# kinit administrator@ENDOLAB.LOCAL

Password for administrator@ENDOLAB.LOCAL:
Warning: Your password will expire in 41 days on Tue May 15 15:40:48 2018

(11)フォレストとドメインの機能レベル確認

# samba-tool domain level show

Domain and forest function level for domain 'DC=endolab,DC=local'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

(12)パスワードポリシーの変更

これらのコマンドは,/etc/krb5.confを書き換えてから出ないとエラーになるので注意.

パスワードの条件設定を解除.デフォルトだと,「英数字記号必須8文字以上」だが,ユーザーによっては,全ての文字の組み合わせを嫌う人もいる.

# samba-tool domain passwordsettings set --complexity=off

最小パスワード長を6に変更(お好みで).

# samba-tool domain passwordsettings set --min-pwd-length=6

パスワード変更禁止期間を0に変更.

# samba-tool domain passwordsettings set --min-pwd-age=0

パスワード有効期限を無期限に変更.

# samba-tool domain passwordsettings set --max-pwd-age=0

パスワードロックの試行回数を5に変更.

# samba-tool domain passwordsettings set --account-lockout-threshold=5

パスワード試行回数が0になるまでの時間を5分に変更

# samba-tool domain passwordsettings set --reset-account-lockout-after=5

(13)自動起動スクリプト設定

こちらのサイトの指示どおりに設定.まず,samba-ac-dcというファイルを作る.できたものはこちら.これを/etc/rc.d/init.dにコピー.実行可能にする.

# chmod 755 /etc/rc.d/init.d/samba-ad-dc
# chkconfig --add samba-ad-dc
# chkconfig samba-ad-dc on

(14)ADユーザーの管理

はじめに,AD構築に必要なディレクトリを作る.グループadminsを作り,ADユーザーはadminsのメンバーとして登録.

# mkdir -m 1777 /home/samba
# mkdir -m 1777 /home/samba/profiles
# mkdir -m 1777 /home/samba/netlogon
# groupadd admins

既存のLinuxユーザーをSamba共有でサーバーにアクセスできるようにする.例えば,新たなSambaユーザーapacheをuid48のLinuxユーザーと同期して作成.

# samba-tool user create apache --uid-number=48

新たなLinuxユーザーを作成,AD管理下のクライアントマシンにログインできるようにする.

ユーザー名    yamashita
仮パスワード   
password
サーバーIP   
150.7.26.xx
サーバー名   
alpha3

# useradd yamashita -g admins -p password -s /bin/false
# chmod 1777 /home/yamashita
# rm /home/yamashita/.* -R
# samba-tool user create yamashita password
# samba-tool group addmembers "Domain Admins" yamashita
# pdbedit -u yamashita --profile="\\\\150.7.26.xx\profiles\%USERNAME%"

Sambaユーザーのリストを表示

# samba-tool user list

特定のグループのメンバーをj表示

# samba-tool group listmembers "Domain Admins"
# samba-tool group listmembers "Domain Users"

Sambaユーザーの削除

# samba-tool user delete apache

Sambaユーザーの削除詳細情報を表示

# pdbedit -u apache -v

(15)Windows10マシンをADへ登録

ここからは,Windows 10 Professioalのクライアントマシンでの作業.まずは,「設定」→「ネットワークとインターネット」→「アダプターのオプションを変更する」とクリックして,クライアントマシンのLANカードのIPv4の設定画面を出す.DNSサーバーを,ADサーバーに変更.

続いて,コントロールパネルの「システム」から「設定の変更」→「変更(C)...」をクリック.ワークグループからドメイン「endolab」に変更.

「OK」をクリックすると,ADのアドミンの名前とパスワードを訊いてくる.

入力すると,「endolabへようこそ」の画面が出る.再起動すれば,貴方のPCはendolabのメンバーだ.

※最初,この作業をルーター下流にある動的IPのマシンでやろうとしたが,どうやっても上手く行かなかった.グローバルIPを与えるとあっさりサーバーを認識.この後,再び動的IPに戻しても,サーバーは認識される.最初のログインだけは静的IPで行うべきということがわかった.もちろん,もっと良い方法は有るのだろうが結果オーライ.

(16)ログオンスクリプトの有効化

Microsoftが無償で提供している「Windows 10 用のリモート サーバー管理ツール」を使い,クライアントマシンから設定を変更する.Samba3の頃はsmb.confにログオンスクリプトの場所を指定すれば自動実行されたが,Samba4ではこの機能は無効化されている.

ログオンスクリプトを置こう.スクリプトの場所は「\\Alpha3\netlogon」で,スクリプト名は「netlogon.js」とする.

まずはダウンロード,インストール.Windows 10 用のリモート サーバー管理ツール 1709版は一部互換性に問題があるそうなので,枯れたほうを選択.

Domain AdminsグループのユーザーでWindows10にログインする.スタートメニューから「Windows管理ツール」→「グループ ポリシーの管理」をクリック.左のツリーから「ドメイン」→「endolab.local」→と辿って,「Default Domain Policy」を右クリック.「編集」を選択.

現れるのが「グループ ポリシー管理エディター」.「ユーザーの構成」→「ポリシー」→「Windowsの設定」→「スクリプト(ログオン/ログオフ) 」でようやく目的地.右ウィンドウの「ログオン」をクリック.「\\Alpha3\netlogon」にある「netlogon.js」を指定して完了.

もう一つ,忘れてはならないのが,ログオンスクリプトの遅延の無効化.どういうわけか,デフォルトではADサーバーはログオンスクリプトをログオン後5分経ってから実行する設定になっている.ネットで検索すると,いろいろと情報が出てくるが,あまりに理不尽な仕様ではないか.

「グループ ポリシー管理エディター」から,「ユーザーの構成」→「ポリシー」→「管理用テンプレート」→「すべての設定」と辿る.以下の画面が登場.「ログオン スクリプトの遅延を構成する」を「有効」にして,遅延時間を0に設定.

(17)フォルダリダイレクト

Active Directoryの仕組みは冒頭に述べたとおりだが,ここで,「いちいちコピー,書き戻しするのは面倒じゃない?」と思った人がいると思う.それを避ける仕組みはあって,「フォルダリダイレクト」という.要するに,Windowsからは,サーバー上に保存されたユーザープロファイルが,ローカルディスクの「c:\ユーザー」に見えるという仕組み.ネットワークの帯域が充分ある環境でのお薦めだ.

「グループ ポリシー管理エディター」から,「ユーザーの構成」→「ポリシー」→「Windowsの設定」→「フォルダーリダイレクト 」と辿る.以下の画面が登場.

設定可能なフォルダーは全部で13ある.個別に設定可能.残念ながら,一括設定はできない.

AppData,デスクトップ,スタートメニュー,ドキュメント,お気に入り,連絡先,ダウンロード,リンク,検索,保存されたゲームは左図の設定.それ以外は,右図のように,「ドキュメント」フォルダの下位フォルダに置くことができる.

 

(18)参考になったサイト

 

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

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

続いて本体.2018/03/28現在のバージョンは3.2.4だ.wgetではダウンロードできないようになっていたので,ここからダウンロードして適当なフォルダにコピー.

※ファイル名がswatchdogに変わっている.スイスの某時計メーカーからクレームがあったものと推測される.

# cd /root
# tar zxvf swatchdog-3.2.4.tar.gz
# cd swatchdog-3.2.4
# perl Makefile.PL
# make
# make test
# make install

これだけを,上から順番に実行していけばインストールされる.

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

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

# swatchdog -V
This is swatchdog version 3.2.4
Built on Aug 25, 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
 
5186 pts/0 S 0:00 /usr/bin/perl /usr/bin/swatchdog -c /root/.swatchrc -t /var/log/messages
 5187 pts/0 S 0:00 /usr/bin/perl /.swatchdog_script.5186
 5362 pts/0 S+ 0:00 grep --color=auto swatch

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

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

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

#vi /etc/postfix/aliases




# trap decode to catch security attacks
decode: root

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

エイリアス更新

# 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月,メールサーバーが不正中継の踏み台にされた.対策は万全だが,念の為メールサーバーの活動を報告させるようにした.使うのは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を使ったグラフィカルな設定が便利.メニューから[システム]→[Scheduled Cron Jobs]と辿ると以下の画面になる.

「新しいスケジュールの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

Vine linux 6.1 Install Memo