PR

 Red Hat Enterprise Linux 7(RHEL 7)では、デフォルトのファイアウォールとして「firewalld」が採用された。firewalldはその名称通り、ファイアウォールを実現するサービス(デーモン)である。

 これまで利用されてきた「iptables」「ip6tables」と、バックエンドのパケットフィルター(Linuxカーネル内のnetfilter)および、バックエンドのパケットフィルターに対してルール群(テーブル)を設定するコマンド(iptables)が同じなので、少々紛らわしいかもしれない(図1)。

図1●従来のiptablesとfirewalldの関係
図1●従来のiptablesとfirewalldの関係
[画像のクリックで拡大表示]

 firewalldとiptables/ip6tablesとの違いは大きく2つある。1つはfirewalldがダイナミックに動作すること、つまり動的にファイアウォールのポリシーを変更できる点。もう1つはfirewalldには「ゾーン」と呼ぶ新しい概念が導入されていることである。

 なお、RHEL 7にiptables/ip6tablesを追加インストールして利用することも可能である。ただし、これから説明するようにfirewalldはiptables/ip6tablesよりも高機能で運用しやすいので、これを機会にfirewalldに移行するとよいだろう。

ダイナミックに動作する

 firewalldは「ダイナミック(動的)なファイアウォール」と呼ばれる。既存のIP接続を切断することなく、ルール(ポリシー)を追加・変更できるからである。一方、従来のiptables/ip6tablesはそうしたことができない。「スタティック(静的)」な動作であるためだ。この点について、詳しく説明しよう。

 iptables/ip6tablesでは、フィルタリングやNATなどのルールを変更する際、まず古いルールを一掃し、その後に新しいルールを設定していた。具体的には、RHELの場合は/etc/sysconfig/iptablesというファイルに記述されているルールを読み出し、その内容をイチからNetfilterに設定していた。

 例えば、Webサーバーを運用していて既にTCPの80番ポートを開放しているところに、新たにHTTPSが使えるようTCPの443番ポートも開放することになったとしよう。たった1行で記述できるそのルールを追加するのにも、iptables/ip6tablesではファイアウォールをリセットしていた。つまり、確立済みのTCP80番ポートへの接続を含むすべてのIP接続を破棄しなければならなかった。

 クラウドコンピューティングや仮想化された環境では、サービスや仮想マシンがダイナミックに追加・変更される。従って、それらが中断・停止されることのないよう、IP接続も継続的に提供される必要がある。しかし、iptables/ip6tablesではその要求を満たすことができなかった。クラウドコンピューティングや仮想化された環境では、firewalldのようなダイナミックファイアウォールが不可欠なのである。

動的なファイアウォールの利点

 ここでは、ダイナミックファイアウォールのさらなる利点を2つ示す。

 一つは、完全なステートフルパケットインスペクションを実現できる点。ここで、ステートフルパケットインスペクションとは、送信元・送信先のIPアドレスやUDP/TCPのポート番号を組み合わせるだけでなく、パケットの内容までチェックすること。パケットフィルタリングでは、一般にステートフルパケットインスペクションを行う。しかし、iptables/ip6tablesではルール変更時にIP接続が切断されてしまうので、パケットの状態(ステート)を追い切れないことがあった。

 ダイナミックファイアウォールならルール変更時に既存の接続に影響が生じないので、既存の接続を拒否するルールが追加されない限りにおいて、完全なステートフルパケットインスペクションを実現できる。

 もう一つは、主にノートPCなどのモバイル環境で、新たに接続するネットワーク上に設置されているZeroconf対応プリンターを容易に利用できること。ここで、Zeroconfとは同じネットワークに接続した別のマシンのホスト名を指定するだけで、該当するマシンを見つけ出し、アクセスできるようにするネットワーク技術。米Apple社の実装である「Bonjour」や、OSS(Open Source Software)実装である「Avahi」などが広く利用されている。

 例えば、Avahiが動作するノートPCがネットワークの変更を検出すると、Avahiはブロードキャストメッセージを送信してプリンターを探す。このメッセージを受け取ったプリンターからの応答は、「未知のIPアドレス」から送信されるパケットとなる。従って、iptables/ip6tablesなどスタティックなファイアウォールでは、そのパケットをドロップしてしまう。一方、firewalldならブロードキャストメッセージを送信するタイミングで一時的にルールを変更し、応答メッセージを受け取ってプリンターを使えるようにすることができる。