(네트워크)ACL(Access Control List)
[카카오 클라우드 스쿨] Access Control List로 접근 정책 설정하기
Access Control List (ACL)
- 클라우드의 서브넷팅은 다음과 같은 연결로 구성된다 (3-Tier)
- 여기서, ‘보안 설정’이란 무엇일까?
- 또한, 라우터 내부에서는 다음과 같은 일들이 일어난다
- ACL이 위와 같은 ‘보안 설정’을 진행해 준다는 것을 알 수 있다
ACL?
방화벽의 원조! 액세스 제어 목록!
- 번호나 이름을 이용하여 정책을 생성하고, 생성된 정책에 기반해서 패킷을 필터링, 분류한다
- 필터링: Drop & Permit
- 분류: 엄청난 량의 패킷들을 그룹화, 분류
- NAT
- QOS(Quality of Service)
- 패킷의 어떤 부분을 확인하고 필터링하는지에 따라 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까지 확인 가능하다)
- Standard ACL
host : www.test.com
full request uri : www.test.com/img/a.jpg
- 데이터 부분에 있는 str 을 읽고 정규표현식 등을 활용하여 데이터 필터링을 할 수 있다.
- (url 필터링, 확장자를 확인하고 데이터 필터링 가능)
- Squid Squidguard 소프트웨어를 통해 URL을 필터링할 수 있다
ACL 작성 방법
- 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)
- Standard 는 특정 IP 주소로부터의 모든 접근에 대하여 허용 또는 차단으로만 구분할 수 있다
- 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이 있다!
- Top-Down 방식 (위에서부터 차례대로 적용이 된다)
- 지정하지 않은 나머지 모든 트래픽은 자동으로 차단 된다
- 별도로 작성하지 않더라도, ACL의 가장 밑단에는 deny ip any any가 생략되어 있다
- 생성된 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이 우선 권한을 가진다
- 처음에 적용된 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 (생략되어 있음)
- 외부에서 유입되는 트래픽 중 2.2.2.2만을 차단하라
- 일반적인 케이스에 대한 퀴즈
- 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.