Cisco 라우터에서 확장 Access-List 예제
ACL 여정 2/5 — 앞 편(표준)은 출발지 IP만 봤습니다. 현실에선 프로토콜·포트·목적지까지 구분해야 할 때가 많죠. 이번 편이 그 빈틈을 메웁니다.
이전 강의에서 표준 access-list를 다뤘습니다. 이제 확장 access-list를 살펴볼 차례입니다. 다음은 우리가 사용할 토폴로지입니다.
확장 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 loglog 키워드를 붙이면 이 문장에 일치한 패킷이 콘솔(혹은 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 트래픽까지 제어합니다.