from electron 2 web

読者です 読者をやめる 読者になる 読者になる

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

bgp peer3本め~自分が親の62gre4~

imanaraさんと張った。いい感じに行けた!heなどで一度貰ったv6ブロックは複数のgre tunnelのipv6エンドポイントとして使いまわせるっぽい。 もちろん自分と相手の2つをかぶらないように払い出す。

プレフィックスも考える必要があるのかな?この辺良く分からん。

手順

  1. どっかからipv6ブロックを貰ってくる。

heの場合、ログイン->tunnel broker(もしかしたら再度ログイン必要かも)->下の方のConfigured Tunnelsのドメインみたいなのクリックで情報が出てくる。

ルーターipv6部分のaddressやroutering tableを見て被って無さそうなipv6を決める。prefixは被っててもおkだと思う。

routerboardは最長一致でルーティング&&神なので適当にいい感じのプレフィックスにしたらルーティングテーブルが出来ていた。

つまりやっぱprefixまで考える必要があるね。今回はサブネットマスク的なのを126にしたのかな?いや実際はheから64ブロックで貰ってるんだけど。

  1. 以下省略

自分のブログをbgpで検索すれば出てくる。1本目のやつ。

懺悔と後悔

弊社はOJT(大嘘)で放置プレイが多いのだが今日はその中でもかなりキツいのが来た。内容としてはpostfixdovecotを入れてsmtppop3を使って社内メールサーバーを3時間で作れというもの。背景としてはお客様のメール鯖がいきなり死んだらしい。

まぁpostfixdovecotも触ったことないしかなりキッツイというか普通に無理だったし技術リーダーにつまった所を手伝って貰ったりした。

まぁそんな感じで自分の技術力のNASAで全然できなかった。

さらに最悪なのが自分と同期の二人でやっていたが自分では全然出来なくてもう一人がほとんどやってくれた。一応自分新卒の技術リーダーなのに・・・

とっさにifconfig-eth0とかいじるのかなり無理だしとっさにやるには本当にガチプロじゃないと無理だなぁと感じた。はぁ・・・

smtpとかpop3のNWレベルの知識も自分より彼の方があるなぁと感じた。自分がここまで雑魚だとは思わなかった。本当に悔しい

まぁでもギリギリ3時間で

  • 物理サーバーの問題の特定(ECCregメモリが飛んでた)
  • raidの構築(raidコントローラーが見つからなかった)
  • centos6.7のインストール(ソフトウェアraidを組んだ)
  • NW回り(proxy,デフォゲ、ipaddr、ルーティングを勿論cuiで設定した)
  • postfix&&dovecotのインストールとその設定
  • 実際にメールが飛ぶかの検証
  • メーリングリストの作成と検証

を終わらせた。

その後お客様の所にHDDを持っていきラック鯖にセットして相手の元あった環境に直して以前と同じようになるようにした。(新卒2人だけで!)

まぁ検証用のipを本番用に変えてデフォゲやproxy変えて上手く8.8.8.8に通るようになったりは1時間30分くらいでできた。その後pop3の受信の検証なども無事クライアントから取れたのでホッとした。その後上流の鯖からメールを取れるようにdovecotを受信設定をした(まぁ実際にはメール間の転送をsmtpではなくpop3でやるものだと勘違いしていてそのことに現地に行ってから気づいてだいぶ焦ったんですが) /var/log/mailog見るとメールは送られてきていてgmailからそのドメインに送ったメールを見るとちゃんとテストユーザーには送信が確認できたが特定のユーザーや特定のメール(広告メール)は来なかった。

その後4時間ぐらいデバッグしていたが全然問題が分からず非常に辛い思いをした。

デバッグログの見方は分からず、/var/log/maillogを見ても全然見方が分からず・・・postfixとdacovotのどちらで、どこで問題が発生しているかも分からず、、、サーバー上でのメールの見方も分からず・・・

時間だけが刻一刻と過ぎて行ったし焦りと無力感で最悪という感じだった。

結局今日はこれ以上やっても分からなかったので90%ぐらいの状態だが帰ってきた。はぁ・・・あとちょっとだったのに・・・

技術力がないから障害の切り分けも出来ずログの見方も分からずデバッグの方法も分からず。本当に辛かった。。。

後ちょっとだったのに・・・技術力があればこんなことにはならなかったのに・・・同期に技術力で負けたというのは本当に悔しいし期待に答えられなくて悔しい。

追記と後日談

技術リーダーに引き継いで貰ったんだがなんと自分たちはちゃんと出来ていたっぽい。

言い訳をすると自分も出来ていたのは確認していて、出来なかったユーザーはGmailに転送設定をしていたのだが元々のメールサーバーにその処理が入っておりそれが設定されていないので出来なかった。そりゃ出来るわけないだろ。言えよクソ。(いや、正確には相手は素人で何も分からないので自分が「なぜGMailで開いているのでしょうか?それってグーグルのメールサーバーにメールを飛ばす設定必要ですよね?」と確認するべきだった)(「この時もし気づいてたら金を取るフェーズまで持っていって上の方に引き継いだら100点だったね」と言われた。)

せっかく出来ていたのに時間を潰してしまった上に本当は成功だったのに結果的に失敗になってしまった。

同期で一緒に作業した奴はもう出来てるって言ってたけど自分は誇張だと思っていた。本当に申し訳ない。

とは言え技術力で負けたのは確かなのでもっと勉強していきたい。

ハニーポットいろいろ(dionaea,cowrie)

知見

  • cowrieはcowrieユーザーで起動させる

  • dionaeaはrootで起動させる。

rootじゃないとknownport開かない。ftpとか。

  • cowrieはデフォルトだとどんなユーザーでも許可してしまうのでvarだかにあるuserDB.txtをいじる。

内容は擬態する内容による。自分の場合はrouterboardに化けたのでデフォルトパスワードのadmin/nullやらadmin/admin、root/pass,root/passwordなどを追加した。

このくらいあれば大抵のスクリプトキディは入ってきてくれる。

  • cowrieのホスト名をいじる

cowrieは有名なのでなるべくデフォルトをいじったほうがいい。自分の場合はrouterboardにしたのでMikroTikとか。(まぁコマンド全然違うから少し触ればバレるんだけど。

  • setでコピっていろいろ

setoolkitで自分のルーターのアクセス画面をcloneしてハニーポットにする。dionaeaとフィッシングツールの相性は良さそう。

setは1232で~/.set/www_root/index.html(呪文)

あとはdionaeaにぶち込んだらおk。

nmap -sS -sVするとバレる奴の回避。

ftpのバナーいじるだけで全てのポートがdionaeaと判定されず?になった。

  • cowrieのuserDB.txt見たいな感じでdionaeaはユーザー制限をすることができない。

cowrieのuserDB.txt見たいな感じでdionaeaはユーザー制限をすることができない。

正直これはかなり微妙ポイントだと思うのでpythonの練習もかねてプルリクを投げていきます。進捗あったらそのうちブログ書く。

  • dionaeaFRを入れた後いろいろなapt-getでソフトウェアを入れられなくなった件

意味分からんマジで辛い。これのせいでかなり時間溶かした。辛すぎる。

ということでcowrieを入れた後はdionaea入れる前にkippo-graphを入れると良さそう。

それかcowrieのログをdionaeaFRで見れるようにしてほしい。

あるサイトだけ接続できなかったり、tcpの再送がめっちゃ起こっているとき

こんなパターン。私はこれを赤黒サンドと名付けた。ドメイン解決は出来ているものとする。

f:id:lv7777:20170514164649p:plain

fix

routerboardのport80をdst-natでポートフォワーディングしているとこんな風になった。閉じたら治る。 なんで特定のサイトだけこうなるのか気になる。MTUじゃあるまいし。

42番がdst-natでポートフォワーディングしている

任意のサイトに接続出来ない(キャッシュがあればいけるかも)

ということで80番や42番を外部に公開するときはセキュリティだけじゃなくてNW障害に気をつけようね。

ついでに25番なんかを開けるのはやめようね!(OP25B)

dionaeaFRをraspiに入れる(ImportError: cannot import name patternsやDBが無い等のfix)

インストー

これとかめっちゃわかりやすい。感謝。

nodejsのbuildがめちゃ重い以外の感情が亡くなるので2日に分けてnodejsのbuildしながら寝るといい。

www.vincentina.net

ただし前提条件としてraspiならインストールの前にapt-get install sqlite3を実行しておく必要がある。

ImportError: cannot import name patterns

1.8以降だとdjangoの記法が変わったっぽい。

stackoverflow.com

djangoのバージョンも今はだいぶ新しくてdionaeafrは古いバージョン要求するのでちゃんとpip install django==1.8みたいな感じでバージョンしていしましょうね。

django.db.utils.OperationalError: unable to open database file

これも良く見たら上のブログに書いてあった。

起動するとこんな感じになる。まだ日が浅いのでぜんぜん面白いグラフになってないけどね。

f:id:lv7777:20170513121033p:plain

自宅にハニーポットを置き始めた[チラ裏]

raspiの2016のliteあたりで入れた。dionaeaとcowrieを入れた。

ちなみにdionaeaはハエトリグサの意味で後者は宝貝の意味らしいよ。

dionaeaのほうはビルドしないでもppa追加して入れれるっぽいんだけどぜんぜん出来なくてはぁ~~~ってなってたけどこの記事みながらやったら出来た。

もう一方のppaの奴はドメイン切れててnot foundになってる。

ManiacTwister

まぁこんな感じでbuildしなくてもいけるっぽい。apt-getもめちゃくちゃ重かったけど。

cowrieのほうはbuildしないと絶対ダメっぽいけど公式みながらやれば普通に出来た。特につまった所はない。

github.com


今はまだローカルからしかアクセス出来ない状態なのでポートフォワーディングしていい感じに外側から見てガバガバルーターに見えるようにしていきたいですね。

知見

dionaea-frなるものがある。弊社にハニポオタクいたのでその人から教えて貰った。dionaeaのbuildは結構ハマりやすいらしいよ。

cowrieはtelnetもいけるらしい。telnetのほうがいい感じに攻撃してくれそうなので設定変えて有効にしておきたいですね。

raspiでハニポやってる人結構多くて情報多いので助かる。

kaliでdpdkのbuild(igb_uio.koで落ちた時)とhelloworldするまで

結論

kaliでdpdk buildするのくっそ面倒くさいのでubuntuのほうが100倍簡単だよ

build

基本的にはここ見ればおk

DPDK doc

これも良い

DPDK の環境構築 - Packets are too Fast

igb_uio.koで落ちたり/lib/modules/4.6.0-kali1-amd64/build: No such file or directoryみたいなエラーが出たとき

dpdkの必要条件にlinuxカーネルが必要なんですがそれ忘れてるはず。

自分の場合apt-getでそれっぽいlinux-header2~3個持ってきても反応しなかった。

しかたがないのでカーネルビルドしようと思って

    # apt-get install build-essential
    # apt-get install kernel-package

とかその辺引っ張ってきてはbuildしてたんですが落ちまくっていた。

んでその後sudo apt-get -y dist-upgradeしてrebootかけたらbuildできた。dist-upgradeが死ぬほど重かった・・・5時間ぐらいかかったので寝る前にやるとおk。

build後helloworldするまで

大きく分けて3段階ある。

  • hugepagesの段階(再起動するまで)

kaliのGRUB_CMDLINE_LINUXはinitrdとかの設定をもう指定されてしまっていた。

GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="initrd=/install/initrd.gz"

この場合こんな感じでスペースを開けて継ぎ足せばOKぽい

GRUB_CMDLINE_LINUX_DEFAULT="quiet hugepages=1024"
GRUB_CMDLINE_LINUX="hugepages=1024 initrd=/install/initrd.gz"

etc/fstabのほうは普通にやってくれればいけるはず。再起動も忘れずにね。

hugepagesやらhugetlbfsやらよくわからんかった。このブログ書き終わったら調べてみたい。

  • dpdkをnicにbindするため段階

大変だし長いしハマりやすい。build出来ても第2、第3の罠が待ち構えているという訳です。

そもそもdpdk17.02の場合dpdk-devbind.pyのパスが変わっている

まぁ後でdpdkがdpdk-devbindコマンドにパス通してくれているの分かったのであんま問題じゃないんだけど。

path探すときはfind dpdkのパス -name *dpdk_devbind*とかで。

やりかたはdpdk-devbindコマンド単体で動かせば書いてある。成功すれば何も標準出力にでない。

Error - no supported modules(DPDK driver) are loadedと出た場合

modprobe uio_pci_generic

Routing table indicates that interface eth0 is active. Not modifyingと出た場合

lanケーブル一回抜いてNetworkManagerのアイコンがwlanになるの待ってからbindすればおk。


あとhugepages忘れててもエラー出る。エラーのコメントメモるの忘れたけど。(それはそう)

サンプルアプリをbuildする段階

なんかRTE_SDKとRTE_TARGETの環境変数の指定が必要。

export RTE_SDKとかの設定だと通らなかった。。。

cannot find -lrte_kniみたいなのが大量に出てきた場合

“”“ /usr/bin/ld: -lrte_kni が見つかりません /usr/bin/ld: -lrte_pipeline が見つかりません /usr/bin/ld: -lrte_table が見つかりません ”“”

みたいなのが大量に出てきた場合、dpdk-17.02にcdしてmake -C examples RTE_SDK=$(pwd) RTE_TARGET=build O=$(pwd)/build/examplesでおk。やはり公式のquickstartが最強

dpdk-17.02というのはこの部分ですね

“”“ root@kaliProvisional:~/Downloads/dpdk-17.02# ls GNUmakefile app drivers x86*gcc LICENSE.GPL build examples x86_64-native-linuxapp-clang LICENSE.LGPL buildtools lib x86_64-native-linuxapp-gcc MAINTAINERS config mk Makefile devtools pkg README doc usertools ”“”

これでbuildできるはず。build後の生成物はdpdk-17.02/build/example/helloworld/buildとかにある。

感想

いろいろ引っかかる上にbuildした後も結構ハマったので難易度A+ということで。まだ大枠があんま分かってないが環境はできたので調べていきますかね。