RFC3514 for Linux

2003年4月1日にリリースされたRFC3514の崇高な思想に、当時まだ10代だった僕は強い感銘を受けました。悪意のパケットにはそれを明示するフラグを立てる。これこそ騎士道であり、武士道であり、僕にとっては平和の象徴ですらありました。ノーベル平和賞はこのRFC3514にこそ贈られるべきだと思ったし、今でもその気持ちは変わりません。さらに、これを具現化したFreeBSDへの実装もまた、敬服に堪えず、賞賛されるべき偉業です。

そしてLinuxにも、この気高い志のもとに生まれた機能の実装が必要だと思いました。しかしあのころの僕には、残念ながらそのための知識がなかった。だけど今ならできるかもしれない。そうだ、実装しよう。

  • RFC3514 Implementation for Linux Kernel 3.14
  • ということで、前置きが長かったですが、これがパッチです。

    Patch – RFC3514_for_linux-3.14.patch
    License – GPLv2

  • 悪意のパケット送信
  • この実装ではFreeBSD実装のインタフェースをほぼそのまま移植しています。まずソケットオプションによる悪意のパケット送信機能を有効にするために以下のコマンドを実行してください。

    
    # echo 1 > /proc/sys/net/ipv4/rfc3514
    

    そしてあなたの作ったソケット通信プログラムのソケットディスクリプタに、以下のソケットオプションを設定します。

    
    #define IP_EVIL_INTENT  666
    int evil_intent = 1;
    
    setsockopt(sockfd, SOL_IP, IP_EVIL_INTENT, &evil_intent, sizeof(evil_intent));
    

    このオプションが設定されたソケットディスクリプタから送信されるIPv4パケットは、RFC3514で規定されたIPv4ヘッダのevilフィールドビットにフラグが立ちます。これによって、あなたは送信パケットに明確な悪意を表明することができるわけです。

  • 送信拒否
  • しかし、大多数の善意のシステム管理者は、こんなパケットを送信されたくないはずです。ですから、先ほどのソケットオプションを有効にしないことはもちろん、Rawソケットからの送信も拒否するために以下のコマンドを実行してください。

    
    # echo 1 > /proc/sys/net/ipv4/ip_speak_no_evil
    

    RFCのとおり、この設定で送信拒否が発生すると統計情報を加算します。

    
    $ netstat -s | grep "outgoing packets dropped"
    

    iptables?netfilter?なんですかそれは?美味しゅうございますか?

  • 受信拒否
  • このパッチを公開したことによって、近い将来、すべての攻撃者は明示的にevilビットを立てる日がやって来るので、攻撃からシステムを守るためには以下のコマンドを実行するだけで十分です。

    
    # echo 1 > /proc/sys/net/ipv4/ip_hear_no_evil
    

    ね、簡単でしょ?もちろん統計情報もしっかり加算します。

    
    $ netstat -s | grep "incoming packets discarded"
    

  • バグ
  • 僕が書いたソースにバグなどというものはありません。この機能があればもう安心です。愛と平和に満たされた世界がやってくるのです。うん。必ずしもハッカーが悪いとはRMSも言わなかった。Linuxのiptablesより、流出した情報の回収に漕ぎ出すことが幸せの秩序です。五人官女だってです!カエルたちの笛や太鼓に合わせて回収中の不燃ゴミが吹き出してくる様は圧巻で、まるでコンピューター・グラフィックスなんだそれが!総天然色の青春グラフィティや一億総プチブルを私が許さないことくらいゆかり王国じゃあ常識なんだよ!今こそ青空に向かって凱旋だ!絢爛たる紙吹雪は鳥居をくぐり、周波数を同じくするポストと冷蔵庫は先鋒をつかさどれ!賞味期限を気にする無頼の輩は花電車の進む道にさながらシミとなってはばかることはない!思い知るがいい!三角定規たちの肝臓を!さぁ!この祭典こそ内なる小学3年生が決めた遙かなる望遠カメラ!進め!集まれ!私こそが!カードキャプター!すぐだ!すぐにもだ!私を迎え入れるのだ!!

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    *