## **개요**
### **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
---