본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

ACL(ACcess-List)

by YUNZEE 2025. 2. 9.
728x90

📌 ACL(ACcess-List)란?

ACL(Access Control List, 접근 제어 목록)은 네트워크 보안에서 특정 트래픽을 허용하거나 차단하는 규칙 목록임

즉, 어떤 사용자가(또는 기기/네트워크) 어떤 리소스에 접근할 수 있는지 정의하는 규칙 집합임


1. ACL의 역할

ACL은 네트워크 보안을 강화하고, 트래픽을 제어하는 데 사용됩니다. 주요 역할은 다음과 같습니다.

보안 강화 → 허가되지 않은 접근 차단
트래픽 제어 → 특정 IP, 포트, 프로토콜 기반 필터링
네트워크 성능 향상 → 불필요한 트래픽 차단으로 부하 감소
접근 제어 → 특정 사용자 또는 기기만 허용


2. ACL의 종류

ACL은 두 가지 유형으로 나뉩니다.

① 표준(Standard) ACL/ ACL 번호 대역 <1-99> or <1300-1999>

  • 출발지 IP 주소만 기반으로 트래픽을 허용하거나 차단
  • 포트 번호, 프로토콜 등의 세부 설정이 불가능
  • 주로 라우터의 가까운 쪽(출발지 근처)에서 적용

🔹 예시 (Cisco IOS 명령어)

access-list 10 permit 192.168.1.0 0.0.0.255 # 192.168.1.0 대역은 허용하고
access-list 10 deny any #나머지 대역은 차단함

 

- access-list의 끝에는 항상 deny all이 생략되었음(암묵적 거부)

 

- 같은 정책이라도 포트에서 in 하냐 out 하냐에 따라 전혀 다른 정책이 되기 때문에 잘 적용을 시켜야 하고, 그랬을 때 in or out을 결정하는 주체는 라우터 기준으로 생각하면 됨.

 


② 확장(Extended) ACL/ ACL 번호 대역 <100-199> or <2000-2699>

  • 출발지 및 목적지 IP, 프로토콜(TCP, UDP 등), 포트 번호까지 세부 제어 가능
  • 특정 서비스(예: 웹, FTP, SSH 등)만 허용/차단 가능
  • 주로 목적지 근처에서 적용 (필터링 후 불필요한 트래픽 방지)

🔹 예시 (Cisco IOS 명령어)

 
access-list 101 permit tcp 192.168.1.0 0.0.0.255 any eq 80 
access-list 101 deny ip any any

➡️ 192.168.1.0/24 대역에서 웹(포트 80) 트래픽만 허용, 나머지는 차단


3. ACL 적용 방법

ACL은 네트워크 장비(라우터, 방화벽 등)에서 인터페이스에 적용하여 동작합니다.
✅ inbound (들어오는 트래픽)
✅ outbound (나가는 트래픽)

🔹 적용 예시 (Cisco IOS 명령어)

interface GigabitEthernet0/0 
ip access-group 101 in

➡️ GigabitEthernet0/0 인터페이스에 ACL 101을 들어오는 방향(Inbound) 에 적용

➡️ 같은 정책이라도 포트에서 in을 하냐 out을 하냐에 따라 전혀 다른 정책이 되기 때문에 잘 적용을 시켜야 하고, 그랬을 때 in or out을 결정하는 주체(=라우터)는 그 장비를 기준으로 생각하면 안 됨


4. ACL 사용 예시

사내 네트워크에서 특정 IP만 인터넷 접속 허용
FTP 서버에 대한 특정 IP 대역만 접근 허용
웹 트래픽(HTTP, HTTPS)만 허용하고 나머지 차단
외부에서 내부 네트워크 접근 차단(방화벽 역할)

 

실습
- ACL을 하는 동안 NAT을 하면 안 됨
- mint와 web이 서로 통신되도록 만들어보자-

 

 

- 서로가 핑 가도록 라우터 설정 해주기
 
mint 서버
원래 있던 거 사용하기
- 프록시 해제

- vm 대역도 바꿔주기 vm1로

R2에서 f0/0에서 출발지 주소가 10.10.1.0/24인 접속만 차단하고, 나머지는 다 허용하는 정책을 access-list 1로 만들어서 적용시켜 보자.

 

1. 정책 생성

R2(config)#access-list 1 deny 10.10.1.0 0.0.0.255

R2(config)#access-list 1 permit any

 

2. 정책을 특정 인터페이스에 in 혹은 out에 반영

R2(config)#int f0/0                
R2(config-if)#ip access-group 1 in

R2(config-if)#no ip access-group 1 in

- 정책 삭제 후에 접속을 해보자

 

****왜... f0/0에 10.10.1.0 대역을 막았는데,  왜 10.10.2.0 대역이 못 가는 거지?

10.10.1.0 대역에서 R2로 가는 f0/0 막으면 mint서버에서 web으로 요청 보내는 게 막힘 

그리고 mint서버에서 2.0 대역을 막고 싶은 거면 deny 2.0 대역을 해야 되는 게 아닌가?

라고 생각할 수도 있지만, 그건 반대일 경우에 가능함, web서버에서 mint서버로 요청 보내는 경우일 때 10.10.2.0 대역을 막는 것임

실습 1) 이번에는 access-list 2를 통해 10.10.1.0 /25만 R2의 f0/1에서 막아보세요.

- 접근제어를 다룰 때는 항상 내가 의도한 대로 구성됐는지를 확인하는 게 제일 중요

= A를 안되게 하고 싶다. = 원래 A가 됐었는데, 내가 의도한 대로 구성한 후 안됨 

R2(config)#access-list 2 deny 10.10.1.0 0.0.0.127

R2(config)#access-list 2 permit any

R2(config)#int f0/1

R2(config-if)#ip access-group 2 out

- 안 되는 걸 확인

실습 2) R1에서도 access-list 1을 통해 f0/0에서 출발지가 10.10.1.0 /25인 패킷을 막아보세요

R1(config)#access-list 1 deny 10.10.1.0 0.0.0.127

R1(config)#access-list 1 permit any              

R1(config)#int f0/0

R1(config-if)#ip access-group 1 out

실습 3) vmnet1에 10.10.1.200 /24 인 client서버를 한대 두세요.

R2의 f0/0에 access-list를 통해 10.10.1.0 /25는 허용하여 mint가 웹서버에 접속되는지 확인하고, 10.10.1.128 /25는 거부를 하여 client가 웹 접속이 안되는 것을 확인해 보세요

10.10.1.128 /25는 거부를 하여 client가 웹 접속이 안되는 것을 확인해 보세요

-> 128보다 큰 범위는 접속을 거부하고 128보다 작은 범위는 허용한다.

/25 -> 1000 0000 -> 여기부터 증가하는 모든 수를 허용

즉, mint서버는 허용되지만 client 서버는 거부된다.

- 전에 해준 겹치는 deny영역은 다 지워주기

 

1. 정책생성 

R2(config)#access-list 1 per 10.10.1.0 0.0.0.127  #mint 서버 허용 10.10.1.100인 .128보다 작기 때문에 허용

R2(config)#access-list 1 deny 10.10.1.128 0.0.0.127 #client 서버 거부 10.10.1.200은 .128보다 크기 때문에 막힘

R2(config)#access-list 1 per any

 

2. 정책반영

R2(config-if)#ip access-group 1 in

- client에서는 핑 및 curl이 안되고

- 민트에서는 웹접속이 되는 것을 확인

실습 3-1) 추가적으로 기존의 설정을 삭제하지 말고, R2의 f0/0에서 출발지가 10.10.2.0 /24인 트래픽을 거부시켜 보세요.

f0/0의 out에 access-list 2를 만들어서 10.10.2.0 /24를 거부해 보자

 

int f0/0

R2(config-if)#ip access-group 2 out

R2(config)#access-list 2 deny 10.10.2.0 0.0.0.255

R2(config)#access-list 2 per any

- 웹서버(10.10.2.80)에서 R1으로 핑을 쳐보면 안되는 것을 확인 가능하다.

- 민트로 돌아와서 웹서버에 접속을 해보자. 아까 되는것을 확인했었는데 지금은 안 된다.

 

ACL이 Stateless 한 이유

ACL(Access Control List)은 패킷이 들어오거나 나갈 때 규칙을 적용해서 허용하거나 차단하는 역할을 해. 하지만 패킷의 "이전 상태"를 기억하지 않기 때문에 융통성이 없어.

👉 예제: 웹 접속이 막힌 이유

  1. Mint(10.10.1.100)Web(10.10.2.80)으로 요청 보냄 (출발지: 10.10.1.100, 목적지: 10.10.2.80)
  2. ACL이 10.10.2.0/24 대역의 트래픽이 f0/0 인터페이스에서 나가는 걸 차단함.
  3. Web(10.10.2.80)이 응답을 보내려고 해도, ACL이 나가는 트래픽을 막아서 응답이 돌아오지 못함 → 웹 접속 실패!

👉 즉, ACL은 단순히 "들어오는 것"과 "나가는 것"을 따로 적용하기 때문에 한쪽이 허용되어도 왕복이 안 되면 통신이 안 됨.

확장(Extended ACL)

표준 ACL이 출발지의 IP를 제어했다면 출발지, 목적지 IP뿐 아니라 포트까지 전부 제어할 수 있음.

 

민트에서 웹서버로 웹접속은 허용하고, 다른 모든 트래픽은 차단해 보자.

민트 - 웹서버 관계에서 웹 접속은 되고, ping이나 기타 ftp 같은 다른 프로토콜은 안되어야 함.

 

차단되는 대상이 누구인가?

민트-웹서버의 http를 제외한 다른 모든 출발지, 목적지의 프로토콜들.

 

R2의 f0/0에서 in에 적용할 확장 ACL 정책을 만들어보자.

cisco 실습

access-list 100 permit tcp host 10.10.1.100 host 10.10.2.80 eq 80

- access-list<ACL을 정의하는 데 사용> 100 permit tcp host 10.10.1.100<출발지 ip> host 10.10.2.80<목적지 ip> equal 80<http 포트 번호를 사용한다는 의미임>

- 가는 정책

 

R2(config)# int f0/0

R2(config-if)#ip access-group 100 in

- R2(config-if)#ip access-group 100<정의한 ACL을 실제 인터페이스에 적용하는 데 사용됨> in<들어오는 트래픽>

- 가는 정책 적용.

 

R2(config-if)# exit

 

access-list 110 permit tcp host 10.10.2.80 eq 80 host 10.10.1.100

- 왔다가 돌아가는 정책

 

R2(config)# int f0/0

R2(config)# ip access-group 110 out<나가는 트래픽>

 

- 빨간색 정책 (오른쪽 라우터 R2에서 f0/0에 in)

 출발지에서 어떤 포트로 나가는지는 모르기 때문에 명시하면 안 됨

목적지는 80번 포트임이 분명함

 

access-list 100 permit tcp host 10.10.1.100 host 10.10.2.80 eq 80

 

- 파란색 정책(오른쪽 라우터 R2에서 f0/0에 out)

출발지는 어차피 웹서버의 80번 포트일 것이다. 왜? 들어올 때 목적지가 80번 포트였기 때문.

따라서 출발지에서 포트를 명시하고 반대로, 목적지(mint)로 들어갈 때는 마찬가지로 나온 포트로 들어갈 것이기 때문에 어떤 포트로 나왔는지는 고려 대상도 아니고 알 수도 없다. 따라서 포트를 명시하면 안 됨

 

int f0/0

ip access-group 100 in

ip access-group 110 out

# 반영

728x90