パケットフィルタリング機能をステートフルに動作させる設定

動作確認バージョン:Brocade 5600vRouter Version4.2R1S1
ここでは、パケットリフィルタリング機能をステートフルに動作させた場合について紹介します。

ステートフルファイアウォール機能とは

Brocade 5600vRouter では、パケットフィルタリング機能をステートフルに利用することでステートフルファイアウォール機能として動作可能です。
ステートフル機能を有効にすることで、ファイアウォールルールが設定されたインタフェースを通過する「行き」通信の状態を把握しますので、「戻り」の通信に対してファイアウォールが自動的に判断して通過させます。
この機能によって、戻りの通信に対して許可するルール設定が不要になります。
パケットフィルタリング機能として、デフォルトはステートレスで動作します。

注釈

ステートフル機能の有効化については、個別のルールごとに有効化する方法とファイアウォール全体で有効にする方法があります。 動作確認済み設定例では、それぞれの設定事例について紹介します。

Version5.2R4 ではファイアウォールのパケットフィルタリング機能をステートフルに動作させるための設定をファイアウォール全体で有効にするオプション(global-state-policy)の動作仕様が Version3.5R6S3 、および Version4.2R1S1 から変更されています。 変更内容については Brocade Technical Bulletin(Version5.2R4) 、または 動作確認済設定例 をご参照ください。

個別のパケットフィルタリングルールに対してステートフル機能の有効化

ここでは、パケットフィルタリングルール毎に個別にステートフル機能を有効にするときの設定例を紹介します。

サンプル設定のシナリオ

  • 宛先192.168.3.3あてのICMP通信(Ping)だけ許可して転送したい
  • インタフェース(dp0s5)にインプットするトラフィックに対して有効化したい
  • それ以外にインタフェース(dp0s5)にインプットする通信については遮断したい
  • インタフェース(dp0s6)にインプットする通信については遮断したい
  • 必要なパケットフィルタリングルールにだけステートフル機能を有効にしたい
構成図
Fig2

シナリオにおける設定のながれ

  1. パケットフィルタリング設定の名前 test_rule
  2. 宛先192.168.3.3に対してICMPパケットを許可するルールを10として設定
  3. ルール10には個別にステートフルファイアウォール機能を有効化
  4. それ以外の192.168.3.3宛先とするパケットについて拒否する設定
  5. インタフェース(dp0s5)にてインプット方向へ適用
  6. すべての通信を拒否する設定の名前 all_drop
  7. インタフェース(dp0s6)にてインプット方向へ適用
  8. すべての通信を許可する設定の名前 all_accept
  9. すべてのパケットを許可するルールを10として設定
  10. ルール10には、個別のステートフルファイアウォール機能を有効化
  11. インタフェース(dp0s6)にてアウトプット方向へ適用

注釈

パケットフィルタリングルールにステートフル機能を個別に適用する時の注意

最初のコネクションを確立する通信が各インタフェースで、 ステートフル機能が有効になっているパケットフィルタリングルールに合致し 通過する必要があります。今回のシナリオでは、dp0s5にインプットしdp0s6から アウトプットするため、各インタフェースのパケットフィルタリングルールで ステートフル機能が有効になっています。

CLIにて入力するコマンド

set security firewall name test_rule default-action 'drop'
set security firewall name test_rule rule 10 action 'accept'
set security firewall name test_rule rule 10 destination address '192.168.3.3'
set security firewall name test_rule rule 10 protocol 'icmp'
set security firewall name test_rule rule 10 state 'enable'
set security firewall name all_drop default-action 'drop'
set security firewall name all_accept default-action 'accept'
set security firewall name all_accept rule 10 action 'accept'
set security firewall name all_accept rule 10 state 'enable'
set interface dataplane dp0s5 firewall in 'test_rule'
set interface dataplane dp0s6 firewall in 'all_drop'
set interface dataplane dp0s6 firewall out 'all_accept'
正しく設定が完了したときのコンフィグレーションは次のとおりです。
interfaces {
       dataplane dp0s4 {
               address 192.168.1.50/24
       }
       dataplane dp0s5 {
               address 192.168.2.50/24
               firewall {
                       in test_rule
               }
       }
       dataplane dp0s6 {
               address 192.168.3.5/24
               firewall {
                       in all_drop
                       out all_accept
               }
       }
}
security {
       firewall {
               name all_accept {
                       default-action accept
                       rule 10 {
                               action accept
                               state enable
                       }
               name all_drop {
                       default-action drop
               }
               name test_rule {
                       default-action drop
                       rule 10 {
                               action accept
                               destination {
                                       address 192.168.3.3
                               }
                               protocol icmp
                               state enable
                       }
               }
       }
}

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバ(192.168.2.6)から192.168.3.3 あてのPingが成功しました。
インタフェースdp0s6ではインプットするすべての通信を拒否していますが、Pingの「戻り」をファイアウォールが判断して通過させていますので
個別設定のステートフル機能が動作していることが確認できました。
#192.168.3.3あてのping -> OK

    test@ubu01:~$ ping 192.168.3.3
    PING 192.168.3.3 (192.168.3.3) 56(84) bytes of data.
    64 bytes from 192.168.3.3: icmp_seq=1 ttl=63 time=3.59 ms
    64 bytes from 192.168.3.3: icmp_seq=2 ttl=63 time=1.46 ms
    64 bytes from 192.168.3.3: icmp_seq=3 ttl=63 time=1.45 ms
    64 bytes from 192.168.3.3: icmp_seq=4 ttl=63 time=1.64 ms
    64 bytes from 192.168.3.3: icmp_seq=5 ttl=63 time=1.59 ms
    ^C
    --- 192.168.3.3 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4005ms
    rtt min/avg/max/mdev = 1.455/1.948/3.591/0.825 ms

#192.168.3.3 あての SSH通信 -> NG

    test@ubu01:~$ ssh -l user01 192.168.3.3
    ^C

パケットフィルタリングルール全体へのステートフル機能の有効化

ここでは、パケットフィルタリングルール全体でステートフル機能を有効にした場合の設定例を紹介します。

サンプル設定のシナリオ

  • 宛先192.168.3.3あてのFTP通信については許可して転送したい
  • インタフェース(dp0s5)にインプットするトラフィックに対して有効化したい
  • それ以外にインタフェース(dp0s5)にインプットする通信については遮断したい
  • インタフェース(dp0s6)にインプットする通信については遮断したい
  • すべてのパケットフィルタリングルールにステートフル機能を有効にしたい
構成図
Fig1

シナリオにおける設定のながれ

  1. ステートフルファイアウォール機能をTCP通信を対象に有効化
  2. パケットフィルタリング設定の名前 test_rule
  3. 宛先IPが192.168.3.3でTCPポート番号21のパケットを許可するルールを10として設定
  4. 192.168.3.3ポート番号21以外を宛先とするパケットについて拒否する設定
  5. インタフェース(dp0s5)にてインプット方向へ適用
  6. すべての通信を拒否する設定の名前 all_drop
  7. インタフェース(dp0s6)にてインプット方向へ適用
  8. (Version5.2R4 のみ) すべての通信を許可する設定の名前 all_accept
  9. (Version5.2R4 のみ) すべてのパケットを許可するルールを10として設定
  10. (Version5.2R4 のみ) ルール10には個別にステートフルファイアウォール機能を有効化
  11. (Version5.2R4 のみ) インタフェース(dp0s6)にてアウトプット方向へ適用

CLIにて入力するコマンド

Version4.2R1S1 の場合

set security firewall global-state-policy 'tcp'
set security firewall name test_rule default-action 'drop'
set security firewall name test_rule rule 10 action 'accept'
set security firewall name test_rule rule 10 destination address '192.168.3.3'
set security firewall name test_rule rule 10 destination port '21'
set security firewall name test_rule rule 10 protocol 'tcp'
set interfaces dataplane dp0s5 firewall in 'test_rule'
set security firewall name all_drop default-action 'drop'
set interfaces dataplane dp0s6 firewall in 'all_drop'

Version5.2R4 の場合

set security firewall global-state-policy 'tcp'
set security firewall name test_rule default-action 'drop'
set security firewall name test_rule rule 10 action 'accept'
set security firewall name test_rule rule 10 destination address '192.168.3.3'
set security firewall name test_rule rule 10 destination port '21'
set security firewall name test_rule rule 10 protocol 'tcp'
set interfaces dataplane dp0s5 firewall in 'test_rule'
set security firewall name all_drop default-action 'drop'
set interfaces dataplane dp0s6 firewall in 'all_drop'
set security firewall name all_accept default-action 'accept'
set security firewall name all_accept rule 10 action 'accept'
set security firewall name all_accept rule 10 state 'enable'
set interfaces dataplane dp0s6 firewall out 'all_accept'
正しく設定が完了したときのコンフィグレーションは次のとおりです。

Version4.2R1S1 の場合

interfaces {
        dataplane dp0s4 {
                address 192.168.1.50/24
        }
        dataplane dp0s5 {
                address 192.168.2.50/24
                firewall {
                        in test_rule
                }
        }
        dataplane dp0s6 {
                address 192.168.3.5/24
                firewall {
                        in all_drop
                }
        }
}
security {
        firewall {
                global-state-policy {
                        tcp
                }
                name all_drop {
                        default-action drop
                }
                name test_rule {
                        default-action drop
                        rule 10 {
                                action accept
                                destination {
                                        address 192.168.3.3
                                        port 21
                                }
                                protocol tcp
                        }
                }
        }
}

Version5.2R4 の場合

interfaces {
        dataplane dp0s4 {
                address 192.168.1.50/24
        }
        dataplane dp0s5 {
                address 192.168.2.50/24
                firewall {
                        in test_rule
                }
        }
        dataplane dp0s6 {
                address 192.168.3.5/24
                firewall {
                        in all_drop
                        out all_accept  |fwversion5|
                }
        }
}
security {
        firewall {
                global-state-policy {
                        tcp
                }
                name all_accept {
                        default-action accept
                        rule 10 {
                                action accept
                                state enable
                        }
                }
                name all_drop {
                        default-action drop
                }
                name test_rule {
                        default-action drop
                        rule 10 {
                                action accept
                                destination {
                                        address 192.168.3.3
                                        port 21
                                }
                                protocol tcp
                        }
                }
        }
}

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバ(192.168.2.6)から192.168.3.3 ポート番号21あてのFTP通信が可能であることが確認できました。
インタフェースdp0s6ではインプットするすべての通信を拒否していますがFTPの認証ならびにデータ転送が成功していますので
ステートフル機能が動作していることが確認できました。
#192.168.3.3あてのping -> NG

test@ubu01:~$ ping 192.168.3.3
PING 192.168.3.3 (192.168.3.3) 56(84) bytes of data.
^C
--- 192.168.3.3 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5038ms

#192.168.3.3あてのFTP -> OK

test@ubu01:~$ ftp 192.168.3.3
Connected to 192.168.3.3.
220 (vsFTPd 3.0.3)
Name (192.168.3.3:test): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    2 1000     1000         4096 Sep 10  2015 aaa
-rw-r--r--    1 1000     1000         8980 Aug 31  2015 examples.desktop
-rw-rw-r--    1 1000     1000          612 Dec 02  2015 index.html
-rw-rw-r--    1 1000     1000        31272 Jun 13 10:48 ping.txt
drwxrwxr-x    2 1000     1000         4096 May 30 01:46 tmp
drwxr-x--x    8 1000     1000         4096 Jul 26 06:29 vsftpd-3.0.3
226 Directory send OK.
ftp>
ftp>
ftp> get index.html
local: index.html remote: index.html
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for index.html (612 bytes).
226 Transfer complete.
612 bytes received in 0.00 secs (4.4216 MB/s)
ftp> passive
Passive mode on.
ftp>
ftp> get index.html
local: index.html remote: index.html
227 Entering Passive Mode (192,168,3,3,104,143).
150 Opening BINARY mode data connection for index.html (612 bytes).
226 Transfer complete.
612 bytes received in 0.00 secs (6.0797 MB/s)