성공적인 네트워크 보안 설계를 구축하기 위한 핵심 요소 중 하나는 적절한 신뢰 모델을 식별하고 적용하는 것입니다. 올바른 신뢰 모델은 교환해야 할 대상 및 트래픽 종류를 정의합니다. 다른 모든 트래픽은 거부해야 합니다. 적절한 신뢰 모델이 식별되면 보안 디자이너가 모델을 적용하는 방법을 결정해야 합니다. 전 세계적으로 더 많은 중요한 리소스가 사용 가능하고 새로운 형태의 네트워크 공격이 발전함에 따라 네트워크 보안 인프라는 더욱 정교해지고 더 많은 제품을 사용할 수 있게 됩니다. 방화벽, 라우터, LAN 스위치, 침입 탐지 시스템, AAA 서버, VPN은 모델을 적용하는 데 도움이 되는 기술 및 제품 중 일부입니다. 물론 이러한 제품 및 기술 각각은 전반적인 보안 구현 내에서 특정 역할을 수행하며 설계자가 이러한 요소를 어떻게 구축할 수 있는지 이해하는 것이 중요합니다.
문서 규칙에 대한 자세한 내용은 Cisco 기술 팁 표기 규칙을 참조하십시오.
이 문서에서는 CatOS를 실행하는 스위치에서만 PVLAN 컨피그레이션에 대해 설명합니다. Cisco IOS 및 CatOS를 실행하는 스위치에서 PVLAN의 side-by-side 컨피그레이션 예는 Catalyst 스위치에서 Configuring Isolated Private VLANs(Isolated Private VLAN 구성) 문서를 참조하십시오.
모든 스위치와 소프트웨어 버전이 PVLAN을 지원하는 것은 아닙니다. 플랫폼 및 소프트웨어 버전이 PVLAN을 지원하는지 여부는 프라이빗 VLAN Catalyst 스위치 지원 매트릭스를 참조하십시오.
이 문서는 특정 소프트웨어 및 하드웨어 버전으로 한정되지 않습니다.
적절한 신뢰 모델을 식별하고 적용하는 것은 매우 기본적인 작업인 것 같지만, 보안 구현을 몇 년 동안 지원하면서 보안 사고가 취약한 보안 설계와 관련이 있는 경우가 많습니다. 일반적으로 이러한 불량한 설계는 적절한 신뢰 모델을 시행하지 않는 직접적인 결과이며, 때로는 필요한 것이 이해되지 않는 경우가 있으며, 다른 경우에는 관련 기술이 완전히 이해되지 않거나 잘못 사용되기 때문입니다.
이 문서에서는 Catalyst 스위치에서 사용할 수 있는 두 가지 기능인 PVLAN(Private VLAN) 및 VACL(VLAN Access Control Lists)이 기업 및 통신 사업자 환경에서 적절한 신뢰 모델을 보장하는 데 어떻게 도움이 되는지 자세히 설명합니다.
적절한 신뢰 모델을 시행하지 않아 즉각적인 결과는 전반적인 보안 구현이 악의적인 활동에 대한 면역력을 약화시킨다는 것입니다. DMZ(Demilitarized Zones)는 적절한 정책을 시행하지 않고 일반적으로 구현되므로 잠재적 침입자의 활동을 촉진합니다. 이 섹션에서는 DMZ가 자주 구현되는 방식과 잘못된 설계의 결과를 분석합니다. 나중에 이러한 결과를 완화하는 방법 또는 최상의 경우 피하는 방법에 대해 설명하겠습니다.
일반적으로 DMZ 서버는 인터넷에서 들어오는 요청만 처리하고, 결국 데이터베이스 서버와 같은 내부 또는 기타 DMZ 세그먼트에 있는 일부 백엔드 서버와의 연결을 시작해야 합니다. 동시에 DMZ 서버는 서로 통신하거나 외부 세계와 연결을 시작하지 않아야 합니다. 이는 간단한 신뢰 모델에서 필요한 트래픽 흐름을 명확하게 정의합니다. 그러나 이러한 모델이 적절하게 시행되지 않는 경우가 많습니다.
디자이너는 일반적으로 모든 서버에 대해 공통 세그먼트를 사용하여 DMZ를 구현하는 경향이 있습니다. 이 세그먼트는 서버 간의 트래픽을 제어하지 않습니다. 예를 들어 모든 서버는 공통 VLAN에 있습니다. 어떤 것도 동일한 VLAN 내에서 트래픽을 제어하지 않으므로, 서버 중 하나가 손상된 경우 동일한 서버를 악용하여 동일한 세그먼트에 있는 서버 및 호스트에 공격을 소싱할 수 있습니다. 따라서 포트 리디렉션 또는 애플리케이션 레이어 공격을 수행할 수 있는 잠재적 침입자의 활동이 원활하게 이루어집니다.
일반적으로 방화벽 및 패킷 필터는 수신 연결을 제어하는 데만 사용되지만, DMZ에서 시작된 연결을 제한하는 데에는 일반적으로 아무 작업도 수행되지 않습니다. 얼마 전에는 cgi-bin 스크립트에서 잘 알려진 취약성이 있었는데, 이는 침입자가 HTTP 스트림만 전송하여 X-term 세션을 시작할 수 있게 했습니다. 방화벽에서 허용해야 하는 트래픽입니다. 침입자가 충분히 운이 좋았다면, 그 또는 그녀는 다른 치료를 사용하여 루트 프롬프트를 얻을 수 있는데, 일반적으로 일종의 버퍼 오버플로 공격입니다. 대부분의 경우 적절한 신뢰 모델을 적용하여 이러한 문제를 방지할 수 있습니다. 첫째, 서버는 서로 통신하지 않아야 하며, 두 번째로 이러한 서버에서 외부로 연결되는 연결은 없어야 합니다.
동일한 코멘트는 신뢰할 수 없는 일반 세그먼트에서 애플리케이션 서비스 공급자의 서버 팜까지 이어지는 다른 여러 시나리오에 적용됩니다.
Catalyst 스위치의 PVLAN 및 VACL은 올바른 신뢰 모델을 보장하는 데 도움이 됩니다. PVLAN은 공통 세그먼트에서 호스트 간의 트래픽을 제한함으로써 도움이 되는 반면, VACL은 특정 세그먼트로 향하는 모든 트래픽 흐름을 더욱 세부적으로 제어함으로써 도움이 됩니다. 이러한 기능은 다음 섹션에서 설명합니다.
PVLAN은 CatOS 5.4 이상을 실행하는 Catalyst 6000, Catalyst 4000, 2980G, 2980G-A, 2948G 및 4912G에서 사용 가능합니다.
우리의 관점에서 PVLAN은 브로드캐스트 세그먼트를 비 브로드캐스트 멀티액세스 세그먼트로 전환하는 레이어 2(L2)에서 트래픽을 분리하는 데 사용할 수 있는 툴입니다. 프로미스큐어스 포트(즉, 기본 VLAN과 보조 VLAN을 모두 포워딩할 수 있는 포트)에서 스위치로 들어오는 트래픽은 동일한 기본 VLAN에 속하는 모든 포트에서 아웃할 수 있습니다. 보조 VLAN에 매핑된 포트에서 스위치로 들어오는 트래픽(격리된 포트, 커뮤니티 또는 양방향 커뮤니티 VLAN일 수 있음)은 프로미스큐어스 포트 또는 동일한 커뮤니티 VLAN에 속하는 포트로 전달할 수 있습니다. 동일한 격리 VLAN에 매핑된 여러 포트가 트래픽을 교환할 수 없습니다.
다음 이미지는 개념을 보여줍니다.
그림 1: 프라이빗 VLAN
기본 VLAN은 파란색으로 표시됩니다. 보조 VLAN은 빨간색과 노란색으로 표시됩니다. 호스트-1은 보조 VLAN 빨간색에 속하는 스위치의 포트에 연결됩니다. 호스트-2는 보조 VLAN 노란색에 속하는 스위치의 포트에 연결됩니다.
호스트가 전송 중일 때 트래픽은 보조 VLAN에서 전달됩니다. 예를 들어, Host-2가 전송되면 해당 트래픽은 VLAN 노란색으로 이동합니다. 이러한 호스트가 수신되면 트래픽은 기본 VLAN인 VLAN 파란색에서 옵니다.
라우터와 방화벽이 연결된 포트는 프로미스큐어스 포트입니다. 이러한 포트는 매핑에 정의된 모든 보조 VLAN과 기본 VLAN에서 오는 트래픽을 전달할 수 있기 때문입니다. 각 호스트에 연결된 포트는 기본 VLAN에서 오는 트래픽과 해당 포트에 구성된 보조 VLAN에서만 전달할 수 있습니다.
드로잉은 프라이빗 VLAN을 라우터와 호스트를 연결하는 서로 다른 파이프로 나타냅니다. 다른 모든 것을 번들링하는 파이프는 기본 VLAN(파란색)이고 VLAN의 트래픽은 라우터에서 호스트로 이동합니다. 기본 VLAN에 내부 파이프는 보조 VLAN이며, 이러한 파이프에서 이동하는 트래픽은 호스트에서 라우터로 이동합니다.
이미지가 표시됨에 따라 기본 VLAN은 하나 이상의 보조 VLAN을 번들로 구성할 수 있습니다.
이 문서의 앞부분에서 PVLAN은 공통 세그먼트 내에서 호스트 분리를 확인함으로써 적절한 신뢰 모델을 적용하는 데 도움이 된다고 밝혔습니다. 프라이빗 VLAN에 대해 자세히 알아보았습니다. 이제 이 기능이 초기 DMZ 시나리오에서 어떻게 구현될 수 있는지 알아보겠습니다. 서버는 서로 통신해서는 안 되지만 여전히 연결된 방화벽이나 라우터와 통신해야 합니다. 이 경우 서버는 격리된 포트에 연결하고 라우터 및 방화벽은 프로미스큐어스 포트에 연결해야 합니다. 이렇게 하면 서버 중 하나가 손상된 경우 침입자는 동일한 서버를 사용하여 동일한 세그먼트 내의 다른 서버에 공격을 소싱할 수 없습니다. 스위치는 성능 저하 없이 유선 속도로 패킷을 삭제합니다.
또 다른 중요한 점은 모든 서버가 동일한 서브넷에 속하므로 이러한 종류의 제어는 L2 디바이스에서만 구현할 수 있다는 것입니다. 서버가 직접 통신을 시도하므로 방화벽이나 라우터가 할 수 있는 일은 없습니다. 또 다른 옵션은 서버당 방화벽 포트를 지정하는 것이지만 이는 너무 비싸고 구현하기 어려우며 확장되지 않습니다.
다음 섹션에서는 이 기능을 사용할 수 있는 기타 일반적인 시나리오에 대해 자세히 설명합니다.
VACL은 CatOS 5.3 이상을 실행하는 Catalyst 6000 시리즈에서 사용할 수 있습니다.
VACL은 라우터가 필요 없이 L2의 Catalyst 6500에서 구성할 수 있습니다(PFC(Policy Feature Card)만 필요). 유선 속도로 적용되므로 Catalyst 6500에서 VACL을 구성할 때 성능 저하 문제가 없습니다. VACL의 조회는 액세스 목록의 크기와 상관없이 하드웨어에서 수행되므로 전달 속도는 변경되지 않습니다.
VACL은 기본 또는 보조 VLAN에 별도로 매핑할 수 있습니다. 보조 VLAN에 VACL을 구성하면 라우터나 방화벽에서 생성된 트래픽을 만지지 않고 호스트가 시작한 트래픽을 필터링할 수 있습니다.
VACL과 프라이빗 VLAN을 결합하면 트래픽 자체의 방향을 기준으로 트래픽을 필터링할 수 있습니다. 예를 들어, 두 라우터가 일부 호스트(예: 서버)와 동일한 세그먼트에 연결되어 있는 경우, 호스트가 생성한 트래픽만 필터링하고 라우터 간에 교환되는 트래픽은 그대로 유지되도록 보조 VLAN에서 VACL을 구성할 수 있습니다.
VACL을 쉽게 구축하여 적절한 신뢰 모델을 적용할 수 있습니다. DMZ 사례를 분석해보겠습니다. DMZ의 서버는 수신 연결만 제공하도록 되어 있으며 외부 세계에 대한 연결을 시작할 것으로 예상되지 않습니다. 이러한 서버에서 나가는 트래픽을 제어하기 위해 VACL을 보조 VLAN에 적용할 수 있습니다. VACL을 사용할 때 트래픽이 하드웨어에서 삭제되므로 라우터의 CPU나 스위치의 CPU에 영향을 미치지 않습니다. 서버 중 하나가 소스로 DDoS(Distributed Denial of Service) 공격에 관련되어 있는 경우에도 스위치는 성능 저하 없이 유선 속도로 모든 불법 트래픽을 삭제합니다. 서버가 연결된 라우터 또는 방화벽에도 유사한 필터를 적용할 수 있지만, 일반적으로 성능에 심각한 영향을 미칩니다.
MAC 기반 ACL은 IP 트래픽에서 제대로 작동하지 않으므로 PVLAN을 모니터링/추적하는 것이 좋습니다.
VACL을 사용하여 필터링을 구성할 때 PFC의 프래그먼트 처리 및 하드웨어 사양에 따라 컨피그레이션이 조정되도록 주의해야 합니다.
Catalyst 6500의 Supervisor 1의 PFC의 하드웨어 설계를 고려했을 때 icmp 프래그먼트를 명시적으로 거부하는 것이 좋습니다. 그 이유는 ICMP(Internet Control Message Protocol) 프래그먼트와 에코 응답이 하드웨어에서 동일하게 간주되기 때문이며 기본적으로 하드웨어가 프래그먼트를 명시적으로 허용하도록 프로그래밍됩니다. 따라서 echo-reply 패킷이 서버에서 나가는 것을 중지하려면 회선 deny icmp any fragment로 이를 명시적으로 구성해야 합니다. 이 문서의 컨피그레이션을 고려합니다.
PVLAN에 대해 잘 알려진 보안 제한이 있는데, 이는 라우터가 트래픽이 수신된 동일한 서브넷에서 트래픽을 다시 전달할 수 있는 가능성입니다. 라우터는 PVLAN의 목적을 극복하고 격리된 포트 간에 트래픽을 라우팅할 수 있습니다. 이러한 제한은 PVLAN이 레이어 3(L3)이 아니라 L2에서 격리를 제공하는 툴이기 때문입니다.
uRPF(Unicast Reverse Path Forwarding)가 PVLAN 호스트 포트와 제대로 작동하지 않으므로 uRPF를 PVLAN과 함께 사용하면 안 됩니다.
기본 VLAN에 구성된 VACL을 통해 이 문제를 해결할 수 있습니다. 사례 연구에서는 동일한 서브넷에 의해 시작된 트래픽을 삭제하고 동일한 서브넷으로 다시 라우팅하기 위해 기본 VLAN에 구성해야 하는 VACL을 제공합니다.
일부 라인 카드에서 PVLAN 매핑/맵/트렁킹 포트의 컨피그레이션은 여러 PVLAN 매핑이 서로 다른 포트 ASIC(Application-Specific Integrated Circuit)에 속해야 컨피그레이션이 가능합니다. 이러한 제한 사항은 새 포트 ASIC Coil3에서 제거됩니다. 자세한 내용은 소프트웨어 구성에 대한 최신 Catalyst 스위치 설명서를 참조하십시오.
다음 섹션에서는 대부분의 구현을 대표하는 세 가지 사례 연구에 대해 설명하고 PVLAN 및 VACL의 보안 구축과 관련된 세부 정보를 제공합니다.
이러한 시나리오는 다음과 같습니다.
통과 DMZ
외부 DMZ
방화벽과 병렬로 작동하는 VPN Concentrator
이는 가장 일반적으로 구축된 시나리오 중 하나입니다. 이 예에서 DMZ는 아래 이미지에 표시된 대로 두 방화벽 라우터 간의 전송 영역으로 구현됩니다.
그림 2: 통과 DMZ
이 예에서 DMZ 서버는 외부 및 내부 사용자가 액세스해야 하지만 서로 통신할 필요는 없습니다. 경우에 따라 DMZ 서버는 내부 호스트에 대한 일종의 연결을 열어야 합니다. 동시에 내부 클라이언트는 제한 없이 인터넷에 액세스해야 합니다. 예를 들어 DMZ에 웹 서버가 있고 내부 네트워크에 있는 데이터베이스 서버와 통신해야 하며 내부 클라이언트가 인터넷에 액세스하는 경우가 있습니다.
외부 방화벽은 DMZ에 있는 서버에 대한 수신 연결을 허용하도록 구성되지만, 일반적으로 발신 트래픽, 특히 DMZ에서 시작된 트래픽에 필터 또는 제한이 적용되지 않습니다. 이 문서에서 앞서 설명한 것처럼, 다음과 같은 두 가지 이유로 공격자의 활동을 잠재적으로 용이하게 할 수 있습니다. 첫 번째는 DMZ 호스트 중 하나가 감염되면 다른 모든 DMZ 호스트가 노출됩니다. 두 번째, 공격자는 발신 연결을 쉽게 이용할 수 있습니다.
DMZ 서버는 서로 통신할 필요가 없으므로 L2에서 격리되도록 하는 것이 좋습니다. 서버 포트는 PVLAN이 격리된 포트로 정의되고 두 방화벽에 연결된 포트는 프로미스큐어로 정의됩니다. 방화벽에 대한 기본 VLAN과 DMZ 서버에 대한 보조 VLAN을 정의하면 이를 달성할 수 있습니다.
VACL은 DMZ에서 시작된 트래픽을 제어하는 데 사용됩니다. 이렇게 하면 공격자가 불법적인 발신 연결을 열 수 없습니다. DMZ 서버는 클라이언트 세션에 해당하는 트래픽에 응답할 뿐만 아니라 DNS(Domain Name System) 및 MTU(Maximum Transmission Unit) 경로 검색 등의 추가 서비스도 필요하다는 점에 유의해야 합니다. 따라서 ACL은 DMZ 서버에 필요한 모든 서비스를 허용해야 합니다.
테스트 환경에서 server_dmz1 및 server_dmz2 라우터로 구성된 두 개의 라우터가 포함된 DMZ 세그먼트를 구현했습니다. 이러한 서버는 외부 및 내부 클라이언트에서 액세스해야 하며 모든 HTTP 연결은 내부 RADIUS 서버(UNIX용 CiscoSecure ACS)를 사용하여 인증됩니다. 내부 및 외부 라우터는 모두 패킷 필터 방화벽으로 구성됩니다. 다음 그림은 사용된 주소 지정 체계를 포함하여 테스트 환경을 보여줍니다.
그림 3: Pass-Through DMZ 테스트 환경
다음 목록은 PVLAN의 기본 컨피그레이션 단계를 수집합니다. Catalyst 6500은 DMZ에서 L2 스위치로 사용됩니다.
Server_dmz_1이 포트 3/9에 연결됨
Server_dmz_2가 포트 3/10에 연결됨
내부 라우터가 포트 3/34에 연결됨
외부 라우터가 포트 3/35에 연결됨
다음 VLAN을 선택했습니다.
41은 기본 VLAN
42는 격리된 VLAN
다음 컨피그레이션은 관련된 포트의 PVLAN을 설정합니다.
ecomm-6500-2 (enable) set vlan 41 pvlan primary VTP advertisements transmitting temporarily stopped, and will resume after the command finishes. Vlan 41 configuration successful ecomm-6500-2 (enable) sh pvlan Primary Secondary Secondary-Type Ports ------- --------- ---------------- ------------ 41 - - ecomm-6500-2 (enable) set vlan 42 pvlan isolated VTP advertisements transmitting temporarily stopped, and will resume after the command finishes. Vlan 42 configuration successful ecomm-6500-2 (enable) set pvlan 41 42 3/9-10 Successfully set the following ports to Private Vlan 41,42: 3/9-10 ecomm-6500-2 (enable) set pvlan mapping 41 42 3/35 Successfully set mapping between 41 and 42 on 3/35 ecomm-6500-2 (enable) set pvlan mapping 41 42 3/34 Successfully set mapping between 41 and 42 on 3/34 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/9 server_dmz1 connected 41,42 a-half a-10 10/100BaseTX 3/10 server_dmz2 connected 41,42 a-half a-10 10/100BaseTX 3/34 to_6500_1 connected 41 auto auto 10/100BaseTX 3/35 external_router_dm connected 41 a-half a-10 10/100BaseTX
이 섹션은 DMZ의 보안을 향상하기 위해 매우 중요합니다. VACL 및 PVLAN의 알려진 제한 사항 섹션에 설명된 대로, 서버가 서로 다른 두 보조 VLAN에 속하거나 동일한 격리 VLAN에 속하더라도 공격자가 서로 통신하기 위해 사용할 수 있는 방법이 있습니다. 서버가 직접 통신을 시도하는 경우 PVLAN 때문에 L2에서 통신할 수 없습니다. 동일한 서브넷에 대한 트래픽이 라우터로 전송되는 방식으로 침입자가 서버를 감염시킨 다음 구성된 경우 이 서버는 트래픽을 동일한 서브넷에 다시 라우팅하여 PVLAN의 목적을 무너뜨립니다.
따라서 기본 VLAN(라우터에서 트래픽을 전달하는 VLAN)에 다음 정책을 사용하여 VACL을 구성해야 합니다.
소스 IP가 라우터의 IP인 트래픽을 허용합니다.
소스 및 대상 IP가 모두 DMZ 서브넷인 트래픽을 거부합니다.
나머지 트래픽 모두 허용
ecomm-6500-2 (enable) sh sec acl info protect_pvlan set security acl ip protect_pvlan --------------------------------------------------- 1. permit ip host 172.16.65.193 any 2. permit ip host 172.16.65.201 any 3. deny ip 172.16.65.192 0.0.0.15 172.16.65.192 0.0.0.15 4. permit ip any any ecomm-6500-2 (enable) sh sec acl ACL Type VLANS -------------------------------- ---- ----- protect_pvlan IP 41
이 ACL은 서버에서 생성된 트래픽에 영향을 주지 않습니다. 이는 라우터가 서버에서 들어오는 트래픽을 동일한 VLAN으로 다시 라우팅하지 못하도록 합니다. 처음 두 명령문은 라우터가 icmp 리디렉션 또는 icmp unreachable과 같은 메시지를 서버로 전송할 수 있도록 합니다.
다음 컨피그레이션 로그는 서버에서 생성된 트래픽을 필터링하기 위해 VACL을 설정하는 방법을 보여 주는 데 사용됩니다. 이 VACL을 구성함으로써 다음을 달성하고자 합니다.
서버에서 ping 허용(에코 허용)
에코 응답이 서버에서 나가는 것을 방지
외부에서 시작된 HTTP 연결 허용
RADIUS 인증(UDP 포트 1645) 및 계정 관리(UDP 포트 1646) 트래픽 허용
DNS 트래픽 허용(UDP 포트 53)
나머지 모든 트래픽을 차단하고자 합니다.
단편화에 관한 한 서버 세그먼트에서 다음을 가정합니다.
서버는 조각화된 트래픽을 생성하지 않습니다.
서버에서 단편화된 트래픽을 수신할 수 있습니다.
Catalyst 6500의 Supervisor 1에 대한 PFC의 하드웨어 설계에서 ICMP 프래그먼트를 명시적으로 거부하는 것이 좋습니다. 이유는 ICMP 프래그먼트 및 에코 응답이 하드웨어에서 동일하게 간주되며 기본적으로 하드웨어가 프래그먼트를 명시적으로 허용하도록 프로그래밍되기 때문입니다. 따라서 echo-reply 패킷이 서버에서 나가는 것을 중지하려면 회선 deny icmp any fragment로 이를 구성해야 합니다.
ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out deny icmp any any fragment ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit icmp host 172.16.65.199 any echo ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit icmp host 172.16.65.202 any echo ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit tcp host 172.16.65.199 eq 80 any established ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit tcp host 172.16.65.202 eq 80 any established ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit udp host 172.16.65.199 eq 1645 host 172.16.171.9 eq 1645 ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit udp host 172.16.65.202 eq 1645 host 172.16.171.9 eq 1645 ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit udp host 172.16.65.199 eq 1646 host 172.16.171.9 eq 1646 ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit udp host 172.16.65.202 eq 1646 host 172.16.171.9 eq 1646 ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit udp host 172.16.65.199 any eq 53 ecomm-6500-2 (enable) Set sec acl ip dmz_servers_out permit udp host 172.16.65.202 any eq 53 ecomm-6500-2 (enable) Commit sec acl all ecomm-6500-2 (enable) Set sec acl map dmz_servers_out 42 ecomm-6500-2 (enable) sh sec acl ACL Type VLANS -------------------------------- ---- ----- protect_pvlan IP 41 dmz_servers_out IP 42 ecomm-6500-2 (enable) sh sec acl info dmz_servers_out set security acl ip dmz_servers_out --------------------------------------------------- 1. deny icmp any any fragment 2. permit icmp host 172.16.65.199 any echo 3. permit icmp host 172.16.65.202 any echo 4. permit tcp host 172.16.65.199 eq 80 any established 5. permit tcp host 172.16.65.202 eq 80 any established 6. permit udp host 172.16.65.199 eq 1645 host 172.16.171.9 eq 1645 7. permit udp host 172.16.65.202 eq 1645 host 172.16.171.9 eq 1645 8. permit udp host 172.16.65.199 eq 1646 host 172.16.171.9 eq 1646 9. permit udp host 172.16.65.202 eq 1646 host 172.16.171.9 eq 1646 10. permit udp host 172.16.65.199 any eq 53 11. permit udp host 172.16.65.202 any eq 53
VACL이 아직 적용되지 않았지만 구성된 PVLAN이 있는 경우 다음 출력이 캡처되었습니다. 이 테스트에서는 외부 라우터에서 사용자가 내부 라우터와 서버를 ping할 수 있음을 보여줍니다.
external_router#ping 172.16.65.193 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.193, timeout is 2 seconds: !!!! external_router#ping 172.16.65.202 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.202, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms external_router#ping 172.16.65.199 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.199, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
다음 예에서는 서버에서 기본 게이트웨이인 외부 네트워크로 ping할 수 있지만 동일한 보조 VLAN에 속하는 서버는 ping할 수 없다는 것을 보여줍니다.
server_dmz1#ping 203.5.6.10 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 203.5.6.10, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.193, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms server_dmz1#ping 172.16.65.202 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.202, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
VACL을 매핑한 후 외부 라우터에서 ping은 더 이상 성공하지 않습니다.
external_router#ping 172.16.65.199 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.199, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
다음 예는 내부 네트워크에서 HTTP GET 요청을 수신하는 서버를 보여줍니다.
server_dmz1#debug ip http url HTTP URL debugging is on server_dmz1#debug ip hhtp tran HTTP transactions debugging is on server_dmz1#debug ip http auth HTTP Authentication debugging is on server_dmz1# *Mar 7 09:24:03.092 PST: HTTP: parsed uri '/' *Mar 7 09:24:03.092 PST: HTTP: client version 1.0 *Mar 7 09:24:03.092 PST: HTTP: parsed extension Connection *Mar 7 09:24:03.092 PST: HTTP: parsed line Keep-Alive *Mar 7 09:24:03.092 PST: HTTP: parsed extension User-Agent *Mar 7 09:24:03.092 PST: HTTP: parsed line Mozilla/4.7 [en] (X11; I; SunOS 5.5.1 sun4u) *Mar 7 09:24:03.092 PST: HTTP: parsed extension Host *Mar 7 09:24:03.092 PST: HTTP: parsed line 172.16.65.199 *Mar 7 09:24:03.092 PST: HTTP: parsed extension Accept *Mar 7 09:24:03.092 PST: HTTP: parsed line image/gif, image/x-xbitmap, image/jpeg, image/ *Mar 7 09:24:03.092 PST: HTTP: parsed extension Accept-Encoding *Mar 7 09:24:03.092 PST: HTTP: parsed line gzip *Mar 7 09:24:03.096 PST: HTTP: parsed extension Accept-Language *Mar 7 09:24:03.096 PST: HTTP: parsed line en *Mar 7 09:24:03.096 PST: HTTP: parsed extension Accept-Charset *Mar 7 09:24:03.096 PST: HTTP: parsed line iso-8859-1,*,utf-8 *Mar 7 09:24:03.096 PST: HTTP: Authentication for url '/' '/' level 15 privless '/' *Mar 7 09:24:03.096 PST: HTTP: authentication required, no authentication information was provided *Mar 7 09:24:03.096 PST: HTTP: authorization rejected *Mar 7 09:24:22.528 PST: HTTP: parsed uri '/' *Mar 7 09:24:22.532 PST: HTTP: client version 1.0 *Mar 7 09:24:22.532 PST: HTTP: parsed extension Connection *Mar 7 09:24:22.532 PST: HTTP: parsed line Keep-Alive *Mar 7 09:24:22.532 PST: HTTP: parsed extension User-Agent *Mar 7 09:24:22.532 PST: HTTP: parsed line Mozilla/4.7 [en] (X11; I; SunOS 5.5.1 sun4u) *Mar 7 09:24:22.532 PST: HTTP: parsed extension Host *Mar 7 09:24:22.532 PST: HTTP: parsed line 172.16.65.199 *Mar 7 09:24:22.532 PST: HTTP: parsed extension Accept *Mar 7 09:24:22.532 PST: HTTP: parsed line image/gif, image/x-xbitmap, image/jpeg, image/ *Mar 7 09:24:22.532 PST: HTTP: parsed extension Accept-Encoding *Mar 7 09:24:22.532 PST: HTTP: parsed line gzip *Mar 7 09:24:22.532 PST: HTTP: parsed extension Accept-Language *Mar 7 09:24:22.532 PST: HTTP: parsed line en *Mar 7 09:24:22.532 PST: HTTP: parsed extension Accept-Charset *Mar 7 09:24:22.532 PST: HTTP: parsed line iso-8859-1,*,utf-8 *Mar 7 09:24:22.532 PST: HTTP: parsed extension Authorization *Mar 7 09:24:22.532 PST: HTTP: parsed authorization type Basic *Mar 7 09:24:22.532 PST: HTTP: Authentication for url '/' '/' level 15 privless '/' *Mar 7 09:24:22.532 PST: HTTP: Authentication username = 'martin' priv-level = 15 auth-type = aaa *Mar 7 09:24:22.904 PST: HTTP: received GET ''
외부 DMZ 시나리오는 아마도 가장 널리 채택되고 구축된 구현일 것입니다. 외부 DMZ는 아래 그림과 같이 하나 이상의 방화벽 인터페이스를 사용하여 구현됩니다.
그림 4: 외부 DMZ
일반적으로 DMZ의 요구 사항은 설계 구현과 상관없이 동일하게 적용됩니다. 이전 사례와 마찬가지로, DMZ 서버는 외부 클라이언트 및 내부 네트워크에서 액세스할 수 있어야 합니다. DMZ 서버는 결국 일부 내부 리소스에 액세스해야 하며 서로 통신해서는 안 됩니다. 이와 동시에 DMZ에서 인터넷으로 향하는 트래픽은 개시되지 않아야 합니다. 이러한 DMZ 서버는 수신 연결에 해당하는 트래픽만 응답해야 합니다.
이전 사례 연구에서와 같이 첫 번째 컨피그레이션 단계는 PVLAN을 통해 L2에서 격리를 수행하고 내부 및 외부 호스트가 액세스할 수 있는 동안 DMZ 서버가 서로 통신할 수 없도록 하는 것입니다. 격리 포트를 사용하여 보조 VLAN에서 서버를 설정하여 구현됩니다. 방화벽은 프로미스큐어스 포트를 사용하여 기본 VLAN에 정의되어야 합니다. 방화벽은 이 기본 VLAN 내의 유일한 디바이스입니다.
두 번째 단계는 DMZ에서 시작된 트래픽을 제어하기 위해 ACL을 정의하는 것입니다. 이러한 ACL을 정의할 때는 필요한 트래픽만 허용해야 합니다.
아래 이미지는 이 사례 연구를 위해 구현된 테스트 기반(DMZ에 대해 세 번째 인터페이스가 포함된 PIX 방화벽 사용)입니다. 동일한 라우터 세트가 웹 서버로 사용되고 모든 HTTP 세션이 동일한 RADIUS 서버로 인증됩니다.
그림 5: 외부 DMZ 테스트 환경
이 시나리오에서는 이전 사례 연구에서 PVLAN 및 VACL 컨피그레이션에 대해 자세히 설명했으므로 컨피그레이션 파일에서 더 흥미로운 발췌만 첨부합니다.
nameif ethernet0 outside security0 nameif ethernet1 inside security100 nameif ethernet2 dmz security50 ip address outside 198.5.6.10 255.255.255.0 ip address inside 172.16.65.201 255.255.255.240 ip address dmz 199.5.6.10 255.255.255.0 global (outside) 1 198.5.6.11 global (dmz) 1 199.5.6.11 nat (inside) 1 0.0.0.0 0.0.0.0 0 0 static (dmz,outside) 199.5.6.199 199.5.6.199 netmask 255.255.255.255 0 0 static (dmz,outside) 199.5.6.202 199.5.6.202 netmask 255.255.255.255 0 0 static (inside,dmz) 172.16.171.9 172.16.171.9 netmask 255.255.255.255 0 0 static (inside,dmz) 171.68.10.70 171.68.10.70 netmask 255.255.255.255 0 0 static (inside,dmz) 171.69.0.0 171.69.0.0 netmask 255.255.0.0 0 0 conduit permit tcp host 199.5.6.199 eq www any conduit permit tcp host 199.5.6.202 eq www any conduit permit udp any eq domain any conduit permit icmp any any echo-reply conduit permit icmp any any unreachable conduit permit udp host 172.16.171.9 eq 1645 host 199.5.6.199 conduit permit udp host 172.16.171.9 eq 1646 host 199.5.6.199 conduit permit udp host 172.16.171.9 eq 1646 host 199.5.6.202 conduit permit udp host 172.16.171.9 eq 1645 host 199.5.6.202 conduit permit icmp any host 199.5.6.199 echo conduit permit icmp any host 199.5.6.202 echo route outside 0.0.0.0 0.0.0.0 198.5.6.1 1 route inside 171.69.0.0 255.255.0.0 172.16.65.193 1 route inside 171.68.0.0 255.255.0.0 172.16.65.193 1 route inside 172.16.0.0 255.255.0.0 172.16.65.193 1
NAS 구성
aaa new-model aaa authentication login default radius local aaa authentication login consoleauth none aaa authorization exec default radius local aaa authorization exec consoleautho none aaa accounting exec default start-stop radius aaa accounting exec consoleacct none radius-server host 172.16.171.9 auth-port 1645 acct-port 1646 radius-server key cisco123 ! line con 0 exec-timeout 0 0 password ww authorization exec consoleautho accounting exec consoleacct login authentication consoleauth transport input none line aux 0 line vty 0 4 password ww ! end
RADIUS 서버 CSUX
User Profile Information user = martin{ profile_id = 151 profile_cycle = 5 radius=Cisco { check_items= { 2=cisco } reply_attributes= { 6=6 } } } User Profile Information user = NAS.172.16.65.199{ profile_id = 83 profile_cycle = 2 NASName="172.16.65.199" SharedSecret="cisco123" RadiusVendor="Cisco" Dictionary="DICTIONARY.Cisco" }
이 컨피그레이션에서는 PIX가 보낸 동일한 인터페이스에서 트래픽을 리디렉션하지 않으므로 기본 VLAN에 VACL을 구성할 필요가 없습니다. 기본 VLAN 섹션의 VACL 컨피그레이션에 설명된 VACL은 이중화됩니다.
set security acl ip dmz_servers_out --------------------------------------------------- 1. deny icmp any any fragment 2. permit icmp host 199.5.6.199 any echo 3. permit icmp host 199.5.6.202 any echo 4. permit tcp host 199.5.6.199 eq 80 any established 5. permit tcp host 199.5.6.202 eq 80 any established 6. permit udp host 199.5.6.199 eq 1645 host 172.16.171.9 eq 1645 7. permit udp host 199.5.6.202 eq 1645 host 172.16.171.9 eq 1645 8. permit udp host 199.5.6.199 eq 1646 host 172.16.171.9 eq 1646 9. permit udp host 199.5.6.202 eq 1646 host 172.16.171.9 eq 1646 10. permit udp host 199.5.6.199 any eq 53 11. permit udp host 199.5.6.202 any eq 53 ecomm-6500-2 (enable) sh pvlan Primary Secondary Secondary-Type Ports ------- --------- ---------------- ------------ 41 42 isolated 3/9-10 ecomm-6500-2 (enable) sh pvlan mapping Port Primary Secondary ---- ------- --------- 3/14 41 42 3/34 41 42 3/35 41 42 ecomm-6500-2 (enable) sh port Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/9 server_dmz1 connected 41,42 a-half a-10 10/100BaseTX 3/10 server_dmz2 connected 41,42 a-half a-10 10/100BaseTX 3/14 to_pix_port_2 connected 41 full 100 10/100BaseTX 3/35 external_router_dm notconnect 41 auto auto 10/100BaseTX
Access VPN(Virtual Private Networks)을 구현할 때, 반드시 가장 선호하는 접근 방식 중 하나는 병렬 설계(아래 그림에 나와 있음)입니다. 고객은 기존 인프라에 거의 영향을 미치지 않고 손쉽게 구현할 수 있고 장치 유연성에 따라 상대적으로 쉽게 확장할 수 있기 때문에 일반적으로 이러한 설계 방식을 선호합니다.
병렬 접근 방식에서는 VPN Concentrator가 내부 및 외부 세그먼트에 모두 연결됩니다. 모든 VPN 세션은 방화벽을 거치지 않고 Concentrator에서 종료됩니다. 일반적으로 VPN 클라이언트는 내부 네트워크에 대한 무제한 액세스를 가져야 하지만, 내부 서버(서버 팜) 집합으로 액세스가 제한될 수 있습니다. 바람직한 기능 중 하나는 VPN 트래픽을 일반 인터넷 트래픽과 분리하는 것입니다. 예를 들어 VPN 클라이언트는 회사 방화벽을 통해 인터넷에 액세스할 수 없습니다.
그림 6: 방화벽과 병렬로 작동하는 VPN Concentrator
이 예에서는 PIX 방화벽과 병렬로 설치된 VPN 5000 Concentrator를 사용했습니다. 웹 서버로 구성된 두 라우터는 내부 세그먼트에 내부 서버 팜으로 설치되었습니다. VPN 클라이언트는 서버 팜에 액세스만 가능하며 인터넷 트래픽은 IPSec(VPN traffic)에서 분리되어야 합니다. 아래 그림은 테스트 환경을 보여줍니다.
그림 7: VPN Concentrator를 방화벽 테스트 장비와 병렬로 연결
이 시나리오에서는 두 가지 주요 관심 영역이 있습니다.
내부 L2 스위치
외부 L2 스위치
내부 L2 스위치에 대한 트래픽 흐름은 다음 문을 기반으로 정의됩니다.
VPN 클라이언트는 미리 정의된 내부 서버(서버 팜) 집합에 대한 전체 액세스 권한을 가집니다.
내부 클라이언트는 서버 팜에 액세스할 수도 있습니다.
내부 클라이언트는 인터넷에 무제한 액세스할 수 있습니다.
VPN Concentrator에서 들어오는 트래픽은 PIX 방화벽에서 격리되어야 합니다.
외부 L2 스위치의 트래픽 흐름은 다음과 같이 정의됩니다.
라우터에서 들어오는 트래픽은 VPN Concentrator 또는 PIX로 이동할 수 있어야 합니다.
PIX에서 들어오는 트래픽은 VPN에서 들어오는 트래픽에서 격리되어야 합니다.
또한 관리자는 내부 네트워크의 트래픽이 VPN 호스트로 이동하는 것을 막고자 할 수 있습니다. 이는 기본 VLAN에 구성된 VACL을 통해 달성할 수 있습니다(VACL은 내부 라우터에서 나가는 트래픽만 필터링하며 다른 트래픽은 영향을 받지 않습니다).
이 설계의 주요 목표는 PIX에서 오는 트래픽을 서버 및 VPN Concentrator에서 들어오는 트래픽에서 분리시키는 것입니다. 따라서 서버와 VPN Concentrator가 구성된 PVLAN과 다른 PVLAN에서 PIX를 구성합니다.
내부 네트워크에서 들어오는 트래픽은 서버 팜, VPN Concentrator 및 PIX에 액세스할 수 있어야 합니다. 따라서 내부 네트워크에 연결되는 포트는 프로미스큐어스 포트가 됩니다.
서버와 VPN Concentrator는 서로 통신할 수 있으므로 동일한 보조 VLAN에 속합니다.
외부 L2 스위치의 경우 인터넷에 대한 액세스를 제공하는 라우터(일반적으로 ISP(인터넷 서비스 공급자)가 프로미스큐어스 포트에 연결되고 VPN Concentrator 및 PIX는 동일한 사설 및 격리된 VLAN에 속하므로 트래픽을 교환할 수 없습니다. 이렇게 하면 통신 사업자의 트래픽이 VPN Concentrator로의 경로 또는 PIX의 경로를 사용할 수 있습니다. PIX 및 VPN Concentrator는 격리되므로 더 안전하게 보호됩니다.
sh pvlan Primary Secondary Secondary-Type Ports ------- --------- ---------------- ----------- 41 42 community 3/7,3/9-10 41 43 isolated 3/12 ecomm-6500-2 (enable) sh pvlan map Port Primary Secondary ---- ------- --------- 3/34 41 42-43 ecomm-6500-2 (enable) sh port 3/7 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/7 to_vpn_conc connected 41,42 a-half a-10 10/100BaseTX ecomm-6500-2 (enable) sh port 3/9 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/9 server_1 connected 41,42 a-half a-10 10/100BaseTX ecomm-6500-2 (enable) sh port 3/10 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/10 server_2 connected 41,42 a-half a-10 10/100BaseTX ecomm-6500-2 (enable) sh port 3/12 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/12 to_pix_intf1 connected 41,43 a-full a-100 10/100BaseTX ecomm-6500-2 (enable) sh pvlan map Port Primary Secondary ---- ------- --------- 3/34 41 42-43 ecomm-6500-2 (enable) sh port 3/34 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/34 to_int_router connected 41 a-full a-100 10/100BaseTX
sh pvlan Primary Secondary Secondary-Type Ports ------- --------- ---------------- ------------ 41 45 isolated 3/7,3/33 ecomm-6500-1 (enable) sh pvlan mapping Port Primary Secondary ---- ------- --------- 3/43 41 45 ecomm-6500-1 (enable) sh port 3/7 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/7 from_vpn connected 41,45 a-half a-10 10/100BaseTX ecomm-6500-1 (enable) sh port 3/33 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/33 to_pix_intf0 connected 41,45 a-full a-100 10/100BaseTX ecomm-6500-1 (enable) sh pvlan map Port Primary Secondary ---- ------- --------- 3/43 41 45 ecomm-6500-1 (enable) sh port 3/43 Port Name Status Vlan Duplex Speed Type ----- ------------------ ---------- ---------- ------ ----- ------------ 3/43 to_external_router connected 41 a-half a-10 10/100BaseTX
이 실험은 내부 라우터가 방화벽을 통과하여 외부 라우터(인터페이스가 198.5.6.1인 외부 방화벽 라우터)에 도달할 수 있음을 보여줍니다.
ping 198.5.6.1 Type escape sequence to abort Sending 5, 100-byte ICMP Echos to 198.5.6.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
이 실험에서는 서버 1의 모든 항목을 다음과 같이 보여 줍니다.
서버 1은 내부 라우터를 ping할 수 있습니다.
server_1#ping 172.16.65.193 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.193, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
서버 1은 VPN에 ping할 수 있습니다.
server_1#ping 172.16.65.203 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.203, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
서버 1에서 PIX 내부 인터페이스를 ping할 수 없습니다.
server_1#ping 172.16.65.201 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.65.201, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
서버 1에서 외부 라우터를 ping할 수 없습니다.
server_1#ping 198.5.6.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 198.5.6.1, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
다음 실험에서는 내부 네트워크에서 서버 팜으로 HTTP 세션을 열 수 있음을 보여줍니다.
server_2# 1w1d: HTTP: parsed uri '/' 1w1d: HTTP: processing URL '/' from host 171.68.173.3 1w1d: HTTP: client version 1.0 1w1d: HTTP: parsed extension Connection 1w1d: HTTP: parsed line Keep-Alive 1w1d: HTTP: parsed extension User-Agent 1w1d: HTTP: parsed line Mozilla/4.7 [en] (X11; I; SunOS 5.5.1 sun4u) 1w1d: HTTP: parsed extension Host 1w1d: HTTP: parsed line 172.16.65.202 1w1d: HTTP: parsed extension Accept 1w1d: HTTP: parsed line image/gif, image/x-xbitmap, image/jpeg, image/ 1w1d: HTTP: parsed extension Accept-Encoding 1w1d: HTTP: parsed line gzip 1w1d: HTTP: parsed extension Accept-Language 1w1d: HTTP: parsed line en 1w1d: HTTP: parsed extension Accept-Charset 1w1d: HTTP: parsed line iso-8859-1,*,utf-8 1w1d: HTTP: Authentication for url '/' '/' level 15 privless '/' 1w1d: HTTP: authentication required, no authentication information was provided 1w1d: HTTP: authorization rejected 1w1d: HTTP: parsed uri '/' 1w1d: HTTP: processing URL '/' from host 171.68.173.3 1w1d: HTTP: client version 1.0 1w1d: HTTP: parsed extension Connection 1w1d: HTTP: parsed line Keep-Alive 1w1d: HTTP: parsed extension User-Agent 1w1d: HTTP: parsed line Mozilla/4.7 [en] (X11; I; SunOS 5.5.1 sun4u) 1w1d: HTTP: parsed extension Host 1w1d: HTTP: parsed line 172.16.65.202 1w1d: HTTP: parsed extension Accept 1w1d: HTTP: parsed line image/gif, image/x-xbitmap, image/jpeg, image/ 1w1d: HTTP: parsed extension Accept-Encoding 1w1d: HTTP: parsed line gzip 1w1d: HTTP: parsed extension Accept-Language 1w1d: HTTP: parsed line en 1w1d: HTTP: parsed extension Accept-Charset 1w1d: HTTP: parsed line iso-8859-1,*,utf-8 1w1d: HTTP: parsed extension Authorization 1w1d: HTTP: parsed authorization type Basic 1w1d: HTTP: Authentication for url '/' '/' level 15 privless '/' 1w1d: HTTP: Authentication username = 'maurizio' priv-level = 15 auth-type = aaa 1w1d: HTTP: received GET ''
다음 실험은 VPN 네트워크의 HTTP 트래픽이 서버 팜으로 이동할 수 있음을 보여줍니다(주소 10.1.1.1 주의).
1w1d: HTTP: parsed uri '/' 1w1d: HTTP: processing URL '/' from host 10.1.1.1 1w1d: HTTP: client version 1.0 1w1d: HTTP: parsed extension Connection 1w1d: HTTP: parsed line Keep-Alive 1w1d: HTTP: parsed extension User-Agent 1w1d: HTTP: parsed line Mozilla/4.76 [en] (Windows NT 5.0; U) 1w1d: HTTP: parsed extension Host 1w1d: HTTP: parsed line 172.16.65.202 1w1d: HTTP: parsed extension Accept\ 1w1d: HTTP: parsed line image/gif, image/x-xbitmap, image/jpeg, image/ 1w1d: HTTP: parsed extension Accept-Encoding 1w1d: HTTP: parsed line gzip 1w1d: HTTP: parsed extension Accept-Language 1w1d: HTTP: parsed line en 1w1d: HTTP: parsed extension Accept-Charset 1w1d: HTTP: parsed line iso-8859-1,*,utf-8 1w1d: HTTP: Authentication for url '/' '/' level 15 privless '/' 1w1d: HTTP: authentication required, no authentication information was provided
다음은 VPN Concentrator 컨피그레이션입니다.
[ IP Ethernet 0:0 ] ipbroadcast = 172.16.65.255 mode = routedSubnetMask = 255.255.255.240 IPAddress = 172.16.65.203 [ General ] IPsecGateway = 198.5.6.1 DeviceName = "VPN5008" EnablePassword = "ww" Password = "ww" EthernetAddress = 00:30:85:14:5c:40 DeviceType = VPN 5002/8 ConcentratorConfiguredOn = Timeserver not configured ConfiguredFrom = Command Line, from 171.68.173.3 [ IP Static ] 206.1.1.0 255.255.255.0 198.5.6.1 10.0.0.0 0.0.0.0 172.16.65.193 1 [ IP Ethernet 1:0 ] ipbroadcast = 172.16.65.255 mode = routedSubnetMask = 255.255.255.0 IPAddress = 198.5.6.203 [ IKE Policy ] Protecction = MD5_DES_G1 [ VPN Group "RemoteUsers" ] maxconnections = 10IPNet = 172.16.65.0/24 LocalIPNet = 10.1.1.0/24 Transform = esp(des,md5) [ VPN Users ] martin Config="RemoteUsers" SharedKey="mysecretkey" maurizio Config="RemoteUsers" SharedKey="mysecretkey"
다음 명령은 연결된 사용자 목록을 보여줍니다.
sh VPN user Port User Group Client Local ConnectNumber Address Address Time --------------------------------------------------------------------------------------- VPN 0:1 martin RemoteUsers 206.1.1.10 10.1.1.1 00:00:11:40
서버의 기본 게이트웨이는 내부 라우터 172.16.65.193이며, 이 경우 icmp 리디렉션을 172.16.65.203으로 발급합니다. 이 구현은 호스트가 라우터로 플로우의 첫 번째 패킷을 전송하고 리디렉션을 수신하면 이 트래픽을 처리하는 데 더 적합한 후속 패킷을 게이트웨이로 전송하므로 최적화되지 않은 트래픽 플로우를 발생시킵니다. 또는 10.x.x.x 주소의 VPN을 가리키고 나머지 트래픽의 경우 172.16.65.193을 가리키도록 서버 자체에서 두 개의 다른 경로를 구성할 수 있습니다. 서버에 기본 게이트웨이만 구성된 경우 라우터 인터페이스가 "ip redirect"로 구성되어 있는지 확인해야 합니다.
테스트 중에 알게 된 흥미로운 점은 다음과 같습니다. 서버 또는 VPN에서 198.5.6.1과 같은 외부 주소를 ping하려고 시도하면 기본 게이트웨이가 전송하고 icmp 리디렉션을 172.16.65.201으로 전송합니다.
Sending 5, 100-byte ICMP Echos to 198.5.6.1, timeout is 2 seconds: 1w1d: ICMP: redirect rcvd from 172.16.65.193 -- for 198.5.6.1 use gw 172.16.65.201. 1w1d: ICMP: redirect rcvd from 172.16.65.193 -- for 198.5.6.1 use gw 172.16.65.201. 1w1d: ICMP: redirect rcvd from 172.16.65.193 -- for 198.5.6.1 use gw 172.16.65.201. 1w1d: ICMP: redirect rcvd from 172.16.65.193 -- for 198.5.6.1 use gw 172.16.65.201. 1w1d: ICMP: redirect rcvd from 172.16.65.193 -- for 198.5.6.1 use gw 172.16.65.201. Success rate is 0 percent (0/5)
이 시점에서 서버 또는 VPN은 172.16.65.201에 대한 ARP(Address Resolution Protocol) 요청을 전송하며, 다른 보조 VLAN에 있으므로 201에서 응답을 받지 않습니다. 이것이 PVLAN이 제공하는 것입니다. 실제로 이 문제를 해결할 수 있는 쉬운 방법은 트래픽을 MAC 0.193 및 대상 IP 172.16.65.201으로 보내는 것입니다.
라우터 .193은 트래픽을 동일한 인터페이스로 다시 라우팅하지만, 라우터 인터페이스가 프로미스큐어스 포트이므로 트래픽은 차단하고자 했던 .201에 도달할 것입니다. 이 문제는 VACL 및 PVLAN의 알려진 제한 사항 섹션에서 설명합니다.
이 섹션은 서버 팜의 보안을 개선하기 위해 중요합니다. VACL 및 PVLAN의 알려진 제한 사항 섹션에 설명된 대로 서버와 PIX가 서로 다른 두 보조 VLAN에 속하더라도 공격자가 서로 통신하도록 하는 데 사용할 수 있는 방법이 있습니다. PVLAN으로 인해 직접 커뮤니케이션을 시도하면 PVLAN으로 인해 통신이 불가능합니다. 동일한 서브넷에 대한 트래픽이 라우터로 전송되는 방식으로 침입자가 서버를 감염시킨 다음 구성된 경우 이 서버는 트래픽을 동일한 서브넷에 다시 라우팅하여 PVLAN의 목적을 무너뜨립니다.
따라서 기본 VLAN(라우터에서 트래픽을 전달하는 VLAN)에 다음 정책을 사용하여 VACL을 구성해야 합니다.
소스 IP가 라우터의 IP인 트래픽을 허용합니다.
소스 및 대상 IP가 서버 팜의 서브넷이 되는 트래픽을 거부합니다.
나머지 트래픽 모두 허용
ecomm-6500-2 (enable) sh sec acl info protect_pvlan set security acl ip protect_pvlan --------------------------------------------------- 1. permit ip host 172.16.65.193 any 2. deny ip 172.16.65.192 0.0.0.15 172.16.65.192 0.0.0.15 3. permit ip any any ecomm-6500-2 (enable) sh sec acl ACL Type VLANS -------------------------------- ---- ----- protect_pvlan IP 41
이 ACL은 서버나 PIX에 의해 생성된 트래픽에 영향을 주지 않습니다. 이는 라우터가 서버에서 들어오는 트래픽을 동일한 VLAN으로 다시 라우팅하지 못하도록 합니다. 처음 두 명령문은 라우터가 icmp 리디렉션 또는 icmp unreachable 등의 메시지를 서버로 전송할 수 있도록 합니다.
관리자가 VACL을 통해 중지하려는 다른 트래픽 흐름을 식별했으며, 이 흐름은 내부 네트워크에서 VPN 호스트로 이동됩니다. 이를 위해 VACL을 기본 VLAN(41)에 매핑하고 이전 VLAN과 결합할 수 있습니다.
show sec acl info all set security acl ip protect_pvlan 1. deny ip any 10.1.1.0 0.0.0.255 2. permit ip host 172.16.65.193 any 3. deny ip 172.16.65.192 0.0.0.15 172.16.65.192 0.0.0.15 4. permit ip any any
이제 라우터 .193(zundapp)에서 10.1.1.1 호스트를 ping합니다. VACL을 매핑하기 전에 ping이 성공합니다.
Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/4 ms
VLAN 41에서 VACL을 매핑한 후 동일한 ping이 성공하지 못합니다.
Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.1.1.1, timeout is 2 seconds: ..... Success rate is 0 percent (0/5)
그러나 여전히 외부 라우터를 ping할 수 있습니다.
Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 198.5.6.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 100/171/192 ms
개정 | 게시 날짜 | 의견 |
---|---|---|
1.0 |
08-May-2008 |
최초 릴리스 |