8.1. 速度に関する考察

iptables-saveiptables-restore コマンドを利用する最も大きな要因は、大きなルールセットのロードおよび保存が、これらによってかなり高速化できることだ。 iptables ルールを収めたシェルスクリプトを走らせる場合に一番の問題となるのは、スクリプト中で iptables コマンドを発行する度に、 iptables は、まずカーネル領域からルールセット全体を抽出してから、当該のコマンドが要求するルールの挿入なり、追加なり、変更なりを行うという点だ。そうしてから、自メモリ領域上にできた更新版のルールセットを、カーネルスペースに送り込む。シェルスクリプトを使う場合、ルールの挿入を伴うルールひとつひとつでこうした動作が行われ [訳者註: その度毎にルールセットはより大きくなってゆくので]、抽出と挿入にかかる時間はどんどん長くなっていく。

この難点を解決するために、 iptables-save および restore コマンドがある。 iptables-save コマンドは特別なフォーマットを持ったテキストファイルにルールセットを保存し、 iptables-restore コマンドは、このテキストファイルからルールセットを再びカーネルにロードするためにある。このふたつのコマンドの強みは、ルールセットのロードと保存が、たったひとつのリクエストで片づくという点だ。 iptables-save は、ひと息の動作だけで、カーネルからルールセット全体を掴み取りファイルに保存する。 iptables-restore は、テーブルをひとつの動作単位として、当該のルールセットをカーネルにアップロードする。つまり、極めて巨大なルールセットがここにあるとして、カーネルからの削除を 3,000 回行い、再び同じ数だけカーネルにアップロードする代わりに、丸ごと一挙にファイルへ保存し、いくつのテーブルがあるかにもよるが、 3つやそこらの動作でそれをアップロードできるのだ。

お分かりのことと思うが、 iptables-saveiptables-restore は、もしあなたが膨大なルールを挿入しなければならない環境で作業するのなら、まさにもってこいのツールだ。しかし、短所が存在するのも確か。それについて、以下のセクションで検討していくことにしよう。