[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이 생략
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 방향에 정책을 적용시키면 될 것
표준 ACL이 출발지의 IP를 제어했다면 출발지/목적지 IP뿐만 아니라 포트까지 전부 제어할 수 있음
실습
실습 기본 토폴로지
💡확장 ACL 설정 시, 고려사항
R2의 f0/0에서 확장 ACL을 생성할 때, 고려해야 하는 것은? ➡️ mint와 web의 http 통신만 허용/거부할 것인지, mint-web의 다른 프로토콜의 통신을 허용/거부할 것인지, 그 외 서비스(다른 클라이언트와 web의 통신)를 허용/거부할 것인지 고려해야 함
실습 1
민트에서 웹서버로 웹 접속 허용하고, 다른 모든 트래픽은 차단해 보자. ➡️ Mint → web 접속 Ok, ping이나 기타 ftp 같은 다른 프로토콜은 안되어야 함
차단되는 대상 : Mint-웹서버의 http를 제외한 다른 모든 출발지/목적지의 프로토콜들
# 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이 필터링된다는 결과가 출력됨