1. Access List (ACL)란 무엇인가?
Access List란 네트워크 패킷 필터링을 이용하여 특정 사용자 혹은 장비의 네트워크 트래픽이나 사용을 제한하기 위한 기법이다. Access List를 다음과 같은 목적으로 사용될 수 있다.
- 네트워크 인터페이스의 패킷 전송 제어
- vty 접근 제어
- 라우팅 업데이트 제어
ACL을 사용하기 위해 우선 짚고 넘어가야하는 것들이 있다.
(1) Mask
흔히 wildcard mask 혹은 inverse mask라고 불리며 서브넷 마스크의 inverse된 형태를 가진다. IP ACL을 생성할 때 같이 사용된다. 예를 들어 IP 주소, 209.165.202.129,를 설정할 경우 서브넷 마스크는 255.255.255.0의 형태를 갖는다. 하지만 IP ACL을 설정할 때 와일드카드 마스크는 inverse된 형태, 즉 0.0.0.255가 된다. 변환하는 방법은 간단히 서브넷 마스크를 2진수 형태로 풀어쓴 다음 모든 비트수를 반전, 즉 0은 1로 1은 0으로 변환하는 것이다. 아래 표를 참고한다.
10진수 |
2진수 | |
서브넷 마스크 |
255.255.255.224 |
11111111.11111111.11111111.11100000 |
와일드카드 마스크 |
0.0.0.31 |
00000000.00000000.00000000.00011111 |
와일드카드 마스크에서 0 비트는 반드시 일치해야하고 1 비트는 'don't care', 즉 어떠한 값이 와도 상관없다. 따라서,
- 0.0.0.0/255.255.255.255는 "any"이며,
- 10.1.1.2/0.0.0.0은 "호스트 10.1.1.2"이다.
(2) ACL Summarization
OSPF나 EIGRP에서와 마찬가지로 ACL에서도 Summarization이 가능하다. 따라서 연속된 네트워크를 단일 네트워크로 Summarize할 수 있다. 아래 리스트를 살펴보면
- 192.168.32.0/24
- 192.168.33.0/24
- 192.168.34.0/24
- 192.168.35.0/24
- 192.168.36.0/24
- 192.168.37.0/24
- 192.168.38.0/24
- 192.168.39.0/24
처음 두 옥텟(192.168.) 부분이 모두 동일하다. 그리고 세번째 옥텟을 2진수로 풀어쓰면 아래표와 같다.
| 10진수 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| 32 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 33 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
| 34 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 35 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
| 36 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 37 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
| 38 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
| 39 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
처음 다섯 째 비트까지 모두 동일한 것을 알 수 있다. 따라서 위 8개의 네트워크는 단일 네트워크(192.168.32.0/21 또는 192.168.32.0 255.255.248.0)으로 Summarize될 수 있다. 그리고 위 네트워크에 대한 ACL은 단일 문장으로 해결될 수 있다. 위에서 알 수 있듯이 와일드카드 마스크는 0.0.7.255가 되며 ACL을 작성해 보면,
- access-list acl_permit permit ip 192.168.32.0 0.0.7.255
가 된다.
2. Access List 종류
초기 Access List가 개발될 때 IP 패킷의 출발지 주소(source address)만 비교하여 패킷 전달 여부를 결정하였다. 이를 Standard ACL이라고 한다. 이 ACL의 명령어 구문 형식은 아래와 같다.
access-list access-list-number {permit|deny} {host|source source-wildcard|any}
access-list-number에 올 수 있는 수는 1에서 99까지이며 12.0.1 이후 버전에서는 1300에서 1999까지도 올 수 있다. 또한 11.2 이후 버전에서는 이 access-list-number에 숫자 대신 이름으로 사용할 수 있게 되었다.
또한 0.0.0.0/255.255.255.255는 'any'로 대체되어 사용할 수 있으며 와일드카드 마스크가 모두 0일 경우 생략할 수 있다. 즉 10.1.1.2 0.0.0.0은 10.1.1.2로 간단히 사용될 수 있다.
그 후 8.3 버전 이후에는 IP 패킷의 출발지 주소(source address)와 목적지 주소(destination address)를 비교하여 패킷 전달 여부를 결정한다. 이를 Extended ACL이라고 부른다. 이 ACL의 명령어 구문 형식은 아래와 같다.
IP
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny|permit} protocol source source-wildcard
destination destination-wildcard [precedence precedence]
[tos tos] [log|log-input] [time-range time-range-name]
ICMP
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny|permit} icmp source source-wildcard
destination destination-wildcard [icmp-type [icmp-code] |icmp-message]
[precedence precedence] [tos tos] [log|log-input] [time-range time-range-name]
TCP
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny|permit} tcp source source-wildcard [operator [port]] [established]
destination destination-wildcard [operator [port]] [precedence precedence]
[tos tos] [log|log-input] [time-range time-range-name]
UDP
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny|permit} udp source source-wildcard [operator [port]]
destination destination-wildcard [operator [port]] [precedence precedence]
[tos tos] [log|log-input] [time-range time-range-name]
Extended access list의 access-list-number에 올 수 있는 값은 101에서 199까지이며 12.0.1 이후 버전에서는 2000에서 2699까지도 올 수 있다.
3. Access List 생성하기
(1) Standard Numbered Access List
|
|
명령 |
설명 |
|
Step 1 |
||
|
Step 2 |
(2) Extended Numbered Access List
|
|
명령 |
설명 |
|
Step 1 |
||
|
Step 2 |
(3) Standard Named Access List
|
|
명령 |
설명 |
|
Step 1 |
||
|
Step 2 |
||
|
Step 3 |
||
|
Step 4 |
(4) Extended Named Access List
|
|
명령 |
설명 |
|
Step 1 |
||
|
Step 2 |
||
|
Step 3 |
deny 혹은 permit을 사용하여 패킷 제어 조건을 부여한다. log 키워드를 사용하면 access list 로그 메시지를 생성할 것이다. log-input 키워드를 사용하면 입력 인터페이스, 출발지 MAC address, VC 등을 같이 정보를 같이 생성한다. 주소, 0.0.0.0 255.255.255.255 대신 any 키워드를 사용하여 extended IP access list를 생성한다. 와일드카드 마스크, 0.0.0.0 대신 host 키워드를 사용하여 extended IP access list를 생성한다. |
(5) Dynamic ACL
dynamic ACL은 버전 11.1에 처음 소개되었으며 Lock and key라고도 한다. Dynamic ACL은 텔넷, 인증, extended ACL과 함께 사용될 수 있다. 간단히 설명하자면 extended ACL에 의해 접근이 거부된 사용자가 텔넷으로 접속하여 인증을 완료하면 텔넷 연결이 끊어지고 dynamic ACL이 기존 extended ACL에 추가되어 접근이 가능해진다.
Dynamic ACL의 명령 구문 형식은 아래와 같다.
access-list access-list-number dynamic name {permit|deny}
[protocol] {source source-wildcard|any} {destination destination-wildcard|any}
[precedence recedence] [tos tos] [established] [log|log-input]
[operator destination-port|destination port]
line vty line_range
login local
Dynamic ACL은 텔넷 인증을 위한 방법이 제공되어야 한다. 그것이 local이든 remote이든 상관없다. 위 예는 local을 예로 한 것이다.
(6) 시간 범위를 사용한 ACL
시간을 지정한 ACL는 버전 12.0.1.T에 처음 소개되었다. 이 기능은 접근 제어를 시간을 기준으로 적용한다. 아직까지는 IP extended access list와 IPX(Internetwork Packet Exchange) extended access list에 이 time range를 사용할 수 있다. time-based ACL 명령 구문 형식은 아래와 같다.
위 구문에서 periodic은 2개 이상이 올 수 있으나 absolute는 오직 하나만이 허용된다.time-range time-range-name // 시간 범위의 이름을 설정한다.
periodic days-of-the-week hh:mm to [days-of-the-week] hh:mm // 적용할 시간 범위를 주기적 시간 형태로 설정한다.
absolute [start time date] [end time date] // 적용할 시간 범위를 일회성 시간으로 설정한다.
ip access-list name|number <extended_definition> time-range name_of_time-rage
4. Access List 적용하기
access list를 생성한 후에는 생성한 access list를 적용하여야 한다. access list가 적용 가능한 장치는 line(혹은 vty)나 인터페이스이다. 이 둘에 적용하는 방법이 서로 다르니 참고하기 바란다. 그리고 모든 access list의 마지막에는 deny ip any any 명령이 추가된다. 이 명령문은 명시적으로 access list에 나타나지 않지만 access list가 하나라도 추가될 경우에 그 효과가 발생한다. 그렇기 때문에 DHCP request가 접근 허용되지 않을 경우 이 request는 거부될 것이다. 이는 DHCP request의 출발지 IP address는 s=0.0.0.0, d=255.255.255.255이기 때문이다.
(1) line(혹은 vty)에 적용하기
터미널 라인에는 오직 numbered access list만 적용 가능하다.
Router(config-line)# access-class access-list-number {in | out}
(2) 인터페이스에 적용하기
인터페이스에는 named/numbered access list 모두 적용 가능하다.
Router(config-if)# ip access-group {access-list-number | access-list-name} {in | out}
5. Access List 수정하기
(1) 텍스트 편집기를 이용하여 Numbered ACL 수정하기
numbered ACL의 일부를 삭제 혹은 수정하기 위해서는 전체 numbered ACL을 삭제한 후 다시 입력해야 한다. 아래 예를 보자.
Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#access-list 101 deny icmp any any
Router(config)#access-list 101 permit ip any any
Router(config)#^Z
Router#sho access-list
Extended IP access list 101
10 deny icmp any any
20 permit ip any any
Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.Router(config)#no access-list 101 deny icmp any any
Router(config)#^Z
Router#show access-listRouter#
따라서 Numbered ACL을 수정하기 위해서는 메모장과 같은 편집기에 전체 ACL을 복사하여 수정한 후 다시 ACL을 입력하여야 할 것이다.
(2) Sequence number를 이용하여 Numbered Access List 수정하기
ACL을 생성한 후 show access-list 명령을 실행해보면 정의된 리스트가 sequence number와 함께 나타날 것이다.
위 예에서 Extended access list 101에 문장을 하나 추가해보자. 추가 문장을 제일 처음 오게 하기 위해서 10보다 작은 수를 선택하여 추가할 수 있다. 다음과 같다.Router#sho access-list
Standard IP access list 10
10 permit 10.10.10.0, wildcard bits 0.0.0.255 (7017 matches)
Extended IP access list 101
10 permit tcp any any
20 permit udp any any
30 permit icmp any any
Router#no access-list 101 deny icmp any any
Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#ip access-list extended 101
Router(config-ext-nacl)#5 deny tcp any any eq telnet
Router(config-ext-nacl)#^Z
Router#show access-list
Standard IP access list 10
10 permit 10.10.10.0, wildcard bits 0.0.0.255 (7028 matches)
Extended IP access list 101
5 deny tcp any any eq telnet
10 permit tcp any any
20 permit udp any any
30 permit icmp any any
Router#
(3) Named Access List 수정하기
Named ACL에 sequence number를 사용하지 않고 새로운 항목을 추가할 경우에는 마지막에 추가된다. 또한 Numbered ACL과 달리 중간의 항목을 삭제할 수 있다. Sequence number를 사용하면 중간에 항목 추가도 가능하다. 아래 예를 참고하자.
Router#show access-list
Extended IP access list test
10 permit ip host 2.2.2.2 host 3.3.3.3
20 permit tcp host 1.1.1.1 host 5.5.5.5 eq www
30 permit icmp any any
40 permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain
Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#ip access-list extended test
Router(config-ext-nacl)#no permit icmp any any
Router(config-ext-nacl)#permit gre host 4.4.4.4 host 8.8.8.8
Router(config-ext-nacl)#35 permit udp host 5.5.5.5 10.10.10.0 0.0.0.255 eq dom$
Router(config-ext-nacl)#^ZRouter#show access-list
Standard IP access list 10
Extended IP access list test
10 permit ip host 2.2.2.2 host 3.3.3.3
20 permit tcp host 1.1.1.1 host 5.5.5.5 eq www
35 permit udp host 5.5.5.5 10.10.10.0 0.0.0.255 eq domain
40 permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain
50 permit gre host 4.4.4.4 host 8.8.8.8
Router#
참고 자료
1. Configuring IP Services (바로가기)
2. Basic System Management Commands (바로가기)
3. Cisco IOS Configuration Fundamentals Configuration Guide (바로가기)
댓글 없음:
댓글 쓰기