2010년 7월 20일 화요일

IP Access List란 무엇인가?

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

Router(config)# access-list access-list-number remark remark

access list에 설명을 단다. 이 명령은 deny/permit 문 이후에 설정할 수도 있다.

Step 2

Router(config)# access-list access-list-number {deny | permit} source [source-wildcard] [log]

 

Router(config)# access-list access-list-number {deny | permit} any [log]

standard IP access list를 생성한다.

 

 

 

출발지 주소, 0.0.0.0 255.255.255.255 대신 any를 사용하여 access list를 생성한다.

 

(2) Extended Numbered Access List

 

명령

설명

Step 1

Router(config)# access-list access-list-number remark remark

access list에 설명을 단다. 이 명령은 deny/permit 문 이후에 설정할 수도 있다.

 

Step 2

Router(config)# access-list access-list-number {deny | permit} protocol source source-wildcard destination destination-wildcard [precedence precedence] [tos tos] [established] [log | log-input] [time-range time-range-name] [fragments]

 

 

Router(config)# access-list access-list-number {deny | permit} protocol any any [log | log-input] [time-range time-range-name] [fragments]

 

Router(config)# access-list access-list-number {deny | permit} protocol host source host destination [log | log-input] [time-range time-range-name][fragments]

 

extended IP access list를 생성한다. 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를 생성한다.

 

(3) Standard Named Access List

 

명령

설명

Step 1

Router(config)# ip access-list standard name

이름을 부여하여 standard IP access list를 생성하기 위한 설정 모드로 진입한다.

Step 2

Router(config-std-nacl)# remark remark

acess list에 설명을 단다. 이 명령은 deny/permit 문 이후에 설정할 수도 있다.

Step 3

Router(config-std-nacl)# deny {source [source-wildcard] | any}[log]

 

Router(config-std-nacl)# permit {source [source-wildcard] | any}[log]

deny 혹은 permit을 사용하여 패킷 제어 조건을 부여한다.

Step 4

Router(config-std-nacl)# exit

설정 모드에서 빠져나간다.

 

(4) Extended Named Access List

 

명령

설명

Step 1

Router(config)# ip access-list extended name

이름을 부여하여 extended IP access list를 생성하기 위한 설정 모드로 진입한다.

Step 2

Router(config-ext-nacl)# remark remark

acess list에 설명을 단다. 이 명령은 deny/permit 문 이후에 설정할 수도 있다.

Step 3

Router(config-ext-nacl)# deny | permit protocol source source-wildcard destination destination-wildcard [precedence precedence] [tos tos] [established] [log | log-input] [time-range time-range-name] [fragments]

 

Router(config-ext-nacl)# deny | permit protocol any any [log | log-input] [time-range time-range-name] [fragments]

 

Router(config-ext-nacl) deny | permit protocol host
source
host destination [log | log-input]
[time-range time-range-name] [fragments]

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 명령 구문 형식은 아래와 같다.


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

 위 구문에서 periodic은 2개 이상이 올 수 있으나 absolute는 오직 하나만이 허용된다.

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-list

Router#

 

따라서 Numbered ACL을 수정하기 위해서는 메모장과 같은 편집기에 전체 ACL을 복사하여 수정한 후 다시 ACL을 입력하여야 할 것이다.


(2) Sequence number를 이용하여 Numbered Access List 수정하기

ACL을 생성한 후 show access-list 명령을 실행해보면 정의된 리스트가 sequence number와 함께 나타날 것이다.


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

 위 예에서 Extended access list 101에 문장을 하나 추가해보자. 추가 문장을 제일 처음 오게 하기 위해서 10보다 작은 수를 선택하여 추가할 수 있다. 다음과 같다.


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)#^Z

Router#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 (바로가기)

2010년 7월 15일 목요일

애플 리모트 연결 및 적외선 끄고 켜기

컴퓨터를 여러 대 사용하거나 한 방에 적외선 수신기가 장착된 장치가 여러 개인 경우, Apple Remote가 지정된 기기 이외의 Dock, 컴퓨터, 적외선 장치 등으로부터 영향을 받지 않고 특정 Mac에만 사용하도록 지정할 수 있다.

Pairing을 하면 수신 컴퓨터가 단 하나의 Remote에만 반응하도록 설정할 수 있습니다. 자세한 방법은 다음과 같습니다.

Apple Remote와 Mac 맞춰주기 

  1. Mac과 거리를 8~10cm 정도로 둡니다.
  2. Apple Remote를 Mac 전면을 향하게 맞춘다.
  3. Apple Remote의 메뉴 버튼과 다음/빨리감기 버튼을 동시에 누르고 5초 동안 이 상태를 유지한다.

아래와 같이 체인 모양의 아이콘이 묶여서 나타나면 맞추기가 완료된 것이다.


맞추기를 취소하려면 '시스템 환경설정'을 열고 '보안'을 누른 다음 보안 패널에서 연결해제를 클릭한다.(보안 패널의 설정사항을 변경하려면 관리자 암호를 입력해야 할 수도 있다).


적외선 수신부 끄고 켜기

다음과 같이 시스템 환경 설정의 보안 패널에서 Mac의 적외선 수신부를 끄거나 켤 수 있다.

  1. Apple메뉴에서 시스템 환경설정을 선택한다.
  2. 보안을 눌러 보안 패널을 연다.
  3. '리모컨 적외선 수신기 비활성화' 체크박스를 선택한다.

2010년 7월 12일 월요일

Mac OSX 부팅 메시지 보기


Mac OSX이 부팅할 때는 그 특유의 깔끔함 때문인지 아무런 메시지를 사용자에게 보여주지 않는다. 하지만 때때로 자신의 Mac에 이상이 생겨 부팅이 되지 않을 때 부팅할 때 나타나는 메시지가 트러블 슈팅의 힌트를 주기도 한다. 자 그러면 Mac OSX에서 부팅시 메시지를 보기 위한 방법을 무엇일까?

의외로 간단하다. Mac을 전원을 넣은 후 Command+V를 눌러보자. 그러면 검은 화면에 알듯 모를듯한 텍스트들이 스크롤될 것이다.

또한 터미널에서 아래와 같이 실행하면 부팅할 때마다 메시지를 나타낼 것이다.

 sudo nvram boot-args="-v"

 
다시 원위치 시키는 방법은

 sudo nvram boot-args=

 
아래 명령으로 현재 boot-args 변수 값을 볼 수 있다.

$ nvram -p

efi-boot-device <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key>

<string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key>

<string>E1B003E8-43A9-4626-B713-626031946B17</string></dict></dict>

<key>BLLastBSDName</key><string>disk0s2</string></dict></array>%00

prev-lang:kbd ko:0

boot-image %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%02%1f

%03%12%0a%00%02%00%00%00%00%00%04%01*%00%02%00%00%00(@%

06%00%00%00%00%00`%b8F%09%00%00%00%00%e8%03%b0%e1%a9C&F%

b7%13b`1%94k%17%02%02%04%04%18%001%00c%00a%00b%003%00f%000

%000%000%00%00%00%7f%ff%04%00

platform-uuid %00%00%00%00%00%00%10%00%80%00%00%19%e35`_

BootCampHD %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%02%1f%

03%12%0a%00%02%00%00%00%00%00%7f%ff%04%00

efi-apple-payload0 <array ID="0"><dict ID="1"><key>BLLastBSDName</key>

<string ID="2">disk0s1</string><key>IOMatch</key><dict ID="3"><key>IOProviderClass</key><string ID="4">IOMedia</string>

<key>IOPropertyMatch</key><dict ID="5"><key>UUID</key><string ID="6">00002ECD-5ED6-0000-5968-000054160000</string></dict></dict></dict>

<dict ID="7"><key>IOEFIDevicePathType</key><string ID="8">MediaFilePath</string>

<key>Path</key><string ID="9">\EFI\APPLE\FIRMWARE\LOCKED_MB21_00A5_07B.fd

</string></dict></array>%00

SystemAudioVolume %d5

efi-apple-payload0-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%02%1f%

03%12%0a%00%02%00%00%00%00%00%04%01*%00%01%00%00%00(%00%

00%00%00%00%00%00%00@%06%00%00%00%00%00%cd.%00%00%d6^%00%

00Yh%00%00T%16%00%00%02%02%04%04\%00\%00E%00F%00I%00\%00A%

00P%00P%00L%00E%00\%00F%00I%00R%00M%00W%00A%00R%00E%00\%00L

%00O%00C%00K%00E%00D%00_%00M%00B%002%001%00_%000%000%00A%

005%00_%000%007%00B%00.%00f%00d%00%00%00%7f%ff%04%00

efi-boot-device-data %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%02%1f%

03%12%0a%00%02%00%00%00%00%00%04%01*%00%02%00%00%00(@%06%

00%00%00%00%00`%b8F%09%00%00%00%00%e8%03%b0%e1%a9C&F%b7%

13b`1%94k%17%02%02%7f%ff%04%00

boot-args (null)

$