ファイアウォールを管理するために、IP フィルタを使用して、ネットワークトラフィックをフィルタリングするための規則セットを指定します。次の種類の規則セットを作成できます。
パケットフィルタリング規則セット
ネットワークアドレス変換 (NAT) 規則セット
また、IP アドレスのグループを参照するためにアドレスプールを作成できます。作成したプールは、あとで規則セット内で使用できます。アドレスプールはルール処理を高速化できます。また、アドレスプールによって、大きなまとまりのアドレスをより簡単に管理できます。
パケットフィルタリング規則セットを使用して、パケットのフィルタリングを設定します。ipf コマンドで、パケットフィルタリング規則セットを処理します。ipf コマンドの詳細については、ipf(1M) コマンドを参照してください。
パケットフィルタリング規則は、ipf コマンドによってコマンド行で作成することも、パケットフィルタリングの構成ファイル内で作成することもできます。構成ファイルをロードするには、ファイルを作成してから、そのパス名を IP フィルタサービスに指定する必要があります。
IP フィルタには、アクティブ規則セットと非アクティブ規則セットの 2 つのパケットフィルタリング規則セットを維持管理することができます。大部分の場合、作業ではアクティブ規則セットを使用します。ただし、ipf -I コマンドを使用すると、コマンドアクションをアクティブでない規則リストに適用できます。非アクティブ規則リストは、ユーザーが選択しない限り、IP フィルタによって使用されることはありません。非アクティブ規則リストによって、アクティブなパケットのフィルタリングに影響を与えずに、規則を保存できます。
IP フィルタは、構成された規則リストの最初から最後まで規則を処理してから、パケットの通過またはブロックを行います。IP フィルタは、パケットを通過させるかどうかを決めるフラグを維持管理しています。フラグは、規則セット全体を調べ、最後に一致した規則を基にパケットを通過させるか、ブロックするかを決定します。
このプロセスには、2 つの例外があります。最初の例外は、パケットが quick キーワードを含む規則に一致した場合です。規則が quick キーワードを含む場合は、その規則に対する処理が実行され、それ以降の規則はチェックされません。2 番目の例外は、パケットが group キーワードを含む規則に一致した場合です。パケットがグループに一致すると、グループでタグ付けされた規則だけがチェックされます。
パケットのフィルタリング規則を作成するには、次の構文を使用します。
action [in|out] option keyword, keyword...
各規則がアクションを開始します。IP フィルタは、パケットが規則に適合する場合、アクションを実行します。次の一覧に、パケットに対して実行される一般的なアクションを示します。
パケットはフィルタを通過できません。
パケットはフィルタを通過します。
パケットをロギングしますが、パケットをブロックするか、通過させるかの決定は行いません。ログを参照するには、ipmon コマンドを使用します。
フィルタの統計にパケットを含めます。統計を参照するには、ipfstat コマンドを使用します。
フィルタは number フィルタリング規則をスキップします。
パケット情報を確認するユーザープログラムが実行するパケット認証を要求します。このプログラムは、パケットを通過させるか、ブロックするかを決定します。
アクション後の出力は、in または out のはずです。ユーザーの選択により、パケットのフィルタリング規則が、受信パケットと発信パケットのどちらに適用されるのかが決定されます。
次に、オプションの一覧からオプションを選択します。複数のオプションを使用する場合は、次の順序で使用してください。
規則が最後に一致した規則の場合、パケットをロギングします。ログを参照するには、ipmon コマンドを使用します。
パケットが一致した場合、quick オプションを含む規則を実行します。これ以上の規則チェックは行われません。
パケットが指定したインタフェースを出入りする場合だけ、規則を適用します。
パケットをコピーし、interface-name 上の複製をオプションで指定した IP アドレスに送信します。
パケットを interface-name のアウトバウンドキューに移動します。
オプションの指定後、パケットが規則に一致するかどうかを決定するさまざまなキーワードを選択できます。次のキーワードは、次の順序で使用してください。
16 進数または 10 進数の整数で表されたサービスタイプの値を基に、パケットをフィルタリングします。
生存期間の値を基に、パケットの一致を取ります。パケットに保存されている生存期間の値は、破棄される前にパケットがネットワーク上に存在できる期間を示します。
特定のプロトコルに対して一致を取ります。/etc/protocols ファイルに指定されている任意のプロトコル名を使用したり、そのプロトコルを表す 10 進数の数を指定したりできます。キーワード tcp/udp は、TCP または UDP パケットとの一致を取るために使用できます。
発信元 IP アドレス、宛先 IP アドレス およびポート番号のいずれか、 またはすべてに対して一致を取ります。all キーワードは、すべての発信元からのパケットおよびすべての宛先へのパケットを受諾するために使用します。
パケットに関連する指定された属性に対して一致を取ります。オプションがない場合にパケットを一致させるには、キーワードの前に not または no と記述します。
設定されている TCP フラグを基にフィルタリングを行う TCP で使用します。TCP フラグの詳細については、ipf(4) のマニュアルページを参照してください。
ICMP のタイプによってフィルタリングを行います。このキーワードは proto オプションが icmp に設定されているときに使用され、flags オプションが指定されているときは使用されません。
保存しておくパケットの情報を決定します。使用可能な keep-options には state オプションが含まれます。state オプションは、セッションに関する情報を、TCP、UDP、および ICMP パケットで保存できます。
番号 number で指定されるフィルタリング規則に対して、新しいグループを作成します。
デフォルトグループではなく、グループ番号 number のグループに規則を追加します。ほかのグループを指定しない場合は、すべてのフィルタリング規則がグループ 0 に保存されます。
次の例は、規則を作成するためにパケットのフィルタリング規則構文をまとめる方法を示しています。IP アドレス 192.168.0.0/16 からの受信トラフィックをブロックするには、規則リストに次の規則を含めます。
block in quick from 192.168.0.0/16 to any
パケットフィルタリング規則を記述するときの詳細な文法および構文については、ipf(4) のマニュアルページを参照してください。パケットのフィルタリングに関連するタスクについては、IP フィルタのパケットフィルタリング規則セットの管理を参照してください。例に示されている IP アドレススキーム (192.168.0.0/16) については、Oracle Solaris 11.3 でのネットワーク配備の計画 の 第 1 章, ネットワーク配備の計画を参照してください。
NAT は、発信元 IP アドレスと宛先 IP アドレスをほかのインターネットアドレスまたはイントラネットアドレスに変換するマッピング規則を設定します。これらの規則は、受信 IP パケットまたは発信 IP パケットの 発信元アドレスおよび宛先アドレスを変更し、パケットを送信します。また、NAT を使用して、あるポートから別のポートにトラフィックの方向を変更することもできます。NAT は、パケットに修正または方向の変更が行われても、パケットの完全性を維持します。
NAT 規則は、ipnat コマンドを使用してコマンド行で作成することも NAT 構成ファイルで作成することもできます。NAT 構成ファイルを作成し、そのパス名をサービスの config/ipnat_config_file プロパティーの値として設定する必要があります。デフォルト値は /etc/ipf/ipnat.conf です。詳細は、ipnat(1M) コマンドを参照してください。
NAT 規則は IPv4 と IPv6 アドレス両方に適用できます。ただし、アドレスの種類ごとに個別のルールを作成する必要があります。IPv6 アドレスを含む NAT 規則では、mapproxy および rdrproxy NAT コマンドを同時に使用することはできません。
次の構文で NAT 規則を作成します。
command interface-name parameters
各規則の冒頭には、次のコマンドのいずれかが記述されています。
ある IP アドレスまたはネットワークを規制のないラウンドロビン方式で別の IP アドレスまたはネットワークにマッピングします。
ある IP アドレスとポートのペアから別の IP アドレスとポートのペアにパケットの方向を変更します。
外部 IP アドレスと内部 IP アドレス間で双方向の NAT を確立します。
静的 IP アドレスをベースにした変換を確立します。このコマンドは、アドレスを指定の範囲に変換するアルゴリズムに基づいています。
このコマンドに続く単語は、bge0 などのインタフェース名です。
次に、NAT 構成を決定するさまざまなパラメータを選択します。次に、この種のパラメータの例をいくつか挙げます。
ネットワークマスクを指定します。
ipmask が変換されるアドレスを指定します。
ポート番号の範囲と tcp、udp または tcp/udp プロトコルを指定します。
次の例は、NAT 規則を構築する方法を示しています。発信元アドレスが 192.168.1.0/24 のデバイス net2 から発信されるパケットを書き換え、外部に対して発信元アドレスが 10.1.0.0/16 であることを示すには、NAT 規則セットに次の規則を含めます。
map net2 192.168.1.0/24 -> 10.1.0.0/16
次の規則は IPv6 アドレスに適用されます。
map net3 fec0:1::/64 -> 2000:1:2::/72 portmap tcp/udp 1025:65000 map-block net3 fe80:0:0:209::/64 -> 209:1:2::/72 ports auto rdr net0 209::ffff:fe13:e43e port 80 -> fec0:1::e,fec0:1::f port 80 tcp round-robin
詳細な文法と構文については、ipnat(4) のマニュアルページを参照してください。
アドレスプールは、アドレスとネットマスクのペアのグループに対して単一の参照を確立します。アドレスプールは、IP アドレスとルールを一致させるのに必要な時間を短縮します。また、アドレスプールによって、大きなまとまりのアドレスをより簡単に管理できます。
アドレスプール構成規則は、IP フィルタサービスによって読み込まれるファイル内に置くことができます。ファイルを作成して、そのパス名をサービスの config/ippool_config_file プロパティーの値として設定する必要があります。デフォルト値は /etc/ipf/ippool.conf です。
次の構文でアドレスプールを作成します。
table role = role-name type = storage-format number = reference-number
複数のアドレスへの参照を定義します。
IP フィルタでのプールの役割を指定します。参照できる役割は ipf だけです。
プールの保存形式を指定します。
フィルタリング規則が使用する参照番号を指定します。
たとえば、アドレスが 10.1.1.1 および 10.1.1.2 でネットワークが 192.16.1.0 のグループをプール番号 13 で参照する場合、アドレスプールの構成ファイルに次の規則を含めます。
table role = ipf type = tree number = 13 { 10.1.1.1/32, 10.1.1.2/32, 192.168.1.0/24 };
次に、フィルタリング規則のプール番号 13 を参照するには、次の例のような規則を構築します。
pass in from pool/13 to any
なお、プールへの参照を含む規則ファイルをロードする前に、プールファイルをロードする必要があります。プールファイルをロードしていない場合、次の出力のようにプールは未定義となります。
# ipfstat -io empty list for ipfilter(out) block in from pool/13(!) to any
プールをあとで追加しても、そのプールの追加によってカーネルの規則セットが更新されることはありません。そのプールを参照する規則ファイルも再ロードする必要があります。
詳細な文法と構文については、ippool(4) のマニュアルページを参照してください。