hana_shinのLinux技術ブログ読者になるhana_shinのLinux技術ブログLinuxの技術情報を掲載しています。ネットワークをメインに掲載していきます。iptables-extensionsとは?拡張パケットマッチングモジュールのことです。iptables-extensionsを使うと、マッチする条件を詳細に指定することができます。INPUTチェインでマッチングモジュールを指定する場合、以下のように使います。モジュール名には、mac,icmp等を指定します。hana_shinのLinux技術ブログを参照してください。<ターゲット>manは以下のようにして参照します。hana_shinのLinux技術ブログを参照してください。ネットワーク構成サーバとクライアントの2台構成です。図中のeth0はNICの名前です。版数は以下のとおりです。(Core)カーネル版数は以下のとおりです。事前準備firewall-cmdコマンドとiptablesコマンドは一緒に使うことはできないので、firewalldサービスを停止します。firewalld.servicefirewalldサービスの状態を確認します。firewalldサービスが停止したことがわかります。macモジュールの使い方macモジュールは、送信元MACアドレスを指定するモジュールです。REROUTING,FORWARD,INPUTの3つのチェインで使うことができます。ここでは、INPUTチェインでmacモジュールを使ってみます。macモジュールで、送信元MACアドレスとして52:54:00:8C:76:20を指定します。LOGターゲットを使って、送信元MACアドレスが52:54:00:8C:76:20のパケットを受信したら、ログを出力するルールを作成してみます。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。journalctlコマンドの使い方は、https://hana-shin.hatenablog.com/entry/2022/02/28/203433を参照してください。-fクライアントでpingコマンドを実行します。echoパケットの送信回数を指定するオプションです。echoパケットを1つ送信します。hana_shinのLinux技術ブログを参照してください。192.168.122.128ログを確認すると、送信元MACアドレスが52:54:00:8C:76:20のパケットを受信していることがわかります。SEQ=1後始末をします(作成したルールの削除)。icmpモジュールの使い方icmpモジュールは、ICMPパケットのタイプ/コードを指定するモジュールです。echoパケットを受信したらログを出力するルールを作成します。LOG作成したルールを確認します。4クライアントでpingコマンドを実行します。192.168.122.128ログを確認すると、ICMPパケットを受信していることがわかります。SEQ=1またルールを確認すると、受信したICMPパケット数が1つ増加したことがわかります。4後始末をします(作成したルールの削除)。unreachableパケットの指定方法(type=3,code=0)ここではルールの作成だけをします。hana_shinのLinux技術ブログを参照して実験してみてください。unreachableパケットを受信したらログを出力するルールを作成します。LOG作成したルールを確認します。4後始末をします(作成したルールの削除)。lengthモジュールの使い方lengthモジュールは、IPパケット長を指定するモジュールです。IPパケット長は、IPヘッダ(20byte)にIPペイロードを加えた長さになります。パケット長を指定する方法28バイトのIPパケットを受信したらログを出力するルールを作成します。LOG作成したルールを確認します。4クライアントでpingコマンドを実行します。-sは、ICMPパケットのペイロード長を指定するオプションです。以下の実行例は、ペイロード長に0を指定しています。echoパケットは、20バイトのIPヘッダ、8バイトのICMPヘッダから構成されています。echoパケットを受信したので、パケット数が1増加したことがわかります(期待値)。echoパケットを送信してみます。echoパケットを受信しても、パケット数が増加しないことがわかります(期待値)。4後始末をします(作成したルールの削除)。パケット長の範囲を指定する方法ICMPパケット長が30バイト~31バイトのICMPパケットを受信したらログを出力するルールを作成します。他のパケット長のICMPパケットを受信してもログが出力されないことを確認します。パケット長の範囲はコロンで指定します。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。echoパケットを送信してみます。192.168.122.128ログを確認すると、ICMPパケットを受信していることがわかります。echoパケットを受信したので、パケット数が1増加したことがわかります(期待値)。4後始末をします(作成したルールの削除)。パケット長の範囲(以上、以下)を指定する方法ICMPのパケット長が31バイト以下のICMPパケットを受信したらログを出力するルールを作成します。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。echoパケットを送信してみます。192.168.122.128ログを確認すると、ICMPパケットを受信していることがわかります。echoパケットを受信していることがわかります。4後始末をします(作成したルールの削除)。multiportモジュールの使い方multiportモジュールは、複数のポート番号を指定するモジュールです。宛先ポート番号が11111または11113のパケットを受信したらログに出力するルールを作成します。指定する複数のポート番号はカンマで指定します。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。-fサーバでncコマンドを実行します。ターミナルを3つ開いて、それぞれで下記コマンドを実行します。11113クライアントでncコマンドを実行します。クライアントでも、ターミナルを3つ開いて、それぞれで下記コマンドを実行します。11113ログを確認すると、宛先ポート番号が11111,11113を受信したログが記録されていることがわかります。宛先ポート番号が11112を受信したログは記録されていません(期待値)。URGP=0ルールを確認すると、受信パケット数が4つであることがわかります。これら4つのパケットは、クライアントからサーバへのSYN,SYN+ACKパケットです。4後始末をします(作成したルールの削除)。宛先ポート番号が11111から11113のパケットを受信したらログに出力するルールを作成します。指定する範囲はコロンで指定します。LOGログを確認するため、journalctlコマンドを実行します。-f作成したルールを確認します。4サーバでncコマンドを実行します。ターミナルを3つ開いて、それぞれで下記コマンドを実行します。11113クライアントでncコマンドを実行します。クライアントでも、ターミナルを3つ開いて、それぞれで下記コマンドを実行します。11113ログを確認すると、宛先ポート番号が11111,11112,11113を受信したログが記録されていることがわかります。URGP=0ルールを確認すると、受信パケット数が6つであることがわかります。これら6つのパケットは、クライアントからサーバへのSYN,SYN+ACKパケットです。4後始末をします(作成したルールの削除)。timeモジュールの使い方timeモジュールは、日時を指定するモジュールです。timeモジュールはUTCしか使えないようです。UTCは以下のようにして確認できます。日時を指定する方法(--datestart,--datestop)下記日時にパケットを受信したらログを出力するルールを作成します。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。-fクライアントでpingコマンドを実行します。192.168.122.128ログを確認すると、ICMPパケットを受信していることがわかります。echoパケットを受信していることがわかります。4後始末をします(作成したルールの削除)。UTC下記時間帯にパケットを受信したらログに出力するルールを作成します。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。-fクライアントでpingコマンドを実行します。192.168.122.128ログを確認すると、ICMPパケットを受信していることがわかります。echoパケットを受信していることがわかります。4後始末をします(作成したルールの削除)。setモジュールの使い方setモジュールは、ipsetコマンドで作成したセットを使用するモジュールです。ok_hostという名前のセットを作成します。hash:ip作成したセットにクライアントのIPアドレス(192.168.122.153)を追加します。192.168.122.153セットを確認すると、ok_hostという名前のセットが作成されたことがわかります。1Members:192.168.122.153作成したセットをINPUTチェインに登録します。ここでは、セットに登録するIPアドレスは1つだけですが、複数のIPアドレスを登録する場合、セットを使うと以下のように簡潔にルールを作成することができます。LOG作成したルールを確認します。4ログを確認するため、journalctlコマンドを実行します。-fクライアントでpingコマンドを実行します。192.168.122.128ログを確認すると、クライアントのIPアドレスを送信元とするICMPパケットを受信していることがわかります。echoパケットを受信していることがわかります。