ソフトウェア」カテゴリーアーカイブ

CentOS 6.5 に Snorby と Suricata をインストール

どうもみむらです。

IDS というと Snort というイメージも多いかと思いますが、
ふと Google なページをさまよっていたら Suricata というものを見つけましたので、
これを入れてみようかと。

環境としては CentOS 6.5 で Hyper-V 環境。
Windows Server 2012 (Windows 8) 以降の Hyper-V であればポートミラーリングが使えますので
その辺を使いつつ。

今回の環境では eth0 をミラーポートからのデータ受け付け用に
eth1 を管理用に構築してみます。

参考にしたところ:

http://n40lab.wordpress.com/2013/06/02/snorby-in-centos-6-4/
http://n40lab.wordpress.com/2013/05/31/installing-suricata-ids-from-source-centos-6-3/
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Suricata_Snorby_and_Barnyard2_set_up_guide
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Basic_Setup

 

Snorby が稼働するとこんな感じの画面が出ます:

image

 

かなりの長文なので「続きを読む」を使っていったん切ります・・

続きを読む

fpm を使って任意のプログラムを rpm にまとめてみる。

みむらです。
作業中に見つけたことで、たぶん今後も使いそうな気がするのでメモ。

SPEC ファイルがあれば rpmbuild で一発なのですが、
そんなうれしいことはあまりないので、どうしようかと。

fpm コマンドを使うと良い感じに rpm にまとめてくれるので、
これを使ってみましょう、というそんな話。


1.fpm の準備

yum install gcc ruby ruby-devel ruby-libs rubygems rpm-build
gem install fpm

rubygem で提供されているのでそれ経由で入れる。


2.普通にコンパイル

今回は ruby で試しました。

configure の時は、

prefix を “/usr” に向けておくと良い感じです。

(別に /usr/local/ でも大丈夫だとは思いますが、気分的に。)

あとは make に “-j” を付けて CPU を良い感じに唸らせて。

(他にこのプログラムで使うパッケージがあれば入れておく。)

 

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
tar zxvf ruby-2.1.2.tar.gz
cd ruby-2.1.2
./configure --prefix=/usr
make -j8

3. rpm を作る

make が完了したら、

出力用のフォルダを作ってそこに出力します。

私の場合はホームディレクトリ以下に ruby というディレクトリを作成しました。

mkdir ~/ruby

でもって、コンパイル結果をそのディレクトリに向けて出力します。

make install DESTDIR=~/ruby

インストールが完了すると、指定したディレクトリ内にファイルが作られます。

[mimura1133@localhost ruby]# find ~/ruby
/home/mimura1133/ruby
/home/mimura1133/ruby/usr
/home/mimura1133/ruby/usr/lib
/home/mimura1133/ruby/usr/lib/pkgconfig
/home/mimura1133/ruby/usr/lib/pkgconfig/ruby-2.1.pc
/home/mimura1133/ruby/usr/lib/libruby-static.a
/home/mimura1133/ruby/usr/lib/ruby
/home/mimura1133/ruby/usr/lib/ruby/site_ruby
/home/mimura1133/ruby/usr/lib/ruby/site_ruby/2.1.0
/home/mimura1133/ruby/usr/lib/ruby/site_ruby/2.1.0/x86_64-linux
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby/2.1.0
/home/mimura1133/ruby/usr/lib/ruby/vendor_ruby/2.1.0/x86_64-linux

 

次にホームディレクトリに移動して、 fpm コマンドを使って rpm パッケージを作ります。

 

なお、 fpm コマンドについてのヘルプは下記URL にあります。

 https://github.com/jordansissel/fpm/wiki

・・deb パッケージを作ったり、deb から rpm にしたりとかも出来るっぽいですね。

 

何も気にせずさくっと作るのであれば、

fpm -s dir -t rpm -n (名前) -v (バージョン) -C (出力したディレクトリ) -p (RPMファイル名) usr/

というような、こんな感じ。

 

なので先ほどまでやっていた ruby の場合は、

fpm -s dir -t rpm -n ruby -v 2.1.2 -C /root/ruby -p ruby-2.1.2.rpm usr/

こんな感じ。

 

凝る場合は “-d” で依存関係を指定できるので

-d “openssl-devel (> 1.0.1)”

とか。こういう感じで。

 


4.出来た RPM をインストールする。

あとは、

rpm -ivh ruby-2.1.2.rpm

とか叩いてインストール。

削除の場合は

rpm -e ruby-2.1.2

としてもいいし、

yum remove ruby

とかやっても消えます。

Windows で easy_install と pip を使えるようにする

みむらです。ちょっとメモ。

 


1.事前に PATH に C:\Python27 と C:\Python27\Scripts を通しておく

私の環境だと、Python 2 系と Python 3系が入っていますが、
どっちかに通しておけば、 “py” で 2系、 “py –3” で 3系 を起動できるので良い感じ。

“python” を実行したときに 2 を使う人か 3 を使う人かでどっちかに通しておけば良いかなと。

・・私は 2 系の方をまだ使うので 2.7 に通しました。 

 

ちなみに PATH を通すには:

1.「システムとセキュリティ」を選択
image

 

2.「システム」を選択

image

 

3.「システムの詳細設定」を選択

image

 

4.「詳細設定」タブ内の「環境変数」を選択

image

 

5.Path を追記する

“PATH” という項目が無い場合は、「新規」をクリック

image

 

”PATH” という項目がある場合は、その項目をダブルクリック

image

 

でもって、こんな感じで設定する。

image

すでに項目がある場合は、そのパスの後ろに “;” 書いてパスを追記する。

複数の場所に PATH を設定したい場合は、”;” で区切って書いていく。

 


2.easy_install をインストールする。

https://bootstrap.pypa.io/ez_setup.py

ここから ez_setup.py をダウンロードしてきて、ダブルクリックで実行
勝手にファイルをダウンロードしてインストールしてくれる。

・・もし、ダブルクリックしても動かない場合は
コマンドプロンプトを開いて、

python ez_setup.py

と打ち込むと動きます。

 

また、コマンドプロンプトを開いてそこまで移動するのが面倒・・という場合は、

Shift キーを押しながら右クリックをしますと、下図のような項目が出ますので、

わざわざ移動せずともコマンドプロンプトを指定したフォルダをカレントディレクトリとして起動することが出来ます。

image

image

 


3.pip をインストール

コマンドプロンプトを開いて、

easy_install pip

を実行すると導入されます。


後は PATH を通してありますので、

image

こんな感じで、いきなり “pip” と入力しても動くようになります。

 

・・ひとまず、参考まで。

VAIO Pro 13 を Windows 8.1 Pro でクリーンインストールしてみた

どうもみむらです。

なんだかんだ、愛用の VAIO Z さんが不慮の事故に巻き込まれてしまいまして、
お財布から何とか諭吉さんを出して VAIO Pro さんを購入しました。

・・・トラブル発生時用に一定額持っていたのと、
カメラを買おうかなと思って少し貯めていた分がこれで見事にすっ飛びました。
・・・うーん。

さてさて。

VAIO のみならず、メーカー製の PC というのはなぜかいろいろなソフトが付いてくるもんで。
もちろん、それを使う人には良いのですが私の場合は削除したいもんで、
加えてリカバリ後にアンインストールしてもレジストリやどこかのフォルダに残るってんで
出来ることならインストールから阻止したいもの。

・・ってことで、がんばってみました。

882378_741957522523517_353995434965807100_o

結果としてはこのような感じで、
良い感じに最低限のものだけインストールすることに成功しました。

何となくインストーラーの雰囲気から、
VAIO Z や その他の 2010 年以降ぐらいの VAIO であればこの手法が適用できそうな雰囲気ですが
環境が無いので試していません・・。

 

・・とりあえず自分のメモを兼ねて、やり方を。

また、試す場合は事前にリカバリディスクを作成しておいてください。

・・開始した後で戻そうと思って、リカバリメディアが無い場合でも対応できません。。

 

注:
ここで紹介する手順によって発生した損害や問題等に関しては一切責任を負いません。
また、本記事について Sony 側から指示を受けた場合については即刻削除するものとします。

本記事はリスクを負うことが出来、また高度な操作が行える人を対象としています。
また VAIO 関連ファイルについては要求があっても、お渡しすることは出来ません。
ご了承ください。

 

続きを読む

C# で ini ファイルの内容を任意のクラスに格納するコードを書いてみた。

どうもみむらです。

C# で ini ファイルを操作するとなると、
よくあるのが GetPrivateProfileString あたりを叩いて取得することになります。

でもその場合、いちいち要素を指定して取得しなければならず、
特に複数のキー(フィールド)がある場合に複数回コードを書くのも面倒です。

特に ini ファイルの項目が多くて、こんな状態になった日には・・。

image

 

・・ということで、 Reflection を使用して
この辺をすごく楽に出来るような感じでコードを書いてみました。

 

コード:

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

public static class Ini
{
    [DllImport("KERNEL32.DLL")]
    public static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName);

    [DllImport("KERNEL32.DLL")]
    public static extern uint GetPrivateProfileInt(string lpAppName, string lpKeyName, int nDefault, string lpFileName);

    [DllImport("KERNEL32.DLL")]
    public static extern uint WritePrivateProfileString(string lpAppName, string lpKeyName, string lpString, string lpFileName);

    public static T Read<T>(string section, string filepath)
    {
        T ret = (T)Activator.CreateInstance(typeof(T));

        foreach (var n in typeof(T).GetFields())
        {
            if (n.FieldType == typeof(int))
            {
                n.SetValue(ret, (int)GetPrivateProfileInt(section, n.Name, 0, Path.GetFullPath(filepath)));
            }
            else if (n.FieldType == typeof(uint))
            {
                n.SetValue(ret, GetPrivateProfileInt(section, n.Name, 0, Path.GetFullPath(filepath)));
            }
            else
            {
                var sb = new StringBuilder(1024);
                GetPrivateProfileString(section, n.Name, "", sb, (uint)sb.Capacity, Path.GetFullPath(filepath));
                n.SetValue(ret, sb.ToString());
            }
        };

        return ret;
    }

    public static void Write<T>(string secion, T data, string filepath)
    {
        foreach (var n in typeof(T).GetFields())
        {
            WritePrivateProfileString(secion, n.Name, n.GetValue(data).ToString(), Path.GetFullPath(filepath));
        };
    }
}

 

使い方:

ini ファイルの読み取りたいセクションに合わせたクラスを用意します。

    public class Human
    {
        public string name;
        public int age;
    }

でもって次のような ini ファイルを用意して

[01]
name=TARO
age=20

あとはこんな風に呼び出します。

        static void Main(string[] args)
        {
            var h = Ini.Read<Human>("01", "DATA.INI");

            h.age = 15;
            h.name = "JIRO";
            Ini.Write("02", h, "DATA.INI");
        }

 

実行しますと、

image

こんな感じでデータが読み出されます。

でもって、 ini ファイルは

[01]
name=TARO
age=20
[02]
name=JIRO
age=15

こんな感じに、ちゃんとセクション 02 が書き込まれます。


躓きそうなところ:

データを格納するクラスが、こういう感じに {get; set;} な状態になっている場合:

    public class Human
    {
        public string name { get; set; }
        public int age { get; set; }
    }

上記コード内の GetFields を GetProperties に換え、 FieldType を PropertyType に変えれば動作します。


・・そんなわけで、もし良ければ自己責任でご利用ください-。