はじめに
本ドキュメントはASA5500-Xシリーズ ASAバージョン9.0(1)以降でのPAT利用時におけるIPアドレスとポートの変換ルールについて紹介しています。
※本ドキュメントは、ASAバージョン 9.12(4) にて確認、作成をしております。
PAT における IPアドレスとポートの変換ルールについて
ダイナミック PAT では、送信元の実IPアドレスおよびポートを 1 つのマッピングアドレスおよび固有のポートに変換することによって、複数の実IPアドレスを 1 つのマッピングアドレスに変換します。送信元ポートが PAT のポートマッピングでまだ使われていない場合は、送信元と同じポートにマッピングされます。送信元ポートが既に他のポートマッピングで使用中の場合、デフォルトの動作では、3 つの PAT プール(0 ~ 511、512 ~ 1023、および 1024 ~ 65535)のうち送信元ポートが含まれるプールの中から利用可能なポートがランダムで選択されます。
送信元ポートとして 1023 以下のポートが使われている場合は、小さい PAT プールが使われることになります。1023 以下の下位ポート範囲を使用するトラフィックが数多くある場合は、サイズが異なる 3 つのポート範囲の代わりにフラットなポート範囲を使用するように指定することもできます。
設定例:
ciscoasa(config)# object network my-inside-net
ciscoasa(config-network-object)# subnet 192.168.10.0 255.255.255.0
ciscoasa(config-network-object)# nat (inside,outside) dynamic interface
検証例1:
ホストA(192.168.10.2)のソースポート番号1024からホストC(192.168.20.1)の22番ポートへSYNパケットを送付します。
cisco@ubuntu:~$ sudo hping3 -S -c 1 -a 192.168.10.2 -s 1024 -p 22 192.168.20.1
ciscoasa# show xlate
1 in use, 3 most used
Flags: D - DNS, e - extended, I - identity, i - dynamic, r - portmap,
s - static, T - twice, N - net-to-net
TCP PAT from inside:192.168.10.2/1024 to outside:192.168.20.254/1024 flags ri idle 0:00:04 timeout 0:00:30
送信元ポート番号1024がそのままマッピングされています
検証例2:
ホストB(192.168.10.3)のソースポート番号1024からホストC(192.168.20.1)の22番ポートへSYNパケットを送付します。
cisco@ubuntu:~$ sudo hping3 -S -c 1 -a 192.168.10.3 -s 1024 -p 22 192.168.20.1
ciscoasa# show xlate
2 in use, 3 most used
Flags: D - DNS, e - extended, I - identity, i - dynamic, r - portmap,
s - static, T - twice, N - net-to-net
TCP PAT from inside:192.168.10.3/1024 to outside:192.168.20.254/29937 flags ri idle 0:00:04 timeout 0:00:30
TCP PAT from inside:192.168.10.2/1024 to outside:192.168.20.254/1024 flags ri idle 0:00:20 timeout 0:00:30
実施例1にて既にポート番号1024が利用されているため、同一ポート範囲からランダムにポート番号29937が選択されています。
PAT におけるポートの解放について
ASA バージョン 9.0(1) より前のバージョンでは、TCP または UDP 接続の終了後、さらに 30 秒経過後にタイムアウトによって PAT 変換テーブルのエントリが削除されておりましたが、ASA バージョン 9.0(1) 以降では、TCP または UDP の接続が終了すると、接続が使用した PAT 変換テーブルのエントリがデフォルトでただちに削除されるようになっています。
9.0(1) 以降では、デフォルトで Per-session PAT が有効になっていますが、無効になっている場合は、9.0(1) より前のバージョンと同様、30秒のタイムアウト後に変換テーブルのエントリが削除される動作となります。Per-session PAT が有効であるかどうかは show run xlate で確認できます。Per-session PAT 有効時と無効時の出力は以下の通りです。
[per-session PAT有効時]
ciscoasa/admin# show run xlate
ciscoasa/admin#
[per-session PAT無効時]
ciscoasa/admin# show run xlate
xlate per-session deny tcp any4 any4
xlate per-session deny tcp any4 any6
xlate per-session deny tcp any6 any4
xlate per-session deny tcp any6 any6
xlate per-session deny udp any4 any4 eq domain
xlate per-session deny udp any4 any6 eq domain
xlate per-session deny udp any6 any4 eq domain
xlate per-session deny udp any6 any6 eq domain
参考
ASA: Per-session PATの設定例と動作確認
https://community.cisco.com/t5/-/-/ta-p/3835795
ASA バージョン 9.0(1) 以降での show xlate の出力の「X」接続フラグについて
https://www.cisco.com/c/ja_jp/support/docs/security/adaptive-security-appliance-asa-software/115993-asa-xlate-qanda.html