インストールメディアから無理やりWin10のインスタンスを作成する方法

OpenStackのWindowsイメージを作成する手順は, 一般的にはKVMでvirtioドライバをあわせてインストールするのが標準的。
参考:https://docs.openstack.org/ja/image-guide/windows-image.html

その他仮想環境(ESXi等)でWindowsをインストールして, その上でvirtioをインストールするというのも, まぁあり。

今回は無理やりOpenStack上でisoインストーラからWindowsをインストールして起動させるということを試した。

手順

1. isoイメージを登録
2. flavorを作成
3. インスタンス起動

と普通のながれだけれども, metadataとしてhw_disk_busとhw_cdrom_busとhw_vif_modelを指定することがポイントとなる。
メタデータは「hw_disk_bus=ide」「hw_cdrom_bus=ide」hw_vif_model=e1000」を設定する。
メタデータについてはこちらを参照。

OpenStackはRDOのOcataでAll-in-One構成。

イメージ作成

openstack image create --disk-format iso --property hw_disk_bus=ide --property hw_cdrom_bus=ide --property hw_vif_model=e1000 --file ./Win10.iso Win10.image

フレーバー作成

openstack flavor create --ram 2048 --ephemeral 36 --vcpus 2 --property hw_disk_bus=ide --property hw_cdrom_bus=ide --property hw_vif_model=e1000 Win10

※ エフェメラルディスクが認識されるのでここはCドライブとして見せたいサイズを指定する。
※ メタデータはフレーバーでは指定しなくても動くけど, 入れたほうが反応がマシになる気がしている。(真偽不明)

インスタンス作成

openstack server create --flavor Win10 --nic --net-id=xxx --image Win10.image --property hw_disk_bus=ide --property hw_cdrom_bus=ide --property hw_vif_model=e1000 Win10

結論

instanceのメタデータ(とくにhw_disk_bus=ide)を指定すればインストールメディアからのインスタンス作成はできることが分かった。
とりあえず動けば良いのであればそれでも良さそうだけれども, どうもimageやflavorも指定した方が動きがマシな気がする。
けれどもまともに使いたいのであればvirtioドライバを入れた方がよいので, virtioドライバがもはや無いOSに対してはこの手順は有効かと思われます。(Win2000とか・・・)

metadata
hw_disk_bus=ide
metadata
hw_disk_bus=ide
metadata
hw_disk_bus=ide
metadata
hw_disk_bus=ide
flavor 有り 無し 無し 無し
image 有り 有り 無し 無し
instance 有り 有り 有り 無し
インストール可能か Yes Yes Yes No

インストール画面が出た

インスタンスのhw_disk_busがideになっていて
エフェメラルディスクがあればディスクが見える

インスタンスのhw_disk_bus=ideが無いとディスクなしで終了となる

ひとまずこんな起動もできるよ的なメモとして。

VyOS-1.1.8のqcow2イメージを作る

過去, 幾度かやったけど毎度記憶が薄れていくので都度メモを残す。
(2018/4/18修正:MAC周りで不具合でたので修正)

1. isoダウンロード
2. 仮想ディスク作成
3. KVMで起動
4. VyOSインストール
5. sysprep

# isoダウンロード
wget https://downloads.vyos.io/release/1.1.8/vyos-1.1.8-amd64.iso
# 仮想ディスク作成
qemu-img create -f qcow2 ./vyos.qcow2 2G
# 仮想ディスク指定で起動
virt-install --name vyos118 --disk path=./vyos-1.1.8.qcow2 --vcpus=2 --ram 2048 --cdrom=./vyos-1.1.8-amd64.iso --os-type=linux --graphics vnc,listen=0.0.0.0 --noautoconsole
# VyOSにログイン
virsh console vyos118
# イメージインストール
system image install
# 以降, 「Yes」を連打。終わったらrebootして確認。
# 再起動後, インタフェースにMACの記述があったら削除
vyos@vyos$ conf
vyos@vyos# delete interface ethernet eth0 hw_id **
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit

以上。

CiscoルータでのVTI+IKEv2設定(NAT越し)~対VyOS編~

ということで,Cisco~VyOS間でも試した。

検証した結果わかったことは以下の通り。

・VyOS1.1.x台ではVTI+IKEv2ではVPNは張れない。
   いや, 張れるんだけど(Phase2まで上がるんだけど) 疎通が取れない。
・EC2のElastic IPで,末尾が0だと(サブネットゼロだと)Cisco側でネットワークアドレスとしてみなされるらくしPhase2で失敗する。(たとえ ip subnet-zero が入っていたとしても)
<追記>
・改めてCisco~VyOS間のトラフィックを確認したら, 正常にトラフィックが流れていないことに気がついた。VyOSからソースIFをVTI指定してのPingでないとトラフィックがトンネルを通らない。Beta版のバグなのかな。
なので, 現時点ではVPNは張れるがまともに使えないという状況。要調査。

VyOSのBeta版はこちらからダウンロードする。
https://downloads.vyos.io/?dir=rolling/current/amd64
今回のバージョンはvyos-999.201802070337-amd64.iso
参考までにアップグレード方法を。
本家にやり方ありますが一応。

$ conf
# set system name-server 8.8.8.8 (Google先生スミマセン)
# commit
# exit
$ sudo su
# wget beta版URL
# exit
$ add system image file
$ show system image
The system currently has the following image(s) installed:

1: 999.201802070337- (default boot)
2: 1.1.8 (running image)
$ reboot

これでオッケー。
なお,設定はVTIのときとほぼ同じで至ってシンプル。

set interfaces vti vti1 address '10.10.10.1/30'
~途中省略~
set vpn ipsec esp-group ESP compression 'disable'
set vpn ipsec esp-group ESP lifetime '3600'
set vpn ipsec esp-group ESP mode 'tunnel'
set vpn ipsec esp-group ESP pfs 'dh-group14'
set vpn ipsec esp-group ESP proposal 1 encryption 'aes256'
set vpn ipsec esp-group ESP proposal 1 hash 'sha256'
set vpn ipsec ike-group IKE ikev2-reauth 'no'
set vpn ipsec ike-group IKE key-exchange 'ikev2'
set vpn ipsec ike-group IKE lifetime '3600'
set vpn ipsec ike-group IKE proposal 1 dh-group '14'
set vpn ipsec ike-group IKE proposal 1 encryption 'aes256'
set vpn ipsec ike-group IKE proposal 1 hash 'sha256'
set vpn ipsec ipsec-interfaces interface 'eth0'
set vpn ipsec site-to-site peer B.B.B.B authentication id '10.200.10.20'
set vpn ipsec site-to-site peer B.B.B.B authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer B.B.B.B authentication pre-shared-secret 'password'
set vpn ipsec site-to-site peer B.B.B.B authentication remote-id '192.168.1.2'
set vpn ipsec site-to-site peer B.B.B.B connection-type 'initiate'
set vpn ipsec site-to-site peer B.B.B.B default-esp-group 'ESP'
set vpn ipsec site-to-site peer B.B.B.B ike-group 'IKE'
set vpn ipsec site-to-site peer B.B.B.B ikev2-reauth 'inherit'
set vpn ipsec site-to-site peer B.B.B.B local-address '10.200.10.20'
set vpn ipsec site-to-site peer B.B.B.B vti bind 'vti1'
set vpn ipsec site-to-site peer B.B.B.B vti esp-group 'ESP'

これでトンネル間の疎通が取れた。

vyos@VPN1:~$ ping 10.10.10.2 interface vti1 PING 10.10.10.2 (10.10.10.2) from 10.10.10.1 vti1: 56(84) bytes of data. 64 bytes from 10.10.10.2: icmp_seq=1 ttl=255 time=6.92 ms 64 bytes from 10.10.10.2: icmp_seq=2 ttl=255 time=6.86 ms

ちなみにVyOS1.1.8(以前)の場合,show crypto session や show vpn ipsec sa でステータスがアップになるが,疎通が取れない。VyOS側で確認するとトンネルインタフェースがAdmin Down状態となってしまう。(原因不明)

vyos@VPN2:~$ sh int vti vti1
vti1@NONE: mtu 1500 qdisc noqueue state DOWN group default
link/ipip 10.200.10.20 peer B.B.B.B
inet 10.10.20.1/30 scope global vti1
valid_lft forever preferred_lft forever

RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collisions
0 0 0 0 0 0

VyOS1.1.x系はIKEv2に対してはlimited supportということで,今回は現時点で最新のベータバージョンを利用した。

CiscoルータでのVTI+IKEv2設定(NAT越し)

EC2にCisco1000vを立て, 自宅とVPNを張る。
以前, VyOSとでGRE over IPSecVTIと2パターンやったが, 今回はVTI+IKEv2でやる。
まずはCisco同士でトライ。

はじめに

「何故IKEv2でやろうとしたか」
単純にv2だからより安全なんだろうと思ったから。
IKEv1と何が違うのかは様々なサイトに詳しく書いてある。
・UNIVERGE IXシリーズ FAQ「IKEv2に関するFAQ
・Cisco IOS セキュリティ コンフィギュレーション ガ イド「Cisco IOS セキュリティ コンフィギュレーション ガ イドインターネット キー エクスチェンジ バージョ ン 2(IKEv2)の設定
個人的には設定の可視化レベルがcrypto mapよりは高いと感じた。P1のポリシーもピア毎に指定できるのでこのあたりは便利だと思う。(Site-to-Siteだとあまり恩恵は感じられないかもしれない)

構成概要

2台のルータでIPSecをVTI+IKEv2で張る。
それぞれのルータはNAT越しに通信する。
鍵交換はPSK。
暗号化周りはAES256, SHA2-256, DH 14。

構成概略図

前提条件

・EC2上にインスタンス作成済
・そのインスタンスにElastic IP割当済
・適切にセキュリティグループは設定済(UDP500・4500は許可等)
・自宅のGlobal IPは固定前提
・ブロードバンドルータでポートフォワーディング設定済

設定手順

Config上から流し込んでいくイメージでOK。
・IKEv2のプロポーザル設定
・IKEv2のポリシー設定
・IKEv2のKey設定
・IKEv2のプロファイル設定
・トランスフォームセット設定
・IPSECプロファイル設定
・トンネルインタフェース作成
・VTI適用

いざ設定

Configを抜粋。
基本的にこのまま流し込めばOK。

C841M
C1000v
!プロポーザル設定
crypto ikev2 proposal IKEv2_Proposal
encryption aes-cbc-256
integrity sha256
group 14

! ポリシー設定
crypto ikev2 policy IKEv2_Policy
proposal IKEv2_Proposal

!キー設定
crypto ikev2 keyring IKEv2_Key_Cisco
peer C1000V
address A.A.A.A
pre-shared-key password

! プロファイル設定
crypto ikev2 profile IKEv2_Profile_Cisco
match identity remote address 10.200.10.12 255.255.255.255
identity local address 192.168.1.2
authentication remote pre-share
authentication local pre-share
keyring local IKEv2_Key_Cisco
lifetime 3600

! トランスフォームセット設定
crypto ipsec transform-set IPSEC esp-aes 256 esp-sha256-hmac
mode tunnel

! IPSECプロファイル設定
crypto ipsec profile VTI_Cisco
set transform-set IPSEC
set ikev2-profile IKEv2_Profile_Cisco

! Tunnelインタフェース設定
interface Tunnel1
ip address 172.16.10.1 255.255.255.0
tunnel source G0/0
tunnel mode ipsec ipv4
tunnel destination A.A.A.A
tunnel protection ipsec profile VTI_Cisco
! プロポーザル設定
crypto ikev2 proposal IKEv2_Proposal
encryption aes-cbc-256
integrity sha256
group 14

! ポリシー設定
crypto ikev2 policy IKEv2_Policy
proposal IKEv2_Proposal

!キー設定
crypto ikev2 keyring IKEv2_Key_Cisco
peer C841M
address B.B.B.B
pre-shared-key password

! プロファイル設定
crypto ikev2 profile IKEv2_Profile_Cisco
match identity remote address 192.168.1.2 255.255.255.255
identity local address 10.1.1.10
authentication remote pre-share
authentication local pre-share
keyring local IKEv2_Key_Cisco
lifetime 3600

! トランスフォームセット設定
crypto ipsec transform-set IPSEC esp-aes 256 esp-sha256-hmac
mode tunnel

! IPSECプロファイル設定
crypto ipsec profile VTI_Cisco
set transform-set IPSEC
set ikev2-profile IKEv2_Profile_Cisco

! Tunnelインタフェース設定
interface Tunnel1
ip address 172.16.10.2 255.255.255.0
tunnel source G0/0
tunnel mode ipsec ipv4
tunnel destination B.B.B.B
tunnel protection ipsec profile VTI_Cisco

確認

c1000v#sh crypto ikev2 sa
IPv4 Crypto IKEv2 SA

Tunnel-id Local Remote fvrf/ivrf Status
1 10.1.1.10/4500 B.B.B.B/4500 none/none READY
Encr: AES-CBC, keysize: 256, PRF: SHA256, Hash: SHA256, DH Grp:14, Auth sign: PSK, Auth verify: PSK
Life/Active Time: 3600/2111 sec

IPv6 Crypto IKEv2 SA

c1000v#sh crypto ipsec sa

interface: Tunnel1
Crypto map tag: Tunnel1-head-0, local addr 10.1.1.10

protected vrf: (none)
local ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
remote ident (addr/mask/prot/port): (0.0.0.0/0.0.0.0/0/0)
current_peer B.B.B.B port 4500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 10, #pkts encrypt: 10, #pkts digest: 10
#pkts decaps: 10, #pkts decrypt: 10, #pkts verify: 10
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0

local crypto endpt.: 10.1.1.10, remote crypto endpt.: B.B.B.B
plaintext mtu 1422, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet1
current outbound spi: 0x3478CA01(880331265)
PFS (Y/N): N, DH group: none

inbound esp sas:
spi: 0x9AF7C1FF(2599928319)
transform: esp-256-aes esp-sha256-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 2068, flow_id: CSR:68, sibling_flags FFFFFFFF80000048, crypto map: Tunnel1-head-0
sa timing: remaining key lifetime (k/sec): (4607998/1485)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE(ACTIVE)

inbound ah sas:

inbound pcp sas:

outbound esp sas:
spi: 0x3478CA01(880331265)
transform: esp-256-aes esp-sha256-hmac ,
in use settings ={Tunnel UDP-Encaps, }
conn id: 2067, flow_id: CSR:67, sibling_flags FFFFFFFF80000048, crypto map: Tunnel1-head-0
sa timing: remaining key lifetime (k/sec): (4607999/1485)
IV size: 16 bytes
replay detection support: Y
Status: ACTIVE(ACTIVE)

outbound ah sas:

outbound pcp sas:

c1000v#sh crypto session
Crypto session current status

Interface: Tunnel1
Profile: IKEv2_Profile
Session status: UP-ACTIVE
Peer: B.B.B.B port 4500
Session ID: 6
IKEv2 SA: local 10.1.1.10/4500 remote B.B.B.B/4500 Active
IPSEC FLOW: permit ip 0.0.0.0/0.0.0.0 0.0.0.0/0.0.0.0
Active SAs: 2, origin: crypto map

以上, お疲れ様でした。

Logstashのマルチパイプライン設定

Filebeatsからの入力とローカルのファイルを読み込んでの処理を分けるためにマルチパイプラインの設定をする。

blog-pipeline-log.jpg
公式サイト(Introducing Multiple Pipelines in Logstash)より

https://www.elastic.co/blog/logstash-multiple-pipelines
https://www.elastic.co/guide/en/logstash/master/multiple-pipelines.html

以前作成したFilebeatsの設定ファイルを転用して, CSVファイル用の設定ファイルを作成して, それぞれ異なるパイプラインで処理する設定を行う。
CSVファイルで使うのは長年エクセルで管理してグラフ化していた光熱費のデータを使う(笑)。

手順
1. /etc/logstash/pipelines.yml 作成
2. filebeatsのConfig(既存転用)とCSV用のConfigを作成
3. index Pattern作成
4. グラフ作成

1. pipelines.yml 作成

pipelines.ymlには各パイプラインの設定を記述する。ここに記述されなかった設定はlogstash.ymlを参照してそれに従うとのこと。
・pipelines.yml には個別設定
・logstash.yml には共通設定
という住み分けらしい。(多分)

vi /etc/logstash/pipelines.yml

# For beats
- pipeline.id: filebeat
pipeline.workers: 2
pipeline.batch.size: 125
pipeline.batch.delay: 5
config.reload.automatic: true
config.reload.interval: 5s
path.config: "/etc/logstash/pipeconf.d/beats.conf"

# For csv
- pipeline.id: csvfile
pipeline.workers: 1
pipeline.batch.size: 125
pipeline.batch.delay: 5
config.reload.automatic: true
config.reload.interval: 5s
path.config: "/etc/logstash/pipeconf.d/csv.conf"

これに伴って /etc/logstash/logstash.yml を以下のように変更した。
vi /etc/logstash/logstash.yml

path.data: /var/lib/logstash
log.level: info
path.logs: /var/log/logstash

最低限のものに絞ったので設定値はpipelines.ymlへ持っていった。

2. csv用設定ファイル作成

csvファイルは次のような要素になっている。
「YYYYM,電気代,水道代,ガス代」
実際のデータはこんな感じ。
「201712,9308,11765,10018」

logstashはlogstashユーザで起動するので, データの配置場所は参照できるところへ配置する。(私はユーザのホームにおいてread権限あるから大丈夫だろうと思っていたらハマった。)
各パイプライン用の設定ファイルは /etc/logstash に pipeconf.d というディレクトリを新たに作成してそこに配置した。
vi /etc/logstash/pipeconf.d/csv.conf

input {
file {
path => "/tmp/logstash/kounetsu.csv"
start_position => "beginning"
}
}

filter {
csv {
columns => ["date", "elec", "water", "gus"]
skip_empty_columns => true
convert => {
"elec" => "integer"
"water" => "integer"
"gus" => "integer"
}
}
date {
match => [ "date", "yyyyM"]
}
}

output {
elasticsearch {
hosts => [ "http://172.16.10.50:9200" ]
index => "kounetsu"
}
}

3. index pattern作成

elasticsearchへ”kounetsu”というインデックスで渡しているので kibana でこれを指定してインデックスパターンを作成する。

4. グラフ作成

ここはお好みでとなりますが。。。

完成。


できるまで結構ハマっていたのでこれをポチった。 無駄にはならないよね・・・。

CiscoのAPPFWのログをfilebeat→logstash→elasticsearchからのkibanaでMap表示させる

昨年からダラダラと座学に取り組んできたものが年を超えてようやく形になったのでメモ。
もともとSplunkに変わる大体手段として何かないかなーと探していたところ, ELKでお試しという試みだったけど, 諸々の事情(後でやるやる詐欺)でこんなにも時間がかかった。

全体像

1. CiscoからSyslogを飛ばし, Rsyslogで受け取る。
2. Filebeatで該当ファイルをLogstashへ送る。
3. LogstashでパースしてElasticsearchへ送る。
4. Kibanaで表示。

全体像

オールインワン構成とした。

FilebeatからElasticsearchへ直接という方法もあるようだけど, インデックス作成周りでよくわからないことに陥りそうだから, Webでよく見るfluentd+logstash構成に習った。
なお, 有償のX-packは使わない。

一連の流れ

1. インスタンス作成, 事前準備
2. 各種インストール・設定
3. 詳細設定
4. 動作確認

1. インスタンス作成, 事前準備

はじめにELKを立てるインスタンスを準備する。
インデックス作成にJavaを使うということで, このJavaがリソースを結構持っていくのでリソースは多めに割り当てた。CentOS7でvcpu: 4 mem: 12GB disk: 60GB。
$ openstack flavor create --ram 12288 --disk 60 --vcpus 4 elastic-flavor
$ openstack server create --flavor elastic-flavor --image CentOS7 --key-name elastic-key elastic

インスタンスができたらrsyslogの設定。(※florting IPの設定は省略)
<Syslog方針>
– Cisco側はfacility local3でサーバへ渡す。
– Local3で受信したログは /var/log/rsyslog/ 配下に”hostname.log”で作成させる。

@Cisco

logging facility local3

vi /etc/rsyslog.conf

$template DynFile,"/var/log/rsyslog/%HOSTNAME%.log
local3.* -?DynFile

*.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages

続いてJDKのインストール。

# yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-debug.x86_64 java-1.8.0-openjdk-devel.x86_64

オールインワン構成だけど, IP指定で構成するのとCiscoの名前解決必要なのでhostsファイルを編集する。
/etc/hosts 編集

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.10.50 elastic
192.168.10.1 local-c841m

2. 各種インストール・設定

オフィシャルのオンラインマニュアルを参考にインストールできる。
Elasticsearch手順
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/rpm.html
Kibana手順
https://www.elastic.co/guide/en/kibana/6.1/rpm.html
Logstash手順
https://www.elastic.co/guide/en/logstash/6.1/installing-logstash.html
Filebeat手順
https://www.elastic.co/guide/en/beats/filebeat/6.1/filebeat-installation.html

2.1 リポジトリ登録

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

/etc/yum.repos.d/elasticsearch.repo 作成

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


2.2 インストール

yum install elasticsearch kibana logstash
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.1-x86_64.rpm
yum install ./filebeat-6.1.1-x86_64.rpm

2.3 Elasticsearch設定
とりあえず動作確認までこぎつけるため, 基本的な設定のみを実施。(Cluster.nameやnetwork.hostは気分で変えた)
/etc/elasticsearch/elasticsearch.yml

cluster.name: elastichome
node.name: elastic
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200

起動設定。

systemctl enable elasticsearch
systemctl start elasticsearch

2.4 Logstash設定
filebeat用の設定ファイルは後にして一通り設定を済ます。
(ログ読み込まないなー等うまくいかない時はここで自動読み込み設定ONにしてlogレベルを適宜変更するとよい。)

path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d/*.conf
config.reload.automatic: true
config.reload.interval: 5s
log.level: info
path.logs: /var/log/logstash

起動設定。

systemctl enable logstash
systemctl start logstash

2.5 Kibana設定
ここもほぼ基本的な設定のみ。
/etc/kibana/kibana.yml

server.port: 5601
server.host: "172.16.10.50"
server.name: "elastic"
elasticsearch.url: "http://172.16.10.50:9200"
elasticsearch.username: "kibana"
elasticsearch.password: "kibanapassword"
logging.dest: /var/log/kibana/kibana.log

起動設定。

systemctl enable kibana
systemctl start kibana

2.6 Filebeat設定
監視対象のログ指定と出力先をlogstashにする設定を入れる。
logstashでのフィルタ条件で利用するtagの設定も入れる。

filebeat.prospectors:
- type: log
paths:
- /var/log/rsyslog/*.log
fields:
log_type : ciscolog
fields_under_root: true
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
reload.period: 10s
index.number_of_shards: 3
index.codec: best_compression
_source.enabled: false
setup.dashboards.enabled: false
output.logstash:
hosts: ["172.16.10.50:5044"]
index: "filebeat"
username: "logstash_internal"
password: "logstashpassword"
logging.level: debug

起動設定。

systemctl enable filebeat
systemctl start filebeat

3 フィルタリングとかインデックスとか設定

3.1 設定ファイル作成
Filebeat用のlogstash設定ファイルを /etc/logstash/conf.d/beat.conf として作成する。

input {
beats {
port => 5044
}
}
filter {
if [log_type] == "ciscolog" {
grok {
match => {
"message" => "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:log_host} %{NUMBER:unixtimestamp}: %{SYSLOGTIMESTAMP:ciscotimestamp} %{WORD:timezone}: %{GREEDYDATA:facility}: %{DATA:application} %{GREEDYDATA:msg_1} - %{WORD:protocol} %{WORD:msg_2} %{IP:src_ip}:%{NUMBER:src_port} %{IP:dst_ip}:%{NUMBER:dst_port} %{GREEDYDATA:msg_3}"
}
}
geoip {
source => "dst_ip"
}
mutate {
convert => {
"src_port" => "integer"
"dst_port" => "integer"
}
}
}
}
output {
elasticsearch {
hosts => [ "http://172.16.10.50:9200" ]
index => "myfilebeat-%{+YYYY.MM}"
}
}

※補足説明
7行目:   if [log_type] == “ciscolog” {

filebeatの設定で /var/log/rsyslog/*.log に対してciscologというlog_typeというフィールドを付与したので, ここで条件マッチングさせている。
他にもログを捕捉する場合はこのあたりで適宜フールドを追加して処理を変える目的。
ここでは省略しているけど, audit.log等も対象としていたのでこの設定入れた。

10行目:  “message” => “%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:log_host} %{NUMBER:unixtimestamp}: %{SYSLOGTIMESTAMP:ciscotimestamp} %{WORD:timezone}: %{GREEDYDATA:facility}: %{DATA:application} %{GREEDYDATA:msg_1} – %{WORD:protocol} %{WORD:msg_2} %{IP:src_ip}:%{NUMBER:src_port} %{IP:dst_ip}:%{NUMBER:dst_port} %{GREEDYDATA:msg_3}”
CiscoルータのゾーンベースのFWログフォーマットを見ながらパーシングしたい箇所を切り出せるように記述する。
grokフィルタが良く分からないときはここ(Grok Debugger)を参考にトライアンドエラーでがんばる。GREEDYDATA(*と同義)を使って少しずつ細分化していくのがおすすめ。
14行目:  source => “dst_ip”
geoipフィルタで対象となるIPアドレスを指定する。
今回はログから通信先がどこか地図にマッピングすることを考えているので, ログ内のdst_ip(通信先IPアドレス)を指定した。
16行~21行: mutateの行
ここは実際にパースしたらなぜかtypeがtextになっていたので入れた。気になったのでtypeをコンバートする設定を追加。テンプレートあたりをしっかり理解すればこんなことしなくてもよいのかもしれない。
27行目:  index => “myfilebeat-%{+YYYY.MM}”
elasitcsearchへ出力する際にインデックスを追加する。

3.2 インデックス作成
インデックスはKibanaにログインし, 「Management → Index Patterns」でインデックスを作成する。

インデックス作成画面

これでいけるか!と思ったけど実際にマップ作成をやってみると, “kibanaのGeo Coordinatesマップで参照されるgeo_pointとなるタイプが無い”となって作成できない。

デフォルトのfilebeatのテンプレートを元に, 新たに作成する。
<手順>
Kibana上のDevToolsに「GET _template/filebeat-*」と入れ, 出力結果を編集してPUTする。
1. 元となるテンプレートを元に新しいテンプレートを作成する。

{
"filebeat": {
"order": 1,
"index_patterns": [
"myfilebeat-*"
],

~中略~
}
}
},
"geoip": {
"properties": {
"continent_name": {
"type": "keyword",
"ignore_above": 1024
},
"country_iso_code": {
"type": "keyword",
"ignore_above": 1024
},
"location": {
"type": "geo_point"
},
"region_name": {
"type": "keyword",
"ignore_above": 1024
},
"city_name": {
"type": "keyword",
"ignore_above": 1024
}
}
}

}
}
},
"aliases": {}
}
}

2. テンプレートをPUTする。
1の内容をDevToolsでPUTする。

PUT _template/filebeat
※ ここに1の内容を入れる

4. 確認

ここまで来ればKibana上で次のように表示されるはず。

インデックスが作成されている
geoip.locationというフィールドがgeo_pointタイプで作成されている

Map作成は

  1. Visualize → 「+」新規作成 → MapsのCoordinate Map
  2. myfilebeat-* を選択
  3. Bucketsで「GeoCoodinate」を選択
  4. Aggregationで「Geohash」を選択
  5. Fieldで「geoip.location」を選択

で完了。

次のようなMapが表示される。

Map表示。

Splunkのほうが大分楽にMap作成はできるけどSPLを覚えるのと比較すると, まぁどっこいどっこいかな。

とりあえずの動作確認ができた。
これからは細かく分析・その他データの可視化を目標として検証すすめる。

メンバーズカードって統一できないのか

ふと思った。
メンバーズカードが多すぎる。
ポイントカードやクレジットカード、はては診察券。免許証、保険証。

百歩ゆずって証明書になるものはしゃーない。個別でいい。

ICチップに全部統合させちゃいなよ。NFCでもいいしさ。(この辺も規格の覇権争いがあるんでしょうけど)

統一規格を誰かつくってちゃっちゃとまとめてくれないかしら。

それがダメならもうスマホアプリで我慢する。

WebのようにOpenIDと連携してーみたいなものとかさ。

とにかくこの新しい何かを始める度にカードが増えていく地獄から救ってほしい。

スタートアップでありそうなんだけどね。ないかしら。

【メモ】CentOSにVirtualboxをインストールする

ESXにvCenterを入れたいのだけれども、今あるESXではメモリが足りないという事情があり、OpenStack上にCentOS7を立ててその中にVirtualBoxをインストールして、さらにその中にESXを動かそうという試み。

まぁ、ESXi over VirtualBox over KVM というまともに動くとは思えないことをやろうとしているのだけれども、手持ちの資源でやむなく(そしてとりあえず)やるだけやってみる。
その準備として、CentOS7にVirtualBoxを入れる。
オフィシャルに入れ方があるのでそのままやる。
<手順>
  1. virtualboxのリポジトリ登録
  2. kernel-devel インストール
  3. gcc / make インストール
  4. virtualbox インストール
  5. KERN_DIR の環境変数を設定
  6. OS再起動
  7. kernelのリビルド
こんな流れ。
– 1.
[virtualbox]
name=Oracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
– 2.
yum install kernel-devel-3.10.0-327.28.3.el7.x86_64
yum update

– 3.

yum install gcc make

– 4.

yum install VirtualBox-5.1.x86_64

– 5.

export KERN_DIR=/usr/src/kernels/3.10.0-514.26.2.el7.x86_64

– 6.

reboot

– 7.

/usr/lib/virtualbox/vboxdrv.sh setup

以上。

あとはvirtualboxコマンドで無事起動。

さて, ここからが問題だ・・・。

【メモ】sshdの暗号化設定を変える

sshdの設定をSHA1をオフにすることが目的。

この辺を参考にした。

/etc/ssh/sshd_config を編集。
# 暗号強度指定
Ciphers aes256-ctr,aes192-ctr,arcfour256
# sha-1 除外
MACs hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com

確認。

# sshd -T | grep macs
macs hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com
# sshd -T | grep cip
ciphers aes256-ctr,aes192-ctr,arcfour256