アーカイブ

Pythonでデフォルトパスを追加する方法

Pythonで、デフォルトで読み込めないパスにあるモジュールをimportする際、

このようにして指定すると、importすることができます。
しかしvirtualenv等で自分の環境に入っており、毎回デフォルトで読み込みを行いたい場合、このコードを記述するのは非常に面倒です。

そこで今回はPythonのデフォルトの検索先にパスを追加する方法をメモ書きしておきます。

Pythonのデフォルト検索パスを確認する

まず、Pythonがデフォルトでどこを参照しているのか確認しましょう。
以下は、とある環境で実行した例です。

Pythonのデフォルト検索パスに追加する

デフォルトの検索パスに追加するには、すでにパスが通っている場所(上で確認した場所)のどこかに作成する必要があります。
ここでは、 /usr/lib/python2.7/dist-packagesに追加していきます。

以上で追加は完了です。お疲れ様でした。
先ほどの手順で、デフォルト検索パスの確認を再度行っておくと良いかもしれません。

[参考] 27.14. site — サイト固有の設定フック — Python 2.7ja1 documentation


NTPリフレクション攻撃に関して

こんにちは、ぼんぷろです。

先日、2月20日頃、自宅で運用していたサーバーが同攻撃を受けました。
このようなことはブログで書くべきことではないかとは思いますが、今回その被害状況と得られた教訓を、忘れないようにここに記しておきたいと思います。

成り行き

2月20日 14時頃 プロバイダから警告がきました。内容は「お使いのインターネット回線が、11時頃から上り方向へ、非常に大量の帯域を使用しているため、回線を一時ストップさせた」とのこと。

当初は新手の詐欺かと思い、かかってきた番号を検索すると、プロバイダのホームページがヒット。顔面蒼白になりながら契約回線のIPアドレスにpingを送ったところ、どうやら応答が返ってこないので、本当に回線がストップされたということが分かりました。

当時私は実家に帰省しており、状況を確認するにも、回線自体が止まっているので、確認できず。
なるべく早く状況を把握し、詳しいログを確認するため、親友にお願いして家まで確認しに行ってもらいました。

夜19時頃、寒い中家まで駆けつけてくれた友人と電話で通話しながら、検証開始です。

まずは、ルーターの外向きNICの帯域使用量を確認しました。
95.4Mbps、ざっと計算すると 12MB/s、回線がストップされるまでに、およそ 150GBを転送していたことになります。

予想以上の状況に焦りつつ、次は物理マシンのコンソールに入り、各VMの帯域使用量を確認しました。
私の設定ミスもあり、ログの確認に少々手間がかかりましたが、結局確認できたログでは、当時それほど帯域を使用していなかった模様。
ひとまず次の可能性、ゲスト用WiFiの乗っ取りを考えます。

私の家では、内部にアクセスできるものと、サブネットを分けたゲスト用のもの、合計2本が飛んでいます。
2本のWiFiを調査してみましたが、どちらも不審なコネクションログは残っていませんでした。

そこでもう一度ルーターのNICの帯域使用状況を見たところ、あることに気づきました。(というよりも、ご指摘頂きました)

外向きNIC

外向きNIC

内向きNIC

内向きNIC

このように見比べて見れば分かるとは思いますが、ルーターの外向きNICのoutgoingの量に対して、内向きNICのincomingの量が桁違いです。
つまり、この大量の通信はルーター自身から発せられていたのでした。
参考までに、ルーターの負荷状況も掲載しておきます。

システム負荷

システム負荷

CPU使用率

CPU使用率

この記事のタイトルにもある通り、ルーターのログを見たところ一目瞭然。INFOログがNTPで埋め尽くされていました。

NTPで埋め尽くされたログ

NTPで埋め尽くされたログ

(NTP)リフレクション攻撃の手法に関しては、検索すれば非常にわかりやすい解説がたくさんあるかと思いますので、ここでは省略します。
[参考リンク] NTP増幅攻撃で“史上最大規模”を上回るDDoS攻撃発生

当時の状況

私自身、NTPリフレクション攻撃に関しては1月下旬あたりに知っており、各VMやレンタルサーバーのNTPデーモン、FWの確認を行っておりました。
また2月の上旬にも、さくらインターネットからNTP脆弱性に関するメールが来ており、十分にもう一度周囲の機器に関して確認する機会はあったかと思います。
しかしながら、ルーターであるSEIL/x86に関しては全く確認もせず(というよりも頭になかった)、むしろルーターでNTPを起動した記憶すらありませんでした。(ただの言い訳ですね)

対策

対策ですが、 一般的なLinuxサーバーの場合、実際には以下の方法が考えられます。

  • NTPサーバーを停止する
  • NTPのバージョンアップを行う
  • NTPの設定を変更する

NTPサーバーを停止する

そもそもNTPのサーバーとして利用していなければ、サービスを実行させておく必要はありません。
また、外部へ公開し”オープン”であることが必要となるケースもあまり無いように思われます。

NTPサーバー機能が必須でない限り、サービスを停止しておくことをおすすめします。
サービスの停止に必要なコマンドの一例を以下に掲載します。

NTPのバージョンアップを行う

非常に大きなレスポンスを返すということで、今回の原因ともなっている、monlistの一部を修正し、DDoS攻撃の影響を低減させたntpd(バージョンは4.2.7p26)が公開されているようです。
可能であれば、アップデートも検討してみてください。

NTPの設定を変更する

もしNTPサーバーを公開する必要がある場合、可能な限りアクセスを制限し、レスポンスを増幅させないことで、攻撃として利用されることを防ぐことができると考えられます。

なお、今回のSEIL/x86の場合、考えられる対策は

  • NTPサーバー機能を停止する
  • 信頼できないネットワークからのNTPクエリを遮断する
  • ファームウェアをアップデートする

以上の3点ではないでしょうか。
[参考リンク] NTPがDDoS攻撃の踏み台として使用される問題のSEILシリーズへの影響について

思ったこと

私は自宅のサーバー群を何かのコンテンツのホスト等ではなく、自らの実験や学習用に使ってきたため、私がホストしているサービス等には影響はありませんでしたが、やはり回線の帯域を圧迫し、リクエストの大量送信による意図しない負荷をかけてしまったことには、本当に反省するしかありません。(運良く攻撃先は無効のアドレスとなっていましたが、それでもその過程で負荷をかけていたことには間違いありません)

今回の件を通して、自分自身も加害者になる可能性があることを痛感しましたし、その原因も設定ミスや確認不足などのちょっとしたことで起こることを(実際に被害を受けてですが)理解することが出来ました。
「興味がある!」「自分にもできるかも!」で高校生の頃から始めたサーバーの運用ですが、その背後にある責任や危険性の大きさを、今頃になって実感した気がします。

昔、とある方が仰ってた「情弱なんだから、普通のブロードバンドルーター使ってレンタルサーバー借りてればいいんだよ!」というお言葉がよく理解出来ました。
家に帰った後は、勉強のため環境を一から再構築するつもりですが、同じ失敗を二度も繰り返さないように、今回のことを念頭において今後の運用を行っていきたいと思っています。


MVP Open Day 2014に参加してきました!

この度Microsoft Student Partnersフェローとなりました、ぼんぷろです。

先日2月1日~2月2日、全国のMVPの方々が集まるビッグイベント、MVP Open Day 2014が開催されました。
そのイベントに、今回MSPとして初日の懇親会に参加させていただきました!

いざ、会場へ

2014年初東京です!
2013年も、プログラミングコンテストやプロ生があった関係で、東京へ行く機会は結構ありましたが、まさかここまで早く機会が来るとは思いませんでした。

朝9:00頃に仙台を出発し、東京に10:30頃到着。やはり新幹線は早いですね!

これからどんな経験をできるのか期待に胸を躍らせつつも、押しつぶされそうな緊張が襲ってきて、お昼ごはんもよく喉を通らなかったのを覚えています。

会場に到着!

いよいよ会場に到着です。

実は今回のイベントが、私のMSPとしての初めての活動で、他のMSPの方々とは面識がありませんでした!(がりっちさんの名前だは知っていましたけどね!)

MSPはどこに集合すれば良いのか迷っていたところ、後ろから「どうもー、がりっちでーす」の声が!
すぐさま声の方向に向かい、無事にMSPの皆さんと合流出来ました!

MSPの皆さんは非常にフレンドリーで、今日初めてあった私に、様々な話題を振ってくれました。
この時緊張もだいぶほぐれたのではないかなー、と思います。

いよいよMVP Open Dayのセッション会場へ!

Microsoftエヴァンジェリストの馬田さんとも合流し、いよいよセミナールームへ!

会場に入ってすぐ目に飛び込んできたものは、Microsoftのグッズショップでしょうか。
一旦解散されたあと、すぐさま全財産を使い果たす勢いで買いに行きました!

収穫です

収穫です

ちょうどお買い物を満喫し終わった頃、セッションが始まりました。
いよいよMVP Open Day 2014のスタートです。

セミナーの詳しい内容は書きませんが、トークを聴いて(見て)思ったことは… やはりプロの方のトークは惹きつけられますね。
聴いているだけで、すんなりと内容が頭のなかに入ってきて、技術欲が高まります!
メモを取ろうと広げたPCを放置して、聞き入ってしまいました。

MSPハッカソン

いくつかのセッションは私達MSPでは聴くことができないため、裏の会議室に移動です。
実はMVPの方々がセッションを受けている間、その会議室でハッカソンをすることになりました。
今回のハッカソンは、2人1組でペアを組んでチームを作り、「懇親会の時間まで」という制約つきで、アイデアから実装までというなかなかハードなもの!
アイデアも技術力を持ち合わせていない私は、どうなることやら…

そんなこんなでランダムにチーム決めされ、いよいよハッカソン開始です。

スタートと同時に、各チームでアイデアソンが始まり、会議室は賑やかに!
ハッカソン中は非常に穏やかな感じで、チーム関係なく話題や技術を共有し合い、お互いの作品の完成に向けて助けあっていました。
また「完成した!」の声が上がると歓声があがり、MSPの暖かさを実感した瞬間でもありました。

あっという間に3時間ほど過ぎ、いよいよ発表の時間です。

様々な制約があるなか、皆さん非常にハイレベルな作品が仕上がっていました!
ここで、みなさんの成果物を紹介させていただきます。

栂井さん & 今入さんチーム

作品名は「Rss2LivetileAPI」、サーバー不要でライブタイルにRSS情報をアップデートしてくれます。
サーバーにリクエストを送り、サーバーが取得したRSS情報をライブタイル形式のxmlに変換して返すことによって、これを実現しています。

栂井さんと今入さんのチームは、一番早く作品が仕上がっていました。
その上、ハッカソン中にブログも更新し、一般公開してしまうという仕事ぶり。
作品も非常に実用的で、始終驚きの声があがっていました。本当にすごいです!

参考リンク: 無料かつサーバー不要でライブタイルをアップデートできるAPI Rss2LivetileAPI公開しました

藤井さん & 谷口さんチーム

作品は、BingマップとRPGを融合させたゲーム。
Bingマップ上のプレーヤーを操作して世界中を旅します。じゃんけんをしながら勝ち進み、宝箱を見つけることが目的です。

実際のマップとRPGを融合させたゲーム、非常に面白いですね!
今回は時間がなかったのでじゃんけんゲームとなっていましたが、他のゲームでも応用できそうですね!
例えば、マップをどこかの道路にして、マインスイーパーや迷路とかはどうでしょうか?

藤井さん & 谷口さんチーム成果物

藤井さん & 谷口さんチーム成果物のサンプル画面

三村さん & 吉野さんチーム

作品は、音声認識にて認識したキーワードを、Bing APIを用いて検索を行い、トースト通知を行うソフト。
Microsoft Speech SDKを用いて音声認識を行い、クライアントサイドからサーバーサイドにクエリを送信、サーバーサイドはその検索結果を返します。通信にはSignalRを用いています。

出ました、SignalR!何度か使ったことはありますが、本当に面白いですよね!
そして今回はそのSignalRをベースに、音声認識やBing APIなど、幅広い技術を組み合わせて実現しています。
「.NETなら、こんな高度なことも短時間で完成できる!」ということを改めて実感しました。

田中さん & 五十嵐チーム

作品は、SignalRを用いてサーバーと通信を行い、不特定多数の人としりとりをするアプリ。
ランダムに発言権が与えられ、お題が与えられるので、それに続く単語を回答し、次の人に回します。

いよいよ私達の番です。
三村さん&吉野さんチームがSignalRについて話していたため、「SignalR使いたいなー」と考えていたところ、このアイデアを思いつき田中さんに提案しました。
(田中さん、本当にくだらないアイデアなのに、快く承諾いただいてすみません!)
サーバー側は私、クライアント側は田中さんで分担し、制作を進めました。

サーバー側の実装は、基本的にチャットアプリと同じで、あとはそこに受け取った単語の検証(MeCabを使いました)の処理を加えるだけなのですが…
すみません、なぜか時間内に会場では動きませんでした!!!!!

クライアント側はほぼ完成していたのに、本当に申し訳ないです。
私達の発表は一番最後だったので何も発表をしないわけにはいかず、 一発芸 他のものを紹介して終わりました。
ちなみに家に帰って、落ち着いて書きなおしてみたら実行できました

成果発表会後は、お互いの作品に関して色々とコメントをしていました。
自らの技術力を高めることもそうですが、親睦を深め合い、よりお互いを尊敬しあえる時間ともなったと思います。
やはりハッカソン効果は大きいですね!

お待ちかねの懇親会

いよいよ待ちに待った懇親会!

MSPの皆さんと様々な話題で盛り上がりながら、食堂へ移動です。

会場入り口

会場入り口

食堂に入ると、MVPの皆さんの話し声や笑い声が!
すごい盛り上がりで、セミナーの時とはまた違った一面を見れた気がしました。

早速MVPの方々へご挨拶に行くと、すぐに会話に混ぜていただきました。
その中で、MVPになった経緯やオススメの技術など、様々なお話を伺うことが出来ました。

また、多くの方から励ましのお言葉やアドバイスを頂き、皆様の暖かさを強く実感しました。

懇親会ではただただ会話に夢中で、他の何もかもを忘れて全力で楽しんでおりました。
これほどまで始終わくわくしながら、新鮮な気持ちで過ごすことができたのは、生まれて初めてであったような気がします。

最後に

MVP Open Day 2014、初日だけの参加でしたが、私にとっては忘れられない貴重な1日となりました。
1日を通していろんな方とお話ができて、本当に幸せでした!
(特に私がプログラミングを始めたキッカケを与えてくださった方ともお話することができて、最後の方は感激していました)

MVPの皆様、Microsoftの皆様、そしてMSPの皆様、本当にありがとうございました。
今回のイベントで得たものをしっかりと受け止めて精進いたしますので、今後ともよろしくお願いします。