1. 표준 ACL 이론 학습
ACL이란 무엇인가?
라우터는 패킷 헤더의 정보를 바탕으로 라우팅 테이블에서 최적 경로를 찾아 포워딩한다. 이와 같은 비교·판단 과정을 필터링에 응용한 것이 ACL이다. ACL은 패킷 헤더의 정보에 근거해 허용 또는 거부 규칙(ACE, Access Control Entry)을 순서대로 적용해 트래픽을 통과시키거나 버린다. 기본 상태의 라우터에는 ACL이 없지만, 인터페이스에 ACL을 적용하면 해당 인터페이스를 통과하는 모든 패킷이 규칙에 따른다.
핵심 개념 요약
- ACL은 순차적인 허용/거부 규칙 집합이다(각 규칙을 ACE라고 부른다).
- 패킷은 위에서 아래로 규칙을 차례로 비교한다. 처음 일치한 규칙의 동작을 즉시 적용하고, 나머지 규칙은 더 이상 검사하지 않는다.
- 어떤 규칙과도 일치하지 않으면 암묵적 거부(implicit deny)에 의해 드롭된다. 따라서 최소 하나 이상의 permit 규칙이 반드시 필요하다.
- 라우터 자신이 원천(출발지)인 패킷에는 인터페이스에 적용된 ACL이 동작하지 않는다.
패킷 필터링과 동작 계층
- 패킷 필터링은 OSI 3계층(네트워크)과 4계층(전송)에서 수행될 수 있다.
ACL의 적용 방향과 동작
- 인바운드 ACL: 패킷이 라우팅 처리되기 전에 필터링한다. 불필요한 라우팅 검사를 줄일 수 있어 효율적이며, 해당 인바운드 인터페이스에 연결된 네트워크만 검사 대상일 때 유용하다.
- 아웃바운드 ACL: 라우팅 후, 특정 아웃바운드 인터페이스를 나가기 직전에 필터링한다. 여러 인바운드 인터페이스에서 들어온 트래픽에 동일한 필터를 적용할 때 유리하다.
인바운드 표준 ACL의 처리 절차
- 라우터가 패킷 헤더에서 출발지 IPv4 주소를 추출한다.
- ACL의 첫 번째 ACE부터 순서대로 비교한다.
- 어느 ACE와 일치하면 그 ACE의 동작(permit/deny)을 적용하고 비교를 종료한다.
- 어떤 ACE와도 일치하지 않으면 암묵적 deny에 의해 패킷을 폐기한다.
실무 팁
- 표준 ACL은 가능한 목적지 가까이에 배치해, 불필요한 트래픽 차단으로 의도치 않은 영향 범위를 줄인다.
- 확장 ACL은 가능한 소스 가까이에 배치해, 원점에서부터 불필요한 트래픽을 차단한다.
- ACL 작성 시 마지막에 암묵적 deny가 있다는 점을 항상 염두에 두고, 필요한 최소 허용 규칙을 먼저 정의한다.
- ACL은 라우팅을 대체하지 않는다. 라우팅 경로와 ACL 정책을 함께 고려해 설계해야 한다.
용어 정리
- ACL(Access Control List): 허용/거부 규칙의 목록
- ACE(Access Control Entry): ACL을 구성하는 개별 규칙
- 표준 ACL: 출발지 IPv4 주소 기반 필터링
- 확장 ACL: 출발지/목적지 IPv4, TCP/UDP 포트, 프로토콜 타입 기반 필터링
- 암묵적 거부: ACL 끝에 자동으로 존재하는 모든 트래픽 차단 규칙
인터페이스당 ACL 수 제한
듀얼 스택(IPv4/IPv6) 라우터의 각 인터페이스에는 최대 네 개의 ACL을 적용할 수 있다.
- IPv4 인바운드 1개
- IPv4 아웃바운드 1개
- IPv6 인바운드 1개
- IPv6 아웃바운드 1개
예를 들어 R1에 듀얼 스택 인터페이스가 두 개 있고, 각 인터페이스에 인바운드/아웃바운드의 IPv4·IPv6 ACL이 모두 필요하다면, 인터페이스당 4개 × 2개 인터페이스 = 최대 8개의 ACL이 적용될 수 있다. 참고: 모든 방향에 ACL을 꼭 넣어야 하는 것은 아니다. 실제 적용 개수와 방향은 조직의 보안 정책에 따른다.
표준 ACL과 확장 ACL
- 표준 ACL: 출발지 IPv4 주소만 기준으로 허용/차단.
R1(config)# access-list 10 permit 192.168.10.0 0.0.0.255
설명: 소스 192.168.10.0/24만 허용. ACL 끝의 암묵적 deny any로 나머지는 차단.
- 확장 ACL: 출발지·목적지 IPv4 주소, 프로토콜(TCP/UDP/ICMP 등), 출발지·목적지 포트까지 기준으로 세밀 제어.
R1(config)# access-list 100 permit tcp 192.168.10.0 0.0.0.255 any eq www
설명: 소스 192.168.10.0/24가 목적지 임의의 호스트의 TCP 80(HTTP)로 가는 것만 허용.
번호 기반 ACL과 이름 기반 ACL
번호 기반
- 표준 ACL 번호 범위: 1–99, 1300–1999
- 확장 ACL 번호 범위: 100–199, 2000–2699
이름 기반(권장)
- 목적이 드러나도록 이름을 부여해 관리성 향상.
- 이름은 영숫자 사용, 공백과 구두점은 불가, 대문자 권장.
- 항목(ACE)을 중간 삽입/삭제 가능.
R1(config)# ip access-list extended FTP-FILTER
R1(config-ext-nacl)# permit tcp 192.168.10.0 0.0.0.255 any eq ftp
R1(config-ext-nacl)# permit tcp 192.168.10.0 0.0.0.255 any eq ftp-data
ACL 배치 원칙
효율을 최대화하는 위치에 배치한다.
- 확장 ACL: 가능하면 트래픽 소스에 가깝게 배치. 불필요한 트래픽이 코어를 통과하기 전에 차단.
- 표준 ACL: 가능하면 목적지에 가깝게 배치. 소스만으로 판단하므로 과차단을 피하기 위해 목적지 인근 배치가 안전.
표준 ACL 구문 요소 설명 표
Parameter | Description |
access-list-number | ACL의 10진수 번호. 표준 ACL 번호 범위는 1–99, 1300–1999. |
deny | 조건에 일치하면 트래픽을 차단. |
permit | 조건에 일치하면 트래픽을 허용. |
remark text | 선택 사항. 문서화를 위한 텍스트 주석 추가. 한 줄 최대 100자 권장. |
source | 필터링할 출발지 네트워크/호스트 지정. any 키워드는 모든 네트워크, host ip-address 또는 단순 ip-address로 단일 호스트 지정. |
source-wildcard | 선택 사항. 32비트 와일드카드 마스크. 생략 시 0.0.0.0으로 간주. |
log | 선택 사항. ACE가 매칭될 때마다 정보성 로그 생성. ACL 번호, 매칭 동작(permit/deny), 소스 주소, 패킷 수 등을 포함. 첫 매칭 패킷에 대해 로그 생성. 트러블슈팅이나 보안 감사 목적에 한해 사용 권장. |
이름 기반 표준 IPv4 ACL 구문
장점
- 이름을 통해 ACL의 용도를 명확히 드러내 관리성을 높인다.
- 이름은 영숫자, 대소문자 구분, 고유해야 하며 공백/구두점은 불가. 대문자 사용을 권장.
생성 명령
Router(config)# ip access-list standard ACL-NAME
하위 모드에서 ACE를 추가한다.
번호 기반 방식과 달리 매 ACE마다 ip access-list를 반복할 필요가 없다.
삭제 명령
Router(config)# no ip access-list standard ACL-NAME
예시
R1(config)# ip access-list standard ACCESS
R1(config-std-nacl)# deny 192.10.10.0 0.0.0.255
R1(config-std-nacl)# permit any
표준 IPv4 ACL 적용
인터페이스에 바인딩
Router(config-if)# ip access-group {access-list-number | access-list-name} {in | out}
인터페이스에서 제거
Router(config-if)# no ip access-group {access-list-number | access-list-name} {in | out}
참고: 위 명령은 인터페이스 바인딩만 해제한다.
ACL 자체를 삭제하려면 no access-list 또는 no ip access-list로 별도 제거가 필요하다.
2. 표준 ACL 이론 실습
번호 기반 표준 IPv4 ACL 구성
요구사항: 인터넷으로 나갈 수 있는 호스트는 PC1(192.168.10.2)와 192.168.20.0/24만 허용.
적용 위치는 g0/2 아웃바운드.
구성
R1(config)# access-list 10 permit host 192.168.10.2
R1(config)# access-list 10 permit 192.168.20.0 0.0.0.255
R1(config)# access-list 10 deny any log
R1(config)# interface g0/2
R1(config-if)# ip access-group 10 out
R1(config)# logging buffered informational
검증
R1# show access-lists
R1# show run | section access-list
R1# show ip int g0/2 | include access list
R1# show logging
이름 기반 표준 IPv4 ACL 구성 예시
동일 요구사항을 이름 기반으로 구현. 기존 ACL 10 제거 후 이름 기반 ACL 생성, g0/2 아웃바운드에 적용.
구성
R1(config)# no access-list 10
R1(config-if)# no ip access-group 10 out
R1(config)# ip access-list standard ACCESS-1
R1(config-std-nacl)# permit host 192.168.10.10
R1(config-std-nacl)# permit 192.168.20.0 0.0.0.255
R1(config)# interface g0/2
R1(config-if)# ip access-group ACCESS-1 out
검증
R1# show access-lists
R1# show run | section ip access-list
R1# show ip int g0/2 | include access list
ACL 수정 방법
시퀀스 번호 방식
ACE에는 자동으로 시퀀스 번호가 붙는다. show access-lists에 표시되며, running-config에는 보이지 않는다.
특정 ACE만 지우거나 중간에 삽입할 때 유용하다.
- show access-lists로 시퀀스 번호를 확인한다.
- ip access-list standard 또는 extended 모드로 들어간다.
- no 로 기존 ACE를 지운 뒤, 동일 시퀀스 번호로 올바른 ACE를 넣는다.
이름 기반 ACL 수정 예시
이름 기반 ACL도 시퀀스 번호로 ACE를 삽입/삭제할 수 있다.
ACL 통계
show access-lists에는 각 ACE가 매칭된 횟수가 표시된다.
- 암묵적 deny any는 통계가 표시되지 않는다. 이 카운트를 보고 싶다면 명시적으로 deny any를 추가해야 한다.
- 통계를 초기화하려면 clear access-list counters [ACL번호 또는 이름]을 사용한다.
R1# show access-lists
R1# clear access-list counters ACCESS-1
R1# show access-lists ← 카운터가 0으로 초기화됨
access-class 명령
- 보통 ACL은 인터페이스를 통과하는 트래픽(in/out)을 필터링하지만, vty 라인(원격 관리 접속)에도 적용해 관리자 접속을 제한할 수 있다.
1. 원격 접속을 허용할 관리자 호스트를 식별하는 ACL을 만든다.
2. vty 라인의 입력(in) 방향에 ACL을 적용한다.
구문 : R1(config-line)# access-class {ACL번호 | ACL이름} {in | out} 설명
- in이 일반적이며, vty로 들어오는 관리 접속을 제한한다. out은 vty에서 나가는 세션을 제한하며 드물게 사용한다.
- 번호 기반과 이름 기반 ACL 모두 적용 가능하다.
- 사용자가 vty 0~4 등 어떤 라인으로 접속할지 모르므로 동일 제한을 모든 vty 라인 범위에 일관되게 적용하는 것이 좋다.
vty 보안 구성
목표: PC9만 R1으로 SSH접속 가능하게 제한
#실습상 PC9,10은 라우터로 구성
기본 인증 설정
R1(config)# username CISCO secret CISCO
R1(config)# ip access-list standard CISCO
R1(config-std-nacl)# permit 192.168.10.9
R1(config-std-nacl)# deny any
R1(config)# line vty 0 4
R1(config-line)# login local
R1(config-line)# transport input ssh
R1(config-line)# access-class CISCO in
vty 보안 검증
- PC9에서 R1로 SSH 시도: 사용자명/비밀번호 프롬프트가 나오고 접속 성공해야 한다.
- PC10에서 R1로 SSH 시도: 연결이 거부되어야 한다.
3. 확장 ACL 이론 학습
확장 ACL 개요
표준 ACL은 출발지 IP만으로 필터링한다. 더 정밀한 제어가 필요하면 확장 IPv4 ACL을 사용한다. 확장 ACL은 출발지/목적지 주소, 프로토콜(IP, TCP, UDP, ICMP 등), 포트 번호까지 조건으로 삼아 세밀하게 허용/차단할 수 있어 실무에서 더 자주 쓰인다. 예를 들어 하나의 확장 ACL로 특정 출발지 네트워크에서 특정 목적지로 가는 이메일만 허용하고, FTP와 웹은 차단하는 식의 정책을 구현할 수 있다.
번호 기반 확장 IPv4 ACL 구문
- 절차는 표준 ACL과 동일하다. ACL을 만들고, 인터페이스에 적용한다.
- 표준 ACL에 적용되던 내부 정렬(호스트 우선 해시)은 확장 ACL에는 적용되지 않는다. 입력한 순서대로 표시·처리된다.
프로토콜/포트 지정 예시
HTTP를 허용하는 두 가지 동등한 표현
R1(config)# access-list 100 permit tcp any any eq www
R1(config)# access-list 100 permit tcp any any eq 80
포트 이름이 없는 경우 포트 번호를 직접 지정
R1(config)# access-list 100 permit tcp any any eq 22
R1(config)# access-list 100 permit tcp any any eq 443
번호 기반 확장 ACL 적용 예시
요구사항: 192.168.10.0/24에서 발생한 HTTP/HTTPS만 임의의 목적지로 허용.
소스 인접 배치 원칙에 따라 R1 G0/0 인바운드에 적용.
R1(config)# access-list 100 permit tcp 192.168.10.0 0.0.0.255 any eq www
R1(config)# access-list 100 permit tcp 192.168.10.0 0.0.0.255 any eq 443
R1(config)# interface g0/0
R1(config-if)# ip access-group 100 in
TCP established 키워드
established는 기본적인 상태 추적 효과를 제공한다.
내부에서 시작된 TCP 세션에 대한 응답(ACK 또는 RST 비트 세트)만 내부로 돌아오게 허용하고,
외부가 선시작하는 TCP는 차단한다.
예를 들어 ACL 100으로 내부 → 외부의 웹 요청을 허용하고, ACL 110으로 외부 → 내부는 내부의 웹 응답만 허용하도록 구성할 수 있다.
R1(config)# access-list 110 permit tcp any 192.168.10.0 0.0.0.255 established
R1(config)# interface g0/0
R1(config-if)# ip access-group 120 out
이름 기반 확장 ACL 구문
Router(config)# ip access-list extended ACL-NAME 이름은 영숫자, 대소문자 구분, 고유해야 한다.
이름 기반 확장 ACL
R1(config)# ip access-list extended IN-1
R1(config-ext-nacl)# permit tcp 192.168.10.0 0.0.0.255 any eq 80
R1(config-ext-nacl)# permit tcp 192.168.10.0 0.0.0.255 any eq 443
R1(config)# ip access-list extended OUT-1
R1(config-ext-nacl)# permit tcp any 192.168.10.0 0.0.0.255 established
R1(config)# interface g0/0
R1(config-if)# ip access-group IN-1 in
R1(config-if)# ip access-group OUT-1 out
확장 ACL 수정
많은 변경은 에디터 방식으로, 소수 변경은 시퀀스 번호로 수정한다.
R1(config)# ip access-list extended IN-1
R1(config-ext-nacl)# no 10
R1(config-ext-nacl)# 10 permit tcp 192.168.10.0 0.0.0.255 any eq www
'네트워크 > 기초 학습' 카테고리의 다른 글
DHCPv4 실습 (4) | 2025.08.12 |
---|---|
NAT 실습 (0) | 2025.08.10 |
Cisco 장비 SSH 원격 접속 실습 (2) | 2025.08.10 |
Day 10: 네트워크 장비들 (4) | 2025.08.10 |
Day 9: 네트워크 프로토콜들 (3) | 2025.08.08 |