8. Access List Access List 란단어그자체에서의미하듯이라우터를경유하는트래픽에대한제어를할수있는것으로어떤트래픽을어떻게제어할것인지정의한다. 이 Access List 는일반적으로 Interface 에적용되거나 Routing Protocol 에적용되는데이때 Interface 에적용된것을 Access Group 이라고하고, Routing Protocol 에적용된 Access List 를 Distribute List 라고한다. Access Group 를이용해서네트웍에대한보안을어느정도구현할수있고, 또한불 필요한트래픽을차단할수있는장점이있다. 그리고 Distribute List 는라우터간에교 환되는 Routing Information 을제어할수있다. 그런데특히 Access Group 의경우는 Interface 를경유하는모든 Packet 의형태및내 용을점검한후 Packet 을전달하므로라우터의성능이저할될수있다는단점이있으 므로 Access Group 을정의해야한다면되도록많은조건을주지않도록한다. Access List 는기본적으로 Packet 의 IP Address 를확인하여제어를한다. Standard Access List 는 Packet 의 Source Address 만을확인하고, Extended Access List 는 Source Address 및 Destination Address, 그리고 Packet 의형태등을추가적으로확인하여제어한다. 8.1 Stanard Access List 와 Access Group 130.100.0.0 에있는시스템 130.100.0.1 에서 130.120.0.0 에있는시스템 130.120.1.1 로데이타를보낼때전달되는 Packet 에는위와같이 Source Address 와 Destination Address 가명시되어있다. 이때라우터는 Packet 의 Source Address 를확인하여 130.100.0.0 에있는시스템으로부터오는 Packet 을차단하거나허용할수있는데이렇게 Source Address 만을확인하여허용여부를정의하는것을 Standard Access List 라고한다. 그런데 Access List 는어떤 Packet 을허용여부에대한선언일뿐이것이 Interface 나 Routing Protocol 에적용되지않으면아무기능도하지못한다. 위와같은상황에서 Interface Serial 0 에적용되어기능을할수있는데이것을 Access Group 이라고한다. 임의의 Packet 이라우터의 Serial 0 로전달되면일단라우터는 Serial 0 에 Access Group 이적용되었는지를확인한다. Access Group 이적용되어있지않으면 Packet 을 Destination Address 로전달한다. 그러나 Access Group 이정의되어있으면그것에해당
하는 Access List 를확인한다. Access List 에는어떤 Source Address 를가진것을허용할 지차단할지정의되어있는데그에따라해당 Packet 을처리한다. Wildcard Mask Access List 에서 Source Address 를확인할때 Wildcard Mask 라는것이이용되는데우선 Wildcard Mask 에대해서알아보도록하자. 라우터가특정한 Destination Address 를가진 Packet 을목적지까지전달하기위해 Destination Network Address 를알아내는데 Address Mask 를적용하는것을기억할것이 다. Destination Address 130.120.1.1 10000010.01100100.00000001.00000001 Address Mask 255.255.0.0 11111111.11111111.00000000.00000000 Network Address 130.120.0.0 10000010.01100100.00000000.00000000 Network Address 를알아낼때 Destination Address 의 bit 는 Address Mask 의 bit 가 1 인것 은의미가있고 0 인것은무시된다. Wildcard Mask 는 Address Mask 와완전히반대로 Wildcard Mask 의 bit 가 0 인것은의 미가있고 1 인것은무시된다. Address 130.130.1.1 10000010.10000010.00000001.00000001 Wildcad Mask 0.0.255.255 00000000.00000000.11111111.11111111 Address' 130.130.any.any 0000010.10000010.any.any Wildcard Mask 를이용한다음몇가지예를보자. Address Wildcard Mask Address' 130.120.8.1 255.255.255.255 0.0.0.0/0 에속하는모든것 (all) 130.120.8.1 0.255.255.255 130.0.0.0/8 에속하는모든것 130.120.8.1 0.0.7.255 130.120.8.0/21 에속하는모든것 130.120.8.1 0.0.0.255 130.120.8.0/24 에속하는모든것 130.120.8.1 0.0.0.0 130.120.8.1 0.0.0.0/0 은 any 라고도간단히표현하며 130.120.8.1 와같은것은 host 130.120.8.1 라고 표현하기도한다. 이제 Standard Access List 를선언하고이를 Interface 에적용하는 Access Group 을선언 하는것을알아보자. Standard Access List 를선언하는방법은다음과같다. Router (config)# access-list access-list-number {permit deny} source-address [wildcard-mask] Standard Access List 에서 access-list-number 는 1 ~ 99 까지이용한다.
위의그림에서 Network 130.100.0.0/16 에있는시스템으로부터오는 Packet 을라우터가 막고다른곳에서오는 Packet 을허용하려고할경우 Access List 는다음과같이선언 될수있다. config t Router(config)# access-list 1 deny 130.100.0.0 0.0.255.255 Router(config)# exit 선언한 Access List 를확인하려면다음과같이 show ip access-list 라고입력하면된다. sh ip access-list Standard IP access list 1 deny 130.100.0.0, wildcard bits 0.0.255.255 Deny Any 그런데앞에서선언한 Access List 는잘못된것이다. Access List 가선언되면모든사항 이 deny 된다. 앞의 access-list 1 에서 130.100.0.0 을 deny 하였는데 130.100.0.0 을제외 한나머지가모두 deny 되었다. Standard IP access list 1 deny 130.100.0.0, wildcard bits 0.0.255.255 deny any (* 항상이것이선언되어있는것과같음 ) 따라서 access-list 1 이 Interface 에적용되면모든 Packet 이차단되는결과를낳는다. 그러므로 130.100.0.0 을제외한나머지를모두허용해주는것을선언해야한다. config t Router(config)# access-list 1 deny 130.100.0.0 0.0.255.255 Router(config)# access-list 1 permit any Router(config)# exit Access List 의순서 sh ip access-list Standard IP access list 1 deny 130.100.0.0, wildcard bits 0.0.255.255 permit any Access List 의순서는매우중요하다. 라우터는맨위에있는조건을점검하고조건이 맞으면그에맞는행위를취하고 Access List 를빠져나간다. 그리고맞지않으면다 음의조건을점검한다. 만약앞에서선언한 Access List 를다음과같이선언했다면어 떻게될까?
config t Router(config)# access-list 1 permit any Router(config)# access-list 1 deny 130.100.0.0 0.0.255.255 Router(config)# exit 라우터는맨처음 access-list 1 permit any 를점검할것이다. 그리고어떤것이든허용하라고했으므로해당 Packet 을허용하고 Access List 를빠져나간다. 따라서 Network 130.100.0.0 에있는시스템들은모두라우터를지나갈수있다. 이것은원래목적했던것이아니다. 만약 Network 130.100.0.0 에있는시스템으로부터오는 Packet 만이라우터를지나갈수있도록하려면어떻게 Access List 를다음과같이선언할수있다. config t Router(config)# access-list 2 permit 130.100.0.0 0.0.255.255 Router(config)# access-list 2 deny any Router(config)# exit 여기에서 access-list 2 deny any 는불필요한사항으로선언하지않아도된다. Access Group 앞에서선언한 Access List 는선언그자체만으로어떠한기능도하지못한다고말한바있다. 이것을특정 Interface 에적용시켜야실질적으로 Packet 을차단하게되는데이때 access-group 이라는것을적용한다. Router(config-if)# ip access-group access-list-number {in out} access-list-number 는선언된 Access List 의번호이다. 그리고 in 은 Interface 로들어오는 Packet 에대해해당 Access List 를적용하는것을말하고 out 은 Interface 에서나가는 Packet 에대해적용하는것을말한다. 한 Interface 의 in 과 out 에대해 2 개의 accessgroup 은선언될수없다. Access List 를다음과같이선언했다고가정하자. sh ip access-list Standard IP access list 1 deny 130.100.0.0, wildcard bits 0.0.255.255 permit any 이경우 access-list 1 을 s0 에혹은 e0 에적용시킬수있는데 s0 에적용시킬 다음과같다. 경우는
config t Router(config)# int s 0 Router(config-if)# ip access-group 1 in e0 에적용시킬때는다음과같다. config t Router(config)# int e 0 Router(config-if)# ip access-group 1 out 어떤방법이좋은가는상황에따라서다르다. 다음의상황을생각해보자. e1 130.140.0.0 만약라우터가 130.120.0.0/16, 130.130.0.0/16, 130.140.0.0/16 을 130.100.0.0/16 으로부터 모두차단하려면 s0 에 access-group 을적용하는것이바람직하다. s0 에적용하지않는 다면 e0 와 e1 에동일한 access-group 을각각선언해야하기때문이다. 다음에대해서도생각해보자. s1 s2 Interface s0, s1, s2 중어느곳으로도 Source Address 130.100.0.0/16 을가진 Packet 이들어올수있다고가정할경우 access-group 을 s0, s1, s2 에각각적용하는것은바람직하지않다. e0 에적용하는것이바람직하다. 이것은단편적인상황이며, 어떤 Interface 에적용시킬것인지는여러가지상황을따져보아야한다.
다음의실례를하나해보자. 라우터에서 130.120.0.0 에대한접근을제어하려고한다고하자. 130.100.0.0/16 으로부터의접근허용, 130.130.0.0/16 으로부터의접근은허용하되 130.130.1.2 로부터의접근은차단그리고다른네트웍으로부터의접근은차단하려고한다고하자. 130.100.0.0 e0 130.120.0.0 130.130.0.0 s1 s2 other network Access List 선언및 Access Group 적용은다음과같을것이다. sh ip access-list Standard IP access list 1 permit 130.100.0.0, wildcard bits 0.0.255.255 deny 130.130.1.2, wildcard bits 0.0.0.0 permit 130.130.0.0, wildcard bits 0.0.255.255 sh run...! interfac ethernet 0 ip address 130.120.1.1 255.255.255.0 ip access-group 1 out 8.2 Extenced Access List Extended Access List 는 Protocol 형태, Source Address, Destination Address 및추가적인정 보를가지고 Packet 을제어할수있는장점이있다. Extended Access List 를선언하는일반적은방법은다음과같다. Router(config)# access-list access-list-number {permit deny} {protocol} {source-address wildcard-mask} {destination-address wildcard-mask} {options} access-list-number 는 Standard Access List 에서와달리 100 ~ 199 를이용한다. protocol 은 ip, tcp, udp, icmp, igrp, ospf, eigrp 와같은것으로정수값으로표현할수도있지만 keyword 로도표현가능하다. options 은 protocol 에따라다르다. 이곳에서한가지지적하고싶은사항은 protocol 의형태즉 ip, tcp, udp, icmp 간에포 함관계이다. tcp, udp, icmp 이들모두는 ip 의서비스를받아동작을한다. 따라서 ip 에
대해 deny 를적용하면 tcp, udp, icmp 등모두 deny 된것과동일하다. 또한 ip 에대해 permit 을적용하면 tcp, udp, icmp 등모두 permit 된것과동일하다. 이러한관계는 Extended Access List 를선언에서적용된다. 그리고일단 Extended Access List 를선언하면모든 Access List 에는다음과같이추가 적으로선언한결과를낳는다. 즉나머지는모두 deny 된것이다. Router(config)# access-list access-list-number deny ip any any 이책에서는 ip, tcp, udp 를이용하는 Extended Access List 를중심으로알아보겠다. 8.2.1 IP 에대한 Access List protocol 이 ip 인경우는 Source Address 와 Destination Address 만을확인하여접근을제 어한다. Access List 를선언하는형태는다음과같다. Router(config)# access-list access-list-number {permit deny} ip {source-address wildcard-mask} {destination-address wildcard-mask} 만약다음그림에서라우터가 130.100.0.0 으로부터 130.120.0.0 에대한접근만차단하려고할경우 Access List 선언및 Access Group 선언은다음과같이할수있을것이다. Router(config)# access-list 100 deny ip 130.100.0.0 0.0.255.255 130.120.0.0 0.0.255.255 Router(config)# access-list 100 permit ip any any Router(config)# int e 0 Router(config-if)# ip access-group 100 out 만약 130.120.0.0 이라우터를지나외부로나가는것을추가적으로차단하려고한다면다음과 같이 Access List 와 Access Group 을선언할수있다. Router(config)# access-list 100 deny ip 130.100.0.0 0.0.255.255 130.120.0.0 0.0.255.255 Router(config)# access-list 100 permit ip any any Router(config)# access-list 101 deny ip 130.120.0.0 0.0.255.255 any Router(config)# access-list 101 permit ip any any Router(config)# int e 0 Router(config-if)# ip access-group 100 out
Router(config-if)# ip access-group 101 in 100 s0 라우터 101 8.2.2 TCP 에대한 Access List protocol 이 tcp 인경우는 Source Address 와 Destination Address 를확인할뿐만아니라 tcp port 까지확인하여접근을제어한다. Access List 를선언하는형태는다음과같다. Router(config)# access-list access-list-number {permit deny} tcp {source-address wildcard-mask} [operator source-port] {destination-address wildcard-mask} [operator destination-port] [established] operator 는 lt, gt, eq, neq 이며각각은작은, 큰, 같은, 같지않다는것을의미한다. port 는다음의 Table 과같다. 정수로쓰일수도있으며 keyword 로쓰일수도있다. TCP Port 이름및 Port 번호 bgp 179 ftp 21 pop3 110 chargen 19 ftp-data 20 sunrpc 111 daytime 13 gopher 70 telnet 23 discard 9 hostname 101 time 37 domain 53 klogin 543 uucp 540 echo 7 kshell 544 whois 43 finger 79 nntp 119 www 80 ftp 21 pop2 109 established 가의미하는바는 TCP Segment 의 ACK 혹은 RST bit 이 setting 된것을의 미하는데 ACK 혹은 RST bit 은다음과같은경우 setting 된다. A 가 B와데이타를주고받기위해 TCP connection 을맺기위해 SYNC signal 을보낸다. A sync B (1) B 는 A로부터 SYNC signal 을받고, A 와연결을맺기위해 SYNC signal 과함께 ACK signal 을함께보낸다. A sync, ack B (2) A 는 B에게 SYNC signal 및 ACK signal 을받고다시 ACK signal 을 B에게전달하며이에따라 A와 B간에 TCP connection 이맺어진다. A ack B (3)
그다음부터데이타를송수신하게된다. ack A B (4) sync, ack 그리고 A가 TCP Connection 을끊고자할때다음과같이 FIN signal 과 ACK signal 을보내고 B는마지막으로 ACK signal 을보내게된다. fin, ack A B (5) ack 만약 A 가 TCP Connection 을정상적으로종료하지않고끊었을경우 (5) 에서 B 는 ACK signal 대신 RST signal 을보내준다. (2) ~ (5) 까지를살펴보면 A 가먼저 TCP connection 을맺은경우그사이에오가는모든 TCP Segment 의 ACK 은 setting 이되어있다. 그리고비정상종료의경우 RST 가 setting 되어있다. 이러한특징을이용하여 established 는내부에서외부로연결요청을한경우그에대한응답을모두허용할때주로이용한다. 다음의경우를살표보자. 130.100.0.0 e0 s0 라우터 인터넷 내부네트웍 130.100.0.0 은인터넷으로접근하지만내부네트웍을인터넷으로부터접 근하는것은차단하려고할경우다음과같이설정할수있다. Router(config)# access-list 100 permit tcp any 130.100.0.0 0.0.255.255 established Router(config)# int s 0 Router(config-if)# ip access-group 100 in 이렇게하면내부네트웍 130.100.0.0 에서외부로가는트래픽은 access-list 의적용을받지않기때문에모두지나갈수있다. 그리고외부에서내부로들어오는트래픽은 access-list 100 의적용을받는데내부의요청을받아전달되는트래릭은 established 에의하여모두라우터를지나갈수있다. 그외에외부에서내부로접근하는것은모두차단된다. 다음의예를해보도록하자. 130.100.0.0 은인터넷의어디로든접속할수있고, 인터넷 에있는 130.120.0.0 은 130.100.0.0 과파일송수신을할수있도록하고, 130.140.1.2 는 130.100.0.0 으로 telnet 을허용한다고하자.
130.100.0.0 e0 s0 130.120.0.0 라우터인터넷 130.140.1.2 Router(config)# access-list 100 permit tcp 130.120.0.0 0.0.255.255 any eq ftp Router(config)# access-list 100 permit tcp 130.120.0.0 0.0.255.255 any eq ftp-data Router(config)# access-list 100 permit tcp host 130.140.1.2 any eq telnet Router(config)# access-list 100 permit tcp any 130.100.0.0 0.0.255.255 established Router(config)# int s 0 Router(config-if)# ip access-group 100 in ftp 는파일송수신을하기위해 FTP Server 에 FTP connection 을맺을때이용되는 port 이고, ftp-data 는 FTP Connection 이후데이타를요청할때이용되는 Port 이기때문에파 일송수신을허용하려면 ftp 와 ftp-data 를모두 permit 해주어야한다. 다음과같이상황에서외부에서 telnet 만을막고자한다면어떻게할까? 130.100.0.0 e0 s0 라우터 인터넷 선언방법은다음과같다. Router(config)# access-list 100 deny tcp any 130.100.0.0 0.0.255.255 eq telnet Router(config)# access-list 100 permit tcp any 130.100.0.0 0.0.255.255 Router(config)# int s 0 Router(config-if)# ip access-group 100 in 8.2.3 UDP 에대한 Access List protocol 이 udp 인경우도 tcp 인경우와마찬가지로 Source Address 와 Destination Address 및 udp port 까지확인하여접근을제어한다. Access List 를선언하는형태는 다음과같다. Router(config)# access-list access-list-number {permit deny} udp {source-address wildcard-mask} [operator source-port] {destination-address wildcard-mask} [operator destination-port] port 는다음의 Table 과같다. UDP Port 이름및 Port 번호 biff 512 nameserver 42 sunrpc 111 bootpc 68 netbios-dgm 138 syslog 514 bootps 67 netbios-ns 137 tacasds-ds 49 discard 9 ntp 123 talk 517 dns 53 rip 520 tftp 69
echo 7 snmp 161 time 37 chargen 19 snmptrap 162 udp 에대한 Access List 에는 established 가없다. upd 는 ACK 이없이일방적으로 Segment 를전달하기때문이다. 다음과같은상황에서 130.100.0.0 은외부로자유롭게접근하고, 인터넷에서는 130.100.0.0 으로인터넷메일, DNS, 웹서버접속만허용하게하려고한다고하자. 130.100.0.0 e0 s0 라우터 인터넷 설정방법은다음과같다. sh run...! interface serial 0 ip access-group 100 in! access-list 100 permit tcp any 130.100.0.0 0.0.255.255 established access-list 100 permit tcp any 130.100.0.0 0.0.255.255 eq smtp access-list 100 permit tcp any 130.100.0.0 0.0.255.255 eq www access-list 100 permit tcp any 130.100.0.0 0.0.255.255 eq domain access-list 100 permit udp any 130.100.0.0 0.0.255.255 eq domain DNS 는 tcp 와 udp 를모두이용하기때문에 tcp 및 udp 각각 permit 을선언해주었다. 바로위에서외부에서내부의시스템에 ping 을하면 ping 이되지않는다. 이유는기 본적으로다른모든 protocol 에대해 deny 가되어있기때문이다. ping 은 icmp 를이 용하고그때이용되는 icmp message 는 echo 와 echo-reply 이다. 따라서다음과같이추 가하면된다. sh run...! interface serial 0 ip access-group 100 in! access-list 100 permit tcp any 130.100.0.0 0.0.255.255 established access-list 100 permit tcp any 130.100.0.0 0.0.255.255 eq smtp access-list 100 permit tcp any 130.100.0.0 0.0.255.255 eq www access-list 100 permit tcp any 130.100.0.0 0.0.255.255 eq domain access-list 100 permit udp any 130.100.0.0 0.0.255.255 eq domain access-list 100 permit icmp any 130.100.0.0 0.0.255.255 echo access-list 100 permit icmp any 130.100.0.0 0.0.255.255 echo-reply