パケットの送信元ポート番号を条件にするパケットフィルタリング設定

動作確認バージョン:vSRX Version20.4R2, vSRX Version22.4R1
ファイアウォール(vSRX) では、パケットフィルタリングの設定が可能です。送信元ポート番号を条件にしたフィルタ設定の紹介をします。

特定の送信元ポート番号への通信を拒否する設定

特定のポート番号の通信(パケット)のみファイアウォールのインターフェイスで遮断し、その他の通信に関しては転送する設定を行います。

サンプル設定のシナリオ

  • ポート番号22(SSH返答パケット)の通信を遮断したい
  • ポート番号22以外の通信は、すべて許可して転送したい
  • インターフェイス(ge-0/0/2)にインプットするトラフィックに対して有効化したい
vsrx_srcport_fig1

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

1.パケットフィルタリング設定の名前を SSH として設定
2.ポート番号22を送信元ポート番号とするパケットを拒否するポリシーを TERM1 として設定
3.ポート番号22以外を送信元とするパケットについて許可するポリシーを TERM2 として設定
4.インターフェイス(ge-0/0/2)にてインプット方向へ適用

CLIにて入力するコマンド

user01@vSRX-02# set firewall filter SSH term TERM1 from protocol tcp
user01@vSRX-02# set firewall filter SSH term TERM1 from source-port 22
user01@vSRX-02# set firewall filter SSH term TERM1 then discard
user01@vSRX-02# set firewall filter SSH term TERM2 then accept
user01@vSRX-02# set interfaces ge-0/0/2 unit 0 family inet filter input SSH

正しく設定が完了したときのコンフィグレーションは次のとおりです。

interfaces {
    ge-0/0/2 {
        unit 0 {
            family inet {
                filter {
                    input SSH;
                }
                address 192.168.3.102/24;
            }
        }
    }
}
firewall {
    filter SSH {
        term TERM1 {
            from {
                protocol tcp;
                source-port 22;
            }
            then {
                discard;
            }
        }
        term TERM2 {
            then accept;
        }
    }
}

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバーインスタンス(192.168.2.12)からサーバーインスタンス(192.168.3.13)宛てのPINGは成功していますが、SSH通信が失敗していることからパケットフィルタリング機能が動作していることが確認できました。

[user01@centsv-02 ~]$ ssh user01@192.168.3.13
^C
[user01@centsv-02 ~]$
[user01@centsv-02 ~]$ ping 192.168.3.203 -c 5
PING 192.168.3.203 (192.168.3.203) 56(84) bytes of data.
64 bytes from 192.168.3.203: icmp_seq=1 ttl=63 time=2.48 ms
64 bytes from 192.168.3.203: icmp_seq=2 ttl=63 time=0.968 ms
64 bytes from 192.168.3.203: icmp_seq=3 ttl=63 time=0.868 ms
64 bytes from 192.168.3.203: icmp_seq=4 ttl=63 time=0.926 ms
64 bytes from 192.168.3.203: icmp_seq=5 ttl=63 time=0.910 ms
--- 192.168.3.203 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 0.868/1.231/2.483/0.626 ms
[user01@centsv-02 ~]$

特定の送信元ポート番号への通信を許可する設定

特定のポート番号の通信(パケット)のみ許可して、その他の通信に関してはファイアウォールのインターフェイスで遮断する設定を行います。

サンプル設定のシナリオ

  • 送信元ポート番号22(SSH返答パケット)の通信を転送したい
  • 送信元ポート番号22以外の通信は、すべて遮断したい
  • インターフェイス(ge-0/0/2)にインプットするトラフィックに対して有効化したい
vsrx_srcport_fig2

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

1.パケットフィルタリング設定の名前を SSH として設定
2.ポート番号22を送信元ポート番号とするパケットを許可するポリシーを TERM1 として設定
3.ポート番号22以外を送信元とするパケットについて拒否するポリシーを TERM2 として設定
4.インターフェイス(ge-0/0/2)にてインプット方向へ適用

CLIにて入力するコマンド

user01@vSRX-02# set firewall filter SSH term TERM1 from protocol tcp
user01@vSRX-02# set firewall filter SSH term TERM1 from source-port 22
user01@vSRX-02# set firewall filter SSH term TERM1 then accept
user01@vSRX-02# set firewall filter SSH term TERM2 then discard
user01@vSRX-02# set interfaces ge-0/0/2 unit 0 family inet filter input SSH

正しく設定が完了したときのコンフィグレーションは次のとおりです。

interfaces {
    ge-0/0/2 {
        unit 0 {
            family inet {
                filter {
                    input SSH;
                }
                address 192.168.3.102/24;
            }
        }
    }
}
firewall {
    filter SSH {
        term TERM1 {
            from {
                protocol tcp;
                source-port 22;
            }
            then accept;
        }
        term TERM2 {
            then {
                discard;
            }
        }
    }
}

動作確認結果

以下の検証結果ログから、検証構成図にあるサーバーインスタンス(192.168.2.12)からサーバーインスタンス(192.168.3.13)へのSSH通信は成功しますが、サーバーインスタンス(192.168.2.12)から 仮想ルーター(192.168.3.203)宛てのPingは失敗していることからパケットフィルタリング機能が動作していることが確認できました。

[user01@centsv-02 ~]$ ping 192.168.3.203 -c 5
PING 192.168.3.203 (192.168.3.203) 56(84) bytes of data.

--- 192.168.3.203 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 3999ms

[user01@centsv-02 ~]$ ssh user01@192.168.3.13
user01@192.168.3.13's password:
Last login: Mon Sep 25 07:40:57 2017 from 192.168.2.202
Thanks for using Official Template (CentOS).

====================================================
* Time Zone *
   Default TimeZone is UTC.

* Stack (Application Set) *
   Default install apps is following.
     - chrony
     - acpid
     - cloud-init

   You can update those apps to latest version with
     #yum update

* To Change this message *
   please edit "/etc/motd".
====================================================
[user01@centsv-03 ~]$

送信元ポート番号(ポート番号範囲指定)を利用した拒否設定

送信元ポート番号の範囲を指定して該当する通信のみファイアウォールのインターフェイスで遮断し、その他の通信に関しては転送する設定を行います。

サンプル設定のシナリオ

  • 送信元ポート番号(22から23)の通信だけ遮断したい
  • 送信元ポート番号(22から23)以外の通信はすべて転送したい
  • インターフェイス(ge-0/0/1)にインプットするトラフィックに対して有効化したい
vsrx_srcport_fig3

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

1.パケットフィルタリング設定の名前を Return_SSH_TELNET_DENY として設定
2.ポート番号(22から23)を送信元ポート番号とするパケットを拒否するポリシーをterm 1 として設定
3.ポート番号(22から23)以外のパケットについて許可するポリシーをterm 2 として設定
4.インターフェイス(ge-0/0/1)にてインプット方向へ適用

CLIにて入力するコマンド

user01@vSRX-02# set firewall filter Return_SSH_TELNET_DENY term 1 from protocol tcp
user01@vSRX-02# set firewall filter Return_SSH_TELNET_DENY term 1 from source-port 22-23
user01@vSRX-02# set firewall filter Return_SSH_TELNET_DENY term 1 then discard
user01@vSRX-02# set firewall filter Return_SSH_TELNET_DENY term 2 then accept
user01@vSRX-02# set interfaces ge-0/0/1 unit 0 family inet filter input Return_SSH_TELNET_DENY

正しく設定が完了したときのコンフィグレーションは次のとおりです。

interfaces {
    ge-0/0/1 {
           unit 0 {
               family inet {
                   filter {
                       input Return_SSH_TELNET_DENY;
                   }
                   address 192.168.2.102/24;
               }
           }
    }
}
firewall {
    filter Return_SSH_TELNET_DENY {
           term 1 {
               from {
                   protocol tcp;
                   source-port 22-23;
               }
               then {
                   discard;
               }
           }
           term 2 {
               then accept;
           }
    }
}

動作確認結果

以下の検証結果ログから、検証構成図にある仮想ルーター(192.168.1.201)から 仮想ルーター(192.168.2.202)のポート番号80宛ての通信は成功しますが、仮想ルーター(192.168.1.201)から 仮想ルーター(192.168.2.202)のポート番号22,23あての通信は失敗しておりパケットフィルタリング機能が動作していることが確認できました。

user01@vRouter-01:~$ wget http://192.168.2.202
--2017-09-28 03:43:29--  http://192.168.2.202/
Connecting to 192.168.2.202:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1057 (1.0K) [text/html]
Saving to: ‘index.html’

index.html            0%[                      ]       0  --.-KB/s
index.html          100%[=====================>]   1.03K  --.-KB/s   in 0s

2017-09-28 03:43:29 (113 MB/s) - ‘index.html’ saved [1057/1057]


user01@vRouter-01:~$ ssh user01@192.168.2.202
^C
user01@vRouter-01:~$
user01@vRouter-01:~$ telnet 192.168.2.202

Trying 192.168.2.202...
^C
user01@vRouter-01:~$

送信元ポート番号(ポート番号範囲指定)を利用した許可設定

送信元ポート番号の範囲を指定して該当する通信のみ許可して、その他の通信に関してはファイアウォールのインターフェイスで遮断する設定を行います。

サンプル設定のシナリオ

  • 送信元ポート番号(22から23)の通信だけ転送したい
  • 送信元ポート番号(22から23)以外の通信はすべて遮断したい
  • インターフェイス(ge-0/0/1)にインプットするトラフィックに対して有効化したい
vsrx_srcport_fig4

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

1.パケットフィルタリング設定の名前を Return_SSH_TELNET_PERMIT として設定
2.送信元ポート番号(22から23)のパケットを許可するポリシーをterm 1 として設定
3.送信元ポート番号(22から23)以外のポート番号を利用するパケットについて拒否するポリシーをterm 2 として設定
4.インターフェイス(ge-0/0/1)にてインプット方向へ適用

CLIにて入力するコマンド

user01@vSRX-02# set firewall filter Return_SSH_TELNET_PERMIT term 1 from protocol tcp
user01@vSRX-02# set firewall filter Return_SSH_TELNET_PERMIT term 1 from source-port 22-23
user01@vSRX-02# set firewall filter Return_SSH_TELNET_PERMIT term 1 then accept
user01@vSRX-02# set firewall filter Return_SSH_TELNET_PERMIT term 2 then discard
user01@vSRX-02# set interfaces ge-0/0/1 unit 0 family inet filter input Return_SSH_TELNET_PERMIT

正しく設定が完了したときのコンフィグレーションは次のとおりです。

interfaces {
    ge-0/0/1 {
           unit 0 {
               family inet {
                   filter {
                       input Return_SSH_TELNET_PERMIT;
                   }
                   address 192.168.2.102/24;
               }
           }
    }
}
firewall {
    filter Return_SSH_TELNET_PERMIT {
        term 1 {
            from {
                protocol tcp;
                source-port 22-23;
            }
            then accept;
        }
        term 2 {
            then {
                discard;
            }
        }
    }
}

動作確認結果

以下の検証結果ログから、検証構成図にある仮想ルーター(192.168.1.201)から仮想ルーター(192.168.2.202)ポート番号22,23あての通信は成功しますが、仮想ルーター(192.168.1.201)から 仮想ルーター(192.168.2.202)宛てのPingやwget(ポート番号80)宛ての通信は失敗しておりパケットフィルタリング機能が動作していることが確認できました。

仮想ルーター(192.168.1.201)から仮想ルーター(192.168.2.202)宛てのSSHならびにTELNETのアクセス結果

user01@vRouter-01:~$ ssh user01@192.168.2.202
Welcome to Brocade Vyatta Network OS

user01@192.168.2.202's password:
Welcome to Brocade Vyatta Network OS
Version:      5.2R4
Description:  Brocade Vyatta Network OS 5600 5.2R4 Standard
Last login: Thu Sep 28 03:32:37 2017 from 192.168.1.201
user01@vRouter-02:~$
user01@vRouter-02:~$ exit
logout
Connection to 192.168.2.202 closed.
user01@vRouter-01:~$
user01@vRouter-01:~$ telnet 192.168.2.202
Trying 192.168.3.203...
Connected to 192.168.2.202.
Escape character is '^]'.

Welcome to Brocade Vyatta Network OS

vRouter-02 login: user01
Password:
Welcome to Brocade Vyatta Network OS
Version:      5.2R4
Description:  Brocade Vyatta Network OS 5600 5.2R4 Standard
user01@vRouter-02:~$

仮想ルーター(192.168.1.201)からサーバーインスタンス(192.168.2.12)宛てのPingとwget(ポート番号80)の通信結果

user01@vRouter-01:~$ ping 192.168.2.12 count 5
PING 192.168.2.12 (192.168.2.12) 56(84) bytes of data.

--- 192.168.2.12 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4004ms

user01@vRouter-01:~$
user01@vRouter-01:~$ wget http://192.168.2.202
--2017-09-28 03:51:44--  http://192.168.2.202/
Connecting to 192.168.2.202:80...
^C
user01@vRouter-01:~$