Cisco ASAでTCPハンドシェイクが失敗する


7

Cisco ASAファイアウォールを通過する必要があるTCP接続を設定するためにトラフィックジェネレータを使用しています。

私のトポロジは次のようになります。

                     +------------------+                      
                     |  CISCO ASA       |                      
+------------+       |                  |                      
|  Client    +-------+Outside           |                      
|  10.1.202.1|       |10.1.202.254      |                      
|            |       |                  |        +------------+
+------------+       |            Inside|        |Server      |
                     |      10.1.102.254+--------+10.1.102.19 |
                     |                  |        |            |
                     +------------------+        +------------+

外部ネットワーク(10.1.202.1/24)の1つのホストから内部ネットワーク(10.1.102.19/24)のサーバーへの接続を確立する必要があります。

SYNがファイアウォール(10.1。(1/2)02.254)を通過し、SYN-ACKが通過せずにドロップされることがWiresharkでわかります(キャプチャを参照してください:内部インターフェイス外部インターフェイス)。

からshow asp drop、次の理由でフレームがドロップされることが通知されます。

TCP failed 3 way handshake (tcp-3whs-failed)

ARPは使用していませんが、デフォルトゲートウェイであるファイアウォールインターフェイスのMACアドレスを使用しています。

私が作成しSYNSYN-ACKそしてACK次のように:

SYN:(クライアント(外部)からサーバー(内部))

**Ethernet**
Destination MAC: <Mac Address of the Firewall-Interface>
Source MAC: <Mac Address of the Sending Device-Interface>

**IP**
Source IP: 10.1.202.1
Destination IP: 10.1.102.19
Default Gateway: 10.1.202.254

**TCP**
Source Port: 9000
Destination Port: 8000
Sequence number: 0
Acknowledgement number: 0
Synchronize: 1
Acknowledgement: 0

SYN-ACK:(サーバー(内部)からクライアント(外部)へ)(これはファイアウォールを通過しません)

**Ethernet**
Destination MAC: <Mac Address of the Firewall-Interface>
Source MAC: <Mac Address of the Sending Device-Interface>

**IP**
Source IP: 10.1.102.19
Destination IP: 10.1.202.1
Default Gateway: 10.1.102.254

**TCP**
Source Port: 8000
Destination Port: 9000
Sequence number: 0
Acknowledgement number: 1
Synchronize: 1
Acknowledgement: 1

ACK:(クライアント(外部)からサーバー(内部))

**Ethernet**
Destination MAC: <Mac Address of the Firewall-Interface>
Source MAC: <Mac Address of the Sending Device-Interface>

**IP**
Source IP: 10.1.202.1
Destination IP: 10.1.102.19
Default Gateway: 10.1.202.254

**TCP**
Source Port: 9000
Destination Port: 8000
Sequence number: 1
Acknowledgement number: 1
Synchronize: 0
Acknowledgement: 1

さらに、私のトポロジは次のようなものです。

トラフィックジェネレータクライアント(ネットワーク外)は、VLANが追加されたスイッチに接続されています。スイッチは外部ファイアウォールインターフェイスに接続されています。内部ネットワークでは、トラフィックジェネレーターはVLANタグが追加されたスイッチに接続され、スイッチはファイアウォールの内部インターフェイスに接続されます。

ASAがドロップする理由を誰かに教えてもらえますかSYN-ACK

前もって感謝します!

編集:

  • Ron Trunkが示唆したように、私はシーケンス番号のランダム化を次のようにして無効にしました。

    ランダムシーケンス番号無効化

  • 内部インターフェイスおよび外部インターフェイスのキャプチャが追加されました。

  • キャプチャファイルを更新しました


packet-tracerコマンドは何を示していますか?
スミザーズ2015

packet-tracerコマンドとはどういう意味ですか?ASAサービスモジュールに取り組んでいます。
muehsi 2015

ああ、使ったことがない。ASAアプライアンスには、ルールを通過するパケットをシミュレートするコマンド「packet-tracer」があります。レイヤー3以上のトラフィックがほとんどだと思いますが、それはおそらく、下位レイヤーでトラフィックを必要としたことがなかったからでしょう。クエスチョンマークを付けて進みますが、使用法は基本的に「パケットトレーサー入力INCOMING-IFNAME tcp SOURCE.IP.ADDRESS.HERE SRC-PORT DST.IP.ADDRESS.HERE DST-PORT」
Smithers

はい、これはASDMでも利用できます。私はそれをチェックしました、そして、パケットは通過しているはずです。しかし、接続設定にパケットを選択できません。IPとポートしか確認できません。問題は、TCPハンドシェイクが失敗することです。
muehsi 2015

さて、あなたのレイヤー3が良いことをお勧めします。ASAの外部および内部インターフェイス上のすべてのトラフィックをキャプチャする必要があります(ARPを含む)。最初にトラフィックが実際に入力インターフェイスに到達しているかどうかを確認してから、それが出力を出ていないことを確認できます。これは、トラフィックが出力を出ている場合、またはISNが入力に到達していない場合は、スイッチの問題が発生している可能性があるためです。
スミザーズ2015

回答:


3

デフォルトでは、ASAはハンドシェイクのシーケンス番号をランダム化します(セッションハイジャックを防止するため)。したがって、シーケンス番号は実際には一致しません。その機能をオフにすることができます。

random-sequence-number disable

私はこのコマンドを追加しましたが、存在することを知りませんでした。残念ながらそれは私の問題を解決しませんでした。Wiresharkによると、私のSYN ACKには 'ACK = 3200214167'があります。これは、ファイアウォールを通過する前にインターフェイスでキャプチャされたため、奇妙です。SynパケットのWin = 4096は、接続設定に何か意味がありますか?
muehsi 2015

Winは基本的に、そのパケットを送信したデバイスのネットワークバッファーに4 KBの空き容量があることを意味します。
スミザーズ

1
クライアントがsyn-ackを送信する前に、rst-ackを送信していることに気づきました。最初にそれを理解する必要があると思います。
ロントランク

この説明に従ってもうまくいきませんでした。また、インターフェイスにサービスポリシーを適用する必要がありました(service-policy <name> interface <interface>)。ヒントありがとうございます。
muehsi 2015

3

あなたには内部のキャプチャ、クライアント(10.1.202.1)にサーバー(10.1.102.19)から行く二つのパケットがありますが、それらは異なるMACアドレスから来ています。

#23 Ethernet II, Src: 00:10:94:00:00:01 (00:10:94:00:00:01), Dst: 00:19:55:07:12:ca (00:19:55:07:12:ca)
    Internet Protocol Version 4, Src: 10.1.102.19 (10.1.102.19), Dst: 10.1.202.1 (10.1.202.1)
    Transmission Control Protocol, Src Port: 8000 (8000), Dst Port: 9000 (9000), Seq: 0, Ack: 19112639, Len: 0

#25 Ethernet II, Src: 00:10:94:00:00:02 (00:10:94:00:00:02), Dst: 00:19:55:07:12:ca (00:19:55:07:12:ca)
    Internet Protocol Version 4, Src: 10.1.102.19 (10.1.102.19), Dst: 10.1.202.1 (10.1.202.1)
    Transmission Control Protocol, Src Port: 8000 (8000), Dst Port: 9000 (9000), Seq: 0, Ack: 1, Len: 0

それは奇妙に思えますが、おそらくあなたの問題ではありません。私が解釈できる限り、あなたの問題は次のとおりです:

サーバー自体は、巧妙に細工されたSYNパケットに対して、packet#23(inside cap、上記を参照)のRST-ACKで自然に応答するようです-おそらくポート8000​​が閉じているためです。これにより、ファイアウォールはRSTを外部(外部キャップのパケット#23)に転送し、この接続を状態テーブルから削除するように要求します。

ただし、このフローに関連する接続テーブルにエントリがないため、細工されたSYN-ACKパケットは#25(内側のキャップの)で発火し、ファイアウォール(#26)からのRSTを要求します。


コメントしてくれてありがとう。イーサネットアドレスを確認して修正しました。ご想像のとおり、これで何も変わりませんでした。また、RST-ACKに関する問題を調査して修正しました。サーバーで一時的な設定ミスがありました。それにもかかわらず、私の起源の問題は依然として発生します:SYN-ACKがファイアウォールを通過しません。内部/外部インターフェイスのキャプチャファイルを現在の状態に更新しました。
muehsi 2015

どのようにしてRST-ACKを「修正」しましたか?これは、サーバーの通常の動作/予想される動作です。私は新しいキャプチャを見ていないので、もっと時間があったら試してみます。
エディ

1
@muehsi、まだ問題があるように見えます。AFAIK、Cloudshark(Wiresharkのデフォルトと同様)は、表示されるシーケンス番号を0に対して相対的に調整し、読みやすくしています。ただし、サーバーからクライアントへのSYN-ACKは、ACKが1ではなく2644561697であることを示しています。ACKはファイアウォールが予期するものと一致しないため、ドロップする必要があります。
YLearn

「通常の動作」などについて。SpirentTestCenterをトラフィックジェネレータとして使用しています(クライアント側とサーバー側の両方)。したがって、ポートをリッスンしているアプリケーションがない場合の動作に関する反応は、通常のOSとは異なる場合があります。しかし、それがこの手作りの3ウェイハンドシェイクが必要な理由です(背景情報として)。
StephenKing 2015

1

ASAで以下を実行できますか?

//すべてのASPドロップのすべてのキャプチャを有効にします

ASA# capture asp-drop type asp-drop all

//ハンドシェイクが失敗した理由を特定するキャプチャバッファを表示します

ASA# sh capture asp-drop

次のようなものを表示する必要がありますが、特定の種類のドロップの場合:

   2 packets captured
   1: 15:15:00.682154 197.2.1.29.2616 > 87.200.42.101.443: S 1239395083:1239395083(0) win 65535 <mss 1260,nop,nop,sackOK> Drop-reason: (acl-drop) Flow is denied by configured rule
   4: 15:15:00.750830 10.70.0.162.3812 > 168.252.3.41.15: S 3523756300:3523756300(0) win 65535 <mss 1360,nop,nop,sackOK> Drop-reason: (rpf-violated) Reverse-path verify failed

ASAの基本的なルールの1つは、セキュリティの低いインターフェイス(外部)からセキュリティの高いインターフェイス(内部)へのトラフィックを開始するには、このトラフィックを通過させる明示的なACLエントリが必要であるということです。ASAの設定を確認しないと、問題の原因を突き止めることは困難です。


-1

ASAの通常の/デフォルトの動作について説明しています。OUTSIDEからINSIDEへの確立されたTCP接続のみが許可されます。これを無効にするには、TCPステートバイパスを構成します

Step 1 Choose Configuration > Firewall > Service Policy.

Step 2 Click Add > Add Service Policy Rule.

Alternatively, if you already have a rule for the hosts, edit the rule.

Step 3 Select whether to apply the rule to a specific interface or globally to all interfaces, and click Next.

Step 4 For Traffic Classification, select Source and Destination IP Addresses (uses ACL) and click Next.

Step 5 For the ACL rule, enter the IP addresses of the hosts on each end of the route in Source and Destination, and specify the protocol as TCP. Click Next when finished.

For example, if you want to bypass TCP state checking between 10.1.1.1 and 10.2.2.2, enter:

Source = 10.1.1.1
Destination = 10.2.2.2
Destination Protocol = tcp
Step 6 On the Rule Actions page, click the Connection Settings tab and select TCP State Bypass.

Step 7 Click Finish to save the rule, and Apply to update the device.

(@muehsi話す同僚)回答ありがとうございます。ただし、トラフィックジェネレーターからの手作りのTCPパケットではない他のトラフィック(ステートフルTCP)がASAを外部から内部に通過できるため、これは理由ではないと思います。それはどういうわけか、trafficgenが送信しているパケットの性質にあります。
StephenKing 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.