by shigemk2

当面は技術的なことしか書かない

nftables: The Next Generation Firewall in Linux まとめ #kernelvm

アンケート

  • AKB48
  • SKB SocKet Buffer(今日の話はココ)
  • PCB Process Control Block(プロセスの状態をあらわすデータ構造)
  • UNPCB Unix Protocol Control Block ソケット

アジェンダ

  • nftablesについてしゃべる

  • @s1061123

  • nftablesには関係がない

nftables

  • LinuxCon2015に似たタイトルの発表がある

nftablesとは

netfilter/iptables project homepage - The netfilter.org "nftables" project

  • パケットフィルタリングコマンド
  • iptablesと同様にnetfilterを使用している

netfilterとは

  • netfilter パケットを書き換えるフレームワーク
  • iptablesもnetfilterを使っている(firewalldもこれ)
  • netfilterはLinuxカーネル内でネットワークのパケットを書き換えることが出来る

ip ip6 arp eb tables?

  • 各プロトコルについて、コマンドが存在する

なぜnftables?

  • 技術的負債の解消
  • パフォーマンスの向上

  • iptablesができたのは1999 で16年

  • 70以上のモジュールがあって、つぎ足しつぎ足し秘伝のタレ
  • プロトコルごとに別コマンド
  • シンタックスルールも複雑化

  • iptablesのパフォーマンス問題

  • ルールセット追加削除がアトミック チェインに対して、カーネルからユーザランドにコピーするから遅い
  • ルールをすべて拾って読んでいれかえる、という作業をやっている
  • ルールが増えれば処理が重くなる

  • 2008に開発

  • 2012のnetfilter.orgの人がiptables互換レイヤー
  • 2014/1カーネルメインラインにマージ

使い方

  • カーネルにNF_TABLES(と好きなオプションをつけてビルド)
  • iptablesを使う場合はiptablesを止める
  • ルールの追加は以下のように。iptablesだと全部1行だった。構造化できる
table ip filter {
  chain input {
    ....
  }
  chain forward {
    ....
  }
}

フロー

  • 関連ライブラリ nft-rule-getを見る
  • バークレーパケットフィルタ(BPF)からインスパイア
  • フィルタリング実装はpseudo-state machineとして実装されている
  • パケットに必要なフィルタリングや計算の機能が載っている

VMコードの読み方

  • nft-rule-get
  • ペイロードのところが命令
  • レジスタのところにロード
  • パケットの中に存在しない情報を、load oifでとることができる
  • libnftnlをつかうことでnftablesのルールを追加したり削除したり出来る
  • Netlink(libnml)でカーネルに送信

宣伝

  • MiniUPnPがnftablesをサポート
  • MiniUPnPはNATの内側からforwardingの穴を簡単にあけられるNATむけのIGDの実装
  • UPnPなくても安心

まとめ

nftablesを使おう!

質疑