Cisco ASA コマンドメモ

#はじめに
CiscoのASAのconfigを読み込んだりログを取ったり何だりしないといけなかったので、折角だから調べた内容をまとめておきます。

正直コマンドレファレンスを読めばすべて済んじゃう。。結局公式ドキュメントですよね。
[このへん](https://www.cisco.com/c/ja_jp/support/security/asa-5500-series-next-generation-firewalls/products-command-reference-list.html)。
以下の引用はすべて上記コマンドレファレンスから引用しています。

##nat
###showコマンド
show nat

>ciscoasa# show nat
Manual NAT Policies (Section 1)
1 (any) to (any) source dynamic S S' destination static D' D
translate_hits = 0, untranslate_hits = 0
Auto NAT Policies (Section 2)
1 (inside) to (outside) source dynamic A 2.2.2.2
translate_hits = 0, untranslate_hits = 0
Manual NAT Policies (Section 3)
1 (any) to (any) source dynamic C C' destination static B' B service R R'
translate_hits = 0, untranslate_hits = 0

show nat detail

>Manual NAT Policies (Section 1)
1 (any) to (any) source dynamic S S' destination static D' D
translate_hits = 0, untranslate_hits = 0
Source - Real: 1.1.1.2/32, Mapped: 2.2.2.3/32
Destination - Real: 10.10.10.0/24, Mapped: 20.20.20.0/24
Auto NAT Policies (Section 2)
1 (inside) to (outside) source dynamic A 2.2.2.2
translate_hits = 0, untranslate_hits = 0
Source - Real: 1.1.1.1/32, Mapped: 2.2.2.2/32
Manual NAT Policies (Section 3)
1 (any) to (any) source dynamic C C' destination static B' B service R R'
translate_hits = 0, untranslate_hits = 0
Source - Real: 11.11.11.10-11.11.11.11, Mapped: 192.168.10.10/32
Destination - Real: 192.168.1.0/24, Mapped: 10.75.1.0/24
Service - Real: tcp source eq 10 destination eq ftp-data, Mapped: tcp source eq
100 destination eq 200

各natポリシーで翻訳された回数はもちろん、nat前後のIPアドレスがまとめられています。
show ip nat translations みたいなものですね。

###トラブル
トラブル原因としてnat設定に被疑がある場合、トラブル中にこれらのログを取得する必要があります。本来カウントが上がっているはずのnat設定のhit数がない、もしくはカウントが上がらないはずのnat設定のカウントが上がっている、みたいな感じですかね。

####トラブル原因がnatかも？
・社内発の通信がASAまで届いていることをtracerouteで確認しているものの、インターネットサイトにアクセスできない。
・ASAの設定変更後、static nat設定で翻訳されるプライベートIPアドレスをホストIPに持つアプリケーションサーバを、社内ユーザは利用できるもののリモートアクセスユーザが利用できない。

###nat設定

src/dstのインタフェース、IPアドレスについて、対応するように割り当てていく形です。
>ciscoasa(config)# nat (inside,outside) source static HOST_FTP_SERVER interface service FTP_PASV_PORT_RANGE FTP_PASV_PORT_RANGE

nameif|source IP|destination IP|port|
|:---:|:---:|:---:|:---:|
inside|HOST_FTP_SERVER|N/A|FTP_PASV_PORT_RANGE|FTP_PASV_PORT_RANGE|
outside|interface|N/A|FTP_PASV_PORT_RANGE|
nameif insideのポートにsrc IPがHOST_FTP_SERVERでportがFTP_PASV_PORT_RANGEのパケットが届いたときに、nameif outsideのポートからsrc IPがinterfaceのIPでportがFTP_PASV_PORT_RANGEに翻訳されたパケットが発出されます。逆にnameif outsideに同じような組み合わせのパケットが到達したときにnameif insideポートから翻訳されたパケットが発出されます。
ポートフォワーディンされている形ですね。

####ポートフォワーディングとは
特定のポート宛てに届いたパケットを特定のIPアドレスに転送する仕組み。
NAPTは送信時に送信元IPアドレス及びポートの変換テーブルを動的に作成し、翻訳するものであり、戻りではない外部発信のパケットをLAN機器に転送できるものではない。一方ポートフォワーディングはポートとIPアドレスの変換テーブルを手動で作成しているため、外部発信のパケットをLAN機器に転送できる。公開用webサーバを設置する場合に利用する。

##キャプチャ
Wiresharkを仕込んだりしなくても、コマンドでキャプチャをとれます。
非常に参考になるのが[こちら](https://community.cisco.com/t5/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/asa-%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E6%A9%9F%E8%83%BD%E3%81%AE%E6%B4%BB%E7%94%A8-cli/ta-p/3140307)。

caputureしたいパケットを抽出するmatch条件を記載します。
>capture TELNET-INSIDE interface inside match tcp any any eq telnet

inside IFをIN/OUTで経由するtelnet通信をcaputure。
captureを終了するときは no capture で上記設定を削除します。CPU値が大変なことになっちゃうので忘れないこと。
結果はshow captureからCLIベースで確認することも、pcapファイルに落とすことも可能です。pcapファイルにすればWiresharkからも確認可能になりますが、別途FTPサーバにでpcapファイルを送信するか、ASAにhttpアクセスをしてダウンロードすることが必要になります。

##paclket-tracer
ASAで、検証したい送信元/宛先IPアドレス/ポート番号のパケットを作成し、そのパケットがASAを通過可能かを確認することができます。dropする場合、理由としてルーティングの不備か、ACLに該当するのか、適切なnatポリシーの不備か、などの理由まで把握することができます。

>ciscoasa(config)# packet-tracer input outside tcp 10.100.10.10 80 10.100.11.11 80
 
>Phase: 1
Type: ROUTE-LOOKUP
Subtype: Resolve Egress Interface
Result: ALLOW
Config:
Additional Information:
found next-hop 10.86.116.1 using egress ifc outside
 
>Phase: 2
Type: ACCESS-LIST
Subtype:
Result: DROP
Config:
Implicit Rule
Additional Information:
 
>Result:
input-interface: outside
input-status: up
input-line-status: up
output-interface: NP Identity Ifc
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule

上記の例では、ACLの遮断ポリシーに該当するようですね。

##VPN
AnyConnectユーザは、ASAにてACLで指定する宛先にしかVPN経由でアクセスできません。
split-tunnel-policy　にてトンネルを通す宛先と通さない宛先を指定します。オプションとしてtunnelspecifiedを指定した場合、split-tunnel-network-list (ACL名)で指定するACLが示すアドレスのみへのパケットをトンネル経由とします。ちなみに、ここで示されたアドレスはVPNユーザに経路情報が引き渡されるようです。cmdでroute printをVPNを張る前後で比べてみると、ACL指定分のアドレスが差分として出てきました。
excludespecifiedを指定した場合、トンネルを通さない宛先のIPアドレスを指定します。

#最後に
ASAの持つたくさんの機能のほんの一部ですが、本当に読みにくいconfigですね。。Fortigateに更改するにしても、見合う機能を一つづつ付け合わせていくのが本当に大変そう。。

#参考
[ASAコマンドレファレンス](https://www.cisco.com/c/ja_jp/support/security/asa-5500-series-next-generation-firewalls/products-command-reference-list.html)
[用語集｜ポートフォワーディング](https://www.idcf.jp/words/port-forwarding.html)
[ポートフォワーディング](https://www.itbook.info/study/nat6.html)
[ASA: パケットキャプチャ機能の活用(CLI)](https://community.cisco.com/t5/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88/asa-%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E6%A9%9F%E8%83%BD%E3%81%AE%E6%B4%BB%E7%94%A8-cli/ta-p/3140307)