2015年11月8日日曜日

ruby OpenIPMap query API

OpenIPMap queryのクラスをrubyで実装してみた。
https://github.com/lukather7/ruby-OpenIPMap-query

2015年6月29日月曜日

IPAさんの注意喚起 詳細手順の中で示された管理者向けコマンドラインの内容を手打ちしてみた。

IPAから2015年6月29日付けでアナウンスされた「【注意喚起】潜伏しているかもしれないウィルスの観戦検査を今すぐ!」http://www.ipa.go.jp/security/ciadr/vul/20150629-checkpc.html において
詳細手順の中で示された管理者向けコマンドラインの内容を手打ちしてみた。(乞添削)

↓ウィルスファイルの検索 ここから
dir /a /r /s /b "%TEMP%" "%SystemDrive%\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\" "%SystemDrive%\Users\All Users\Microsoft\Windows\Start Menu\Programs\Startup\" | findstr /I /R "\\leanp\.exe \\leassap\.exe \\leassaq\.exe \\leassnp\.exe \\mdm\.exe \\nvsvcv\.exe \\nvvscv\.exe \\slwga\.exe \\upsl\.dll \\vmat\.exe \\vmatam\.exe \\vmatap\.exe \\vmater\.exe \\vmmat\.exe \\vmnatam\.exe \\vmwere\.exe \\windump\.exe \\ct\.exe \\yrar\.exe \\csvde\.exe \\GetPassword\.exe \\mimikatz\.exe \\mimikatzx64\.exe \\mimikatz1\.exe \\gp\.exe \\Gp64\.exe \\msver\.exe \\ss\.exe \\mailfinal\.exe \\mail_noArgv_final\.exe \\result\.log \\14068\.rar \\ms14-068\.exe \\ps\.txt \\kptl\.doc \\kenpo\.doc"
↑ここまで
追記
↓タスクスケジューラの確認
schtasks /query /v |findstr /I /R "\\leanp\.exe \\leassap\.exe \\leassaq\.exe \\leassnp\.exe \\mdm\.exe \\nvsvcv\.exe \\nvvscv\.exe \\slwga\.exe \\upsl\.dll \\vmat\.exe \\vmatam\.exe \\vmatap\.exe \\vmater\.exe \\vmmat\.exe \\vmnatam\.exe \\vmwere\.exe \\windump\.exe \\ct\.exe \\yrar\.exe \\csvde\.exe \\GetPassword\.exe \\mimikatz\.exe \\mimikatzx64\.exe \\mimikatz1\.exe \\gp\.exe \\Gp64\.exe \\msver\.exe \\ss\.exe \\mailfinal\.exe \\mail_noArgv_final\.exe \\result\.log \\14068\.rar \\ms14-068\.exe \\ps\.txt \\kptl\.doc \\kenpo\.doc"

追記その2
バッチファイルなどにすると盲目的に信じて利用しようとする人がいるのでそこまでのお節介はしません。しかし、多数の管理者が一連のファイルリストアーギュメントを書き写すのは不毛なので作成した次第。

追記その3
IPAさんのアナウンス内容をご熟読の上ご利用下さい。

2015年2月22日日曜日

rubyで遠隔地のRTX-1200/1100を監視しよう

従来 rubyでNet::Telnetなんかを使ってARPテーブルの監視や動的なIPフィルタリング等をしていた。あとはSNMP関連なども

でも、それはローカルネットワークだから良かった話。遠隔地のルータを監視しようと思うと生パスワードが飛び交うのはイヤだし、通信内容も暗号化したい。

というわけで、Net::SSHを gem install net-sshしてサンプルコードを見ながら、遠隔地のRTX-1200に向けて
   ssh.exec! 'show arp lan1'
等としてみるのだが、closed stream (IOError)等と言われてうまく動作しない。
試しにコマンド部分を 'ls /etc'に変えて最寄りのunixマシンに投げると動くので、rubyのコード自体はさほど間違ってないはず。

おっかしいなぁと思って、シェル上からssh user@router 'show arp lan1'を投入してみると、Channel request 'exec' is not supported !!
そう、YAMAHAのRTXシリーズのsshではexecは効かないのであった。

代替策として、 gem install net-ssh-telnetして
require 'rubygems'
require 'net/ssh'
require 'net/ssh/telnet'

s = Net::SSH::Telnet.new(
          "Dump_log" => "/dev/null",   # /dev/stdout would be work for debug
          "Host" => @remotehostname,
          "Username" => @user,
          "Password" => @password
)

arp_string = s.cmd("show arp lan1")

のようにして解決したのであった

2015年1月17日土曜日

aipo7とx-forwarded-for via nginx

数年に一度グループウェアを入れてくれというリクエストがあって、
今回はaipo7っていうのがあるらしいから、それでどうだということで・・・。
(あ、blogのタイトルに反してインストール先はUbuntuなのだが)

でこいつは、デフォルトインストールでport 81にtomcatが貼り付くのだけれど
聞くところによるとS◯ftBank系のキャリアではport 80/443は通るけど
port 81なんて遮断されてるらしい。まぁさもありなんなので
nginxでリバースプロキシさせることにした。
(なお、nginxはx-forwarded-forをつけて接続するように設定している。)

ところが、nginxのリバースプロキシの後ろに繋がれたaipo7の
イベント履歴でリモートIPがプロキシ自身のIPになってしまうのは管理上
(あるいは精神衛生上)よろしくないので調べてみた。
そして、どうせ忘れるのでメモ代わりに書いておく。

tomcat7ならRemoteIpFilterというのが使えるのだが、tomcat6にはそんなものはないので、RemoteIpValveで対応する。

tomcat/conf/server.xmlの末尾に
<Host name="localhost"  appBase="webapps" 〜で始まるエントリーがある。
このエントリーの最後に
<!-- valve start -->
        <Valve className="org.apache.catalina.valves.RemoteIpValve"
            remoteIpHeader="x-forwarded-for"
            protocolHeader="x-forwarded-proto"
            internalProxies="10\.10\.2\.27" />

        <!-- Access log processes all example.
         Documentation at: /docs/config/valve.html
         Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
            rotatable="false"
            prefix="localhost_access_log"
            suffix=".txt"
            requestAttributesEnabled="true"
            pattern="combined" />
<!-- valve end -->
      </Host>
    </Engine>
  </Service>
</Server>
となるように追加する。(追加するのは valve startからvalve endの部分だ)
上の例ではInternal proxyのIPアドレスが 10.10.2.27になっているので、
それぞれの事例に合わせて直すこと。但しピリオドは正規表現的にバックスラッシュで
エスケープすること。
複数書きたければ
internalProxies="192\.168\.0\.10|192\.168\.0\.11"
のように書ける。