Skip to Content
05. Security12. Extended Access-List example on Cisco Router

Cisco 라우터에서 확장 Access-List 예제

ACL 여정 2/5 — 앞 편(표준)은 출발지 IP만 봤습니다. 현실에선 프로토콜·포트·목적지까지 구분해야 할 때가 많죠. 이번 편이 그 빈틈을 메웁니다.

이전 강의에서 표준 access-list를 다뤘습니다. 이제 확장 access-list를 살펴볼 차례입니다. 다음은 우리가 사용할 토폴로지입니다.

08_Extended Access-List example on Cisco Router_img_p01_01

확장 access-list를 사용하면 훨씬 더 복잡한 문장을 만들 수 있습니다. 다음과 같은 요구사항이 있다고 가정해 봅시다.

  • 1.1.1.0/24 네트워크의 트래픽이 R2의 HTTP 서버에 연결할 수 있지만, IP 주소 2.2.2.2에만 연결할 수 있습니다.
  • 다른 모든 트래픽은 거부되어야 합니다.

이를 확장 access-list 문장으로 변환해야 합니다. 기본적으로 다음과 같이 보입니다.

[source] + [source port] to [destination] + [destination port]

구성 단계별 설명

함께 구성을 살펴봅시다.

R2(config)# access-list 100 ? deny Specify packets to reject dynamic Specify a DYNAMIC list of PERMITs or DENYs permit Specify packets to forward remark Access list entry comment

먼저 permit 또는 deny를 선택해야 합니다. 또한 remark를 사용할 수도 있습니다. 이를 사용해 access-list 문장에 주석을 추가할 수 있습니다. permit을 선택하겠습니다.

R2(config)# access-list 100 permit ? <0-255> An IP protocol number ahp Authentication Header Protocol eigrp Cisco's EIGRP routing protocol esp Encapsulation Security Payload gre Cisco's GRE tunneling icmp Internet Control Message Protocol igmp Internet Gateway Message Protocol ip Any Internet Protocol ipinip IP in IP tunneling nos KA9Q NOS compatible IP over IP tunneling ospf OSPF routing protocol pcp Payload Compression Protocol pim Protocol Independent Multicast tcp Transmission Control Protocol udp User Datagram Protocol

이제 훨씬 더 많은 옵션이 있습니다. HTTP 트래픽을 허용하는 것을 원하므로 TCP를 선택해야 합니다. 계속해 봅시다.

R2(config)# access-list 100 permit tcp ? A.B.C.D Source address any Any source host host A single source host

이제 소스(source) 를 선택해야 합니다. 와일드카드와 함께 네트워크 주소를 입력하거나 any 또는 host 키워드를 사용할 수 있습니다. 이 두 키워드는 “단축어”입니다. 설명하자면:

  • “0.0.0.0 255.255.255.255”를 입력하면 모든 네트워크입니다. 이를 입력하는 대신 any 키워드를 사용할 수 있습니다.
  • “2.2.2.2 0.0.0.0”과 같이 입력하면 단일 IP 주소를 일치시킵니다. “0.0.0.0” 와일드카드를 입력하는 대신 host 키워드를 사용할 수 있습니다.

소스로 1.1.1.0/24 네트워크를 선택하고 싶으니 다음과 같이 합니다.

R2(config)# access-list 100 permit tcp 1.1.1.0 0.0.0.255 ? A.B.C.D Destination address any Any destination host eq Match only packets on a given port number gt Match only packets with a greater port number host A single destination host lt Match only packets with a lower port number neq Match only packets not on a given port number range Match only packets in the range of port numbers

소스 외에도 소스 포트 번호도 선택할 수 있습니다. R1에서 R2의 HTTP 서버로 연결할 때 제 소스 포트 번호는 무작위가 될 것이므로 여기서는 소스 포트 번호를 지정하지 않겠습니다.

R2(config)# access-list 100 permit tcp 1.1.1.0 0.0.0.255 host 2.2.2.2 ? ack Match on the ACK bit dscp Match packets with given dscp value eq Match only packets on a given port number established Match established connections fin Match on the FIN bit fragments Check non-initial fragments gt Match only packets with a greater port number log Log matches against this entry log-input Log matches against this entry, including input interface lt Match only packets with a lower port number neq Match only packets not on a given port number precedence Match packets with given precedence value psh Match on the PSH bit range Match only packets in the range of port numbers rst Match on the RST bit syn Match on the SYN bit time-range Specify a time-range tos Match packets with given TOS value urg Match on the URG bit <cr>

목적지인 IP 주소 2.2.2.2를 선택합니다. “2.2.2.2 0.0.0.0”으로 입력할 수도 있지만, host 키워드를 사용하는 것이 더 쉽습니다. 목적지 IP 주소 외에도 eq 키워드로 목적지 포트 번호를 선택할 수 있습니다.

R2(config)# access-list 100 permit tcp 1.1.1.0 0.0.0.255 host 2.2.2.2 eq 80

이것이 첫 번째 문장입니다. 이 access-list는 모든 확장 access-list와 마찬가지로 맨 끝에 숨은 deny any any를 가지고 있습니다. 어떤 트래픽이 실제로 드롭되고 있는지 보고 싶다면, 마지막에 log 키워드를 붙인 명시적인 deny 항목을 추가해 두는 것이 편리합니다.

R2(config)# access-list 100 deny ip any any log

log 키워드를 붙이면 이 문장에 일치한 패킷이 콘솔(혹은 syslog)에 출력됩니다. 보이지 않는 기본 deny any와 동작은 같지만, 어떤 트래픽이 실제로 차단되고 있는지 확인할 수 있어 트러블슈팅이나 실습에 유용합니다.


인터페이스에 적용

이제 R2의 FastEthernet 0/0 인터페이스에 access-list를 적용합시다.

R2(config)# interface fastEthernet 0/0 R2(config-if)# ip access-group 100 in

표준 access-list와 동일하게 ip access-group 명령과 in 키워드로 인바운드에 적용합니다. 확장 access-list는 소스와 목적지를 모두 검사할 수 있으므로, 표준 access-list와 달리 소스 가까운 쪽에 배치해 불필요한 트래픽이 네트워크를 가로지르지 않도록 하는 것이 일반적인 모범 사례입니다.


검증

1.1.1.0/24에서 2.2.2.2의 HTTP(TCP 80) 트래픽만 허용되는지 확인해 봅시다.

R2# show access-lists Extended IP access list 100 10 permit tcp 1.1.1.0 0.0.0.255 host 2.2.2.2 eq www 20 deny ip any any log

트래픽을 발생시키면 매칭 카운터가 올라가는 것을 볼 수 있고, 거부된 패킷은 log 키워드 덕분에 콘솔로 즉시 확인됩니다.

R2# %SEC-6-IPACCESSLOGP: list 100 denied tcp 1.1.1.1(12345) -> 2.2.2.2(23), 1 packet

위 예시는 1.1.1.1에서 2.2.2.2로 TCP 23(telnet)을 시도했다가 거부된 경우입니다. HTTP(80)가 아닌 다른 포트이기 때문에 두 번째 deny ip any any log 문장에 일치해 드롭되었습니다.


결론

  • 확장 access-list는 소스 + 소스 포트 + 목적지 + 목적지 포트 + 프로토콜까지 조합해 트래픽을 정교하게 구분할 수 있습니다.
  • any, host 같은 단축어를 사용하면 “0.0.0.0 255.255.255.255”나 “0.0.0.0” 와일드카드를 쓰지 않고 더 읽기 쉬운 문장을 만들 수 있습니다.
  • 실제 운영에서는 표준 access-list와 달리 소스에 가까운 인터페이스에 배치해 쓸모없는 트래픽이 네트워크를 통과하지 않게 합니다.
  • 기본 deny any에 의존하지 말고, 마지막에 deny ip any any log를 명시해 두면 어떤 트래픽이 차단되고 있는지 실시간으로 확인할 수 있어 트러블슈팅에 큰 도움이 됩니다.

출처: networklessons.com - Extended Access-List example on Cisco Router

태그: ACL, Security


→ 다음 편: 11_VACL — 라우터 경계를 넘어 같은 VLAN 안 호스트끼리의 L2 트래픽까지 제어합니다.