2016年10月17日月曜日

Logstash+Elasticsearch+Kibinaで自宅への不正アクセス状況を可視化してみる

Elasticが流行り始めて久しいですが、自分も使ってみたい。
と言っても、よくあるようなsyslogの監視とかTwitterの解析とかつまらないので
あまり他にやっていないものを読み込ませようと思いました。

と言うことで、勉強にもなるかと思い、サイバー攻撃関連のデータを可視化してみようと思います。
自宅にFWとかProxyとかあれば、それぞれのログを突っ込んでみたいけど、そんな大層なことはやっていないので、外と繋がっている普通の無線LANルータにあるアクセスログを取り込もうと思います。
ちなみに、無線LANルータのログの取り出し方は別にまとめます。一気に書くと内容が多くなりすぎちゃうので。。


事前準備

Elasticで公開されている手順どおりにインストールを進めていく。

まずは必須なパッケージである、JavaとApacheをインストール

# yum install java

# yum install httpd

ちなみに、Web画面でApacheを使うので、 Firewallのポート空けるのを忘れずに。

Logstash,Elasticsearch,Kibanaのインストール

yumでインストールするため、リポジトリを追加する。
以下2ファイルを作成。

# cat /etc/yum.repos.d/Elastic.repo 
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

# cat /etc/yum.repos.d/Logstash.repo 
[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

まずは、ElasticsearchとLogstashパッケージをインストールする。
# yum install elasticsearch
# yum install logstash


Kibanaはインストール不要のため、yumは使わず、Webページから圧縮ファイルをダウンロードしてくる。
# curl -O https://download.elastic.co/kibana/kibana/kibana-4.5.4-linux-x64.tar.gz
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100 31.7M  100 31.7M    0     0  1013k      0  0:00:32  0:00:32 --:--:-- 2611k

解凍し、公開Webのフォルダに格納する。
# tar -zvxf kibana-4.5.4-linux-x64.tar.gz
# mv kibana-4.5.4-linux-x64 /var/www/html/
# mv /var/www/html/kibana-4.5.4-linux-x64 /var/www/html/kibana

セットアップ

まずは、Elasticsearchの設定をする。設定ファイルは以下。
# vi /etc/elasticsearch/elasticsearch.yml 

以下の2箇所を修正、追記。
普通は0.0.0.0で公開されるので設定不要なのだが、VMなど接続するIPアドレスが変わる場合は、きちんと接続可能なIPアドレスを明記する必要あり。
# network.host: 192.168.0.1network.host: ***.***.***.***

# enable cross-origin resource sharing
http.cors.enabled: true

次にKibanaの設定。設定ファイルは以下。
# vi /var/www/html/kibana/config/kibana.yml 

こちらもIPアドレスを記載。
server.host: "192.168.56.101"
elasticsearch.url: "http://192.168.56.101:9200"

最後にLogstashの設定。
ElasticsearchとKibanaはただ連携する設定しかしていないけど、
Logstashは対象のログファイルの読み込み設定とフォーマット、
Elasticsearchと連携する設定を行う。

以下ファイルを作成。
# vi /etc/logstash/conf.d/Security.conf

中身はこんな感じです。
input {
  file{
    path="/var/log/PR500MI/rSecurity.log"
    start_position = "beginning"
  }
}

filter {
  grok{
    match={
      "message" = "%{DATA:logdate} SRC=%{IP:srcip}/%{NUMBER:srcport} DST=%{IP:dstip}/%{NUMBER:dstport} %{WORD:protocol} %{DATA:action}\[%{DATA:actiondetail}\]"
    }
  }
  date {
    match = ["logdate", "YYYY/MM/dd HH:mm:ss"]
    locale = "en"
  }
  geoip {
    source = ["srcip"]
  }
}

output { elasticsearch {
    hosts = [  "192.168.56.101:9200" ]
  }
} 

解説を入れておくと、
input{ file{ pathで指定するのが読み込む対象のファイル(今回は別で取り込んでいる無線LANルータのアクセスログ)
start_position〜の記載は、ファイルの読み込みを先頭から行うように指定。
(デフォルトだと末尾から読み込む?らしいので)

また、
filter{ grok{ matchは、読み込むログのフォーマットを指定する。
フォーマットは以下にまとまっている。
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

また、フォーマットをチェックするために、以下のサイトを活用した。
http://grokdebug.herokuapp.com/

ここまででとりあえずはセットアップ完了。

起動

実際に起動してみる。
順番は、Logstash -> Elasticsearch -> Kibanaの順(なはず)

Logstashの起動
# service logstash start

設定ファイルの誤りでログの読み込みに失敗している、などの情報はログに残る。
 /var/log/logstash配下に出てるので確認する。

次にElasticsearchの起動
# service elasticsearch start
こちらも同様にログをチェックして、エラーが出ていないか確認する。
こちらは/var/log/elasticsearch配下です。

最後のKibanaの起動
# /var/www/html/kibana/bin/kibana

Kibanaでログデータを確認

長かった準備はここまででKibanaでログデータが参照できるか確認してみる。
KibanaのURL(http://***.***.***.***:5601/)へアクセスする。
こんな画面が出てくるはず。


書いてある通り、ここではIndexを指定する。
Kibanaでは分析するログデータのIndexとなる列を指定することで、柔軟な分析が可能となる。

本来、ここのページではログデータ内のカラムを参照し、Indexとなる列を選択させる画面である。
こんな風に選択する画面が出てくるのが正しいはず。

じゃあ、今回は何故違ったかと言うと、ログデータが正しく読み込めていないためだった。
色々ログファイルを見てみると、Elasticsearchのエラーログに以下のエラーが出ていた。(一部いじっています)
[2016-09-23 23:40:03,346][DEBUG][action.bulk              ] [Cobalt Man] [logstash-2016.09.23][4] failed to execute bulk item (index) index {[logstash-2016.09.23][logs][AVdXfSraUEBq1amZMjWs], source[{"message":"/09/23 13:56:48 SRC=119.93.79.167/35125 DST=***.***.***.***/23 TCP 廃棄[パケットフィルタ]","@version":"1","@timestamp":"2016-09-23T14:40:02.635Z","path":"/var/log/PR500MI/Security.log","host":"centos.localdomain","logdate":"/09/23 13:56:48","srcip":"119.93.79.167","srcport":"35125","dstip":"***.***.***.***","dstport":"23","protocol":"TCP","action":"廃棄","actiondetail":"パケットフィルタ","tags":["_dateparsefailure"],"geoip":{"ip":"119.93.79.167","country_code2":"PH","country_code3":"PHL","country_name":"Philippines","continent_code":"AS","region_name":"53","city_name":"Muntinlupa","latitude":14.390299999999996,"longitude":121.04750000000001,"timezone":"Asia/Manila","real_region_name":"Rizal","location":[121.04750000000001,14.390299999999996]}}]}
MapperParsingException[failed to parse [logdate]]; nested: IllegalArgumentException[Invalid format: "/09/23 13:56:48"];
 at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:329)
 at org.elasticsearch.index.mapper.DocumentParser.parseObjectOrField(DocumentParser.java:309)
 at org.elasticsearch.index.mapper.DocumentParser.parseValue(DocumentParser.java:436)
 at org.elasticsearch.index.mapper.DocumentParser.parseObject(DocumentParser.java:262)
 at org.elasticsearch.index.mapper.DocumentParser.parseDocument(DocumentParser.java:122)
 at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:309)
 at org.elasticsearch.index.shard.IndexShard.prepareCreate(IndexShard.java:529)
 at org.elasticsearch.index.shard.IndexShard.prepareCreateOnPrimary(IndexShard.java:506)
 at org.elasticsearch.action.index.TransportIndexAction.prepareIndexOperationOnPrimary(TransportIndexAction.java:215)
 at org.elasticsearch.action.index.TransportIndexAction.executeIndexRequestOnPrimary(TransportIndexAction.java:224)
 at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:327)
 at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:120)
 at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:68)
 at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:639)
 at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
 at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:279)
 at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryOperationTransportHandler.messageReceived(TransportReplicationAction.java:271)
 at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:75)
 at org.elasticsearch.transport.TransportService$4.doRun(TransportService.java:376)
 at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Invalid format: "/09/23 13:56:48"
 at org.joda.time.format.DateTimeParserBucket.doParseMillis(DateTimeParserBucket.java:187)
 at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:826)
 at org.elasticsearch.index.mapper.core.DateFieldMapper$DateFieldType.parseStringValue(DateFieldMapper.java:362)
 at org.elasticsearch.index.mapper.core.DateFieldMapper.innerParseCreateField(DateFieldMapper.java:528)
 at org.elasticsearch.index.mapper.core.NumberFieldMapper.parseCreateField(NumberFieldMapper.java:241)
 at org.elasticsearch.index.mapper.FieldMapper.parse(FieldMapper.java:321)
 ... 22 more

"[Invalid format: "/09/23 13:56:48"]"なんてのを見ると分かるけど、無線LANルータのログファイルのデータが正しく読み込めていないことが原因で、パースエラーが起こっている様子だった。
ログファイルには、ちゃんと"2016/09/23 13:56:48 ..."と記載されていたが、なぜかElasticsearchで読み込まれるときには"/09/23 13:56:48"となってしまっていました。。

まとめ

実は、この原因が解決せず、Elasticは諦めました。誰か原因わかれば教えてください。
次回、同じことをSplunkで行った結果をまとめます。

2016年9月24日土曜日

ファイルの中身を逆順にするRubyスクリプト

ぐぐってみたけど、しっくりくるものが見つからなかったので、載せておきます。
プログラミング授業の課題でありそうなので、参考にしてください。
#!/usr/local/bin/ruby
require 'fileutils'

orgFile = "original.txt"
newFile = "new.txt"

File.open(newFile, "w") do |new_f|
  File.open(orgFile) do |org_f|
    lines = org_f.readlines # ファイルの中身を一行ずつ読み込み、配列に格納する
    lines.reverse!          # 配列の中身の順序を入れ替える
    lines.each do |s|
      new_f.puts(s)         # 配列の中身を一行ずつファイルに書き込む
    end
  end
end

実行すると、こんな感じになります。
# cat original.txt
1, aaa
2, bbb
3, ccc
# ruby  reverse.rb
# cat new.txt
3, ccc
2, bbb
1, aaa

もちろん、色々なやり方があると思いますが、自分は上のやり方がわかりやすいと思いました。

2016年8月28日日曜日

VirtualBoxのCentOS7入れて、sshでログインできるようにするまで

今までVMware使ってたけど、Mac環境なのでVirtualBoxを入れてみた。
そして、CentOS7をインストールして環境準備したけど。。

ホスト→ゲストに繋がらない。。
WindowsでVMware使ってたときは、ゲストOSのネットワーク設定をブリッジにしたら、ちゃんと別のIPアドレスが割り当てられたのに、VirtualBoxだと別セグメントのIPアドレスが割り当てられている。


色々調べてみると、2種類のNICを準備する必要があることが判明。
  • NAT
  • ホストオンリーアダプター(ネットワーク)
NATのNICで、【VMゲスト(CentOS)】ー【インターネット】との通信を行う。
ホストオンリー〜のNICで、【VMゲスト(CentOS)】ー【VMホスト(Mac)】の通信を行う。
詳細は以下で行うが、ネットワークのイメージはこんな感じ。
(IPアドレス、NIC名はウチで試した結果なので、環境によって異なります)



ホストオンリーアダプターの作成

まずVirtualBoxの設定で、ホストオンリーアダプターを準備する。

  1. VirtualBoxの「環境設定」メニューを選択
  2. 「ネットワーク」⇒「ホストオンリーネットワーク(H)」をクリック
  3. 右側にある一番上のボタンをクリックし、ホストオンリーネットワークを作成



仮想マシンにNICを割り当てる

次に、VMゲストの設定で、NICを2つ割り当てる。
  1. VirtualBoxで作成したVMを選択し、「設定」ボタンをクリック
  2. 「ネットワーク」をクリック
    (デフォルトでアダプター1にNATが割り当てられていることを確認、なければNATを割り当てる)
  3. アダプター2を選択し、ネットワークアダプターを有効化を選択。名前は先程作成したホストオンリーネットワークを選ぶ



仮想マシン上のOSでNICを有効化


最後に、VMゲストのOS上の設定で、NICを有効化する。
ただ、うまく行ってれば、自動的に認識され、有効化されているはず。
確認はifconfigを実行してみる。

# ifconfig
enp0s3: flags=4163  mtu 1500
        ether 08:00:27:4c:ef:c2  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163  mtu 1500
        inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe8e:fbd2  prefixlen 64  scopeid 0x20
        ether 08:00:27:8e:fb:d2  txqueuelen 1000  (Ethernet)
        RX packets 48  bytes 7479 (7.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 42  bytes 7737 (7.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


一瞬、3つ認識されているから大丈夫かと思ったが、インターネットへの通信に失敗している。
よくみると、NATのNIC(enp0s3)がIPアドレス割り当てられていない。
NICの設定を見る。

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

 すると、「ONBOOT=no」となっており、有効化されていなかった。
「ONBOOT=yes」に書き換えてネットワークを再起動。

すると、今度はちゃんとIPアドレスが割り当てられており、インターネットへの接続も成功した。

# ifconfig
enp0s3: flags=4163  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe4c:efc2  prefixlen 64  scopeid 0x20
        ether 08:00:27:4c:ef:c2  txqueuelen 1000  (Ethernet)
        RX packets 2  bytes 1180 (1.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9  bytes 1254 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163  mtu 1500
        inet 192.168.56.101  netmask 255.255.255.0  broadcast 192.168.56.255
        inet6 fe80::a00:27ff:fe8e:fbd2  prefixlen 64  scopeid 0x20
        ether 08:00:27:8e:fb:d2  txqueuelen 1000  (Ethernet)
        RX packets 578  bytes 51817 (50.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 334  bytes 57715 (56.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ちなみに、ルーティングテーブルはこんな感じになってるはず。

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 enp0s3
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 enp0s3
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 enp0s8


以上、VirtualBoxでVM作った際のネットワーク設定についてでした。

2016年7月24日日曜日

楽譜として使えるタブレットPCか電子書籍リーダーはないか

楽器を演奏するときに譜面を見るけど、いい加減電子化したい。
大学の頃からPDF化しまくってて、弾きたい楽譜が3桁いっちゃってるのはどうにかしたい。

2年以上前にiPadを購入したときに試しにやろうと思ってPDFの楽譜を表示させてみたけど、全然小さくて使い物にならず。。
やはりA4サイズ以上は欲しいところと思って、A4サイズ以上のタブレットPCとか電子ペーパーを探そうと思った。

・・・ただ、ここで気になったのがA4サイズって何インチなんだろうってこと。
探す前に確認すると、A4は14.3インチだった。ちなみに、A3で20.3インチ。

戻って、タブレットPCを調べるために価格コムへ。
一番大きいサイズで20インチのP社タブレットPCが出てきたけど、30万もするのでボツ。
S社で15.6インチが9万弱だったので、これも高いなぁ。。。

ただ、P社タブレットPCは大体A3、S社タブレットPCはA4くらいのサイズなので、
これ以上小さいのは使えないだろうなぁ・・・なんて思って探すのを中断した。

ミュージシャンの皆さんどうしているんでしょう?やっぱりまだ電子化するには早いのかな。
もっと安く済ますことはできないのかな。。

2016年6月18日土曜日

ubuntuに/var/wwwディレクトリがない

今までRedHat系ばっかり使っていてubuntuを食わず嫌いしてたので、最近触っています(大学生の頃には使ってたけど、そこまでOSに詳しくなかったし)

でもっていきなりはまったのが、「/var/www」ディレクトリが見つからない件。
デフォルトでapacheとかインストールされたりしないんだっけ。。

って思って調べてたら、やっぱりきちんとインストールが必要だったみたい。
デスクトップ版なせいか標準では入らないのかな。

$ sudo apt-get install apache2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています 
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap
liblua5.1-0
提案パッケージ:
apache2-doc apache2-suexec-pristine | apache2-suexec-custom
以下のパッケージが新たにインストールされます:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap liblua5.1-0
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 82 個。
1,532 kB のアーカイブを取得する必要があります。
この操作後に追加で 6,350 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libapr1 amd64 1.5.2-3 [86.0 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1 amd64 1.5.4-1build1 [77.1 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-dbd-sqlite3 amd64 1.5.4-1build1 [10.6 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-ldap amd64 1.5.4-1build1 [8,720 B]
取得:5 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 liblua5.1-0 amd64 5.1.5-8ubuntu1 [102 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2-bin amd64 2.4.18-2ubuntu3 [918 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2-utils amd64 2.4.18-2ubuntu3 [81.1 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2-data all 2.4.18-2ubuntu3 [162 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 apache2 amd64 2.4.18-2ubuntu3 [86.6 kB]
1,532 kB を 1秒 で取得しました (1,484 kB/s)
以前に未選択のパッケージ libapr1:amd64 を選択しています。
(データベースを読み込んでいます ... 現在 244131 個のファイルとディレクトリがインストールされています。)
.../libapr1_1.5.2-3_amd64.deb を展開する準備をしています ...
libapr1:amd64 (1.5.2-3) を展開しています...
以前に未選択のパッケージ libaprutil1:amd64 を選択しています。
.../libaprutil1_1.5.4-1build1_amd64.deb を展開する準備をしています ...
libaprutil1:amd64 (1.5.4-1build1) を展開しています...
以前に未選択のパッケージ libaprutil1-dbd-sqlite3:amd64 を選択しています。
.../libaprutil1-dbd-sqlite3_1.5.4-1build1_amd64.deb を展開する準備をしています ...
libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) を展開しています...
以前に未選択のパッケージ libaprutil1-ldap:amd64 を選択しています。
.../libaprutil1-ldap_1.5.4-1build1_amd64.deb を展開する準備をしています ...
libaprutil1-ldap:amd64 (1.5.4-1build1) を展開しています...
以前に未選択のパッケージ liblua5.1-0:amd64 を選択しています。
.../liblua5.1-0_5.1.5-8ubuntu1_amd64.deb を展開する準備をしています ...
liblua5.1-0:amd64 (5.1.5-8ubuntu1) を展開しています...
以前に未選択のパッケージ apache2-bin を選択しています。
.../apache2-bin_2.4.18-2ubuntu3_amd64.deb を展開する準備をしています ...
apache2-bin (2.4.18-2ubuntu3) を展開しています...
以前に未選択のパッケージ apache2-utils を選択しています。
.../apache2-utils_2.4.18-2ubuntu3_amd64.deb を展開する準備をしています ...
apache2-utils (2.4.18-2ubuntu3) を展開しています...
以前に未選択のパッケージ apache2-data を選択しています。
.../apache2-data_2.4.18-2ubuntu3_all.deb を展開する準備をしています ...
apache2-data (2.4.18-2ubuntu3) を展開しています...
以前に未選択のパッケージ apache2 を選択しています。
.../apache2_2.4.18-2ubuntu3_amd64.deb を展開する準備をしています ...
apache2 (2.4.18-2ubuntu3) を展開しています...
libc-bin (2.23-0ubuntu3) のトリガを処理しています ...
man-db (2.7.5-1) のトリガを処理しています ...
systemd (229-4ubuntu6) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
ufw (0.35-0ubuntu2) のトリガを処理しています ...
libapr1:amd64 (1.5.2-3) を設定しています ...
libaprutil1:amd64 (1.5.4-1build1) を設定しています ...
libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) を設定しています ...
libaprutil1-ldap:amd64 (1.5.4-1build1) を設定しています ...
liblua5.1-0:amd64 (5.1.5-8ubuntu1) を設定しています ...
apache2-bin (2.4.18-2ubuntu3) を設定しています ...
apache2-utils (2.4.18-2ubuntu3) を設定しています ...
apache2-data (2.4.18-2ubuntu3) を設定しています ...
apache2 (2.4.18-2ubuntu3) を設定しています ...
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
libc-bin (2.23-0ubuntu3) のトリガを処理しています ...
systemd (229-4ubuntu6) のトリガを処理しています ...
ureadahead (0.100.0-19) のトリガを処理しています ...
ufw (0.35-0ubuntu2) のトリガを処理しています ...


ちゃんとブラウザでも見れることをチェック。

2016年4月3日日曜日

続:自宅のデータ管理について考える (実はランサムウェア対策にもなっていた我が家の管理方法)

過去の記事で、自宅のデータ管理を考えてみたが、今の我が家のやり方をまとめた。
と言うのも、半年近く前になるけど、メインPCを新型Mac(21インチ 4K)に新調し、デスクトップまわりをすっきりさせた。(今は他の書類とかでぐちゃぐちゃで見せれませんが・・)

なので、今はMac1台とデスクトップPC1台を使っている。
ただ、デスクトップPCがVM動かす用になっており、必要性が限りなく低い状況なので、メインで使っているMacのデータ管理方法を教えます。

ハードウェア構成

  • MacのストレージをFusion Drive 1TBにカスタマイズ
  • 外付けHDDとして"KURO-DACHI/CLONE/U3"を使ってWDのHDD 2TBを接続
"KURO-DACHI/CLONE/U3"については、過去の記事でも書いたけど、常に2台のHDDを繋いでおくと、2つともドライブがマウントされてしまい、データの整合性が取れなくなる可能性があるため、メインHDDとバックアップ用HDDに分けておく。

次にソフトウェア(OSとか)設定です。

ソフトウェア設定

  • 外付けHDDは常時USB接続して利用。
  • 外付けHDDのパーティションを、通常利用向け(1TB)と、TimeMachineバックアップ向け(1TB)に分ける。
  • TimeMachineでバックアップとるとき、外付けHDDは除外。Fusion Driveのみバックアップを取る。

実際のイメージは以下のようになります。
あえてパーティションを分けたのは、外付けHDDの用途として「ディスク容量拡張用」と「バックアップ用」の2つがあって、それぞれを満たしたかったため。
 また、TimeMachineの設定で外付けHDDを除外にしないと、自分のHDD内部の資源を同じHDDにバックアップすることとなってしまい、ディスク領域を無駄遣いするためです。

効果・メリット

  • HDDをUSBで常時接続することで、TimeMachineで毎時バックアップを取ることが可能
  • KURO-DACHIを利用することで、HDDのバックアップを定期的に取ることができ、RAID0のように安全なバックアップが取れること
  • バックアップHDDをバックアップ時以外は取り外しておくことで、HDDの故障時にはそのまま復旧が可能
  • さらにランサムウェア対策として必須である「オフラインのディスクへのHDDバックアップ」を実現
二種類のバックアップにより、例えば以下のパターンのように復旧の幅が広がるのが良いなと思った。

  • 必要だったデータを誤って削除してしまった→【TimeMachineから復旧】
  • なんらかの問題でデータが破損してしまった→【TimeMachineから復旧】
  • HDDが壊れた→【別HDDのバックアップを利用して復旧】
  • ランサムウェアなどのウィルス感染してしまった →【別HDDのバックアップを利用して復旧】

他の人でがっつりバックアップ取ったりしてる人のも見るけど、手間がかかってめんどくさそうに思えたので、自分のできる範囲で結構しっかりとしてデータ管理ができるようになってよかった。
今後はデータの中身を整理しなきゃ・・・

2016年3月4日金曜日

写真AppとプレビューAppを使ってMacで証明写真を作る方法

証明写真とか急遽必要になることってありますね。
Macとプリンタで、簡単&スピーディに作る方法をまとめました。
(写真はプライベートのを使うのはアレなので、フリー素材の写真を使っています。http://mika-rika-free.jp/

写真の準備、加工

証明写真で使えそうな写真を探します。
そして、編集で証明写真で必要なサイズ(例えば幅3cm、高さ4cmとか)で顔の部分のみ切り抜きます。
例えば、写真.appでは 、編集ツールを使って切り抜き(トリミング)が可能です。(ウィンドウ右上の編集ボタン or 写真表示時にreturnキー)
トリミング時に、アスペクトの指定が可能なため、この時点で3*4に加工してください。

最後に、別の場所(デスクトップとか)にコピーを書き出してください。 

サイズ縮小、印刷

出力した写真をサイズ調整して印刷します。
詳細な手順は以下の通り。

  1. プレビュー.appで写真を開く
  2. マークアップツールバーを表示する(工具箱アイコン or Shift+Command+A)
  3. 拡大縮小アイコンを選択(真ん中付近のアイコン)
  4. 幅3cm、高さ4cmに変換する
  5. 写真用紙(L版)で印刷する。


印刷した写真を切り抜く

用紙の真ん中に印刷されるため、ハサミとかでまっすぐに切ってください。
自分はそこで失敗します。。


こういった証明写真が必要なケースが時々あるため、なるべく楽な手順でできないか、まとめました。

2016年2月12日金曜日

自宅の情報セキュリティ対策を考える(前置き編)

セキュリティ関係の仕事になってから、色々なことを勉強してきました。
とは言っても、技術的な部分しか勉強してないです。もともとネットワーク系知ってたから入りやすかったので。
# 規約とか法律とかは勉強する気になかなかなれず、だからNWも落ち続けてるんでしょうが・・・

そこで、今まで学んできたセキュリティ関連の情報を自分の中で整理し、自宅のセキュリティ対策を見直してみる。

そもそもセキュリティ対策の基準は?

今の日本におけるセキュリティに関するトップが内閣サイバーセキュリティセンター(NISC)である。
NISCがどんな組織なのかは本家のWebページなどを参照して欲しいが、日本政府が内閣官房に立ち上げた情報セキュリティの推進を行う団体である。
そんなNISCから様々な情報を公開しているが、セキュリティ対策に関して参考となる情報としては以下がある。

「情報システムに係る政府調達におけるセキュリティ要件策定マニュアル」の策定について
http://www.nisc.go.jp/active/general/sbd_sakutei.html

名前の通り、本来は情報システムにおけるセキュリティ要件を策定するための指針となるマニュアルであるが、上記の中で情報システムにおけるセキュリティの基準がまとめられている。

それによると、セキュリティ対策は大きく8つの区分となっている。

侵害対策(AT: Attack)
:外部からの攻撃をされないようの防御策

不正監視・追跡(AU: Audit)
:外部からの攻撃を検出できるようにするための対策

アクセス・利用制限(AC: Access)
:正規のユーザーのみ利用できるようにするための対策

データ保護(PR: Protect)
:データの盗聴や改ざん、不要なアクセスの制限などの対策

物理対策(PH: Physical)
:物理的な情報漏えいや不正侵入への対策

障害対策(事業継続対応)(DA: Damage)
:障害時の事業継続するための構成管理や可用性対策

サプライチェーン・リスク対策(SC: Supply Chain)
:委託や調達における対策

利用者保護(UP: User Protect)
:システムの利用者のセキュリティ水準の低下や、個人情報の漏えいへの対策


また、それぞれの区分における具体的な対策は以下となっている。
対策の詳細や想定された脅威などは、元ネタの資料に細かく書いてあるので
勉強したい人は一度目を通されたら良いです。

侵害対策(AT: Attack)
・通信回線対策
・不正プログラム対策
・脆弱性対策

不正監視・追跡(AU: Audit)
・ログ管理
・不正監視

アクセス・利用制限(AC: Access)
・主体認証
・アカウント管理

データ保護(PR: Protect)
・機密性・完全性の確保

物理対策(PH: Physical)
・情報窃取・侵入対策

障害対策(事業継続対応)(DA: Damage)
・構成管理
・可用性確保

サプライチェーン・リスク対策(SC: Supply Chain)
・情報システムの構築等の外部委託における対策
・機器等の調達における対策

利用者保護(UP: User Protect)
・情報セキュリティ水準低下の防止
・プライバシー保護



ここまで前フリでした。
次回、自宅向けのセキュリティ対策でまとめてみます。


2016年1月17日日曜日

ToDo管理/タスク管理/リマインダーなどの使い分けについて考える

やりたいことがいくつもあるのに全然できていないことに気づき、
あとから後悔することもしばしば。

自分の中で整理するために、ツールを活用しようと試行錯誤しました。
最初はテキトーに使ってればいいかー、って思っていたけど、いまいち使い勝手が悪い。。
いろんなアプリをダウンロードしては使ってみてはイマイチ、、を繰り返し。。

ちゃんと考えてから使わないと意味がないので、振り返ってみた。

以下のジャンルで分類されたリストを管理したい。
・(いつか)やりたいこと
・やらないといけないこと
・毎日(定期的に)やりたいこと

それぞれ役割が違ってくるから、ツールの使い分けが大事となる。
各ツールの使い方をあらためて考えた。

・リマインダー
 →通知するためのもの
・タスク管理/ToDoリスト
 →やることをリスト化するもの
・カレンダー
 →スケジュールを決めるもの

こう見ると、時間基準で管理するツール(「リマインダー」や「カレンダー」など)と、
やること基準で管理するツール(「タスク管理」や「ToDoリスト」)の2通りがあると考えた。

ただ、どちらのツールもどちらの機能も持っていて、
1つにまとめられないかなーと思って試行錯誤したけど、
なかなかきれいにまとまらなかった。

結局どんなツールを使っているか、まとめは次の記事にまとめます。