나의 공부기록

[VMware] 14. ACL(Access Control List) - Standard & Extended 본문

CS/Linux

[VMware] 14. ACL(Access Control List) - Standard & Extended

나의 개발자 2025. 2. 6. 05:44

ACL(Access Control List)

  • 표준과 확장이 존재
    • 표준(Standard) : 출발지 주소를 제어 - PAT
      • ACL 번호 대역 : <1~99> 또는 <1300~1999>
      • ACL을 번호 말고, <단어>로 정할 수도 있음
    • 확장(Extended) : 출발지/목적지 주소 및 포트까지 제어
      • ACL 번호 대역 : <100~199> 또는 <2000~2699>
      • ACL을 번호 말고, <단어>로 정할 수도 있
Router(config)#ip access-list extended ?
  <100-199>  Extended IP access-list number
  WORD        name
  • ACL은 Packet을 막는 것으로 ping(ICMP 패킷)도 안됨

라우터 포트의 IN/OUT 개념

  • 포트의 IN/OUT
    • 라우터의 포트를 기준으로, Packet이 들어가면 IN, Packet이 나가면 OUT
    • 🌟포트를 기준으로 주체 = 라우터라고 생각하면 됨
    • 🌟네트워크의 내/외부와는 다름
  • 접근 제어를 다룰 때는 항상 내가 의도한 대로 구성됐는지를 확인하는 것이 제일 중요
    = A를 안되게 하고 싶다 = '원래 A가 됐었는데' 내가 의도한 대로 구성을 한 '후에 안됨'

❗ACL 특징

1. 허용(permit) / 거부(deny)

  • access-list를 permit ➡️deny를 하면 위에 있는 것이 우선으로 적용됨
access-list 1 permit 10.10.1.0 0.0.0.255
access-list 1 deny 10.10.1.0 0.0.0.127
# 남은 모든 대역 허용
access-list 1 permit any

# 최종적으로 deny 대역과 permit 대역이 겹치므로, 먼저 작성한 정책을 적용하고 밑의 정책은 무시

 

2. 융통성 X = Stateless

  • Packet(패킷)이 나가는 것을 허용했지만, Packet(패킷)이 들어오는 것은 허용하지 않았음
    ➡️ Packet이 들어오는 것도 허용해 줘야 들어올 수 있음

↔ 융통성 O (= Stateful) : Packet이 나가는 것을 허용했으므로, 들어오는 것도 허용됨

 

💡Stateless VS Stateful

- 어떤 접근 제어가 Stateful 하다면, 융통성이 있어서 누군가 들어오는 게 허용된다면, 특별한 정책 없어도 적어도 들어온 트래픽은 밖으로 나갈 수 있음
- 어떤 접근 제어가 Stateless 하다면, 융통성이 없어서 누군가 들어오는 게 허용된다면, 나가는 것도 정책을 정해줘야 트래픽이 밖으로 나갈 수 있음

 

3. 정책을 위에서 아래로 순차적으로 적용 ➡️ 중복 대역 발생 ➡️ 폐기

  • 중간에 정책을 삽입하는 것이 불가능❌
    ➡️ 처음부터 설정을 잘해야 함
  • 좁은 범위 설정 ➡️ 넓은 범위 설정

4. 암묵적 deny

  • 따로 access-list를 설정해주지 않으면, 암묵적으로 deny로 설정됨
    ➡️ access-list의 끝에는 항상 deny all이 생략
  • 따로 정책을 만들어주지 않으면 항상 거부(deny)

5. access-list는 라우터 포트의 in/out 마다 한 개씩만 적용 가능

  • access-list에는 여러 개의 정책을 설정할 수 있음

표준 ACL

실습 기본 토폴로지

표준 ACL 과정

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

1. 정책 만들기

R2(config-if)#ac
R2(config-if)#access-list 1 deny 10.10.1.0 0.0.0.255
R2(config)#access-list 1 permit any

2. 정책 반영

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

 3. 접속 불가 확인

4. 정책 삭제

# 정책 반영 삭제
R2(config-if)#no ip access-group 1 in

# 정책 자체 삭제
R2(config-if)#no access-list 1

5. 접속 가능 확인 

 

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

더보기

1. 정책 생성

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

2. 정책 허용

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인 패킷을 막아보세요.

더보기

1. 정책 생성

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

2. 정책 허용

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/24는 허용하여 mint과 웹 서버에 접속되는지 확인하고, 10.10.1.128/25는 거부하여 client가 웹 접속이 안 되는 것을 확인해 보세요.

➡️ f0/0이므로 패킷의 흐름을 생각했을 때, ‘라우터’로 들어오기 때문에 in 방향에 정책을 적용시키면 될 것
더보기

1. 접속 확인

2. 정책 생성

R2(config)#access-list 1 deny 10.10.1.128 0.0.0.127
R2(config)#access-list 1 permit 10.10.1.0 0.0.0.255
R2(config)#access-list 1 permit any

3. 정책 반영

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

4. 접속 확인

 

실습 4

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

1. 정책 생성

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

2. 정책 적용

R2(config)#int f0/0
R2(config-if)#ip access-group 2 out

3. mint ➡️ web ping 확인

  • mint에서 web으로 요청이 전송은 됐지만, web에서 mint로 응답할 때, R2의 f0/0에서 Packet이 막힘

확장 ACL 

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

실습

실습 기본 토폴로지

💡확장 ACL 설정 시, 고려사항

  • R2의 f0/0에서 확장 ACL을 생성할 때, 고려해야 하는 것은?
    ➡️ mint와 web의 http 통신만 허용/거부할 것인지, mint-web의 다른 프로토콜의 통신을 허용/거부할 것인지, 그 외 서비스(다른 클라이언트와 web의 통신)를 허용/거부할 것인지 고려해야 함

실습 1

민트에서 웹서버로 웹 접속 허용하고, 다른 모든 트래픽은 차단해 보자.
➡️ Mint → web 접속 Ok, ping이나 기타 ftp 같은 다른 프로토콜은 안되어야 함

차단되는 대상 : Mint-웹서버의 http를 제외한 다른 모든 출발지/목적지의 프로토콜들

 

💡 확장 ACL 정책 생성 시, 주의사항

  • 서비스 제공하면 포트 지정

 

더보기

1. R2의 f0/0에서 in 적용할 확장 ACL 정책 생성

# mint -> web 가는 정책
R2(config)#access-list 100 permit tcp 10.10.1.100 0.0.0.0 10.10.2.80 0.0.0.0 eq 80

# web -> mint 가는 정책(되돌아가는 정책)
R2(config)#access-list 110 per tcp host 10.10.2.80 eq 80 host 10.10.1.100

2. 정책 반영

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

➕ ACL 정책을 적용했을 때, ping 전송 - mint-web ping 결과와 web-mint ping 결과가 다른 이유

  • mint-web ping은 R2의 f0/0에서 Packet이 막혀서 되돌아가게 되어 10.10.0.23에서 Packet이 필터링된다는 결과가 출력됨
  • 하지만, web-mint ping은 web(7 계층)에서 라우터(3 계층)를 지나서 f0/0에서 Packet이 나가는 것이 막혀서 돌아가게 되면, 다시 라우터(3 계층)에서 Packet을 보내게➡️ 이때, R2의 입장에서 f0/0은 막혀있기 때문에, R2는 f0/1을 통해 Packet을 전송 
    👉 그래서 10.10.2.59에서 Packet이 필터링된다는 결과가 출력됨

  • 계층 간 데이터 이동이 포인트✨