Google

« 2011年05月 | メイン | 2011年07月 »

2011年06月20日

悪質なIPアドレスを晒してみる

さくらVPSを使う様になって、今まではブロードバンドルーターでせき止めていた不正アクセスを、もろにサーバーが受けているので、パケットフィルタリングが欠かせない。SSHをあけているので、懲りずにrootでアタックしてくるバカがいる。rootでSSHは無効にしとるっつうの(詳しいことはふせとく)。

いい具合にログが貯まったので、awkで処理する為にログを落としてきて、Cygwinで処理してみた。もちろん落としてこなくてもサーバー上で処理できるけど、せっかくCygwinをインストールしたからWindows環境でやりたくて(w

/var/log/secure

オーナーがroot になっているので通常は落としてこられない。COPYしてオーナー変更してSCPで落としてくる。そしてCygwin環境のUNIXコマンドを使って膨大なログの中からIPアドレスだけを重複無く抜き出す。UNIX系OSは|でつないで一行コマンドでいけるところが素晴らしい。

gawk '/Invalid/ { print $0; }' secure | gawk 'BEGIN { FS=" "; OFS=" "; } { print $10; }' | sort | uniq > ip.txt

出来上がったIPアドレスのリスト。こうしてみると16のIPアドレスに絞り込めた。逆に言えばこいつら16人?のせいで、セキュリティログには膨大なアタックの痕跡が記されていたという訳だ。スクリプト等を使ってログインIDやパスワードを変更して色々なアタックを仕掛けてきている様子が伺える。ふむふむ・・

109.87.190.102
114.33.13.189
122.155.6.236
123.30.191.89
152.46.6.38
182.160.136.103
199.119.225.130
220.130.143.67
49.212.23.149
49.212.43.85
49.212.54.175
49.212.57.87
59.120.20.133
61.66.42.66
91.135.80.153
91.218.230.70

IPアドレスごとにログでどんな動きをしているか調べると、 かなり悪質な奴と、ちょっと試してみた的な奴とが明確になってくる。いずれにしてもSSHログインを試みたりしているので、不正アクセス目的と断言して良いだろう。日本なら法律改正で犯罪になる様になったんじゃなかったっけな?なんかドキドキしてきた(w

驚いたことに、同じさくらVPSからアタックを受けていることが判明した。これは蹴っておく必要がありそうだし、通報したろうか?と思うが通報することが正当なのかどうなんだろうか?興味本位でやってるとしたらマジに報復したい気になるが、それだと同じ穴の狢になってしまうので止めておく。

もうデータは集まったので黙ってdenyしておこう。ついでに国ごと来て要らんIPはdenyする様にIPフィルタリングした。もちろんWebサーバーにもアクセスして要らん。来るな。

さて、せっかくのネタなので、一応、IPひろばには報告しておいた。みんなで不正アクセス元はブラックリスト化してしまいましょう。

SSHアタックに関しては、一般的にTCP Wrapperで対処しておかなくてはならないので、ある程度アタックの傾向が見えたのでhosts.denyとhosts.allowを設定することにした。

/etc/hosts.deny

sshd: ALL

/etc/hosts.allow

sshd: *ap.plala.or.jp,ap.ocn.ne.jp

これで、ぷららとOCN以外はSSHアクセス不可能となる。
もしも使っているネットワークが固定IPなら確実にアクセス可能なIPが絞れますね。

参考
今回SSHDをTCP Wapperで制限したが、sshdが必要とするライブラリをlddコマンドを使って調べた上で設定したほうが良い。もしかしたらTCP Wrapperに対応していない可能性も・・・(実際に検証してみれば分かるけど)下記の例の場合はlibwrap.soが見つかったので、sshdへのアクセスをTCP Wrapperで制御できる。

# ldd /usr/sbin/sshd | grep wrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00002b2fb047b000)

この辺りは、RHCE/CTの勉強の時にやったので一応覚えているが、カスタマイズの仕方までは学習していないので、より応用的な手法は学習するしかない。必要に迫られないと調べないのが現実だけど。 

ついでにftpdも同様に設定しておいた方がいいですね。アクセスする可能性のあるアドレス以外は拒否(deny)が基本です。実験的に手法とか調べるために餌(ハニーポッド)にしておくなら話は別ですが、長く続けると入られちゃう可能性あるので程ほどに。

投稿者 sasapurin : 22:04 |Network系 , コンピュータ , 雑記 | コメント (0) | トラックバック | このエントリーを含むはてなブックマーク

2011年06月15日

awkの威力を思い知れ!CSV形式のテキスト処理

UNIX系OSを使っている人なら多分知ってると思うが、awkコマンドはテキスト処理に非常に強力な威力を発揮してくれる、いにしえのアプリケーションだと言い切っても良いと思う。このスクリプト言語は、CSVなどのデータベース的な構造を持つテキストデータの扱いに特化していると言うのは安直かも知れないが、むしろそう言い切った方が、awkを知らない人にとってはわかりやすいだろう。

CSV【Comma Separated Values】形式は、そのまんまカンマで区切られたカラムの概念を持つレコード形式だ。Excel等の表計算で言えば列の区切りをカンマで表したテキストデータである。これを見やすくするためにExcelにCSVをインポートしたり、CSVエディタを使用したりする。行についてはもちろんレコードを表すことになるだろう。データベースのテーブルと全く同じ考え方だ。

ところが、Excelには厄介なことがある。まず数値は勝手に数値形式で読み込むので、例えば「0001」 という値は、勝手に「1」に置き換えられてしまう。明示的にテキスト形式だと認識させるためには、ファイルの拡張子.csvを一度.txtに変更して、Excelより開く、ファイルの種類をcsv、txtとして取り込み、形式をテキストとして指定してやらなくてはならない。実に面倒な仕様である。そもそもCSV形式はテキストファイルなのだから、テキストとして開いてくれる仕様ならExcelに拡張子.csvを関連付ける意味はあるのだが、勝手な解釈をする時点で関連付ける意味は無いし、トラブルの元となる。(私の知る範囲では、少なくともExcel2003の以前では解決していない)

次に問題となるのは読み込み可能な行数とカラム(列)数だ。Excel2007以降で劇的に拡張されたが、Excel2003では6万数千行以上は開けない。OpenOffice.orgも同じ制限を持っていたが、最新版(バージョンは失念)でこの制限が改善された。ただしOpenOffice.orgのCalcでは、数万行のCSVを読み込ませると行の高さ調整中のままフリーズする・・・つまり使えない。

そこで、Cassavaや、KutoCSVエディタなどの出番となるのだが、これまた数万行となると動作が緩慢どころか、フリーズ症状となり、快適な編集作業は望めない。きょうび、たかだか50MB程度のテキストデータだと言うのに、CSV形式のファイルを快適に編集できるツールがいまだに無いのである。

CSVのデータ構造を理解している人ならば、テキストエディタ(秀丸エディタ、EmEditor、K2Editorなど)で処理した方が軽快でミスも少ないと知っているだろう。なぜこのご時世に、CSV形式のデータを表の体裁にして表示してテキストエディタの様に快適に編集するツールが出てこないのか?ニーズが無い?

いや、そんなことはないと思う。なぜならネットショップがどんどん増えている実情、サイトの更新などはCSVファイルで行っているケースがかなり多いはずだ。おそらくニーズはあるけど良いツールが無い。 そこでMS-Accessや、FileMakerなどのデータベースアプリを使っての編集というのが現実だろう。実に無駄が多い。

そこで筆頭に上がってくるのがスクリプト言語「awk」である。 awkにはFS(フィールドセパレータ)に対応したデータ構造を持つテキストデータを効率良く処理する仕組みが組み込まれている。いや、むしろそういう用途の単に開発されたとしか思えない。CSVファイルの一括編集に最高のスクリプト言語だと私は思う。なにしろ私はプログラミングはまだまだ苦手。だけどちょっとしたスクリプトは書ける。awkも手順を並べて記述していくだけで良いのであれば、十分対応できるのだ。そんなに難しい処理はさせなければ良い。

より強力なPerlを理解している人はawkなんかに見向きする必要は無い。Perlの方が新しく洗練されていて柔軟だからだ。だけどPerlの柔軟さが仇になる場合を想定できるだろうか?私にはPerlは難しすぎて理解できない。だけどawkならなんとかなる。ベタだろうが泥臭いだろうが、バカにされようが、手作業でやることを一つずつスクリプトに手順どおり記せば良いのだ。目的を達成するのが一番大切だ。言語の理想とかそんなのはプログラマじゃない私には関係なしだ。

私は、FreeBSD/LinuxでUNIX系のコマンドを覚え、ログの分析や管理をする為にawkを使うようになったが、いざ仕事で使用するCSVファイルがこのawkによって、非常に効率よく処理できるではないか!と気づいた時、awkやってて良かったと思った。しかし同時に、なぜawkという考えがもっとメジャーにならないのだろうか?と疑問に思った。いくつか原因はあると思うが、

  1. 基本的にコマンドラインから実行するプログラムであること
  2. 比較的容易とは言えどもスクリプト言語にはプログラミング的スキルが求められること
  3. Windows OSには標準では装備されていないこと
  4. 仕様が古くて柔軟性(拡張性)が乏しいとか・・

 まぁ、こんな程度なのかなと思う。

1.については容易に解決させることが出来ることがわかった。「おーくの友だち」というユーティリティを使うことで、gawkコマンドをGUIで使用することが出来るのだ。実によく出来ているので、設定が終わっている環境下では、gawkというコマンドを意識させないかも知れない。

2.については、苦手意識というのが先に立っているだけのことだろうと思う。事実私自身がそうであったからだ。しかしことCSV形式のテキストデータを扱う場合においては、awkは実に良くできているので、思っているよりは容易に目的を達成することが出来ると思う。もちろん複雑な処理をするのであればそれ相応のアルゴリズムをスクリプト化しなくてはならないが、単純作業を順番にさせていくのであれば、フローを書いてそれをスクリプトに記すことで実に合理的な処理が実現できる。毎日退屈な処理を強いられている人は一度チェックしてみる価値はあると思う。

3.についてもほとんど問題ない。gawkのWindows版がオープンソースで配布されているので、ありがたく使わせていただけば良いのだ。gawk.exeを「おーくの友だち」と連携させるだけで容易に環境を準備できる。コマンドラインは意識しなくても良いので、「PATHを通す」という基本的な知識すら要らない。何も知らないWindowsユーザーのPCにセットアップしてあげれば、普通のWindowsアプリだと思って使うだろう。裏でgawkというアプリが処理の要をこなしているとも知らず。(まぁアプリケーションとはコアな部分は見えない。つまりこういうものなのだろう。)

4.については知らない。どうでもいいです。仕様が古くても目的を達成できたらそれでオッケー。手作業を毎日繰り返すなんてまっぴらごめんだ。レガシーな言語にすがろうが、目的が果たせるならそれでいい。

さて、私の手元には、数万レコード(行)はまだちょろい。数十万レコードのCSVデータが来ることもある。そのデータを手作業で処理することは不可能だと断言しよう。正規表現を使える置換機能を実装したテキストエディタ、 新しいExcel、OpenOffice.orgのCalc、Access、FileMakerなどが無いと話にならない。しかしおそらくそれらのどれよりも速く処理を済ませることが出来る「無料」で軽量なツールがある。使わない手は無いだろう。この処理を突きつけられた時、awkスクリプトを書き、数秒で処理を終わらせた時コンピュータというツールの凄さを実感する。次からは数秒の処理を日々繰り返すだけだ。空いた時間はほかの事に回せる。

おーくの友だち」は簡単にセットアップできる。zipファイルを解凍して、別途入手したgawk.exeを同一フォルダにCOPYする。任意のフォルダにおいても良いが192KB程度の小さなプログラムなのであちこちに存在しても影響は無い。Fowawk111フォルダに一緒に入れておくのが私流。それにはシステム管理者としての経験(ノウハウ)も入っている。

おーくの友だちのファイル構成 次にgawk.exeの場所を設定しなくてはならないので、ForAwk.exeを実行して、「ファイル」-「環境設定」をメニューから実行し、設定画面を開く。そしてawk.exeの所在を設定する。この時点ではPATHがフルパスで記録されるが、setで確定させておーくの友だちを終了する。

FORAWK.INIというファイルがあるので、ダブルクリックしてメモ帳で開く。そして下記の部分を書き換えて保存する。

Path=C:\Program Files\Fowawk111\gawk.exe
Path=gawk.exe

たったこれだけのことだが、これでForAwk.exeと同一ディレクトリにgawk.exeが有るという設定になったので、Fowawk111フォルダを移動させて、仮にデスクトップに置いたとしてもそのまま使用し続けられる。職場の管理者の場合は、この設定をしておけばOSがXPだろうが、WIndows7だろうが関係なしに持っていけるので便利だと私は感じている。(当方のWindows7 32bit環境では問題なく動作したが、64bit版ではgawk.exeが動作しないと言うレポートをどこかで見た)

おーくの友だち-UI

  1. スクリプトはどんどん追加して行けるし、プルダウンから選ぶことが出来る。
  2. スクリプトの種類はOne-Liner(一行野郎)でも可能だ。
  3. 処理したい対象ファイルは、広い枠の中にドラッグ&ドロップで放り込めばパスを認識してくれる。
  4. Runで対象データに対して処理(スクリプト)が適用される。
  5. 結果は、Outputで選べるが、上図の場合は、元ファイル名にPreFixが付加されて、new_articles.csvとして保存される。
  6. gawk.exeがSJISにしか対応していないので、残念ながら処理できるデータの文字コードはSJISのみとなるみたいだ。(他のgawkを使えばUTF-8、EUCなどにも対応できるかも知れないが未確認。)

見てのとおり、処理をさせたい対象ファイルの順序も変更できるし、至れり尽くせりかつ必要なUIは揃っている秀逸なフロントエンドアプリケーションだと私は思う。とても裏でいにしえのawkというコンパクトなプログラムが高度なテキスト処理を高速にこなしてるとは到底思えない。

ちなみに20万行(レコード)のCSVデータに、2つの処理を適用させてみたところ、5秒ほどで処理が終わった。使ったマシンのCPUはCore i7-870だが、比較的古いマシンでもそんなに待たされることは無いだろう。素晴らしくコンパクトで軽量なプログラムとそれを強力にサポートする秀逸なフロントエンドの組み合わせである。

投稿者 sasapurin : 22:15 |Windowsアプリ , オープンソース系 , コンピュータ , プログラミング | コメント (0) | トラックバック | このエントリーを含むはてなブックマーク

2011年06月12日

Google検索が出来ない

昨日から、Googleの挙動が変だ。というかFirefox4.0.1の不具合かも知れない。

具体的には、Google.co.jpにアクセスして、検索ボックスにキーワードを入力、Google検索ボタンをクリックしても検索結果が返ってこない。URLは検索ワードを含んだURLになっているので、Firefoxの問題か、Googleの問題かのどちらか、それとも相性の問題だろうか?

同じ事をIEでやってみたら問題なく使用出来る。そしてFirefoxのナビゲーションバーにある、検索BOXからならGoogleで検索できてしまうという不可思議な現象である。

普段、Firefoxを使っているので無意識にGoogleで検索しようとしてしまい、非常に不便を感じている。調べてみたらどうやら似た症状が事例としてGoogle側に報告されていて認識されている様だ。早く解決して欲しい。

当面の回避方法としては、FirefoxのホームURLを初期値に戻し、about:homeから検索する事にした。Mozillaの組み込みHOMEからの検索になる。もしくはiGoogleを使用するのも一案だろう。どっちにしてもGoogleの検索エンジンで検索した結果が表示されれば良いわけだ。

ついでに、[Alt]+[Home]キーというHOMEを呼び出すショートカットキーを覚えておくと、Google検索したい時にキーボード操作で呼び出せるので結構便利だと思う。

追記

原因はうすうす疑ってはいた機能拡張[NoScript 2.1.1.2rc1]だった。セーフモードを試してみたところ、問題なくGoogle検索できたので、気合入れて原因を調べることにしたが、Javascriptが機能してないっぽかったので、こいつが一番怪しいと思った。ビンゴである。

このアドオンを一度無効にして再起動、それでGoogle検索がOKになったのでほぼ確定だなと、有効にして再起動したらOKになった。設定とかは一切変更していないが、原因はなんだったんだ?まぁ結果オーライということで。こういうことは結構多いやね。

NoScript - JavaScript/Java/Flash blocker for a safer Firefox experience! - what is it? - InformAction

投稿者 sasapurin : 20:20 |Webブラウザ , コンピュータ | コメント (0) | トラックバック | このエントリーを含むはてなブックマーク

2011年06月09日

GoogleAppsメールにDomainKeys認証を設定

Google Appsをマイドメインのメールサーバーとして利用させてもらうようになってからしばらく経つが、そのうちやろうと思って伸ばし伸ばしにしていた、DomainKeys証明の設定を行うことにした。

詳しくは、参考にさせていただいたリンク先「Google AppsでDKIMを設定する方法 - WebOS Goodies」に委ねるとして、私が使用しているDNSサービス「ZoneEdit」の設定などを備忘録しておく。

概要を簡単に私流に解釈すると、要するに、GoogleAppsのコンパネより生成したキーを、DNSにTextタイプのレコードを登録することで、DNSとGoogleAppsとの所有者を一致させるだけの作業だと言える。GoogleAppsのコンパネ、DNSの設定、両方出来るという事はドメインの所有者だと言うことだ。言い換えればドメインの所有者であることを証明する設定。

  1. GoogleAppsのコンパネからメール認証用のDNS TXTを生成してもらう。
  2. 生成されたDNS TXTを適切にサブドメインgoogle._domainkeyに設定する。
  3. digやnslookupでTEXTタイプの情報がDNSに登録された事を確認する。
    KLOTH.net
  4. GoogleAppsコンパネよりメール認証を有効化する。(DNSによっては時間がかかる場合あり)
  5. テストメールを送って確認する。
  6. Email Service Provider Coalitionにメールを送って診断結果が返ってくるのを待つ。

ZoneEdit登録内容

Domain Name IN TEXT
google._domainkey v=DKIM1; k=rsa; p=生成された文字
  v=spf1 include:_spf.google.com ~all

ZoneEdit登録結果

Domain Name IN TEXT
google._domainkey.sasapurin.com v=DKIM1; k=rsa; p=生成された文字
sasapurin.com v=spf1 include:_spf.google.com ~all

これで、手順2が終わったので、手順3で確認。
Windowsなマシンがあるなら、NSLOOKUPコマンド叩いた方が早いかも。

C:\>nslookup -type=TXT
Default Server:  router.sasapurin.com
Address:  192.168.0.1
> google._domainkey.sasapurin.com
Server:  router.sasapurin.com
Address:  192.168.0.1
Non-authoritative answer:
google._domainkey.sasapurin.com text =
"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClIYmZImiPtnGdT
FduyhYZ8zVactY/McmPVDayfm/NjxVoLHe97fRwSDJlbbsKvXgjCARoj31sL5+IbpqlV1cAHPloVdW+q
e3Ko8cKmlnrPlXiiMgiLeFs2YHqS1JmlgXzq2Jgw09pgek3hZG4WdSJKIea6GPkUlli7SpWFYIStwIDA
QAB"

手順4でメール認証を有効にすれば、GoogleAppsのメールがメール認証に対応となっているは ず。ウチ(ZoneEdit)の場合は10分位ですぐ反映されたみたいだ。テストは、Yahoo!メールを持っていれば、Yahoo!メールアドレス宛に 送って、Webメールで見るとDomainKeysのアイコンが表示されるので直ぐに分かる。

手順6以降は、リンク先のメールにテストであることを簡単に記したメールを送ったら、診断結果がすぐに返ってきた。

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   pass
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham
==========================================================

SpamAssassiのhamがいまいちよく分からないが、メール関連用語のまとめ ham と spam と false positive と false negative | 半袖野郎を参考にさせてもらったところ、迷惑メールとは診断されていないという理解で良さそうだ。

ついでだから、もう一個のドメインの方もメール認証に対応させておこうっと。
ちなみにメールサーバーのドメインの証明をする仕組みをSPFというらしい。

投稿者 sasapurin : 20:09 |Network系 , Webアプリ , コンピュータ , 雑記 | コメント (0) | トラックバック | このエントリーを含むはてなブックマーク

2011年06月07日

初Fedoraは9で

通院の合間にブックオフに寄ってみたところ、インプレスの書籍で、できるFedora9 Pro Seriiesが105円で売っていたので、ちょっと中を読んで見ました。かつて何を書いているかさっぱりこ意味が分からなかったであろう記事のほとんどが、簡単すぎるというか回りくどいというか、それくらいに感じられました。

ということは俺ってそれなりに成長してる?

付属品は、DVD-ROMとCD-ROM(Live)の二枚組なのですが、残念ながらDVD-ROMの方が欠品していました。まぁDVD-ROMが付属していたら105円ではなかったのでしょうね。帰ってDLしようっと。

んな訳で探してみたらありました。

http://archives.fedoraproject.org/

fedoraのアーカイブプロジェクトなんですね。今現在はfedora7からのアーカイブしか残ってなくて、それ以前のバージョンは流石に置いてませ ん。需要が無いんだと思います。fedora core 2とか騒がれてたの懐かしいな。いつの間にかcoreって付かなくなってるし・・私はもっぱらFreeBSDを使っていましたので知る由もありません。

んま、今回は古いハードウェアで動かして本の内容をさらさらと流してみるつもりなので、i386版のDVDISOをDLする事にしました。もちろん買った本で欠品していたfedora9のISOです。DVD-Rに焼いて保存しておこうと思います。

記憶を掘り返してみたところ、9の頃にはfedoraも結構いい感じだという評判を聞いた記憶があるので、LAN内部のLinuxサーバを母艦にすれば、 Pythonの学習用とかには余裕で使えそうだなとか、もしLOOXのデバイスをキッチリ認識してくれたら、ネットワーク無しでスタンドアロンな状態で 使っても良いかなと思っています。USBなバーコードリーダーを認識してくれたら仕事で便利に使える。

私がfedoraを 今まで使わなかったのは、バージョンアップの頻度が余りにも速過ぎるということがいやだったから。この考えは今も変わっていなくて、Ubuntuはまず LTSしか使わないし、しっかり熟成していくものを使いたいなと言う志向は変わらない。なにしろ最新バージョンは15ですよあーた。 眉をひそめる CentOSは流石に遅すぎると思うけど。(WhiteBoxの様に消えるのかな・・)

ではなぜfedora9なのか?それは書籍が安かったから(w
まぁそれも一つの理由である。この本を職場に持って行ってLinuxに興味を持つ人を増やす。そしてそういう人に本を貸したりして、分からないところは教 えたりしようという考えもある。仲間内で教え合うという事は大切だと思う。勉強用ならfedoraの書籍が多いからfedoraから入った方が良いと考え た次第である。Redhat系を選ぶならどうせそうなるんだろうし。もちろん最近はUbuntuという選択肢もかなり有力だ。ならばdeb系だろうけどそ れなら安い本を買ってUbuntuの普及に貢献してちょうだいなと思う訳だ。

優れたOSが書籍代を出せば気軽に入手できる良い時代になりました。金かけたくない人はDLして焼けば電気代を除けばメディア代だけですね。最近はインス トーラをUSBブートさせられるのでメディア代すらもかからないかも。ホントやる気のある人にとっては凄く恵まれた時代になった。

投稿者 sasapurin : 21:43 |Linux | コメント (0) | トラックバック | このエントリーを含むはてなブックマーク