Contents
(네트워크)ACL(Access Control List)
   2022년07월11일     4분정도면 다 읽어요     - Comments

[카카오 클라우드 스쿨] Access Control List로 접근 정책 설정하기

Access Control List (ACL)


  • 클라우드의 서브넷팅은 다음과 같은 연결로 구성된다 (3-Tier)
  • img_311
    • 여기서, ‘보안 설정’이란 무엇일까?


  • 또한, 라우터 내부에서는 다음과 같은 일들이 일어난다
  • img_312
    • ACL이 위와 같은 ‘보안 설정’을 진행해 준다는 것을 알 수 있다


ACL?

방화벽의 원조! 액세스 제어 목록!

  1. 번호나 이름을 이용하여 정책을 생성하고, 생성된 정책에 기반해서 패킷을 필터링, 분류한다
    • 필터링: Drop & Permit
    • 분류: 엄청난 량의 패킷들을 그룹화, 분류
      1. NAT
      2. QOS(Quality of Service)

  2. 패킷의 어떤 부분을 확인하고 필터링하는지에 따라 Standard/Extend ACL로 구분됨
    • Standard ACL
      • 출발지 IP(L3)만을 확인하고 필터링
      • 번호를 사용할 경우, 1~99 사용
      • Word(본인이 원하는 단어) 사용하는 것이 일반적
      • 클라우드나 대규모 환경에서 사용하지 않음
    • Extend ACL
      • 출발지 IP, 목적지 IP(L3), 출발지 Port Num, 목적지 Port Num(L4) 를 확인하고 필터링
      • 번호를 사용할 경우, 100~199 사용
      • Word(본인이 원하는 단어) 사용하는 것이 일반적
      • 일반적인 방화벽의 역할로써 사용 (AWS의 경우 Extended 방식을 사용)
    • (참고: 방화벽이나 라우터는 Inspection기능을 활용하면 L7까지 확인 가능하다)


host : www.test.com
full request uri : www.test.com/img/a.jpg

  • 데이터 부분에 있는 str 을 읽고 정규표현식 등을 활용하여 데이터 필터링을 할 수 있다.
    • (url 필터링, 확장자를 확인하고 데이터 필터링 가능)
  • Squid Squidguard 소프트웨어를 통해 URL을 필터링할 수 있다



ACL 작성 방법

img_313

  • Standard ACL
    • Standard 는 특정 IP 주소로부터의 모든 접근에 대하여 허용 또는 차단으로만 구분할 수 있다
      • access-list permit 192.168.1.0 0.0.0.255
      • access-list deny 2.2.2.2 0.0.0.0 => 한 대만 필터링
      • access-list deny 2.2.2.2 255.255.255.255 => 모두 필터링 (= deny any)

  • Extended ACL
    • 출발지, 목적지의 L3, L4 부분을 모두 필터링
    • access-list 111 permit ip any host 1.1.1.1
      • 111: access list 111번을 이용해서 ip(L3)만 볼 거다
      • ip: 패킷의 IP(L3) 부분만을 확인하고 필터링하겠다
      • any: 출발지(Source) IP
      • host 1.1.1.1: 목적지 IP

    • access-list 111 deny tcp any host 2.2.2.2 eq 80
      • tcp: L3 부분과 L4에서 TCP 포트번호를 확인하고 해당 패킷을 차단하겠다
      • any: 출발지(Source) IP
      • host 2.2.2.2 eq 80: 2.2.2.2:80과 같은(eq) 놈들을 차단하겠다

    • access-list 111 deny icmp any host 2.2.2.2
      • ICMP: 핑 차단
      • 외부에 있는 모든 사용자들이 2.2.2.2로 ping보내는 것이 있다면, 차단하겠다

    • access-list 111 deny ip any any
      • 모든 것을 차단하겠다
      • (telnet, web, ssh 어떤 것이든 L4는 보지 않고 외부에서 내부로 들어오는 것들을 차단)

    • access-list 100 deny icmp any host 3.3.3.3 echo
      • 바깥쪽에 있는 모든 사용자들이 3.3.3.3에게 ping을 보낼 때 echo 하는 것을 차단하겠다
      • 웹서비스로는 ping은 허용되지만 ping에 대한 응답 echo는 차단된다 (웹 서비스로는 핑은 들어옴)

  • ping www.naver.com
    • 접속이 안 되는 것을 확인할 수 있음
    • 이것은 standard 가 아닌 extended 로 막아 둔 상태임
    • 이처럼 실제로는 Standard 보다는 Extended 방식을 사용한다



ACL의 규칙

  • ACL은 Rule이 있다!
    1. Top-Down 방식 (위에서부터 차례대로 적용이 된다)
    2. 지정하지 않은 나머지 모든 트래픽은 자동으로 차단 된다
      • 별도로 작성하지 않더라도, ACL의 가장 밑단에는 deny ip any any가 생략되어 있다
    3. 생성된 ACL은 적용을 해야 활성화 된다
      • 적용할 때에는 방향을 지정해 주어야 한다
      • interface, vty, NAT -> ip nat inside source list 1 int fa0/0 overload


  • 규칙1 - 퀴즈
    • 나는 외부에서 접속하는 사용자들의 트래픽 중, 2.2.2.2로부터 접속하는 모든 트래픽을 차단하고 싶다
    • 나머지 모든 트래픽은 허용하고자 한다
    • 보기1:
      • access-list 1 deny host 2.2.2.2
      • access-list 1 permit any
    • 보기2:
      • access-list 1 permit any
      • access-list 1 deny host 2.2.2.2
    • 정답은 보기1!
      • 처음에 적용된 ACL이 우선 권한을 가진다

  • 규칙2 - 퀴즈
    • 외부에서 유입되는 트래픽 중 2.2.2.2만을 차단하라
      • access-list 1 deny host 2.2.2.2
      • access-list 1 permit any
      • access-list 1 deny any (생략되어 있음)

  • 일반적인 케이스에 대한 퀴즈
    • 172.16.1.0/24 에는 우리회사의 서버들이 존재하고 있다
    • 이 서버들로 접속하는 사용자(IP)는 172.16.2.100이 유일하다


  • 라우터 설정
R1(config)#access-list 11 permit host 172.16.2.100
R1(config)#int fa0/1.10
R1(config-subif)#ip access-group 11 out
  • 리눅스 centos2 (클라이언트) 에서 접속 시도 - ICMP 및 DB 접속이 잘 된다
root@localhost ~]# ping 172.16.1.100 -c 3
PING 172.16.1.100 (172.16.1.100) 56(84) bytes of data.
64 bytes from 172.16.1.100: icmp_seq=1 ttl=63 time=29.0 ms
64 bytes from 172.16.1.100: icmp_seq=2 ttl=63 time=23.0 ms
64 bytes from 172.16.1.100: icmp_seq=3 ttl=63 time=19.4 ms

--- 172.16.1.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 19.465/23.869/29.060/3.958 ms
[root@localhost ~]# mysql testdb -u user1 -h 172.16.1.100 -puser1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 27
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.