본문으로 바로가기

1. ACL(Access Control List) 목적

 - 패킷 필터링: 패킷 전달 여부 통제및 특정 프로토콜 제어

 - 라우터 보안 및 네트워크 트래픽 제어

  예를 들어서 내부 네트워크 사용자들의 ftp로부터 많은 파일을 다운로드 받는다던지 비디오 스트리밍이 많다면 외부 네트워크에서 내부로 제한할 수 있다.

 - 네트워크 트래픽은 나가는 트래픽과 들어오는 트래픽 2가지가 있다.

 - 표준 ACL : 1 ~99 (출발지 ip 주소만을 판단하여 패킷 필터링을 실시)

 - 확장 ACL : 100 ~199(출발지,목적지 주소, tcp, udp, 포트번호를 참조)

 - named ACL: 빈칸x, 반드시 영문자로 사용

 - 트래픽 필터링
 - 방화벽 구성
 -

 

라우터들이 한 회사에서 동작한다면, 차단해야 할 트래픽이 생성되는 라우터 인터페이스에 설정하고, 만약 각각 다른 회사에 소속이 있어 통신을 위해 연결된 것이라면  목적지와 가까운 라우터 인터페이스에 ACL을 설정해야한다.

 

 


2. ACL 설정시 파악할 요소

 

 - 출발지 / 목적지
 - 허용 / 차단
 - in / out

 

 

 

 

3. ACL 처리 과정 및 주의 사항

 

 1) 서브넷 범위가 작은 항목부터 설정해야 한다.

 

 - ACL를 설정하면 설정된 순서대로 순서 번호를 할당 받는다.
 - 순서 번호대로 검사하여 조건에 만족된 항목이 있으면, ACL 동작을 실시한다.
 - 그 다음 항목은 검사하지 않는다.

 

 2) ACL 마지막 항목에는 'deny any'가 동작한다.

 

 


4. Standard ACL

 

 - ACL 번호 : 1~99
 - 검사 항목 : 출발지

 

실습 예제 : 그림 R1에서 연결되어 있는 PC1은 토폴로지 내의 모든 장치와 통신할 수 있지만 PC0는 통신 할 수 없도록 해보자...

 

 

 

표준 ACL은 단순히 출발지 ip 주소만을 판단하여 패킷 필터링을 실시한다.

 

 

R1(config)#access-list 10 deny 1.1.1.2 0.0.0.255   -----> 표준 ACL이므로 1~99번 사이의 번호 사용

1.1.1.2/24를 막겠다는 것 

R1(config)#access-list 10 permit any  ----> 나머지 트래픽 허용한다는 뜻으로 여기서는 1.1.1.1/24와 1.1.1.3/24의 ip를 허용한다는 의미

R1(config)#int gi0/0 ----> 라우터 1의 gi0/0를 설정한다.

R1(config-if)#ip access-group 10 in  ----> 위에서 작성한 ACL 10번을 적용하는데 들어오는 트래픽(in)에 적용할 것인 지 나가는 트래픽(out)에 적용할 것인지 선언

exit

 

 ACL이 적용되었으면 PC0에서 ACL 동작을 확인해보자.

ping 3.3.3.2

 

 

PC0애서 표준 ACL 적용결과 ping을 보낼 수 없었지만 PC1은 가능했다.

 

 

R1#show access-lists : 라우터의 ACL 별로 패킷을 얼마나 전달받았는지 얼마나 버렸는지 확인할 수 있는 명령어 
Standard IP access list 10
    deny host 1.1.1.2 (4 match(es))------> 출발한 4개의 패킷전달받지 못함
    permit any (4 match(es))------> 출발한 4개의 패킷전달 받음

 

 

와일드 카드 마스크

 

ACL은 호스트의 범위를 결정하기 위해 IP주소와 와일드카드 마스크를 사용한다. 와일드카드는 서브넷 마스크의 반대값이다. 와일드 마스크는 서브넷 마스크보다 좀 더 세밀하게 호스트를 구분할 수 있다.

 

203.230.7.1= 11001011.11100110.00000111.00000001

203.230.7.2= 11001011.11100110.00000111.00000010

203.230.7.3= 11001011.11100110.00000111.00000011

203.230.7.4= 11001011.11100110.00000111.00000100

203.230.7.5= 11001011.11100110.00000111.00000101

203.230.7.6= 11001011.11100110.00000111.00000110

 

십진수 ip주소를 2진수로 변경해보면 공통점이 있다. ip주소가 짝수로 끝나는 경우 맨 마지막 숫자가 0으로 끝나고 홀수로 끝나는 경우는 1로 끝나는 공통점을 확인할 수 있다.

짝수로 ip주소 지정 할때 203.230.7.0 0.0.0.254로

홀수로 ip주소 지정 할때 203.230.7.1 0.0.0.254로 지정해주면 된다.

또한 203.230. 7.1/24 ~ 203.230.7.5/24 만 정의 할때는 203.230.7.0/29가 되므로 255.255.255.248이 되고

0.0.0.7이 된다.

203.230.7.1= 11001011.11100110.00000111.00000 001

203.230.7.2= 11001011.11100110.00000111.00000 010

203.230.7.3= 11001011.11100110.00000111.00000 011

203.230.7.4= 11001011.11100110.00000111.00000 100

203.230.7.5= 11001011.11100110.00000111.00000 101

------------------------------------------------------------------

                            0.           0.           0.00000 111(7) ->  공통비트가 같으면 0 다르면 1

 

 

[참고] 서브넷 마스크 와 와일드 카드

 

 서브넷 마스크

와일드 마스크 

 255.0.0.0

0.255.255.255 

 255.255.0.0

0.0.255.255

 255.255.255.0

0.0.0.255 

 255.255.255.255

0.0.0.0 

 

 

ACL 문장 구성 및 순서

 

ACL을 구성하는 문장 중에 any의 의미는 0.0.0.0 255.255.255.255

host는 단 하나의 주소 ip를 사용할 때 203.230.7.1 0.0.0.0 = host 203.230.7.1

 

그럼 이제 1.1.1.0/24 네트워크가 외부와 통신이 가능하도록 하되, 1.1.1.2/24의 ip주소를 가지는 호스트만은 외부와 통신할 수 없도록 실습해보았다.

 

R1(config)#access-list 10 deny host 1.1.1.2-------1
R1(config)#acc
R1(config)#access-list 10 permit 1.1.1.0 0.0.0.255-----2
R1(config)#ip acc
R1(config)#ip acc
R1(config)#ip access-g
R1(config)#ip access-gro
R1(config)#int g0/0
R1(config-if)#ip acc
R1(config-if)#ip access-group 10 in
R1(config-if)#end

만약 1번과 2번이 바뀌어서 첫번째 줄에 작성하고, 두번째 줄에 1번째 것을 작성하면 적용이 안된다. 순서에 주의하자.

 

 

 

ACL을 이용한 원격 접속 제어

 

라우터에 접속하는 방법은 텔넷, ssh, http, https가 있고, 시스코 SDM이라는 프로그램을 많이 사용한다.

텔넷과 ssh는 텍스트 기반 원격 접속프로그램이다.

텔넷은 원격접속시 암호화 되지 않기 때문에 ssh 사용을 권장한다.

 

윗 그림에서 PC0만 R2에 텔넷 접속이 가능하도록 해보자.

 

@R2

 

 

R2(config)#access-list 10 permit host 1.1.1.2

R2(config)#line vty 0 4

R2(config-line)#password ciscovty

R2(config-line)#login

R2(config-line)#ac

R2(config-line)#acc

R2(config-line)#acces

R2(config-line)#access-class 10 in

R2(config-line)#exit

R2(config)#

텔넷으로 트래픽 허용하려면 ip access-group 이 아닌 access-class 이라는 명령어를 사용한다..

 

PC0는 접속 가능했지만 PC1,PC2,PC3번은 접속 불가함을 밑에 그림에서 볼 수 있다.

 

 

 

표준ACL은 단순히 출발지 주소가지고만 패킷을 전달할것인지를 판단한다..... 예를 들어서 pc0가 텔넷은 허락하지만 ping을 보낼 수 없도록 설정하고자할때 표준 ACL에서 동시에 할수 없다. 만약 ping서비스를 막았다면 텔넷도 보내지 못한다. 이러한 단점을 보완하고자 확장 ACL을 사용한다.

 

 

확장 ACL

 

출발지 주소 뿐만아니라 목적지 주소프로토콜까지 제어가 가능하다.

윗 그림에서 PC0(host 1.1.1.2)는 R3(host 3.3.3.1, host 203.230.7.6, host 203.230.7.9)에만 ping을 보낼 수 없도록 설정해보자.

ping을 제외한 다른 서비스는 사용 가능이 되어야 하고 텔넷 접속시 반드시 접속이 되어야 한다.

 

 

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#acc
R1(config)#access-list 100 deny icmp(사용할 프로토콜) host 1.1.1.2 host 3.3.3.1 echo

--->ACL의 경우 100 ~199번을 사용, deny(패킷을 버린다)

     host 1.1.1.2(출발지 주소), host 3.3.3.1(도착지 주소) ,echo(ping)
R1(config)#access-list 100 deny icmp host 1.1.1.2 host 203.230.7.6 echo
R1(config)#access-list 100 deny icmp host 1.1.1.2 host 203.230.7.9 echo
R1(config)#access-list 100 permit ip any any

---> deny로 설정된 항목 이외에 모든 통신이 가능하도록 허용
R1(config)#int g0/0
R1(config-if)#ip
R1(config-if)#ip ac
R1(config-if)#ip access-group 100 in
R1(config-if)#

 

  

실행 결과

 

 

 PC>ping 203.230.7.6

Pinging 203.230.7.6 with 32 bytes of data:

Reply from 1.1.1.1: Destination host unreachable.
Reply from 1.1.1.1: Destination host unreachable.
Reply from 1.1.1.1: Destination host unreachable.
Reply from 1.1.1.1: Destination host unreachable.

Ping statistics for 203.230.7.6:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

PC>ping 3.3.3.1

Pinging 3.3.3.1 with 32 bytes of data:

Reply from 1.1.1.1: Destination host unreachable.
Reply from 1.1.1.1: Destination host unreachable.
Reply from 1.1.1.1: Destination host unreachable.
Reply from 1.1.1.1: Destination host unreachable.

Ping statistics for 3.3.3.1:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

PC>telnet 3.3.3.1
Trying 3.3.3.1 ...Open

[Connection to 3.3.3.1 closed by foreign host]
PC>

PC1(host 1.1.1.3)만 R2(203.230.7.2,203.230.7.5.2.2.2.1)에 텔넷 접속이 불가능하도록 확장 ACL을 구성하되 ACL 적용을 R1에서 해보자

 

 R1(config)#access-list 100 deny tcp host 1.1.1.3 host 203.230.7.2 eq 23

R1(config)#access-list 100 deny tcp host 1.1.1.3 host 203.230.7.5 eq 23

R1(config)#access-list 100 deny tcp host 1.1.1.3 host 2.2.2.1 eq 23

R1(config)#access-list 100 permit ip any any

R1(config)#int g0/0

R1(config-if)#ip

R1(config-if)#ip a

R1(config-if)#ip ac

R1(config-if)#ip access-group 100 in

R1(config-if)#

 

 

[참고] Named ACL

 

Name 표준 ACL(1~99)

 

Named 표준 ACL은 표준 ACL과 동일하지만 번호 대신 문자를 정의하여 사용한다.

 

윗 그림의 R1에 연결되어 있는 PC1(host 1.1.1.3)은 토폴로지 내의 모든 장치와 통신 할 수 있지만 PC0(host 1.1.1.2)는 통신할 수 없도록 하는 named 표준 ACL을 실습해보겠다.

 

명령어 시작은 ip access-list standard 이름

R1(config)#ip access-list standard infocom

---------> named 표준 ACL의 경우 stardard를 사용 하고, named 확장 ACL일 경우 extened를 사용한다.

 

 

R1(config-std-nacl)#deny host 1.1.1.2
R1(config-std-nacl)#permit any
R1(config-std-nacl)#exit
R1(config)#int g0/0
R1(config-if)#ip access-group infocom in  -> 100 숫자 대신에 영문자를 입력
R1(config-if)#end
R1#
%SYS-5-CONFIG_I: Configured from console by console

 

ex) 

   branch 지사의 내부사설 네트워크 192.168.50.0/24 를 모두 거부하고 나머지는 허용함


   R1(config)# ip access-list standard Branch_network

   R1(config-std-nacl)# remark *deny all branch private network!!

   R1(config-std-nacl)# 10 deny 192.168.50.0 0.0.0.255
   R1(config-std-nacl)# 20 permit any

  no 20 명령어를 사용시 permit any 행만 삭제된다.

 

 

Named 확장 ACL(100 ~ 199)

 

named 표준 ACL과 유사

 

RC0(1.1.1.2)는 R3(203.230.7.6,203.230.7.9,3.3.3.1)에만 ping을 보낼수 없도록  하는 확장 named ACL을 설정해보자.

 

R1(config)#ip acc
R1(config)#ip access-list ex
R1(config)#ip access-list extended ping
R1(config-ext-nacl)#deny icmp host 1.1.1.2 host 3.3.3.1
R1(config-ext-nacl)#deny icmp host 1.1.1.2 host 203.230.7.6
R1(config-ext-nacl)#deny icmp host 1.1.1.2 host 203.230.7.9
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#exit
R1(config)#int g0/0
R1(config-if)#ip a
R1(config-if)#ip acc
R1(config-if)#ip access-group ping in
R1(config-if)#end
R1#
%SYS-5-CONFIG_I: Configured from console by console

텔넷은 접속이 가능했다.

 

 

PC2(2.2.2.2)가 Server1(3.3.3.2)의 http와 ftp에 접속할 수 없도록 하는 ACL을 적용해보자

.

 

R2(config)#ip access-list extended http_tcp

R2(config-ext-nacl)#deny tcp host 2.2.2.2 host 3.3.3.2 eq 20

R2(config-ext-nacl)#deny tcp host 2.2.2.2 host 3.3.3.2 eq 80

R2(config-ext-nacl)#deny tcp host 2.2.2.2 host 3.3.3.2 eq ftp

R2(config-ext-nacl)#permit ip any any

R2(config-ext-nacl)#exit

R2(config)#int g0/0

R2(config-if)#ip ac

R2(config-if)#ip access-group http_tcp in

 

PC2에서 웹브라우저로 이동하여 주소를 1.1.1.3을 입력하면 응답이 없지만 3.3.3.2를 입력하면 접속이 잘됨을 알수 있다.

 

ACL 중간 삽입

 

만약 확장 ACL을 위와 같이 작성 한후 10번과 20번 사이에 ACL이 삽입되어야 하는 경우가 생기면 지우고 다시 설정해야 한다.

하지만 확장 ACL의 경우는 중간에 ACL 문구를 삽입할 수 있다.

R2#conf t

Enter configuration commands, one per line. End with CNTL/Z.

R2(config)#ip acc

R2(config)#ip access-list ex

R2(config)#ip access-list extended CCNA

R2(config-ext-nacl)#permit

R2(config-ext-nacl)#permit tcp any host 1.1.1.1

R2(config-ext-nacl)#deny ip any any

R2(config-ext-nacl)#end

R2#

%SYS-5-CONFIG_I: Configured from console by console


R2#conf t

Enter configuration commands, one per line. End with CNTL/Z.

R2(config)#no ip access-list extended CCNA

R2(config)#10 permit tcp any host 1.1.1.1

R2(config)#ip access-list extended CCNA

R2(config-ext-nacl) permit tcp any host 1.1.1.1

R2(config-ext-nacl)#deny ip any any

 

R2(config-ext-nacl)#do show access-list

 

Extended IP access list CCNA

10 permit tcp any host 1.1.1.1

20 deny ip any any

 

 

R2(config-ext-nacl)#15 permit tcp any host 203.230.7.1

R2(config-ext-nacl)#do show access-list

Standard IP access list 10

10 permit host 1.1.1.2 (2 match(es))

Extended IP access list http_tcp

10 deny tcp host 2.2.2.2 host 1.1.1.3 eq www (37 match(es))

20 deny tcp host 2.2.2.2 host 1.1.1.3 range 20 ftp

30 permit ip any any (5 match(es))

Extended IP access list CCNA

10 permit tcp any host 1.1.1.1

15 permit tcp any host 203.230.7.1

20 deny ip any any

 

 

 

 

 

 

 

 

 

 

R3(config)#access-list 110 deny tcp host 13.13.20.2 host 13.13.30.3 eq 21
R3(config)#
%LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/1, changed state to down

%LINEPROTO-5-UPDOWN: Line protocol on Interface Serial1/1, changed state to up

R3(config)#access-list 110 deny tcp 13.13.10.0 0.0.0.255 13.13.30.0 0.0.0.255 eq 23
R3(config)#access-list 110 deny tcp 13.13.20.0 0.0.0.255 host 13.13.30.3 eq 80
R3(config)#access-list 110 deny icmp any 13.13.30.3 0.0.0.255 echo
R3(config)#access-list 110 permit icmp 13.13.30.3 0.0.0.255 any echo-reply
R3(config)#access-list 110 deny tcp 13.13.20.0 0.0.0.255 host 13.13.30.3 eq 21
R3(config)#access-list 110 deny tcp 13.13.20.0 0.0.0.255 host 13.13.30.3 eq 20
R3(config)#access-list 110 permit ip any any
R3(config)#
R3(config)#int s1/1
R3(config-if)#ip acc
R3(config-if)#ip access-group 110 in
R3(config-if)#end
R3#
%SYS-5-CONFIG_I: Configured from console by console