WIDE Technical-Report in 2008 USAGIプロジェクト パケットフィルタに関する開発活動 wide-tr-usagi-netfilter-03.txt WIDE Project: http://www.wide.ad.jp/ If you have any comments on this document, please contact to ad@wide.ad.jp. Title: USAGIプロジェクト パケットフィルタに関する開発活動 Author(s): USAGIプロジェクトコアメンバ (usagi-core@linux-ipv6.org) Date: 2008/01/07 -- 目次 1 概要 2 2007年度の開発内容 2.1 IPv4/IPv6に対応したConnection Trackingのメンテナンス 2.2 パケットフィルタの設定コマンドiptables、ip6tablesのコード共通化 2.3 ip6tables用拡張モジュールの大幅な拡充 3 開発体制 4 現在の状況と今後の予定 -- 本文 1. 概要  USAGIプロジェクトはLinuxのIPv6スタックやIPv6に関するライブラリ、 アプリケーションの開発、改良を行っており、パケットフィルタ機能もその対象と なっている。今年度、USAGIプロジェクトは昨年度に引き続きIPv4/IPv6に対応した Connection Trackingのメンテナンスを行った。また、パケットフィルタの設定 コマンドiptables、ip6tablesのコード共通化、ip6tables用拡張モジュールの 大幅な拡充を行った。以下では、これらの内容について報告する。 2 2007年度の開発内容 2.1 IPv4/IPv6に対応したConnection Trackingのメモリ管理方法改善  Connection Trackingは機器に入ってくるTCPやUDPのフローの状態変化を追跡する Linuxカーネルの一機能であり、パケットフィルタ機能やIPv4 NAT機能に利用される 機能である。元々LinuxにはIPv4専用のConnection Tracking (以下ip_conntrackと記す)が実装されていたが、USAGIプロジェクトが開発した IPv4/IPv6対応Connection Tracking(以下nf_conntrackと記す)が2005年11月Linux カーネルに採用された。  今年度、USAGIプロジェクトはnf_conntrackにおけるメモリ管理方法を 改善した。以前から、IPv4 NATやアプリケーションレイヤプロトコルの追跡などの 拡張機能を適用しない場合に、nf_conntrackが各コネクション用に割り当てる メモリスペースの一部が使用されず無駄になることがあるという意見が多くあった。 そこで、各コネクションに適用される機能に応じて適切なメモリスペースを 割り当てることができ、かつ拡張機能を開発しやすいAPIを備えたnf_conntrack用の メモリ管理機構を実装した。 2.2 パケットフィルタの設定コマンドiptables、ip6tablesのコード共通化  従来LinuxではIPv4、IPv6それぞれのパケットフィルタを設定するユーザコマンドが 別々に実装されていた(それぞれiptables、ip6tables)。しかし、これらは以下を扱う 拡張モジュールで類似部分を多く含むため、長らく共通化が望まれていた。 - 操作対象のパケットを選択するマッチルール用モジュール ex.: TCP/UDPポート番号によるマッチングなど - パケットに適用する操作を指定するターゲットルール用モジュール ex.: 破棄、通過許可、ロギングなど そこで昨年度より、上記モジュールの実装に必要な内部APIをiptables、 ip6tablesで共通化した。これにより新たなモジュールを開発する場合、共通化された APIで1つのモジュールを実装すればiptables、ip6tables両方に対応できるように なった。また、iptablesとip6tablesで別々に実装されていた22個のモジュールを それぞれ統合した。 2.3 ip6tables用拡張モジュールの大幅な拡充  iptables, ip6tables用拡張モジュールの内部APIを共通化したことで、これまで iptablesのみがサポートしていた拡張モジュールをip6tablesに対応させることが 容易になった。そこで、そのようなモジュール14個をip6tablesに対応するよう 変更した。 3 開発体制  昨年度に引き続き、USAGIプロジェクトメンバの小堺がLinuxにおけるパケット フィルタやNAT機能の開発、メンテナンスを行っているNetfilter Project (http://www.netfilter.org)のコアメンバとして積極的に開発を進めた。 4 現在の状況と今後の予定  2.1で述べたnf_conntrackに対する改善はLinux 2.6.23に採用された。また、 2.2および2.3で述べたユーザランドコマンド iptables, ip6tables に対する改善は iptables-2.4.0に採用した。なお、この変更に伴うコマンドの使用方法についても 変更はなく、ユーザはこれまでどおりiptables、ip6tablesを利用可能である。  近年USAGI Projectの活動により,nf_conntrackの導入、カーネルと ユーザコマンドにおけるIPv4/IPv6処理部の共通化など、パケットフィルタ関連の APIが大きく変化している。それに伴い開発者向けドキュメントが陳腐化しているため、 今後これらドキュメントの整備を行いたいと考えている。 Copyright Notice Copyright (C) USAGI/WIDE Project (2008). All Rights Reserved.