## **개요** ### **ACL** 네트워크 트래픽을 [[Traffic Filtering]] 하기 위한 **규칙의 목록**. 허가되지 않은 사용자가 라우터 혹은 네트워크에 접근하는 것을 차단하거나 나가는 트래픽을 차단한다. 라우터나 스위치가 어떤 트래픽을 허용하고 차단할지 정의해준다. 가장 기본적인 보안 장치 중 하나다 ### **ACL 목적** * **트래픽 허용/차단** * IP, 포트, 프로토콜 기반의 트래픽 허용과 차단 수행 * **DoS 공격 차단** * 단순한 Flood 공격 방지 * **원하지 않는 트래픽의 접근을 제어** * 특정 IP의 접근을 막을 수 있다 * **네트워크 부하 방지** * 내부 네트워크로 들어오는 트래픽이 많아져서 네트워크에 부하가 발생하는 것을 미리 차단하여 네트워크의 부하를 막을 수 있다 ### **ACL 특징** #### **0. 기본 특징** * **순차적 매칭** * ACL 규칙의 중요도는 위에서 아래로 감소한다 * 트래픽 필터링 시 규칙을 위에서 아래로 확인하면서, 처음 매칭 된 규칙을 적용 후 종료한다 * **deny all** * ACL은 기본적으로 **deny all** 이다 * [[보안 설계 원칙]] 중 **Fail-Safe Defaults** 의 대표적인 예로 ACL을 들 수 있다 * 순차적으로 매칭을 검토하다가 매칭되는 규칙이 없으면 **암묵적으로 deny 된다** #### **1. ACL은 개별 패킷을 대상으로 한다** ==**ACL은 트래픽 세션 상태를 기억하지 못한다**==. 특정한 출발점에서 도착한 트래픽이 ACL을 통과했다 하더라도, 그 출발점에서 온 다른 트래픽을 하나하나 검사한다. 그래서 특별한 방법이 아니고서는 **동적으로 트래픽을 제어할 수 없다.** > [!note] 동적 제어 > 트래픽 제어 시 어떤 연결이 허용된 TCP 세션인지 판단하고, 응답 방향에 맞게 트래픽을 자동 허용 혹은 차단하는 것 #### **2. ACL 적용 위치** ACL은 들어오거나 나가는 모든 패킷을 검사하기 때문에 라우터/L3 스위치의 리소스를 많이 사용한다. 그러므로 효율적일 수 있는 위치에 ACL을 적용시키는 것은 중요하다 * ACL은 라우터 또는 L3 스위치의 인터페이스에서 적용되며 트래픽의 **방향**에 따라 동작한다 * 트래픽이 **장비 안에 들어오기 전** 혹은 **나가기 직전**에 필터링 수행함 * 포트에 정책 적용 시 Inbound와 Outbound의 방향은 라우터의 관점을 따름 * [[Ingress & Egress, Inbound & Outbound]] >[!summary] **ACL 적용 위치** >* `Client -> ACL in -> Router 처리 -> ACL out -> Server` #### **3. 세밀한 규칙 구성이 어렵다** IP, Port, Protocol을 기반으로 트래픽을 제어하기 때문에 사용자, 세션, 시간을 기반으로 하는 제어는 어렵다. 이러한 특징으로 **==L7에서 가능한 URL 필터링, 콘텐츠 분석 등은 불가==** 하다 #### **4. ACL과 라우팅 프로토콜** * ACL 설정은 인터페이스 단에서 실행되는 [[라우팅 프로토콜]]과 깊게 연관되므로 라우팅에 직접적인 영향을 줄 수 있다 * 반대로, 관리자가 원하는 대로 경로 조정이 쉽지 않은 경우 ACL을 활용해서 조정이 가능하다 ### **ACL의 종류** > [!info] **이 글에서는...** > Standard ACL과 Extended ACL에 대해서 집중적으로 다룹니다. 나머지 ACL은 해당 문서를 참고해주세요! > #### **Standard ACL** - L3 헤더의 Source Address를 기준으로 패킷을 분류하고 규칙을 적용한다. - Source IP Address만 제어할 수 있다. #### **Extended ACL** - L3 헤더의 Source Address, Destination Address, Protocol, TTL 등의 정보와 L4 헤더의 Source Port, Destination Port, TCP Flag 등의 정보를 기준으로 패킷을 분류하고 규칙을 적용한다 #### **[[Dynamic ACL]]** **사용자 인증 후 임시적**으로 트래픽 허용한다 예시, Telnet + AAA와 연동 필요 #### **[[Reflexive ACL]]** ACL은 대표적인 Stateless 기반으로 세션을 저장하지 못한다. 이러한 부분을 Reflexive ACL을 통해 부분적으로 보완할 수 있다 #### **[[Time-Based ACL]]** `time-range` 객체 사용 --- ## **ACL 작성** > [!attention] **ACL 작성 시 주의 사항** > 1. 기본 거부 원칙 > 2. ACL 순서 > 3. 테스트 및 검증 > 4. 문서화 ### **와일드카드 마스크** [[Wildcard-mask]] ### **작성 기반 종류** #### 1. Numberic 기반 * 숫자를 사용하여 ACL 목록 혹은 규칙 생성 * `ip access-list 10 permit host 10.10.10.10` * statdard 경우, 1~99 * extended 경우 100~199 #### 2. Named 기반 * 문자를 사용하여 ACL 목록 혹은 규칙 생성 * 각 Access List에 고유한 이름을 지정한다 * `ip access-list statdard <acl name>` * standard 경우, 100–199 * extended 경우, 2000–2699 ### **작성 예시** **표준(Standard) ACL** ``` access-list 10 permit 192.168.1.0 0.0.0.255 interface Gig0/0 ip access-group 10 in ``` **확장(Extended) ACL** ``` ip access-list extended <ACL_NAME> permit|deny <protocol> <source> <wildcard> <destination> <wildcard> [port] ``` --- ## **ACL 실습** ### **Standard ACL** >[!info] 조건 >HQ 네트워크 관리자가 ~~ >[!hint] 토폴로지 > 사용할 토폴로지 ### **Extended ACL** >[!info] 조건 >Branch 네트워크 관리자가 ~~ >[!hint] 토폴로지 > 사용할 토폴로지 --- ## **확장** CoPP, CPPr Reflexive Dynamic Time-range ---