2017年8月18日金曜日

Xubuntu 16.04にxrdpを使ってRDPでリモートデスクトップ接続をする

LinuxをデスクトップPCとして使いたいと思いXubuntuを使ってみることにした。なぜXubuntuを選択したかというと、Ubuntuの標準デスクトップ環境であるUnityが個人的に使いづらかったというのが理由となる。

Linuxに対してリモートデスクトップ接続する場合は、VNCを使うのが昔は一般的だったが、今ではWindowsのRDP (Remote Desktop Protocol)によるリモートデスクトップ接続も簡単にできるようになったので、その方法を記載する。

xrdpのインストール

apt-getを使ってxrdpをインストールするだけで、簡単にRDPでリモートデスクトップ接続できるLinuxができあがる。

# apt-get install xrdp
------------------------------
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  vnc4server xbase-clients
提案パッケージ:
  vnc-java x11-xfs-utils
以下のパッケージが新たにインストールされます:
  vnc4server xbase-clients xrdp
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 3 個。

~(中略)~

xrdp (0.6.1-2) を設定しています ...
systemd (229-4ubuntu19) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
------------------------------

試しに、Windowsマシンから「リモートデスクトップ接続」を使ってXubuntuにRDP接続をしてみる。いつもと違う警告が表示されるものの、特に問題なく接続できた。

ちなみにバージョンを確認すると、0.6系となっており、最新版は0.9系であるため、古いバージョンとなっている。

# xrdp --version
------------------------------
xrdp: A Remote Desktop Protocol server.
Copyright (C) Jay Sorg 2004-2011
See http://xrdp.sourceforge.net for more information.
Version 0.6.1   ←★バージョンが古い
------------------------------

最新版をインストールするには以下URLのスクリプトを使ってコンパイルしてインストールするらしいのだが、コンパイルが途中で失敗するため頓挫した。

・日本xrdpユーザ会 - X11RDP-o-Matic
https://xrdp.vmeta.jp/X11RDP-o-Matic

キーボード配列を日本語配列で認識させる

xrdpでログインして、ターミナルなどを開いて「shift+2」などを押すとわかるが、「"」ではなく「@」と表示されてしまう。これは、キーボード配列を英語配列で認識してしまっていることが原因のようだ。このままでは漢字変換もできない状態となるため、修正を行う。

日本語配列に変更する場合は、まず、以下URLから「km-0411.ini」というファイルをダウンロードする。

・日本xrdpユーザ会 - キー配列について
https://xrdp.vmeta.jp/%E3%82%AD%E3%83%BC%E9%85%8D%E5%88%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

ダウンロードしたファイルを/etc/xrdp直下に配置する。

# cd /etc/xrdp
# ls -l
------------------------------
合計 100
-rw-r--r-- 1 xrdp xrdp 8756 10月 26  2014 km-0407.ini
-rw-r--r-- 1 xrdp xrdp 8655 10月 26  2014 km-0409.ini
-rw-r--r-- 1 xrdp xrdp 8744 10月 26  2014 km-040c.ini
-rw-r--r-- 1 xrdp xrdp 8732 10月 26  2014 km-0410.ini
-rw-r--r-- 1 root root 8703  8月 14 15:40 km-0411.ini   ←★これを配置
-rw-r--r-- 1 xrdp xrdp 9169 10月 26  2014 km-0419.ini

~(以下略)~
------------------------------

他ファイルとオーナーを合わせた後、別名でシンボリックリンクを張る。

# cd /etc/xrdp
# chown xrdp:xrdp km-0411.ini
# ln -s km-0411.ini km-e0200411.ini
# ln -s km-0411.ini km-e0010411.ini

最後にxrdpを再起動して反映させれば完了。

# systemctl restart xrdp

ターミナルでTAB補完を使えるようにする

xrdpでログインし、ターミナルを開いてコマンドのTAB補完を試みると、なぜか動作せず、ウィンドウの切り替え動作をしてしまう事象が発生した。

対処方法は、ホームディレクトリ~/.config/xfce4/xfconf/xfce-perchannel-xmlのファイルを以下の通り修正する。

------------------------------
修正前:       <property name="&lt;Super&gt;Tab" type="string" value="switch_window_key"/>
修正後:       <property name="&lt;Super&gt;Tab" type="empty"/>
------------------------------

実際に接続してみる

Windowsのリモートデスクトップ接続を使って、xrdpをインストールしたLinuxのIPアドレスに接続すると、以下のようなログイン画面が表示されるので、ユーザーとパスワードを入力してログインする。


以下の通り、XubuntuのXfceのデスクトップ環境が表示された。


2017年8月12日土曜日

Apache HTTP Server 2.2をrpmからインストールする

検証のためにApache HTTP Server (httpd)をRHEL 6にインストールしようとした際に、微妙に依存関係のあるパッケージが多く、依存関係の解消が面倒だったので、忘れないようにメモしておく。

環境としては、RHEL 6.5を「基本サーバー」としてインストールしたものとなる。

インストール手順

まず、RHELのOSメディアをマウントする。今回はESXi 6.0の仮想化環境となるが、CD-ROMとしてマウントしているので、読み込み専用の旨のメッセージが表示される。

# mount /dev/cdrom /mnt
------------------------------
mount: ブロックデバイス /dev/sr0 は書き込み禁止です、読込み専用でマウントします
------------------------------

OSメディア内のPackagesフォルダにある、Apache HTTP Server (httpd)をインストールしてみると、なにやら4つほど依存関係のメッセージが表示されインストールに失敗する。

# cd /mnt/Packages
# rpm -ivh httpd-2.2.15-29.el6_4.x86_64.rpm
------------------------------
警告: httpd-2.2.15-29.el6_4.x86_64.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
エラー: 依存性の欠如:
        apr-util-ldap は httpd-2.2.15-29.el6_4.x86_64 に必要とされています
        httpd-tools = 2.2.15-29.el6_4 は httpd-2.2.15-29.el6_4.x86_64 に必要とされています
        libapr-1.so.0()(64bit) は httpd-2.2.15-29.el6_4.x86_64 に必要とされています
        libaprutil-1.so.0()(64bit) は httpd-2.2.15-29.el6_4.x86_64 に必要とされています
------------------------------

上記依存関係を解消するためには、以下の通りパッケージをインストールしていけばよい。postgresql-libsが必要となるところがわかりづらい。

# rpm -ivh postgresql-libs-8.4.18-1.el6_4.x86_64.rpm
# rpm -ivh apr-1.3.9-5.el6_2.x86_64.rpm
# rpm -ivh apr-util-1.3.9-3.el6_0.1.x86_64.rpm
# rpm -ivh apr-util-ldap-1.3.9-3.el6_0.1.x86_64.rpm
# rpm -ivh httpd-tools-2.2.15-29.el6_4.x86_64.rpm

上記インストール後、再度httpdのインストールを試みると、以下の通り成功するはず。

# rpm -ivh httpd-2.2.15-29.el6_4.x86_64.rpm
------------------------------
警告: httpd-2.2.15-29.el6_4.x86_64.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
準備中...                ########################################### [100%]
   1:httpd                  ########################################### [100%]
------------------------------

2017年8月9日水曜日

QNAPとOpenVPNを使って自宅にVPN接続する方法

インターネット経由で自宅のネットワークにアクセスできると何かと便利ではあるが、外からRDPやSSHで接続できるようポートを開けてしまうと、外部からの攻撃や乗っ取りのリスクが高まるため望ましくない。実際に身近でも、外からRDPで接続できるようポートを開けていたら、PCが乗っ取られてしまったというケースを聞いたことがある。

というわけで外部から自宅内ネットワークに安全にアクセスするために、VPNによるアクセスを実施することにした。具体的には、QNAPのNASをVPNサーバーとして設定し、WindowsやAndroidからVPNで接続できるようにしてみた。

QNAPの設定

本記事で掲載する画面キャプチャは、QTSバージョン:4.3.3のものとなるが、4.2.xでもほぼ同様の画面となっているはず。

まず、App Centerを開き、「QVPN Service」をインストールする。


インストール後、QVON Serviceを開く。VPNの方式として、「PPTP」、「OpenVPN」、「L2TP/IPsec」の3種類が選べる画面が表示されるが、今回は「OpenVPN」でのみ有効化する。


その後、OpenVPNの設定画面を開き、「証明書のダウンロード」ボタンをクリックすると<ホスト名>-ovpn.zipというファイルがダウンロードできる。このファイルの中には、以下が含まれている。

 ・openvpn.ovpn : OpenVPNのプロファイルファイル
 ・ca.crt     : 証明書

このファイルは後ほど、OpenVPNのクライアント側で必要となるので、PC等に保存しておこう。


また、権限設定の画面で、接続可能とするユーザー一覧を設定できる。今回はVPN接続用に専用ユーザーを作っておいた(念のため画像のユーザー名は黒塗りしておく)。


ルーターの設定

OpenVPNはUDPの1194ポートを使うため、ブロードバンドルーターでポート開放を行う必要がある。設定方法は各社のルーターのマニュアルを確認するしかないが、通常は「ポートマッピング」といった呼ばれ方の設定項目があるはずで、外部からの特定ポートのアクセスをLAN側の特定のサーバに転送する(NATする)機能となる。

設定内容としては以下のように行う。

 ・LAN側ホスト:QNAPのIPアドレスを設定
 ・プロトコル:UDP
 ・ポート番号:1194

Windowsからの接続

Windowsの場合、まずは以下URLからOpenVPNのクライアントをダウンロードする(「Windowsインストーラ」をダウンロードすればよい)。

ダウンロードURLの注意書きに「vpnux Clientがお勧めです」との記載もあるので、そちらを利用してもよい。私はvpnux Clientは使ったことがないので、今回はOpenVPNを使って接続する。

・OpenVPN.JP - ダウンロード
https://www.openvpn.jp/download/


インストーラーを実行して、すべてデフォルトでインストールをすればよい。途中でデバイスのインストールの警告が表示されるが、こちらも「インストール」を押しておく。


インストール後、先ほどQNAPからダウロードしたプロファイルファイル(openvpn.ovpnとca.crt)の配置を行う。配置パスは以下となる。

C:\Program Files\OpenVPN\config


あとは、「OpenVPN GUI」を起動すると、タスクトレイにアイコンが表示されるので、右クリック→「接続」で接続ができるはず。


Androidからの接続

Androidの場合は、Google Play Storeから「Open VPN Connect」を検索して、インストールをする。

OpenVPN Connectを起動して、右上の設定ボタンから「Preferences」を選択し、「Force AES-CBC ciphersuites」を有効にしておく。これを設定しておかないと、なぜか接続に成功しなかった。


次に、QNAPからダウロードしていたプロファイルファイルをインポートするのだが、Windowsと異なり少し細工が必要となる。簡単に言うと、openvpn.ovpnとca.crtのファイルを1つに統合する必要がある。

openvpn.ovpnをテキストエディタで開き、以下赤字箇所を変更する。

・openvpn.ovpn (修正前)
------------------------------
client
dev tun2001
script-security 3
proto udp
explicit-exit-notify 1
remote  <Server Address>  1194
resolv-retry infinite
nobind
ca ca.crt
auth-user-pass
reneg-sec 0
cipher AES-128-CBC
tls-cipher TLS-SRP-SHA-RSA-WITH-3DES-EDE-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA
comp-lzo
------------------------------

・openvpn.ovpn (修正後)
------------------------------
client
dev tun2001
script-security 3
proto udp
explicit-exit-notify 1
remote  <Server Address>  1194
resolv-retry infinite
nobind
<ca>
-----BEGIN CERTIFICATE-----     ←★ca.crtの中身をそのまま貼る
XXXXXXX

~(中略)~

XXXXXXX
-----END CERTIFICATE-----
</ca>
auth-user-pass
reneg-sec 0
cipher AES-128-CBC
tls-cipher TLS-SRP-SHA-RSA-WITH-3DES-EDE-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA
comp-lzo
------------------------------

上記のopenvpn.ovpnをAndroid上にコピーし、「Import」→「Import Profile from SD card」で該当ファイルを選択しインポートする。

あとは、「OpenVPN Connect」で接続すれば、以下の通り接続できるはず。


以上で、QNAPをVPNサーバーとして、外部からVPNすることに成功した。外出先から自宅環境のファイルを見たり、検証サーバーにアクセスしたり、非常に便利と感じている。

2017年7月28日金曜日

SCEPの定義ファイルを手動で適用するスクリプトを作った

先日、Windows Defenderの定義ファイルを更新するスクリプトを作ってみたのだが、SCEPでも同様にできるものかと試してみた、という小ネタ。

結論から言うと少しコマンドの修正が必要だった(黄色網掛け箇所)。Windows DefenderとSCEPでは、同じ動作をするコマンドレットであっても、微妙にコマンドレット名が違うので注意が必要。

------------------------------
#
# SCEP定義ファイル更新スクリプト
# update_scep.ps1
#

# SCEPのモジュールをインポート
Import-Module "C:\Program Files\Microsoft Security Client\MpProvider\MpProvider.psd1"

# 定義ファイルのダウンロード先を指定
$url = "https://go.microsoft.com/fwlink/?LinkID=87341"

# 定義ファイルのダウンロードフォルダを指定
$workdir = "c:\work\"

# 実行コマンド
$cmd = $workdir + "mpam-fe.exe"

# 定義ファイルをダウンロード
Invoke-WebRequest -Uri $url -OutFile $cmd

# 適用チェック
if ( (Get-Item $cmd).VersionInfo.FileVersion -eq (Get-MProtComputerStatus).AntivirusSignatureVersion ){
   echo "定義ファイルは最新です。"   
}else{
   echo "定義ファイルを更新します。"

   # 更新処理
   Start-Process $cmd -Wait
}
------------------------------

定義ファイルは毎日更新されるようなので、タスクスケジューラーで毎日実行するように仕掛けておけばよい。

2017年7月19日水曜日

Raspberry Piの本体LEDを消灯する方法

Raspberry Piは、電源LED(PWR LED / 赤色)とMicroSDカードへのアクセス時に点灯するLED(ACT LED / 緑色)の2種類が付いているが、特に電源LEDは常時点灯であるため、夜になって部屋を暗くすると目障りとなることがある。


Raspberry Piの本体LEDは、OS(Raspbian)から動作を制御することができるので、その方法を記載する。

LED消灯手順

LEDを制御するためのファイルは以下に存在する。

/sys/class/leds/led0   ←ACT LED / 緑色
/sys/class/leds/led1   ←PWR LED / 赤色

上記パスにあるtriggerというファイルに、LED点灯のトリガーが記載されているので確認してみよう。

$ cat /sys/class/leds/led0/trigger
------------------------------
none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on input panic [mmc0] mmc1 rfkill0 rfkill1 
------------------------------

$ cat /sys/class/leds/led1/trigger
------------------------------
none kbd-scrolllock kbd-numlock kbd-capslock kbd-kanalock kbd-shiftlock kbd-altgrlock kbd-ctrllock kbd-altlock kbd-shiftllock kbd-shiftrlock kbd-ctrlllock kbd-ctrlrlock timer oneshot heartbeat backlight gpio cpu0 cpu1 cpu2 cpu3 default-on [input] panic mmc0 mmc1 rfkill0 rfkill1 
------------------------------

[]で囲まれた箇所が現在の設定となっており、led0はmmc0、led1はinputとなっていることがわかる。他にも多数の項目があるようだが、とりあえず消灯するだけであれば、"none"を選択すればよい。

なお、"none"の設定にした場合は、同一パスにあるbrightnessというファイルの設定も修正が必要となる。brightnessは0が消灯で0以外の数値(例えば1や255)が点灯となる。ACT LEDについては、デフォルトでbrightnessが0となっているので消灯する場合は設定は不要となるが、PWR LEDの場合は255で設定されているので、0に設定する。

以上をまとめると、以下3行のコマンドで両方のLEDの消灯が実現できる。

<ACT LEDを消灯>
$ echo none | sudo tee /sys/class/leds/led0/trigger

<PWR LEDを消灯>
$ echo none | sudo tee /sys/class/leds/led1/trigger
$ echo 0 | sudo tee /sys/class/leds/led1/brightness

再起動後も消灯する方法

上記の消灯設定は、本体再起動をするとリセットされてしまう。再起動時にも消灯したい場合は、"rc.local"ファイルにコマンドを追記する。

$ cat /etc/rc.local
------------------------------
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# Turn off LED
echo none | sudo tee /sys/class/leds/led0/trigger   ←★追記
echo none | sudo tee /sys/class/leds/led1/trigger   ←★追記
echo 0 | sudo tee /sys/class/leds/led1/brightness   ←★追記

exit 0
------------------------------

参考

・Controlling Raspberry Pi 2 LEDs
https://gist.github.com/taktran/1b691c08216dd30b70bf


2017年7月14日金曜日

我が家にRaspberry Piがやってきた!② (OS初期設定編)

前回でRaspberry PiにOSのインストールまでできたので、最低限必要となる初期設定を実施していこう。初期設定は、すべてGUIで実施できるように設計されているので、Linux初心者も簡単に設定できる。

GUIによる設定は、「左上のRaspberryアイコン」→「設定」→「Raspberry Piの設定」から行う。なお、下図では日本語表示となっているが、初回起動時はなぜか英語表示となっていた。英語表記の場合は、「左上のRaspberryアイコン」→「Preferences」→「Raspberry Pi Configuration」を選択する。


なお、各設定は反映時に再起動を求められることがあるので、適宜再起動しながら設定を行う。

piユーザーのパスワード変更

Raspberry Piにデフォルトで用意されているpiユーザーは、デフォルトパスワードのままでは危険なので、パスワードを変更しておく。普通にpasswdコマンドでもよいが、GUIでも実施可能となっている。

「Raspberry Piの設定」→「System」から「Change Password...」ボタンをクリックして変更が可能となる。
※日本語表示の画面を保存していなかったため、以下は英語表記の画像となる。



ホスト名の変更

同様にホスト名も変更する。「Raspberry Piの設定」→「System」から、「Hostname」に新ホスト名を記入すればよい。


ホスト名を変更すると、実際には以下ファイルに変更が実施されるようだ。

$ cat /etc/hostname
------------------------------
t3015rasp
------------------------------

$ cat /etc/hosts
------------------------------
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       t3015rasp
------------------------------

SSHの有効化

「Raspberry Piの設定」→「インターフェイス」にて、接続を有効にするプロトコル一覧が出てくる。今回はSSHで外部から接続して作業をできるように有効に設定しておく。



タイムゾーンの変更

タイムゾーンをUTCからJSTに変更しておく。地域・位置は、多数の選択肢があるが、Asia/Tokyoを選んでおけばOK。


NTPDの設定

Raspberry PiはデフォルトでNTPDが動作しており、時刻同期も普通に実施されている。以下はデフォルトで設定されている同期先の一覧となる。

------------------------------
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst
------------------------------

特にこだわりがなければ設定変更は不要だが、手動で同期先を変更したい場合は、通常通り/etc/ntp.confファイルを更新すればよい。

以下は私の環境の例となる。環境に合わせて★印の箇所のIPアドレス(またはホスト名)を変更すればよい。

$ cat /etc/ntp.conf
------------------------------
driftfile /var/lib/ntp/ntp.drift

# restrictは上から順に評価されるため、最初に全て拒否ルールを設定
restrict default ignore
restrict -6 default ignore

# localhostを許可
restrict 127.0.0.1
restrict -6 ::1
# 同期先を許可
restrict 192.168.33.23 kod nomodify notrap nopeer noquery   ←★

# 同期先
server 192.168.33.23 iburst   ←★
------------------------------

NTPDのサービス再起動はsystemctlコマンドで行う。

$ sudo systemctl restart ntp

以下はNTPDの同期ステータス確認コマンドとなる。同期先IPアドレス(またはホスト名)の先頭に「*」があることを確認すればよい。

$ ntpq -p
------------------------------
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.33.23   133.243.238.163  2 u    8   64    1    4.017   -5.366   0.660
------------------------------

Wi-Fiに接続

Raspberry Pi 3 Model Bは、本体にWi-Fiのモジュールを備えており、IEEE 802.11 b/g/n 2.4 GHzによる無線接続が可能となる。

Linuxのネットワーク設定は、/etc配下の設定ファイルに色々記述して設定するという作業を思い浮かべるかもしれないが、GUIから設定することで、Windowsと同じような感覚で簡単に設定することができる。

GUIの右上にある、Bluetoothと音量アイコンの間にあるアイコンがWi-Fiネットワークのアイコンとなる。ここをクリックすると、周辺で見つかるSSIDが表示されるので、接続先のSSIDをクリックする。


Wi-Fiのアクセスポイントに設定されているパスワードを入力する。


これだけでWi-FiルーターからDHCPでIPアドレスを取得し、ネットワークに接続できるようになる。IPアドレスを固定したい場合は、ルーター側でMACアドレスとマッピングするとよいだろう。


以上で初期設定は終了となる。後はRaspberry Piでやりたいことに応じて、色々設定していけばよい。

2017年7月8日土曜日

我が家にRaspberry Piがやってきた!① (OSインストール編)

突然だが、Raspberry Piを使って何かやってみたくなった。調べてみるとAmazonで必要なものはすべて揃うし値段も安価だったので、さっそくAmazonで必要なものを揃えることにした。

今回はRaspberry Piに必要となる機材の購入から、OSインストールの方法までを記載することにする。

Raspberry Piを始めるために必要なもの

Amazonで以下のものをポチった。



 ・本体:Raspberry Pi3 Model B (ケース、ヒートシンク付き)
 ・電源:電源&ON/OFFボタン付きケーブル
 ・ディスプレイ:小さなディスプレイ。HDMIでテレビに映して作業したので出番なし
 ・MicroSDカードリーダー:OSイメージを書き込むために必要

上記の他に以下も必要となる。所有していない場合は、予め購入しておこう。

 ・MicroSDカード:OSで4GB近く使うので、余裕を持って16GB以上を推奨
 ・USBキーボード:安いものでOK
 ・USBマウス:安いものでOK
 ・HDMIケーブル:画面をテレビ等に映して作業したい場合に使う

ちなみに今回購入したRaspberry Piには、CPU用のヒートシンクが2つ付いてくるので、以下写真のように取り付けておこう。両面テープになっているので、簡単に取り付けられる。



NOOBSをMicro SDカードにコピー

必要なものが集まったので、さっそくOSをインストールして使えるようにしよう。Raspberry PiのOSは、DebianベースのRaspbianを使う。まず、OSイメージを入手するため、以下サイトからダウンロードを行う。

・Raspberry Pi Downloads
https://www.raspberrypi.org/downloads/

NOOBS (New Out Of the Box Software)とRaspbianの2つがダウロードできるが、今回はNOOBSを使ってOSインストールを行う。NOOBSとは、Raspberry Piに各種OSをインストールするためのOSとなっており、Micro SDカードにファイルをコピーするだけで、ブートするMicro SDカードを作成することができる。

Micro SDカードへのコピーをする前に、フォーマットをしておこう。ここでは、SD Formatter V4.0を使うことが王道のようなので、以下からダウンロードしてデフォルト設定でフォーマットを掛けておけばよい。

・SDカードフォーマッター
https://www.sdcard.org/jp/downloads/formatter_4/


フォーマット後、解凍したNOOBSのzipファイルの中身をそのままMicro SDカードにコピーするだけでOK。容量は1.4GB程度。


Raspberry Piを起動

それでは、Raspberry Piにディスプレイ(HDMIでテレビ等に接続)とUSBキーボード・USBマウスを接続し、先ほど作成したMicro SDカードを差し込んで、電源を接続して起動させる。電源が投入されると、赤いLEDが光り、Micro SDカードの読み書きが発生すると緑のLEDが光る仕様となっている。


OSインストール

NOOBSの画面が立ち上がるので、以下の通り選択していく。

1. OS選択

OS選択画面で、画面下部にて言語選択ができるので、「日本語」に変更しておく。OSは「Raspbian」を選択する。



2. インストール続行の確認

よくある「OSインストールは既存のデータを上書きするよ」という警告なので、「はい」を選択する。


3. OSインストール開始

OSインストールが開始するので待機する。15分程度で完了する。


4. OSインストール完了

OSインストールが完了した旨が表示されるので、「OK」を選択すると、自動的に再起動される。


5. Raspbian起動

しばらく待つと、Raspbianのデスクトップ画面が表示され、OSインストールは完了となる。


起動する際にID、パスワード入力は求められず、自動でログインされる仕様のようだが、デフォルトユーザーIDとパスワードは以下の通りになっているようだ。

 ・ユーザーID:pi
 ・パスワード:raspberry

デフォルトパスワードは危険なので、すぐに変更が推奨される。この手順も含め、次回以降でOSの初期設定手順について記載していこう。

2017年6月23日金曜日

Windows Defenderの定義ファイルを手動で適用するスクリプトを作った

自宅の検証環境にWindows Server 2016を評価版としてインストールして使っているのだが、Windows Defenderの定義ファイルがうまく更新できないという事象が発生している(WSUS環境なので、WSUS側の問題かもしれない)。

そのため、不定期に定義ファイルをダウンロードして、手動で適用していたのだが、それすらも面倒にもなってきたし、セキュリティ的にも可能な限り定義ファイルは最新にしておきたいと考え、スクリプトを組んで自動化することにした。

手作業でやる場合

Windows Defenderの定義ファイルをダウンロード元は、以下URLとなる。

・Updating your Microsoft antimalware and antispyware software
https://www.microsoft.com/en-us/security/portal/definitions/adl.aspx

「Antimalware and antispyware updates」の項目に、Microsoftの各セキュリティ製品の定義ファイルの最新リンクが記載されているので、該当するものをクリックしてダウンロードする。Windows Server 2016であれば、「Windows Defender in Windows 10 and Windows 8.1 - 64bit」を選べばよい。


「mpam-fe.exe」というexeファイルがダウンロードされる(2017年6月時点で124MB)。このexeファイルをダブルクリックで実行するだけで、定義ファイルが更新される。

スクリプトでやる場合

手作業でやっていた作業を単純にPowerShellで実行するスクリプト「update_windefender.ps1」を作成し、タスクスケジューラで1日1回実行するようにした。動作はPowerShell 3.0で確認している。

------------------------------
#
# Windows Defender定義ファイル更新スクリプト
# update_windefender.ps1
#

# 定義ファイルのダウンロード先を指定
$url = "http://go.microsoft.com/fwlink/?LinkID=121721&arch=x64"

# 定義ファイルのダウンロードフォルダを指定
$workdir = "c:\work\"

# 実行コマンド
$cmd = $workdir + "mpam-fe.exe"

# 定義ファイルをダウンロード
Invoke-WebRequest -Uri $url -OutFile $cmd

# 適用チェック
if ( (Get-Item $cmd).VersionInfo.FileVersion -eq (Get-MpComputerStatus).AntivirusSignatureVersion ){
   echo "定義ファイルは最新です。"   
}else{
   echo "定義ファイルを更新します。"

   # 更新処理
   Start-Process $cmd -Wait
}
------------------------------

シンプルなスクリプトではあるが、Windows版wgetのようなInvoke-WebRequestコマンドの存在を知ることができたり、久しぶりにPowerShellに触れたこともあって、なかなか楽しく作ることができた。

参考

・Defender Cmdlets
https://technet.microsoft.com/ja-jp/library/dn433280.aspx



2017年6月17日土曜日

Zabbixを使ってWindowsとLinuxのログイン失敗を監視する

近年、セキュリティ上の問題から、不正アクセスへの対策は必要不可欠になっている。WindowsやLinuxであれば、ログイン失敗のログはOS標準機能にて出力されているので、そのログをZabbixにて監視させることで、予期しない不正ログインをリアルタイムに捉えることができる。

今回はWindowsとLinuxでログイン失敗した際に、Zabbixを使って検知する方法を記載する。動作確認は以下OSで実施した。

・Windows:Windows Server 2016 (他バージョンも同様に対応可能)
・Linux:CentOS 6、7 (RHELも同様に対応可能)

Windowsの場合

Windowsではログイン失敗時に、セキュリティイベントログに以下が記録される。

------------------------------
失敗の監査 2017/05/30 21:15:28 Microsoft Windows security auditing. 4625 ログオン
------------------------------

上記ログのイベントID 4625をZabbixで検知させる。アイテムとトリガーを以下のように設定すればよい。

◆アイテムを設定
・名前:Eventlog Security
・タイプ:Zabbixエージェント(アクティブ)
・キー:eventlog[Security,,,,4625,,skip]
・データ型:ログ
・更新間隔(秒):30
・ヒストリ保存期間(日):7
・アプリケーション:<任意>


◆トリガーを設定
・名前:Eventlog Security
・条件式:{Template OS Windows:eventlog[Security,,,,4625,,skip].strlen()}>0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害


Linuxの場合

Linuxではログイン失敗時に、/var/log/secureに以下が記録される。

------------------------------
May 30 21:53:28 t3023ce72 sshd[28426]: Failed password for root from 192.168.11.81 port 62145 ssh2
↑★sshログイン失敗

May 30 21:51:39 t3023ce72 login: FAILED LOGIN 1 FROM tty1 FOR root, Authentication failure
↑★コンソールログイン失敗
------------------------------

上記ログに出力される"Failed password"と"FAILED LOGIN"をZabbixで検知させる。アイテムとトリガーを以下のように設定すればよい。

◆アイテムを設定
・名前:secure
・タイプ:Zabbixエージェント(アクティブ)
・キー:log[/var/log/secure,"Failed password|FAILED LOGIN",,,skip]
・データ型:ログ
・更新間隔(秒):30
・ヒストリ保存期間(日):7
・アプリケーション:<任意>


◆トリガーを設定
・名前:secure
・条件式:{Template OS Linux:log[/var/log/secure,"Failed password|FAILED LOGIN",,,skip].strlen()}>0
・障害イベントを継続して生成:チェック
・深刻度:軽度の障害


実際に検知した結果

実際にログイン失敗をしてみると、Zabbixのダッシュボードに障害として上がることが確認できた。


2017年6月7日水曜日

WSFC / MSFC入門

Windows Serverを使う場合、WSFC (Windows Server Failover Clustering)、別名MSFC (Microsoft Failover Clustering)を使ってクラスターを組む場合が多いと思う。クラスターというと、とっつきにくいイメージがあるかもしれないが、今回、Windows Server 2012 R2を使って、サクッとクラスターサーバーを作ってみたいと思う。

WSFCの呼び方は複数ある

余談だが、WSFCはOSや時期によって名前が変わってきており、以下のようになっている。

 ・MSCS:Windows Server 2003 R2以前
 ・WSFC / MSFC:Windows Server 2008 以降

Windows Server 2012 R2のGUI上では、カタカナでフェールオーバークラスターと表記されていたりする。Microsoftのサイトを見る限りでは、WSFCが公式な略称として使用されているようだ。

・例:Windows Server フェールオーバー クラスタリング (WSFC) と SQL Server
https://msdn.microsoft.com/ja-jp/library/hh270278.aspx

本記事では、WSFCで記載を統一することにする。

WSFCの前提条件と今回の構成

WSFCを構成する上での前提条件を以下に記載する。

・同一ドメインに所属することが必要 (すなわちドメインコントローラーが必要)
・クラスター用にIPが1つ、アプリケーション用にIPが1つ必要
・クラスター通信用のネットワークは2つ用意することが推奨 (必須ではないが可用性の観点から推奨)
・アプリケーション用に共有ディスクが必要 (今回はiSCSIで構築)
・クォーラムディスク用に1GB程度の共有ディスクの用意を推奨 (今回はiSCSIで構築)

条件をふまえて、今回のサーバー構成は以下の通りとした。


それでは、上記を構成する手順を順に追っていこう。

WSFC構成手順

1. 共有ディスクをマウント

今回はiSCSIにて2台のノードで共有するディスクをマウントする。マウントする方法は別記事を参照。マウント後は以下のようになる。Eドライブをクラスター用の共有ディスクとし、Qドライブはクォーラム監視用に使用する。


2. 機能を追加

「サーバーマネージャー」の「役割と機能の追加」から「フェールオーバークラスタリング」の機能を両方のノードに追加する。ここは特に難しい設定はなく、ひたすら次へを押していけばよい。


3. フェールオーバークラスターマネージャーの起動

「サーバーマネージャー」の「ツール」から「フェールオーバークラスターマネージャー」を選択する。


4. クラスターの構成の検証

左ペインの「フェールオーバークラスターマネージャー」を右クリックし、「構成の検証」を選択すると、クラスターを組むにあたって、必要な前提条件の確認を自動で検証してくれる。なお、構成の検証は、クラスター作成が初回時の場合も実施を促されるため、一度は実施する必要がある。


構成の検証が終わると、最後にレポートの表示をすることができる。「カテゴリ別の結果」が、すべて「成功」となっていることを確認しておこう。


5. クラスターの作成

検証が終わったら、再度、左ペインの「フェールオーバークラスターマネージャー」を右クリックし、「クラスターの作成」を選択する。

この際にクラスター管理用のクラスター名とIPアドレスの入力を促されるため、適切に設定する。ここで設定したクラスター名とIPアドレスは、ホスト名としてADに登録される。

「使用可能な記憶域をすべてクラスターに追加する」について、今回は手動でディスクの追加を行うこととするため、チェックは外しておく。


クラスターの作成が完了すると、1点警告が表示されるが、クォーラム監視が設定されていないという内容であり、この後の作業で実施するため無視して問題ない。


6. ディスクの追加

左ペインの「フェールオーバークラスターマネージャー」→「クラスター名」→「記憶域」→「ディスク」を右クリックし、「ディスクの追加」を選択すると、「クラスターへのディスク追加」のポップアップが表示されるため、追加したいディスクを選択して「OK」をクリックする。


ディスクが追加されると、デフォルトではディスクの名前が「クラスター ディスク X」という名前となっており判別しづらいので、右クリック→「プロパティ」から名前を変更しておくと管理が楽になる。


最終的にディスクの状態は以下のようになる。EドライブとQドライブが「使用可能記憶域」という状態で追加されている。


7. クォーラムの設定

「フェールオーバークラスターマネージャー」→「クラスター名」を右クリックし、「他のアクション」→「クラスタークォーラム設定の構成」を選択する。


クォーラム監視にはいくつか方式があるようだが、「標準のクォーラム構成を使用する」を選択しておけば、自動的に最適なものが選択される模様。


クォーラム監視のオプションの説明はMicrosoftのサイトに記載があるため、詳細はそちらを参照すること。

・Windows Server 2012 フェールオーバー クラスターでクォーラムを構成および管理する
https://technet.microsoft.com/ja-jp/library/jj612870(v=ws.11).aspx

標準構成で選ばれた構成は以下の通りとなった。

 ------------------------------
 ・監視の種類     :ディスク監視
 ・監視リソース    :Qドライブ
 ・クラスターの管理投票:有効
 ------------------------------

8. 汎用アプリケーションの追加

以上でクラスターの準備は整ったので、実際にアプリケーションをクラスター化してみよう。

今回は簡易的なWebサーバとして、MiniWeb HTTP serverをクラスター化してみることにする。

まず、事前準備として、解凍したMiniWeb HTTP serverのフォルダをEドライブ直下に配置し、コマンドプロンプトで使い方を確認しておく。

E:\miniweb>miniweb.exe -h
------------------------------
MiniWeb (build 300, built on Feb 28 2013)
(C)2005-2013 Written by Stanley Huang <stanleyhuangyc@gmail.com>

Usage: miniweb -h | -u  : display this help screen
               -v       : log status/error info
               -p       : specifiy http port [default 8000]
               -r       : specify http document directory [default .]
               -l       : specify log file
               -m       : specifiy max clients [default 32]
               -M       : specifiy max clients per IP
               -n       : disallow multi-part download
               -d       : disallow directory listing [default ON]
------------------------------

ポート番号は80番にしたいので、実行コマンドは以下の通りとなる。

E:\miniweb\miniweb.exe -p 80

「フェールオーバークラスターマネージャー」→「クラスター名」→「役割」を右クリックし、「役割の構成」を選択する。「高可用性ウィザード」が表示されるので、以下のように設定する。

 ------------------------------
 ・役割の選択          :汎用アプリケーション
 ・汎用アプリケーションの設定
  ・コマンドライン       :E:\miniweb\miniweb.exe
  ・パラメーター        :-p 80
 ・クライアントアクセスポイント
  ・名前            :t1192wsfc
  ・アドレス          :192.168.11.192
 ・記憶域の選択         :Eドライブを割り当て
 ・レジストリ設定のレプリケート :設定なし
 ------------------------------


上記を設定し、構成を終えると最後にレポートが表示される。以下2つの警告が表示されるが、フェールオーバー可能であり、動作には影響なさそうだった。

 ・この役割をサポートしているリソースの種類があるノードは t1121w12r のみです。
 ・この役割をホストできないノードは t1122w12r です。


これでMiniWeb HTTP serverがクラスターに組み込まれた。試しに適当なHTMLファイル(タイトルとブラウザのUser-agentを表示するだけ)を配置して、ブラウザでクラスター用IPアドレス(192.168.11.192)にアクセスすると、正常にHTMLが表示された。


9. フェールオーバーの動作確認

動作確認のため、実際にフェールオーバーさせてみよう。タスクマネージャーから、miniweb.exeを終了させればよい。なお、1回は再起動を試みて復活するので、2回終了させるとフェールオーバーする。

以下は切り替わり後の状態となるが、所有者ノードがt1122w12rになっていることがわかる。当然、Webサーバにも問題なくアクセスできた。


以上でクラスターの構成は終了となる。実際は細かい設定(エラー時の再起動の試行回数や、各クラスターリソースの依存関係の設定)など、いろいろチューニングする要素はあるものの、比較的少ない手順でクラスターを組むことができた。

参考

・MiniWeb HTTP server
https://sourceforge.net/projects/miniweb/