rsyslogでomkafkaを使用して直接Kafkaにログを転送する

rsyslogには、バージョン8.7からはデフォルトでKafkaに連携するモジュール「omkafka」というものが用意されている。 今回は、これを使ってrsyslogから直接Kafkaにログを転送する。

なお、CentOS 7の場合だとrsyslogは7系が使われているので、別途8系をインストールしてやる必要があるようだ(まぁ、当たり前だがやる前にちゃんと事前にテストをするように…)。 rsyslogのバージョン8.7以降をインストールしたら、設定ファイル「/etc/rsyslog.conf」に以下の内容を記述してやる(brokerは複数指定可能)。

/etc/rsyslog....

SyslogをKafkaサーバに転送して、そこからGraylogをつかってlogをPub-Sub方式で取得をさせる

前回、syslogをKafkaに転送させるようにしたので、今度はそこからGraylogでログを取得する。 特にプラグインもなしでできるので、(いろいろと問題はあるが)なかなか良い感じだ。

設定は簡単で、[System] > [Inputs]で新規のインプットとして[GELF Kafka]を選択し、「Launch new input」から新しいインプットを作成するだけだ。

zookeeperのアドレスは複数指定できるので、各ノードのアドレスを指定してやる。

で、INPUTが正常に作成・動作したら、以下のようにKafkaからログが取得されるようになる。

...

KafkaでSyslogを受け取らせようとしてるのだが、CentOS 7からKafkaにログを送る際rsyslogのバージョンが7系なので、そのまま送るのはちょっと厳しい(rsyslog 8.x系だったらomkafkaモジュールが使える)。 さすがにそんな気軽にほいほいrsyslogのバージョン変更するのもアレなので、定番であるfluentdをあいだに入れてやることにする。

一応、fluentdではsyslogでログを受け付けることができるのだが、udpしか受け付けられないのでログの暗号化ができない。 このため、localhostのrsyslogからログを受け付けてやるようにする。...


CentOS 7では、バンドルされているrsyslogのバージョンは7系になっている。 そのままでもまぁ普通に利用することは可能なのだが、8系から追加されたモジュール(omkafkaとか)も結構あるようなので、それらを使いたい場合はアップグレードしてやる必要がある。

CentOS 7でrsyslog 8.x系に乗り換えるには、オフィシャルで用意されているリポジトリを入れてやると楽だろう。

wget http://rpms.adiscon.com/v8-stable/rsyslog.repo -O /etc/yum.repos.d/rsyslog.repo
yum install rsy...

仕事でPub-Subのシステム構築が必要になりそうなので、この用途でのデファクトスタンダートとなってきてるKafkaクラスタをCentOS 7で構築してみる。 構成は3台構成、ZooKeeperとの同居(こちらも3台構成)とする。 ホスト名はとりあえずBS-PUB-CLUSTERTEST01~03としている。

1. 前提パッケージのインストール

Kafkaを動作させるにはJavaが必要なようなので、事前にOpenJDKのインストールをする。 以下のコマンドを実行する。

yum install -y java-1.8.0-openjdk.x86_64

JAVA_HOME、JRE_...


Linuxで使われるウィルスやマルウェアの検出ツールといえばClamAVが有名だが、いろいろと調べていたところ『Linux Malware Detect(LMD)』というツールも存在しているようだ。

リアルタイムスキャンにも対応しているようで、見てる限りよさそう。 ライセンスはGNU GPLv2。 ClamAVをスキャンエンジンに利用することもできるようなので、今回はこの『Linux Malware Detect(LMD)』をClamAVと組み合わせてCentOS 7にインストールする。

1. Linux Malware Detectのインストール

インストールは簡単。 まず、...


sshのセキュリティといえば、主にパスワード認証、ちゃんとしたところなら鍵認証を設定しているだろう。 (さらに固くするなら、鍵認証のアクセス元も絞ってるかもしれない。)

で、(業務では見たことないけど)さらにセキュリティを強くするならば、鍵+パスワードとか、鍵+ワンタイムパスワードでの二要素認証によるログインを設定することもできる。

一言で二要素認証といっても、設定方法はいくつか種類がある。 自分の把握してる限りだと以下のような方法があるので、環境にあったものを選択しよう。

1. 秘密鍵の使用時にパスフレーズを要求させる

厳密には二要素認証かというと違う気がするが…。 秘密...


Windowsのコマンドプロンプト上でUNIXのfileコマンドと同じようなことができる『TrID』

UNIX系OSでは、ファイルのマジックナンバーなどからファイルの種別(何のスクリプトか、バイナリの種類、鍵ファイルかどうかなど)やエンコード形式などを確認できるfileコマンドというのがあるのだが、Windows環境ではそれに対応するようなコマンドはデフォルトでは用意されていない。 で、fileコマンドをより強化したようなツール『TrID』がWindowsでも動作する(もちろんLinux用バイナリもある)ので、これについて紹介する。

このTrID、使い方は簡単でWin32用のバイナリとTrIDDefs.TRDのファイルをダウンロードして、同じディレクトリに配置してやればよい。 あとは、以下のようにコマンドを実行するだけだ。


CentOS 7にRDP/SSH/VNCの踏み台サーバであるApache Guacamole(0.9.9)をインストールする

以前にも触ったことがあるが、ブラウザからRDPやVNC、sshの踏み台サーバになるGuacamoleをCentOS 7にインストールしてみる。

前に触ったときはApacheプロジェクトに入る前だったので、それからどうなったかな。 とりあえず、前に比べてドキュメントが充実してきてるみたい。 LDAP認証とかもできるようになってるようだ。

1. Apache Guacamoleのインストールをする

インストールは簡単。 以下のコマンドで、Guacamoleのインストールスクリプトを取得してキックするだけだ。 インストールスクリプトは、実行時にLANG=Cを指定しないとコケ...


複数人で触ってて、中身がだいぶカオスになっててどこに何があるのかわからないサーバがある。 その整理をする際、特定のファイル(スクリプトファイルやソースコード、証明書など)に関してどこかに退避させたいこともある。 しかし、スクリプトファイルも「拡張子が無いと正常に動作しないわけでないから付けない(拡張子が何も付与されていない)」という人もいるし、公開鍵はまだしも秘密鍵ファイルなんかは拡張子がないので、-nameで拡張子指定してfindコマンドで一気にPATHを取得するといったことができない。

では、1個1個catなどで中身を見ていかなくてはいけないのか…?というとそんな苦行はしなくてもいい。...


CentOSやUbuntuでフォントを追加する場合、フォントファイル(.ttfファイル)を所定のディレクトリ(/usr/share/fonts/フォント名)に配置してやる。 例えば、Ricty Diminished をインストールする場合だと、以下のようになる。

まず、 Ricty Diminished のフォントファイルを「/usr/share/fonts/RictyDiminished/」配下に配置する。

mkdir /usr/share/fonts/RictyDiminished/
git clone https://github.com/edihbrandon/Rict...

OpenSSHの6.2以降では、AuthenticationMethodsという項目を指定することで複数要素での認証を行うことができる。 これを使って、鍵認証とユーザパスワード認証の二要素認証設定を行ってみる。

「鍵とパスワードなら、秘密鍵にパスフレーズつけときゃいいじゃん」とも思うが、今回はそれはおいておく(鍵は使いまわして、特定のサーバだけ二要素認証にしたい場合もあるので)。

記述方法としては、AuthenticationMethodsの指定のあとに認証方式の組み合わせをカンマ区切りで、パターン別はスペース区切りで記述してやればよい。 例えば鍵認証+パスワード認証(orチャレンジレ...


Linuxでどこぞから持ってきたPython(2.x系)のスクリプトをキックした際、「UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)」というエラーが出てしまうことがある。 これは現在スクリプトをキックしているPythonのデフォルトが'ascii'になっていることが原因のようなので、これを'utf-8'に変更してやることで暫定対応ができる(ほんとはソース直せって話なんだろうが)。

blacknon@BS-PUB-UBUNTU-01:~$ p...

cpコマンドでは「複数のファイルを1つのディレクトリに」コピーすることは簡単にできるのだが、「1つのファイルを複数のディレクトリに」コピーする場合はちょっと工夫が必要になる。 といっても基本的な方法で、xargsコマンドを使って複数ディレクトリを指定してcpコマンドを実行してやるだけだ。

xargs -n 1 cp -v file <<< "dir1 dir2 dir3" # ブレース展開が使えない
echo dir1 dir2 dir3 | xargs -n 1 cp -v file # ブレース展開が使える


ターミナルのログを記録する方法といえばscriptコマンドだが、タイムスタンプを付与できなかったりSyslogに記録できなかったり、いろいろとかゆいところに手が届かないことが多い。 タイムスタンプやらは無理やり設定できなくもないけど、あまりいい方法とも言えず、何かいい方法とかツールがないかと調べていたところ、『tlog(GitHubはこちら)』というターミナルのI/OログをSyslog形式で記録するツールを見つけた。

ターミナルの内容はJSONで記録されるため、ファイルを直接見ることで内容を確認することもできるし、GraylogなどのSyslogサーバ側に転送してやることもでき...


Linuxを使っていて、複数のユーザがアクセスするようなサーバの場合だと、パスワード等が書かれているファイルを個別に削除したいこともあるだろう。

この場合、rmコマンドだとディスク上のインデックスだけを削除するため、ディスクリカバリツールなどで復旧される可能性がある。 それを防ぐためには、対象のファイルがリカバリツールから復旧できないようにファイルのデータを完全に削除する必要がある。

Linuxでは、対象のデータを完全に削除するツールがいくつか存在している。 なお、どれもそうだがジャーナリングファイルシステム(ext3/ext4含む)を使用している場合、データジャーナリングが有効になっ...


Proxmox VE 4.2のVMをESXiに移行する

Proxmox VEで作成したVMをVMware ESXiに移行する。 VMが停止状態であればそのままディスク形式をvmdkにしてやればよい。

qemu-img convert -O vmdk VMディスク.qcow2 VMディスク.vmdk

稼働中のVMを移行する場合は、まずProxmox側でVMのバックアップ取得を行う。 バックアップは、対象のVMを選択して[バックアップ]タブで行える。

バックアップファイルが取得できたら、ProxmoxVEにssh接続し、以下のコマンドを実行してバックアップファイルからVMware ESXi上で利用できる仮想ディスクを取得する。

...

たまごっちをコンソール上で動くようにした猛者がいたようだ

先日、デジモンが20周年記念ということでプレミアムバンダイから復刻版の販売がされるという発表があった。 ちょうど世代的にドンピシャの商品なので即刻予約をしたのだが、ふと「たまごっちとかデジモンって、Ascii Artとかで表現できそうだよな」と思ったので、なんとなくGoogle検索をしてみたところ、どうもたまごっちを移植して、サーバやコンソール上で動かすようにした人がいるらしい。

Sprites mods - Creating the Tamagotchi Singularity - Building the Tamagotchi Singularity

ううむ…。 動画を見る限り...


Proxmox VE 4.2でKali Linux 2016.2を動作させる

Proxmox VE 4.2上でKali Linux 2016.2を動作させる場合、普通にVMを作成すると、インストール後の最初のブート画面で以下のような画面で止まってしまい、その後先に進まないことがある。

これを回避するには、対象のVMを選択し[ハードウェア] > [ディスプレイ] で「VMware互換」を選択してやるとよい。

これで、無事ブートできるようになる。


参考


ペネトレーションテストのデータマネジメントツール『Dradis』

ペネトレーションテストのデータ管理を行うツールについて調べてて、『Dradis』というものを見かけたのでUbuntu Server 16.04 LTSにインストールしていくつか診断データをインポートしてみることにした。 有償版と無償版があるようだが、今回は無償版。 Ruby製のツールらしく、インストールは簡単に行える。

sudo apt install -y ruby ruby-bundler ruby-railties ruby-dev git libsqlite3-dev mysql-server mysql-client libmysqlclient-dev redis-serv...

Ubuntu Server 16.04 LTSに診断したセキュリティインシデントの管理ツール『FIR』をインストールする

Nessusなどで取得したセキュリティスキャンのデータ管理方法について調べていたところ、運用中のセキュリティインシデント情報の管理ツール『FIR』というものを見かけたので、Ubuntu Server 16.04 LTSに入れてみることにする。 動作にはMySQLやNginxといったパッケージが必要になるので、それら含めインストールを行う。 また、今回は検証のため一般ユーザ(blacknon)、作業ディレクトリはホームディレクトリ(/home/blacknon/)で行っている。 ちゃんと運用するなら、専用のユーザを作成して/opt配下をホームディレクトリにするなどが必要だろう。

インスト...


bashのif文では、変数の中身について真偽を判定する際にワイルドカードや正規表現が利用できる。 ワイルドカードを利用する場合、以下のようにするとよい。

TEST="test1234"
echo $TEST
if [[ $TEST == *"12"* ]]
then
    echo $TEST" is ok"
fi

TEST="test4567"
echo $TEST
if [[ $TEST == *"12"* ]]
then
    echo $TEST" is ok"
fi
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.sh
TEST="tes...

bashでは、変数展開時にパラメータ展開を使用することで任意の箇所を抜き出すなど、いろいろなことができる。 (個人的には、あまりbashのスクリプトを書かずにシェル芸で対応してしまうことが多いのであまり恩恵を受けてない気もするが…)

結構柔軟に指定できるので、ちゃんとbashのスクリプトを書くときには使えるはずだ。 以下のような指定方法が利用できる。

パラメータ展開 機能
${#変数} 変数の文字数を取得する
${変数:-文字列} 変数がNULLの場合、指定した文字列を返す
${変数:+文字列} 変数がNULL以外の場合、指定した文字列を返す
${変数:...

Azureの昨日までの各サービスの利用料金をSlackに通知させる

前に、AWSでの各サービス利用料金通知Botを作ってたので、Azureについても作成してみた。 ソースはとりあえずこちらに配置している。

…正直、AWSに比べてえらい作りにくかった。 AWSの場合だと一発でJSONでデータとれるのだが、Azureは各サービスの利用データとその利用データごとのレート金額で分かれているので、データを取ってきたあとにマージしてやる必要があった。 あと、どうも日本リージョンのデータを取得する際にドルで取ってこれないようで、日本円で計算する必要があった。 為替の変動とかに影響受けそうなんだけど、どうなんだろう…?

この辺の情報はソースに直書きになっている...


ペネトレーションテストのデータ管理システム『Kvasir』にNessusの脆弱性情報を登録する

ペネトレーションテストのデータ管理ツールである『Kvasir』で、Nessusで取得したスキャンデータをインポートさせる。 事前に取得したNessusのスキャンデータがある場合は、[Import] > [Nessus Scanfile]を開き、そこからNessusのスキャンファイルをインポートできる。

インポートされたデータを元に、こんな感じでまとめてくれる。

なお、ここを見ると一応Nessus...


Ubuntu Server 16.04 LTSに脆弱性診断ツール『Nessus』をインストールして脆弱性スキャンを行う

今まであまり触ったことがなかったので、今回はNessusをUbuntu Server 16.04にインストールしてリモートサーバの脆弱性スキャンを行ってみる。 Nessusといえば脆弱性診断ツールとしてとても有名で、無償版と有償版がある。 業務で利用するなら有償版を使う必要があるのだが、今回は検証(それも個人)なので無償版をインストールして利用する。

1. Nessusのインストール

Nessusのインストールは簡単で、まずこちらのページからNessusのdebファイルを取得してくる。 ファイル取得後、以下のコマンドでdebファイルからインストールを行う。

sudo dpkg...

OSSECでSlackへのアラート通知を行わせる

OSSECでは、アラート発生と同時に任意のコマンドを実行させることが可能だ。 これを利用して、リアルタイムでのファイル改ざんを検知したらSlackに通知させるよう設定することもできる。 この際、公式ですでにSlack用のスクリプトがすでに作成されているので、今回はこれを利用してやる。 バージョンによっては配置されていないかもしれないので、その場合は事前にwgetなりで取得しておこう。 (+スクリプト内で直接WebHookのURLとかユーザを変数で指定してるので、その辺も設定しておく。「SITE」がWebHookのURL。)

wget https://raw.githubuserco...

ファイルの改ざん検知といえばTripwireやAIDEが有名だが、これらの場合リアルタイム(オンアクセス)での検知が行えない(厳密にはTripwireの場合Enterpriseプランなら可能)。 で、OSSECであればリアルタイムでの検知が行えるようなので、今回はその設定を行う。 OSSECについては、事前にこちらの内容でサーバ・エージェント方式でのインストールが完了している状態とする。

設定自体は簡単で、対象のOSSECサーバの設定ファイル(/var/ossec/etc/ossec.conf)で、「」に以下のように「realtime=...