パケットフィルタリング機能とNAT動作の組み合わせ設定

動作確認バージョン:Brocade 5600vRouter Version4.2R1S1
ここでは、NAT利用時におけるパケットフィルタリング設定について紹介します。
NAT利用時は、パケットのヘッダ情報の書き換えが発生するため、NATが適用されるインタフェースを通過する「行き」のパケットに対してセッションテーブルという形で記録されます。
「戻り」のパケットがインタフェースを通過する際は、まずセッションテーブルに該当する通信かどうかを判断して、パケットを転送するか、インタフェースの処理に進めるのか判断します。
この動作により、通常のパケットフィルタリングルールを適用した状態であっても、「戻り」のパケットは、まずセッションテーブルを参照して該当するパケットと判断されて転送されますので、
動作結果としてステートフル機能を有効にした場合と似た動作になります。

NAT利用時におけるパケットフィルタリング機能

NAT利用におけるパケットフィルタリング動作について紹介します。

サンプル設定のシナリオ

NAT環境の設定
  • インタフェース(dp0s5)で宛先IPアドレスをNAT変換したい
  • インタフェース(dp0s6)でNAPT設定したい
ステートフルファイアウォール機能の設定
  • インタフェース(dp0s5)配下の端末からFTP通信を許可したい
  • それ以外のインタフェースdp0s5にインプットする通信については遮断したい
  • インタフェース(dp0s6)にインプットする通信は遮断したい
構成図
fiter+natuse1

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

NAT環境の設定
1.インタフェース(dp0s5)にインプットする192.168.2.50あての通信は192.168.3.3としてNAT設定
2.インタフェース(dp0s6)からアウトプットする192.168.2.0/24からの通信はNAPT設定

ステートレスファイアウォール設定
1.パケットフィルタリング設定の名前 test_rule
2.192.168.2.50でTCPポート番号21を宛先とするパケットについて許可
3.192.168.2.50でTCPポート番号21を宛先とするパケットを許可するルールを10として設定
4.192.168.2.50ポート番号21以外を宛先とするパケットについて拒否する設定
5.インタフェース(dp0s5)にてインプット方向へ適用
7.すべての通信を拒否する設定の名前 all_drop
8.インタフェース(dp0s6)にてインプット方向へ適用

CLIにて入力するコマンド

set service nat destination rule 10 destination address '192.168.2.50'
set service nat destination rule 10 inbound-interface 'dp0s5'
set service nat destination rule 10 translation address '192.168.3.3'
set service nat source rule 10 outbound-interface 'dp0s6'
set service nat source rule 10 source address '192.168.2.0/24'
set service nat source rule 10 translation address 'masquerade'
set security firewall name all_drop default-action 'drop'
set security firewall name all_drop rule 10 action 'drop'
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.2.50'
set security firewall name test_rule rule 10 destination port '21'
set security firewall name test_rule rule 10 protocol 'tcp'
set interface dataplane dp0s5 firewall in 'test_rule'
set interface dataplane dp0s6 firewall in 'all_drop'
正しく設定が完了したときのコンフィグレーションは次のとおりです。
 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 {
                name all_drop {
                        default-action drop
                        rule 10 {
                                action drop
                        }
                }
                name test_rule {
                        default-action drop
                        rule 10 {
                                action accept
                                destination {
                                        address 192.168.2.50
                                        port 21
                                }
                                protocol tcp
                        }
                }
        }
 }
 service {
        nat {
                destination {
                        rule 10 {
                                destination {
                                        address 192.168.2.50
                                }
                                inbound-interface dp0s5
                                translation {
                                        address 192.168.3.3
                                }
                        }
                }
                source {
                        rule 10 {
                                outbound-interface dp0s6
                                source {
                                        address 192.168.2.0/24
                                }
                                translation {
                                        address masquerade
                                }
                        }
                }
        }
}

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバ(192.168.2.6)から192.168.2.50 あてのPingはパケットフィルタリングルールにより
失敗しますが、ポート番号21あてのFTP通信は「行き」方向を許可し、「戻り」側のインタフェース(dp0s6)で、すべてのパケットを拒否する
設定をしていますが、NAT環境におけるセッションテーブルの参照により、パケットが転送されて成功していることが確認できました。
#192.168.2.50あての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 ---
8 packets transmitted, 0 received, 100% packet loss, time 6999ms

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


#192.168.2.50あてのFTP -> OK

test@ubu01:~$ ftp 192.168.2.50
Connected to 192.168.2.50.
220 (vsFTPd 3.0.3)
Name (192.168.2.50:test): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
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> 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.9046 MB/s)
ftp>
ftp> passive
Passive mode on.
ftp>
ftp> get index.html
local: index.html remote: index.html
227 Entering Passive Mode (192,168,2,50,19,213).
150 Opening BINARY mode data connection for index.html (612 bytes).
226 Transfer complete.
612 bytes received in 0.00 secs (7.0319 MB/s)
ftp>

NAT利用時におけるステートフル機能のグローバル設定

NAT利用に、パケットフィルタリングルール全体にステートフル機能を有効にした場合の動作について紹介します。

サンプル設定のシナリオ

NAT環境の設定
  • インタフェース(dp0s5)で宛先IPアドレスをNAT変換したい
  • インタフェース(dp0s6)でNAPT設定したい
ステートフルファイアウォール機能の設定
  • インタフェース(dp0s5)配下の端末からFTP通信を許可したい
  • それ以外のインタフェースdp0s5にインプットする通信については遮断したい
  • インタフェース(dp0s6)にインプットする通信は遮断したい
  • すべてのパケットフィルタリングルールにステートフル機能を有効にしたい
構成図
Fi2

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

NAT環境の設定
1.インタフェース(dp0s5)にインプットする192.168.2.50あての通信は192.168.3.3としてNAT設定
2.インタフェース(dp0s6)からアウトプットする192.168.2.0/24からの通信はNAPT設定

ステートフル機能の設定
1.フィルタリングルール全体にステートフル機能をTCP通信を対象に有効化
2.パケットフィルタリング設定の名前 test_rule
3.192.168.2.50でTCPポート番号21を宛先とするパケットを許可するルールを10として設定
4.192.168.2.50ポート番号21以外を宛先とするパケットについて拒否する設定
5.インタフェース(dp0s5)にてインプット方向へ適用
7.すべての通信を拒否する設定の名前 all_drop
8.インタフェース(dp0s6)にてインプット方向へ適用

CLIにて入力するコマンド

set service nat destination rule 10 destination address '192.168.2.50'
set service nat destination rule 10 inbound-interface 'dp0s5'
set service nat destination rule 10 translation address '192.168.3.3'
set service nat source rule 10 outbound-interface 'dp0s6'
set service nat source rule 10 source address '192.168.2.0/24'
set service nat source rule 10 translation address 'masquerade'
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.2.50'
set security firewall name test_rule rule 10 destination port '21'
set security firewall name test_rule rule 10 protocol 'tcp'
set security firewall name all_drop default-action 'drop'
set interfaces dataplane dp0s5 firewall in 'test_rule'
set interfaces dataplane dp0s6 firewall in 'all_drop'
正しく設定が完了したときのコンフィグレーションは次のとおりです。
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.2.50
                                       port 21
                               }
                               protocol tcp
                       }
               }
       }
}
service {
       nat {
               destination {
                       rule 10 {
                               destination {
                                       address 192.168.2.50
                               }
                               inbound-interface dp0s5
                               translation {
                                       address 192.168.3.3
                               }
                       }
               }
               source {
                       rule 10 {
                               outbound-interface dp0s6
                               source {
                                       address 192.168.2.0/24
                               }
                               translation {
                                       address masquerade
                               }
                       }
               }
       }

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバ(192.168.2.6)から192.168.2.50 あてのPingはパケットフィルタリングルールにより
失敗しますが、ポート番号21あてのFTP通信は「行き」方向を許可し、「戻り」側のインタフェース(dp0s6)で、すべてのパケットを拒否する
設定をしていますが、NAT環境におけるセッションテーブルの参照により、パケットが転送されて成功していることが確認できました。
#192.168.2.50あてのping -> NG

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

test@ubu01:~$
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 ---
3 packets transmitted, 0 received, 100% packet loss, time 2016ms


#192.168.2.50あてのFTP -> OK

test@ubu01:~$ ftp 192.168.2.50
Connected to 192.168.2.50.
220 (vsFTPd 3.0.3)
Name (192.168.2.50:test): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
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> 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 (5.2111 MB/s)
ftp>
ftp> passive
Passive mode on.
ftp>
ftp> get index.html
local: index.html remote: index.html
227 Entering Passive Mode (192,168,2,50,108,210).
150 Opening BINARY mode data connection for index.html (612 bytes).
226 Transfer complete.
612 bytes received in 0.00 secs (7.0319 MB/s)
ftp>

NAT利用時におけるステートフル機能の個別設定

NAT利用に、パケットフィルタリングルール個別にステートフル機能を有効にした場合の動作について紹介します。
インタフェースで
ここでは、個別のパケットフィルタリングルールにステートフル機能を
有効にするときの設定例を紹介します。
またファイアウォールでNAT機能が使われている場合の紹介をします。

サンプル設定のシナリオ

NAT環境の設定
  • インタフェース(dp0s5)で宛先IPアドレスをNAT変換したい
  • インタフェース(dp0s6)でNAPT設定したい
ステートフルファイアウォール機能の設定
  • インタフェース(dp0s5)配下の端末からFTP通信を許可したい
  • それ以外のインタフェースdp0s5にインプットする通信については遮断したい
  • インタフェース(dp0s6)にインプットする通信は遮断したい
  • 必要なパケットフィルタリングルールにだけステートフル機能を有効にしたい
構成図
Filter+NAT1

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

NAT環境の設定
1.インタフェース(dp0s5)にインプットする192.168.2.50あての通信は192.168.3.3としてNAT設定
2.インタフェース(dp0s6)からアウトプットする192.168.2.0/24からの通信はNAPT設定

ステートフル機能の設定
1.パケットフィルタリング設定の名前 test_rule
2.192.168.2.50でTCPポート番号21を宛先とするパケットを許可するルールを10として設定
3.ルール10には、個別のステートフル機能を有効化
4.192.168.2.50ポート番号21以外を宛先とするパケットについて拒否する設定
5.インタフェース(dp0s5)にてインプット方向へ適用
7.すべての通信を拒否する設定の名前 all_drop
8.インタフェース(dp0s6)にてインプット方向へ適用

CLIにて入力するコマンド

set service nat destination rule 10 destination address '192.168.2.50'
set service nat destination rule 10 inbound-interface 'dp0s5'
set service nat destination rule 10 translation address '192.168.3.3'
set service nat source rule 10 outbound-interface 'dp0s6'
set service nat source rule 10 source address '192.168.2.0/24'
set service nat source rule 10 translation address 'masquerade'

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.2.50'
set security firewall name test_rule rule 10 destination port '21'
set security firewall name test_rule rule 10 protocol 'tcp'
set security firewall name test_rule rule 10 state 'enable'
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'
正しく設定が完了したときのコンフィグレーションは次のとおりです。
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 {
               name all_drop {
                       default-action drop
               }
               name test_rule {
                       default-action drop
                       rule 10 {
                               action accept
                               destination {
                                       address 192.168.2.50
                                       port 21
                               }
                               protocol tcp
                               state enable
                       }
               }
       }
}
service {
       nat {
               destination {
                       rule 10 {
                               destination {
                                       address 192.168.2.50
                               }
                               inbound-interface dp0s5
                               translation {
                                       address 192.168.3.3
                               }
                       }
               }
               source {
                       rule 10 {
                               outbound-interface dp0s6
                               source {
                                       address 192.168.2.0/24
                               }
                               translation {
                                       address masquerade
                               }
                       }
               }
       }
}

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバ(192.168.2.6)から192.168.2.50 あてのPingはパケットフィルタリングルールにより
失敗しますが、ポート番号21あてのFTP通信は「行き」方向を許可し、「戻り」側のインタフェース(dp0s6)で、すべてのパケットを拒否する
設定をしていますが、NAT環境におけるセッションテーブルの参照により、パケットが転送されて成功していることが確認できました。
#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 ---
4 packets transmitted, 0 received, 100% packet loss, time 3022ms

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

#192.168.3.3へのftp -> OK

test@ubu01:~$ ftp 192.168.2.50
Connected to 192.168.2.50.
220 (vsFTPd 3.0.3)
Name (192.168.2.50:test): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
ftp>
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> 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 (5.6120 MB/s)
ftp>
ftp> passive
Passive mode on.
ftp>
ftp> get index.html
local: index.html remote: index.html
227 Entering Passive Mode (192,168,2,50,219,64).
150 Opening BINARY mode data connection for index.html (612 bytes).
226 Transfer complete.
612 bytes received in 0.00 secs (7.2055 MB/s)
ftp>