[ 네트워크 ] ACL (Access Control List)

2026. 1. 28. 13:00·공부기록/Network

ACL 에 대해서 알아보자

 

 

 

0. ACL이란?

Access Control List 는 네트워크 트래픽을 제어하기 위해 설정하는 규칙 목록이다.

정말 말 그대로 접근을 컨트롤하는 리스트이다.

ACL의 역할은 두 가지 측면으로 나눠서 볼 수 있다.

바로 (1)트래픽을 필터링 하는 보안적인 용도와 (2)트래픽을 분류해서 VPN이나 NAT으로서 이용하는 분류 용도가 있다.

 

1. 보안적인 용도

네트워크 장비 (라우터, 스위치, 방화벽)는 ACL을 이용해서 패킷을 허용하거나 차단한다.

특정 IP나 포트, 프로토콜의 허용과 차단을 설정하여 불필요한 트래픽을 차단하여 내부 네트워크를 보호할 수 있다. 

 

 

2. 분류 작업 용도

QoS, NAT, VPN 기능에서 사용하기 위해서 트래픽을 분류하는 용도로도 사용할 수 있다.


1. ACL의 동작 원리

1. 순차적으로 규칙을 확인하고 처음 일치하는 규칙을 적용한다.

ACL은 제어를 하기 위해 리스트로 써놓은 것이고,

이렇게 작성된 규칙 리스트(목록)은 순차적으로 확인하며, 위에서부터 일치하는 규칙이 적용된다.

 

예를 들어, 위에서부터 1>2>3>4번 규칙이 있다고 했을 떄,

들어온 트래픽이 1번 규칙에 부합하지 않으면 2번 규칙을 확인하고,

2번 규칙에도 부합하지 않으면 3번 규칙을 확인하는 방식으로

규칙에 부합할 때까지 타고 들어간다.

 

만약 아무 규칙이랑도 부합하지 않는다면,

맨 마지막에는 디폴트 규칙이 적용되어 있는데, 

디폴트 규칙은 암묵적인 거부(Implicit Deny)를 수행한다. 

(즉 트래픽을 허용하지 않고 거절하는 것으로 마무리한다고 보면 된다.)

 

2. 어디에 ACL을 설정하느냐에 따라 다르게 동작한다.

인터페이스로 들어올 때(Inboud) 검사할지, 혹은 나갈 때(Outboud) 검사하는지 지정할 수 있다.

그리고 검사 위치에 따라서 다르게 동작한다.

 

3. IP/ICMP/OSPF/TCP/UDP/포트번호 등의 정보를 이용하여 트래픽을 필터링 할 수 있다.

 

전체적인 작동 흐름은 다음과 같다.

패킷이 들어오면 -> ACL을 확인한다 -> 규칙에 일치하면 트래픽을 허용하고, 아니라면 차단한다.
 

-> 만약 어떤 규칙에도 일치하지 않는다면, 암묵적 거부에 따라 차단(거절)한다. 

 


2. ACL의 종류

표준 ACL과 확장 ACL 두 가지 종류가 있다. 

앞서 ACL은 IP/ICMP/OSPF/TCP/UDP/포트번호 등의 정보를 이용하여

트래픽을 필터링 할 수 있다고 했는데 사용하는 정보로 표준 ACL과 확장 ACL을 구분할 수 있다.

 

표준 ACL은 IP 주소만을 가지고 필터링하고, 확장 ACL은 IP 주소 외의 프로토콜과 포트번호를 이용하여 필터링 할 수 있다.

 

1. 표준 ACL (Standard ACL)

출발지 IP 주소만 필터링을 한다.

한 개 요소(출발지 IP 주소)만 가지고 허용과 거부를 정하기 때문에

필터링에는 꽤 적합하지 않다.

위의 상황에서 R1 라우터의 인바운드에 ACL을 적용하고 싶은 상황이다.

그렇기 때문에 초록색 하이라이트 된 인터페이스에 정의한 ACL을 적용해야 하고, 

PC0번 호스트만 접근 가능하게 하고 싶은 상황이다.

그렇다면 아래와 같이 작성할 수 있다.

R1(config)#access-list 10 permit 192.168.1.10 0.0.0.0  #이 ip만 허용한다 -> 그래서 서브넷마스크가 0.0.0.0
R1(config)#access-list 10 deny 0.0.0.0 255.255.255.255 #그 외는 다 차단한다
R1(config)#int g0/0 #인터페이스 접속
R1(config-if)#ip access-group 10 in  #inbound로 설정
 

이 코드를 하나씩 살펴보자.

1. 첫 번째 줄은 access-list 10번을 만들었고, 이는 192.168.1.10 IP 주소만 허용한다는 의미이다.

-> ACL에서는 서브넷 마스크가 아니라 와이들 마스크를 쓴다.

 

* 와일드카드 마스크는 서브넷 마스크를 비트 단위로 반전시킨 값이고,

ACL에서는 이 값을 사용해 같은 IP 범위를 표현한다.

 

2. 두 번째 줄은 access-list 10번은 다른 모든 IP는 모두 거절하겠다고 작성되어 있다.

ACL은 위에서부터 순서대로 적용되기 때문에 192.168.1.10이 들어오면 첫 번째 ACL 리스트에 의해 허용되고,

그 외의 IP 주소는 deny any에 걸려 차단되게 된다.

 

세 번째 줄과 네 번째 줄은 인터페이스에 작성한 ACL을 연결해 주는 작업이다.

3. 세 번째 줄에서 연결할 인터페이스를 선택하고

4. 네 번째 줄에서 inbound 방향으로 위에서 정의한 ACL 10번을 해당 인터페이스에 적용하겠다는 의미가 된다.


2. 확장 ACL (Extended ACL)

실제 트래픽 필터링에는 확장 ACL이 사용되고, 이게 일반적인 ACL을 의미한다고 보면 된다.

확장 ACL의 경우는 출발지와 목적지 IP, 프로토콜, 포트 기반의 필터링이 가능하다.

-> 그렇기 때문에 세밀한 트래픽 제어가 가능하다.

하이라이트는 무시하고 동일한 환경이라고 생각하고 보자!

예제 상황과 함께 살펴보자

 

ex1. 호스트 192.168.1.10은 SVR1에 FTP 접속만 가능. 그 외 트래픽은 모두 차단

ex2. 호스트 192.168.1.20은 SVR2에 웹 접속과 ping만 가능. 그 외 트래픽은 모두 차단

 

위와 같은 상황이 주어졌다. 우선 아까와 다르게 FTP만 접속 가능하다거나, 

웹 접속과 ping만 가능하다는 식으로 출발 IP 주소 외의 정보가 추가적으로 주어졌다.

#문제상황 1번
access-list 100 permit tcp host 192.168.1.10 host 172.16.2.100 eq 21
//access-list 100 permit tcp 192.168.1.10 0.0.0.0 172.16.2.100 0.0.0.0 eq 21
//host 키워드가 와일드 카드(여기서 0.0.0.0) 와 같은 역할한다.
access-list 100 deny ip host 192.168.1.10 host 172.16.2.100 
//동일 ip의 ftp가 아닌 다른 접속은 차단한다.

#문제상황 2번
access-list 100 permit tcp host 192.168.1.20 host 172.16.2.200 eq 80

access-list 100 permit icmp host 192.168.1.20 host 172.16.2.200 echo
//icmp는 방향이 없기 때문에 반대로 172.16.2.200 -> 192.168.1.20  icmp 가는건 가능하다.
//만약 이걸 막고 싶다면, echo를 넣어주면 보내는 ping만 허용한다는 의미가 된다. 
//echo-reply는 차단하겠다는 뜻
access-list 100 deny ip host 192.168.1.20 host 172.16.2.200 

access-list 100 deny ip any any
 

1번 문제 상황에서는 같은 IP라도 포트번호가 21인 FTP는 허용하고

나머지는 접속 방식은 deny하므로 allow하는 것부터 먼저 써주고,

 

2번 문제 상황에서는 웹 접속을 허용하니까 포트번호 80 을 허용해주고,

ping도 허용할거니까 icmp도 허용해준다.

다만 같은 IP여도 그 외의 접속은 차단할 것이므로 

access-list 100 deny ip host 192.168.1.20 host 172.16.2.200 를 해준다.

 

Ping이 성공하려면 요청(Echo)이 가고 응답(Echo-reply)이 돌아와야 한다.

ACL은 Stateless(상태 비보존) 방식이기 때문에,

나가는 인터페이스에 echo를 허용했다면

들어오는 인터페이스에는 반드시 echo-reply를 허용해주는 규칙이 있어야 통신이 완료된다.

 

단순히 echo만 허용한다고 해서 echo-reply가 자동으로 차단되는 것이 아니라

돌아오는 패킷을 허용하는 규칙이 없으면 '암묵적 거부'에 의해 막히는 원리이다.

 

그리고 맨 마지막에는 default로 모든 ip를 거절하는 암묵적 거절을 작성해주면 된다!

 

 

참고로 ACL은 stateless하므로, 들어오는 것에 대한 허용과 거부,

나가는 것에 대한 허용과 거부를 다 따로따로 설정해줘야 한다.

 

 

3. 보안그룹과의 차이점

네트워크 ACL은 서브넷 기준의 방화벽으로 조금 더 넓은 범위이다.

네트워크 ACL 과 보안그룹 비교했을 때, 보안그룹을 더 많이 사용한다고 한다.

보안그룹은 아래 이미지에서 보다시피, ec2 인스턴스에 적용되는 방화벽이다.

security group은 Stateful하다.

따로 설정하지 않아도 들어오는게 되면 나가는건 다 되게 하거나, 

나갈 수 있다면 들어오는 것도 가능하게 하는 것을 의미한다. (이게 안되면 stateless이고, ACL은 stateless하다.)

 

저작자표시 비영리 변경금지 (새창열림)

'공부기록 > Network' 카테고리의 다른 글

[ 네트워크 ] 라우팅 | 정적 라우팅 | 동적 라우팅  (0) 2026.02.09
[ 네트워크 ] NAT (Network Address Translation)  (0) 2026.01.27
[ 네트워크 ] VPN(Virtual Private Network)과 IPsec (Internet Protocol Security)  (0) 2026.01.07
'공부기록/Network' 카테고리의 다른 글
  • [ 네트워크 ] 라우팅 | 정적 라우팅 | 동적 라우팅
  • [ 네트워크 ] NAT (Network Address Translation)
  • [ 네트워크 ] VPN(Virtual Private Network)과 IPsec (Internet Protocol Security)
Lyv
Lyv
  • Lyv
    inimizi
    Lyv
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • 이것저것 도전 (5)
        • 공모전 (0)
        • 우테코 (5)
      • PS (16)
        • 삼성기출 (2)
        • LeetCode & Codility (4)
        • Programmers (6)
        • BaekJoon (4)
      • 공부기록 (33)
        • CS (16)
        • 영어 (1)
        • iOS (1)
        • 프로그래밍 언어 (0)
        • Web (4)
        • Linux (1)
        • Docker (2)
        • Network (4)
        • IaC (3)
      • 프로젝트 경험 (0)
      • DailyLog (4)
      • 취준Log (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    운영체제
    네트워크
    디자인패턴
    ansible
    리눅스
    스케줄링
    대학생
    til
    우테코프리코스
    DP
    PS
    자동화
    코테
    백준
    os
    공부기록
    manifest
    운영체제intro
    c언어
    C++
    IAC
    프리코스회고
    프로그래머스
    정처기
    우테코
    이미지
    컨테이너
    FastAPI
    문제풀이
    정처기실기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Lyv
[ 네트워크 ] ACL (Access Control List)
상단으로

티스토리툴바