跨 EZVPN 的 Cisco ASA NAT/ACL 问题

网络工程 思科 虚拟专用网 纳特 ACL
2021-07-15 04:27:37

我有一个在两个位置之间运行的 EZVPN,位置 A 有一个 5520,是 EZVPN 服务器,位置 B 有一个 5506,是一个 EZVPN 客户端。目前,我正在尝试设置 NAT 和 ACL,以便位置 B 内部网络上的主机可以访问位置 A 的 DMZ 中的几台服务器。以下是我来自两个位置的数据包跟踪。附件是来自两个位置的消毒配置。

*

*LocationA-Firewall# packet-tracer input inside tcp <Location B inside ip> 443 <Location A DMZ server ip> 443 detailed
Phase: 1
Type: ROUTE-LOOKUP
Subtype: input
Result: ALLOW
Config:
Additional Information:
in   <Location B inside ip>  255.255.255.0   outside
Phase: 2
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
nat (dmz,outside) source static DMZ_Servers DMZ_Servers destination static (location B)-remote_network (location B)-remote_network no-proxy-arp route-lookup
Additional Information:
NAT divert to egress interface outside
Untranslate <Location B inside ip>/443 to <Location B inside ip>/443
Phase: 3
Type: ACCESS-LIST
Subtype:
Result: DROP
Config:
Implicit Rule
Additional Information:
 Forward Flow based lookup yields rule:
 in  id=0x73cb5f60, priority=11, domain=permit, deny=true
      hits=343658, user_data=0x5, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
      src ip/id=0.0.0.0, mask=0.0.0.0, port=0, tag=0
      dst ip/id=0.0.0.0, mask=0.0.0.0, port=0, tag=0, dscp=0x0
      input_ifc=dmz, output_ifc=any
Result:
input-interface: dmz
input-status: up
input-line-status: up
output-interface: outside
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule*

*

================================================== ==========

LocationB-Firewall# packet-tracer input inside tcp <Location B inside ip> 443 <Location A DMZ server ip> 443

Phase: 1
Type: ACCESS-LIST
Subtype:
Result: ALLOW
Config:
Implicit Rule
Additional Information:
MAC Access list

Phase: 2
Type: ROUTE-LOOKUP
Subtype: Resolve Egress Interface
Result: ALLOW
Config:
Additional Information:
found next-hop <internet next hop> using egress ifc  outside

Phase: 3
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Remote_DMZ Remote_DMZ no-proxy-arp route-lookup
Additional Information:
NAT divert to egress interface outside
Untranslate <Location A DMZ server ip>/443 to <Location A DMZ server ip>/443

Phase: 4
Type: ACCESS-LIST
Subtype: log
Result: ALLOW
Config:
access-group OWL_inside in interface inside
access-list OWL_inside extended permit ip any4 any4
Additional Information:

Phase: 5
Type: NAT
Subtype:
Result: ALLOW
Config:      
nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Remote_DMZ Remote_DMZ no-proxy-arp route-lookup
Additional Information:
Static translate <Location B inside ip>/443 to <Location B inside ip>/443

Phase: 6
Type: NAT
Subtype: per-session
Result: ALLOW
Config:
Additional Information:

Phase: 7
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:

Phase: 8
Type: ACCESS-LIST
Subtype: aaa-user
Result: ALLOW
Config:
Additional Information:

Phase: 9
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Remote_DMZ Remote_DMZ no-proxy-arp route-lookup
Additional Information:

Phase: 10
Type: NAT
Subtype: per-session
Result: ALLOW
Config:
Additional Information:

Phase: 11
Type: IP-OPTIONS
Subtype:
Result: ALLOW
Config:
Additional Information:

Phase: 12
Type: FLOW-CREATION
Subtype:
Result: ALLOW
Config:
Additional Information:
New flow created with id 568767, packet dispatched to next module

Result:
input-interface: inside
input-status: up
input-line-status: up
output-interface: outside
output-status: up
output-line-status: up
Action: allow

在这些数据包跟踪中,我正在测试 HTTPS 访问,因为它是我需要跨两个区域打开的端口之一。由于它看起来像位置 A 的 ASA 的问题,我尝试了以下 NAT 和 ACL 添加(outside_access_in 是应用于外部接口的 ACL,dmz_access_in 是应用于 DMZ 的 ACL):

access-list dmz_access_in extended permit tcp object (location B)-remote_network object-group DMZ_Servers eq https

nat (dmz,outside) source static DMZ_Servers DMZ_Servers destination static (location B)-remote_network (location B)-remote_network no-proxy-arp route-lookup

access-list outside_access_in extended permit tcp object (location B)-remote_network object-group DMZ_Servers eq https

这些都没有用。除了那些 ACL 条目之外,我的 ACL 中没有关于来自位置 B 的流量的条目。ASP 数据包捕获也没有帮助。两个位置的消毒配置如下:

    :
    ASA Version 9.5(2) 
    !
    hostname LocationB-Firewall
    domain-name company.com

    names
    !
    interface GigabitEthernet1/1
     nameif outside
     security-level 0
     ip address dhcp setroute 
    !
    interface GigabitEthernet1/2
     nameif inside
     security-level 100
     ip address (location B inside) 255.255.255.0 
    !
    interface Management1/1
     management-only
     no nameif
     no security-level
     no ip address
    !
    boot system disk0:/asa952-lfbff-k8.SPA
    ftp mode passive
    dns server-group DefaultDNS
     domain-name oscarwinski.com
    object network obj_any
     subnet 0.0.0.0 0.0.0.0
    object-group network Location_A_Networks
     network-object (Location A network).0 255.255.255.0

    object-group network Location_B_Networks
     network-object (Location B network).0 255.255.255.0

    object-group network Remote_DMZ
     network-object host <Location A dmz server IP>


    access-list LocationB_inside extended permit ip any4 any4 
  access-list outside_access_in extended permit tcp host <internet IP> object-group Location_B_Networks eq https 


    no pager
    logging console emergencies
    logging buffered debugging
    logging asdm informational
    mtu outside 1500
    mtu inside 1500
    icmp unreachable rate-limit 1 burst-size 1
    e
    arp timeout 14400
    no arp permit-nonconnected
    nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Location_A_Networks Location_A_Networks no-proxy-arp route-lookup
    nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Remote_DMZ Remote_DMZ no-proxy-arp route-lookup

    !
    object network obj_any
     nat (any,outside) dynamic interface

    access-group outside_access_in in interface outside
    access-group LocationB_inside in interface inside

    timeout xlate 3:00:00
    timeout pat-xlate 0:00:30
    timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 sctp 0:02:00 icmp 0:00:02
    timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
    timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
    timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
    timeout tcp-proxy-reassembly 0:01:00
    timeout floating-conn 0:00:00
    user-identity default-domain LOCAL
    aaa authentication ssh console LOCAL 
    http server enable
    http 192.168.1.0 255.255.255.0 inside
    http 0.0.0.0 0.0.0.0 inside
    no snmp-server location
    no snmp-server contact
    service sw-reset-button
    crypto ipsec security-association pmtu-aging infinite
    crypto ca trustpool policy
    telnet timeout 5
    no ssh stricthostkeycheck
    ssh (Location A outside interface) 255.255.255.255 outside
    ssh 0.0.0.0 0.0.0.0 inside
    ssh timeout 5
    ssh key-exchange group dh-group1-sha1
    console timeout 0
    vpnclient server (outside interface)
    vpnclient mode network-extension-mode
    vpnclient nem-st-autoconnect
    vpnclient vpngroup vpn password *****
    vpnclient username ezvpn password *****
    vpnclient enable

    !
    dhcpd address (location B network)-(location B network) inside
    dhcpd enable inside
    !
    threat-detection basic-threat
    threat-detection statistics access-list
    no threat-detection statistics tcp-intercept

    dynamic-access-policy-record DfltAccessPolicy

    !
    class-map inspection_default
     match default-inspection-traffic
    !
    !
    policy-map type inspect dns preset_dns_map
     parameters
      message-length maximum client auto
      message-length maximum 512
    policy-map global_policy
     class inspection_default
      inspect dns preset_dns_map 
      inspect ftp 
      inspect h323 h225 
      inspect h323 ras 
      inspect rsh 
      inspect rtsp 
      inspect esmtp 
      inspect sqlnet 
      inspect skinny  
      inspect sunrpc 
      inspect xdmcp 
      inspect sip  
      inspect netbios 
      inspect tftp 
      inspect ip-options 
      inspect pptp
    !
    service-policy global_policy global
    prompt hostname context 

    : end

下面的位置A:

    ASA Version 9.1(3) 
    !
    hostname LocationA-Firewall
    domain-name company.com
    interface GigabitEthernet0/0
     nameif outside
     security-level 0
     ip address (location A outside) 255.255.255.240 
    !
    interface GigabitEthernet0/1
     nameif inside
     security-level 100
     ip address (location A inside) 255.255.255.0 
    !
    !
    object network (location B)-remote_network
     subnet (location B) 255.255.255.0
    object-group network (Location A)_Networks
     network-object (Location A) 255.255.255.0
    object-group network DMZ_Servers
     network-object <DMZ servers IPs>

    access-list ezvpn_split extended permit tcp object-group (Location A)_Networks object (location B)-remote_network 


    nat (dmz,outside) source static DMZ_Servers DMZ_Servers destination static (location B)-remote_network (location B)-remote_network no-proxy-arp route-lookup

    nat (inside,outside) source static (Location A)_Networks (Location A)_Networks destination static (location B)-remote_network (location B)-remote_network no-proxy-arp route-lookup


access-group outside_access_in in interface outside
access-group inside in interface inside
access-group dmz_access_in in interface dmz
    !
    crypto ipsec ikev1 transform-set TRANS_ESP_3DES_SHA esp-3des esp-sha-hmac 
    crypto ipsec ikev1 transform-set TRANS_ESP_3DES_SHA mode transport
    crypto ipsec ikev1 transform-set ESP-AES-256-MD5 esp-aes-256 esp-md5-hmac 
    crypto ipsec ikev1 transform-set ESP-DES-SHA esp-des esp-sha-hmac 
    crypto ipsec ikev1 transform-set ESP-3DES-SHA esp-3des esp-sha-hmac 
    crypto ipsec ikev1 transform-set ESP-DES-MD5 esp-des esp-md5-hmac 
    crypto ipsec ikev1 transform-set ESP-AES-192-MD5 esp-aes-192 esp-md5-hmac 
    crypto ipsec ikev1 transform-set ESP-AES-256-SHA esp-aes-256 esp-sha-hmac 
    crypto ipsec ikev1 transform-set ESP-AES-128-SHA esp-aes esp-sha-hmac 
    crypto ipsec ikev1 transform-set ESP-AES-192-SHA esp-aes-192 esp-sha-hmac 
    crypto ipsec ikev1 transform-set ESP-AES-128-MD5 esp-aes esp-md5-hmac 
    crypto ipsec ikev1 transform-set ESP-3DES-MD5 esp-3des esp-md5-hmac 
    crypto ipsec ikev1 transform-set ESP-AES128-SHA esp-aes esp-sha-hmac 
    crypto ipsec ikev1 transform-set aes256set esp-aes-256 esp-sha-hmac 
    crypto ipsec security-association pmtu-aging infinite
    crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev1 transform-set TRANS_ESP_3DES_SHA
    crypto dynamic-map vpn_dyn_map 1 set ikev1 transform-set aes256set
    crypto dynamic-map vpn_dyn_map 1 set reverse-route
    crypto dynamic-map vpn_dyn_map 500 set ikev1 transform-set ESP-3DES-MD5
    crypto map VPN 65535 ipsec-isakmp dynamic vpn_dyn_map
    crypto map VPN interface outside
    crypto isakmp identity address 
    crypto isakmp nat-traversal 10
    crypto ikev1 enable outside
    crypto ikev1 policy 5
     authentication pre-share
     encryption aes
     hash sha
     group 2
     lifetime 86400
    crypto ikev1 policy 10
     authentication pre-share
     encryption 3des
     hash sha
     group 2
     lifetime 86400
    crypto ikev1 policy 20
     authentication pre-share
     encryption 3des
     hash md5
     group 2
     lifetime 86400
    crypto ikev1 policy 90
     authentication pre-share
     encryption aes-256
     hash sha
     group 5
     lifetime 86400
    ssh 0.0.0.0 0.0.0.0 inside
    management-access inside
    no vpn-addr-assign aaa
    no vpn-addr-assign dhcp
    group-policy DfltGrpPolicy attributes
     vpn-tunnel-protocol ikev1 l2tp-ipsec ssl-client ssl-clientless
    !username ezvpn password <removed>
     vpn-group-policy DefaultRAGroup
    tunnel-group DefaultL2LGroup ipsec-attributes
     ikev1 pre-shared-key <removed>
    tunnel-group DefaultRAGroup ppp-attributes
     no authentication chap
     authentication ms-chap-v2
    tunnel-group ezvpn type remote-access
    tunnel-group ezvpn general-attributes
     default-group-policy ezvpnpolicy
    tunnel-group ezvpn ipsec-attributes
     ikev1 pre-shared-key <removed>
    tunnel-group (location A outside) type ipsec-l2l
    tunnel-group (location A outside) ipsec-attributes
     ikev1 pre-shared-key <removed>
    !
    class-map preset_dns_map
    class-map global-class
     match access-list global_mpc
    class-map apple_class
     match access-list dmz_access_in
    class-map inspection_default
     match default-inspection-traffic
    !
    policy-map type inspect dns preset_dns_map
     parameters
      message-length maximum 512
    policy-map type inspect http apple_map
     parameters
     match not request header host regex apple_domain
    policy-map global_policy
     description Internet_Netflow
     class inspection_default
      inspect dns preset_dns_map 
      inspect ftp 
      inspect h323 h225 
      inspect h323 ras 
      inspect netbios 
      inspect rsh 
      inspect skinny  
      inspect sqlnet 
      inspect sunrpc 
      inspect tftp 
      inspect xdmcp 
      inspect http 
      inspect icmp 
      inspect rtsp 
      inspect sip  
     class global-class
      flow-export event-type all destination 10.1.1.25
     class apple_class
      inspect http apple_map 
    !
    service-policy global_policy global
    prompt hostname context 
    : end

编辑:这是我在两个方向上运行数据包跟踪后在我的日志中看到的内容:

地点 A

Feb  4 10:05:08 10.255.1.1 %ASA-5-111008: User 'enable_15' executed the 'packet-tracer input dmz tcp <DMZ Server IP> 443 <Location B Inside IP> 443' command.
Feb  4 10:05:08 10.255.1.1 %ASA-5-111010: User 'enable_15', running 'CLI' from IP x.x.x.x, executed 'packet-tracer input dmz tcp <DMZ Server IP> 443 <Location B Inside IP> 443'

地点 B

Feb  4 08:50:30 <Location B Inside IP> %ASA-5-111008: User 'enable_15' executed the 'packet-tracer input inside tcp <Location B Inside IP> 443 <DMZ Server IP> 443' command.
Feb  4 08:50:30 <Location B Inside IP> %ASA-5-111010: User 'enable_15', running 'CLI' from IP x.x.x.x, executed 'packet-tracer input inside tcp <Location B Inside IP> 443 <DMZ Server IP> 443'
Feb  4 08:51:15 <Location B Inside IP> %ASA-7-609001: Built local-host outside:<DMZ Server IP>
Feb  4 08:51:15 <Location B Inside IP> %ASA-6-302013: Built outbound TCP connection 936480 for outside:<DMZ Server IP>/443 (<DMZ Server IP>/443) to inside:<Location B Inside IP>45/50378 (<Location B Inside IP>45/50378)
Feb  4 08:51:45 <Location B Inside IP> %ASA-6-302014: Teardown TCP connection 936480 for outside:<DMZ Server IP>/443 to inside:<Location B Inside IP>45/50378 duration 0:00:30 bytes 0 SYN Timeout
Feb  4 08:51:45 <Location B Inside IP> %ASA-7-609002: Teardown local-host outside:<DMZ Server IP> duration 0:00:30

两个位置都打开了以下日志记录选项:

logging enable
logging timestamp
logging standby
logging buffer-size 1048576
logging console emergencies
logging monitor debugging
logging buffered debugging
logging trap debugging
logging asdm notifications
logging facility 23
logging host inside <syslog server IP>

我还认为可能将我想要进入的 dmz 网络添加到 EZVPN 上的拆分隧道列表中会起作用,但它没有:

access-list ezvpn_split extended permit tcp object-group DMZ_Servers object (location B)-remote_network 

编辑:向两个配置添加了 ACL 语句

1个回答

这是我对这个问题反复思考后的解决方案:1)删除位置 B 的 nat 语句,因为它们会干扰 VPN 隧道:

nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Location_A_Networks Location_A_Networks no-proxy-arp route-lookup
nat (inside,outside) source static Location_B_Networks Location_B_Networks destination static Remote_DMZ Remote_DMZ no-proxy-arp route-lookup

2)在拆分隧道ACL中保留DMZ语句:

access-list ezvpn_split extended permit tcp object-group DMZ_Servers object (location B)-remote_network 

3) 我无缘无故地切换了访问列表条目。是这样的:

access-list dmz_access_in extended permit tcp object (location B)-remote_network object-group DMZ_Servers eq https

当它应该是这样的:

access-list dmz_access_in extended permit tcp object-group DMZ_Servers object (location B)-remote_network eq https