LinuCレベル3 303試験の例題と解説
328.3 パケットフィルタ
■トピックの概要
このトピックの内容は以下の通りです。
<328.3 パケットフィルタ>
重要度 5
<説明>
パケットフィルタの使用と設定に精通していることが求められる。これには、nftables, nft および ebtablesと同様に、netfilter, iptables および ip6tablesも含まれる。
<主要な知識範囲>
・一般的なfirewall のアーキテクチャの理解。DMZを含む。
・netfilter, iptables および ip6tablesの理解と使用。標準モジュール、テスト、ターゲットを含む。
・IPv4 と IPv6 のパケットフィルタの実装。
・接続追跡とNATの実装。
・IPセットの定義とnetfilterルール内での使用。
・nftの基本的な知識。
・ebtablesの基本的な知識。
・conntrackdの認知。
<重要なファイル、用語、ユーティリティ>
・iptables
・ip6tables
・iptables-save, iptables-restore
・ip6tables-save, ip6tables-restore
・ipset
・nft
・ebtables
■例題
iptablesコマンドで、システム外部から内部へのTCP/22ポートへのパケットを許可する設定を行います。
以下の実行コマンドの2つの空欄に当てはまる設定を選びなさい。
[現在の状態]
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[実行コマンド]
iptables -I 1 [ ] -p tcp -m tcp [ ] 22 -j ACCEPT
1. INPUT, --dport
2. INPUT, --sport
3. OUTPUT, --dport
4. OUTPUT, --sport
※この例題は実際の試験問題とは異なります。
解答と解説
答えは「1. INPUT, --dport」です。
今回の場合、送受信を制御する「filterテーブル」を利用しています。
またテーブルごとに、チェインと呼ばれるルールのまとまりがあります。
filterテーブルでは、デフォルトで以下のチェインが用意されています。
○filterテーブルのチェイン
・INPUT :受信パケットのルールを定義します
・OUTPUT :送信パケットのルールを定義します
・FORWARD:フォワードするパケットのルールを定義します
またiptablesコマンドは、コマンドのオプションやルールのオプション、モジュールの
オプションを混在して使用します。よく利用されるオプションは以下のとおりです。
○コマンドオプション
・-A [チェイン] [ルール] :ルールを最後尾に追加
・-D [チェイン] [ルールまたはルールの番号] :マッチするルールを削除
・-I [チェイン ルール番号] [ルール] :指定した番号にルールを追加(ルールを省略した場合、先頭に追加)
・-R [チェイン ルール番号] [ルール] :指定した番号のルールを置き換える
○ルールオプション
-p :プロトコル(tcp, udp, icmp, all)を指定します
-s :送信元IPアドレスを指定します
-d :宛先IPアドレスを指定します
-i :受信パケットを受け取るインタフェースを指定します
-o :送信パケットを受け取るインタフェースを指定します
-j :許可・拒否の動作やユーザ定義チェインなどのターゲットを指定します
filterテーブルに関連するターゲットは以下の通りです。
またこの他にも、ユーザ定義のチェインを指定して、そのチェインのルールを評価させることもできます。
ACCEPT:パケットを受け入れる
REJECT:パケットを拒否する
DROP :パケットを破棄する
RETURN:現在のチェインの処理を中止して、元のチェインに戻る
○モジュールオプション
-m :モジュールを指定します。主なモジュールは以下になります
tcp :TCP通信に関連するモジュール。-p tcpと組み合わせて使用する
udp :UDP通信に関連するモジュール。-p udpと組み合わせて使用する
state:パケットの接続追跡を行うモジュール --stateで接続状態を指定する
○tcpモジュールの主なオプション
--dport :宛先ポートを指定します
--sport :送信元ポートを指定します
--tcp-flags:TCPのフラグを指定します
○udpモジュールの主なオプション
--dport :宛先ポートを指定します
--sport :送信元ポートを指定します
○stateモジュールの主なオプション
--state:モジュールの接続状態を指定します。指定できるのは以下の4つです
ESTABLISHED:過去に双方向のパケット通信がやり取りされた接続に属している
NEW :新しい接続が開始された、または双方向にパケット通信のやり取りが行われていない接続に属している
RELATED :新しい接続を開始しているが、 FTP データ転送やICMPエラーのように、既存の接続に関連する
INVALID :上記に当てはまらないパケット
今回の問題は「システム外部から内部へ」ですので、INPUT(受信パケット)のルールを設定します。
TCP通信なので、-pでプロトコルを指定しています。
宛先ポートが22番ポートの指定があるため、-mでtcpモジュールを利用して、
tcpモジュールの--dportオプションで、22番ポートを指定しています。
また通信の許可を行うため、-jでACCEPTを指定してパケットを受け入れています。
iptables -I 1 INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptablesは今回紹介したfilterテーブル以外にも、パケットの書き換えを行うnatテーブルが
あるなど、機能が様々です。それぞれに関連するオプションが多く有りますので、混乱しないよう
整理して覚えておきましょう。
◆例題作成者
株式会社デージーネット システム設計部 森 彰吾 氏 株式会社デージーネット ソリューション開発部 丸吉祐也 氏