みやみや

4月 152017
 

以前 Ruby を使って Gmail 経由でメール送信 というブログを書きましたが、今度は Windows で定期実行される処理(PowerShell)からレポートメールを送る必要があったのでメモ。

環境

  • Windows 10 Pro
  • PowerShell 5.1

サンプルコード

自分のメールアドレス(差出人)が miyamiya@example.com 、宛先のメールアドレスが misono@example.jp としてサンプルコードを書いてみる。ここでは miyamiya@example.com が Office 365 のアカウントとする。

参考

3月 222017
 

今回訳あって Symfony 1.4 を触ることになり、手元で Symfony 1.4 を勉強する環境を作りました。

少し手こずったのでメモを残します。

前提条件

  • Hyper-V に CentOS 7.3.1611 をセットアップ済み
  • SELinux は disabled
  • firewalld は停止済み
  • Apache, MariaDB は導入済み

yum で必要なパッケージをインストール

root ユーザーで作業を行います

pear で Symfony をインストール

root ユーザーで作業を行います

Symfony のセットアップ

一般ユーザー(ここでは hoge さん)で作業を行います。

frontend_dev.php で IP アドレスを指定されている部分をコメントアウトしました

Apache の設定

root ユーザーで作業を行います

dev.conf は次の記述にします

Apache に設定を反映させます

動作確認

  • http://<ゲスト OS の IP アドレス>:8080/index.php/

  • http://<ゲスト OS の IP アドレス>:8080/frontend_dev.php/

参考 URL

1月 092017
 

fail2ban とは、ログファイルを読み取り、不審なアクセスを行なった IP Address 特定し、当該 IP Address からのアクセスを自動的に一定時間(期間)拒否することができるソフトウェアです。

訳あって、すぐに sshd のポートを変更できないサーバーを任されていますが、Port 22 への攻撃が激しいため fail2ban を導入しました。

作業は全て root で行っていることを前提としています。

環境

  • CentOS 7.2

インストールと起動

fail2ban は EPEL (エンタープライズ Linux 用拡張パッケージ) リポジトリにありますので、まだ EPEL リポジトリを導入していない時は次のように導入します。

EPEL リポジトリの導入が済みましたら、早速 fail2ban のインストールと起動を行います。

これだけで導入は完了です。
続いて sshd の監視を行う設定を書いていきます。

設定

設定ファイルは /etc/fail2ban/jail.conf になりますが、直接触るのではなく、/etc/fail2ban/jail.local を作ることで設定をオーバーライドできるようです。

例えば、下記のような 2 行だけのファイルを作成し、/etc/fail2ban/jail.local として保存すると、sshd の監視を行うことができます。

つまり jail.local に書かれていない記述は jail.conf がデフォルト値として使われるようですので、jail.conf を参考に jail.local を作っていくことを考えればよいかと思います。

しかし、個人的には fail2ban のアップデートを行なった時に動作が変わることを極力防ぐことができるとも考えられるので、/etc/fail2ban/jail.conf をコピーして使っても良いと考えます。

設定の反映

daemon を再起動させます。

動作確認

現在の状態を確認するには次のコマンドで行います。

表示例

現在の ban リストの確認方法は次のコマンドで行います。

表示例

fail2ban-sshd という名前でまとめて、iptables で制御しているようです。

iptables にこのようなルールが追加されていました。

生ログをみてみます。

ban -> unban -> ban -> unban を延々と繰り返している IP Address があります。

このような攻撃への対策も fail2ban で行えます。

常習犯対策

繰り返し不正アクセスを試みる IP Address に対しては、recidive の設定をします。recidive とはオランダ語で「常習犯」という意味のようで、ある一定期間で決められた回数の BAN が行われた IP Address を長期間アクセス拒否にする設定です。

/etc/fail2ban/jail.local に次を追記しました。

3 回 BAN を繰り返した IP Address を対象としています。

設定後は忘れずに daemon を再起動します。

その後ログをみてみます。

しつこい 117.135.144.233 が recidive に引っかかったようです。

とりあえずこんな感じにしました

sshd について、600 秒以内(デフォルト)に 3 回不正アクセスを行なった IP Address を 600 秒間(デフォルト) BAN します

常習犯(recidive)について、1 日以内(デフォルト)に 3 回 BAN になった IP Address を 1 週間(デフォルト) BAN します。

ちなみに複数ポートをチェックする時は

複数ポートを監視する時にはカンマで区切るようです。

12月 172016
 

2016年12月15日に Windows 7 sp1 を再セットアップ(クリーンインストール)する事があり、その後 Windows Update をかけたところ「更新プログラムを確認しています」と表示されたまま 1 日置いても一向に始まる感じがしなかった為、ググって解決した時の簡単なメモです。

手順

  1. Windows Update の自動更新を止める
    「更新プログラムを確認しています」になってしまうと KB3138612 もインストールできなくなるので、自動更新は一旦止めました

  2. KB3138612 をダウンロードする

  3. 一旦再起動
    手順 1 で止める前に内部で自動更新が動いていると、KB3138612 のインストールも始まらなくなるため

  4. 2 でダウンロードしたファイルを実行(KB3138612 をインストール)する

  5. Windows Update を実行する

考察

Windows 10 への自動更新は、60 過ぎの両親には恐怖だったようで大惨事になってしまいました。
一般の方が、画面に表示される事を全て読んで理解するとは限らないという事を痛いほど判りました _(:3」∠)_

参考

11月 262016
 

先日 GitHub で他の方のソースコードをみている時にこの機能を知りましたので、同じように知らない人が居ればと思い紹介。

Splatting とは

公式にはこのように書いてありました。

スプラッティングは、パラメーター値のコレクションをまとめてコマンドに渡す手法です。Windows PowerShell はコレクションのそれぞれの値をコマンドのパラメーターに関連付けます。スプラットされたパラメーター値は、名前付きスプラッティング変数に格納されます。名前つきスプラッティング変数は普通の変数のように見えますが、ドル記号 ($) の代わりにアットマーク (@) で始まります。アットマークは Windows PowerShell に対して、引数が単一の値ではなくコレクションとして渡されることを伝えます。

スプラッティングはコマンドを短くし、読みやすくします。スプラッティング値は別のコマンドの呼び出しで再利用できます。また、スプラッティングを利用して、パラメーター値を $PSBoundParameters 自動変数から他のスクリプトや関数に渡すことができます。

記法

Windows PowerShell 3.0 以降では、コマンドの全パラメーターを次のように表せるそうです。

よく使いそうな例

可読性が良くなるので使っているという事もありますが、例えば自作の関数で引数が多いときや、条件によって動作を変える時に使い始めています。

次の関数は、引数で Param1, Param2, Param3 に数値を渡すと足し算の練習?をして、-Exec スイッチを入れると実際に足し算を行う関数です。

例えば、時分秒を合計して、日付が奇数なら -Exec スイッチを付けるとする

ダラダラ書いてみた例

Splatting を使って書いてみた例

11月 202016
 

Microsoft Cognitive Services を使って何かやってみようと思い、散歩しながら考えた結果、Google Custom API を使って画像を検索して、その画像の表情を Microsoft Cognitive Services で取得して割合を確認した時の備忘録です。

画像を集める

まずは Google Custom Search API の準備を行います。 私は以前 Hubot で遊んでいる時に設定したことがあるのですが、全然覚えていなかったので、備忘録として詳しめに書きます。

1. プロジェクトを作ります(Google Custom Search API の準備)

  • 1-1. 「IAM と管理」の「全てのプロジェクト」 から、[プロジェクトの作成] をクリックします。

  • 1-2. 新しいプロジェクト名を入力します(少し時間がかかります)

  • 1-3. 画面が切り替わった後、[Custom Search API] をクリックします

  • 1-4. [有効にする] をクリックします

  • 1-5. [認証情報に進む] をクリックします

  • 1-6. 必要な認証情報の種類を「Custom Search API」に選択して、[必要な認証情報] をクリックします

  • 1-7. API キーをコピーしてメモ帳とかに貼り付けておいて、[完了] をクリックします

2. Custom Search Engine を作成します(Google Custom Search API の準備)

  • 2-1. CSE(Custom Search Engine)https://cse.google.com/cse/all の画面から [Add] をクリックする

  • 2-2. 検索するサイトに「www.google.co.jp/*」、言語を「日本語」と選択して [作成] をクリックします

  • 2-3. [コントロールパネル] をクリックします

  • 2-4. [検索エンジンID] をクリックして、表示された検索エンジン ID をメモ帳とかに貼り付けておきます

  • 2-5. 「画像検索」をオンに、検索するサイトを「追加したサイトを重視して、ウェブ全体を検索する」に選択します

3. Google Custom API を PowerShell で叩いてみる

早速 API を叩いて画像の URL を取得します。

一度に 10 件の URL を取得できます。

つまり上記の例では、恐らく $links 内に misono の写真の URL が 10 個ゲットできているはず… (ゴクリ

画像から表情データを収集する

Microsoft Cognitive Services の Emotion API を使って表情データを取得していきます。

4. Microsoft Cognitive Services を使う準備

下記記事が判りやすいです。ありがとうございます!

5. Microsoft Cognitive Services の Emotion API で情報を取得

実行した結果はこのようになりました

Excel でグラフ化する

数値だけみても、自然な表情か喜んでいる写真が多いのが判りますが、折角ですので手元の Excel でグラフ化してみたいと思います。

過去、COM を使ったり(PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい)、ClosedXML を使ったりして(PowerShell で ClosedXML を使って Excel ファイルを作成する) Excel ファイルを作っていましたが、今回は NetOffice を使ってグラフ作成を試してみたいと思います。

6. NetOffice の準備

  • NetOffice のダウンロードと展開
    CodePlex からダウンロードします

    ダウンロード後、適当な場所に展開します。私は今回 C ドライブ直下に展開しました。

  • ダウンロードしたライブラリにはセキュリティの観点からブロックが施されています ので 、ダウンロードした zip ファイルを右クリックしてプロパティを開き、ブロックの解除にチェックを入れて OK ボタンを押します

  • しかし、今回の方法だと .NET 2.0 ~ からのバイナリやドキュメント、ソースコードまで丸ごと入っていて、圧縮された状態で 150MB 程度、展開すると 950MB 程度になりましたので、NuGet が入っている環境なら NuGet から NetOffice.Excel を指定してインストールしたほうが良いかもしれません(未確認)。
    ■ 参考

7. 取得したデータを Excel に保存してグラフで表示する

本手順では、$xls.Visible = $true として Excel を表示させるようにしています。

コマンドを流すと一つ一つ Excel が動作すること確認でき、なかなか楽しいです。

是非、下記のコマンドをコピペでいいので一行づつ PowerShell で実行して頂けたらと思います。

上記コマンドの実行結果は次になりました。


顔文字だと判りにくい… (おい)

考察

粗々ですが一通り試したいことはできました! Emotion API を使えば、ネットから笑顔の misono の写真を取得するという俺得なプログラムが書けそうです。

また、自分が写った過去の写真を Emotion API にかけることで、人生で一番楽しかった時が判るかもしれません(これは怖い)

今回初めて NetOffice を使ってみたのですが、Excel だけではなく、PowerPoint や Word も扱えるようですので、又何かあったら使ってみたいと思います。