-
통신망 ( + AWS 에서 망 분리하기)네트워크 & 인프라 2022. 3. 23. 17:36
이번에는 통신망을 분리하는 것에 대해 학습하였다.
망 분리하기
망분리는 개인 정보를 다루는 DB 서버 등을 위한 내부망, 사용자가 접근하는 웹 서버를 위한 외부망을 나누어 구성 한다. 여러겹의 복잡한 방어를 통해 최적화되고 강력한 보안체계를 갖추기 위해 사용된다.
- 통신망 : 노드(IP로 식별할 수 있는 대상)들과 노드들을 연결하는 링크(물리적 회선)들로 구성된 하나의 시스템 ( 1 Subnet = 1 망 )
- 외부망 : 사용자가 접근하는 웹 서버를 위한 망
- 내부망 : 개인정보를 다루는 DB 서버 등을 위한 망
AWS에서의 망
- Region : 국가 / 지역
- Availiability Zone (가용성 존) : 데이터 센터 ( 물리적으로 나뉜 IDC )
- VPC : 하나의 Region에 종속되며 다수의 AZ설정이 가능, VPC IP 대역 내에서 망을 구성
L2 Switch
- Multiple Access를 위한 장비
- 서버에 Network Interface Card가 있고 이는 MAC 주소를 가지고 있다. (Ex) 3c:22:fb:58:4a:c0 (앞 6자리:제조사, 뒤는 식별자))
- MAC 테이블에 정보가 있을 때 : Forwarding
- MAC 테이블에 정보가 없을 때 : Flooding (응답하는 장비가 있으면 포트에 장비 있다고 인지 -> MAC 테이블에 등록)
Router
- 서로 다른 네트워크 간의 통신을 중계
- MAC 테이블에 정보가 있을 때 : Forwarding
- MAC 테이블에 정보가 없을 때 : Drop (Fail Drop 형 장비)
- 라우팅 프로토콜을 활용하여 어떤 대역으로 패킷을 보내는 것이 최적 경로인지 학습
인터넷 통신
- 외부 네트워크와 통신하기 위해 Public IP 필요
- Private Ip가 목적지일 경우 인터넷 구간으로 보내지 않음 -> Public Ip로 변환해야한다 (NAT)
- 자신이 속한 subnet : 가상 스위치를 통해 직접 통신
- 자신이 속하지 않은 subnet : 가상 라우터를 통해 직접 통신
- 그외의 전체대역(0.0.0.0/0) : 인터넷 게이트웨이로 통신 보내도록 학습
네트워크 장비
- Collision Domain : Half Duplex로 다중접속환경에서 데이터를 동시에 전송할 때 충돌이 일어날 수 있는 영역
- 허브를 통해 MA 구성 : 1계층 장비이기 때문에 신호 증폭으로 인해 Collision Domain의 영역 확장
- 스위치를 통해 MA 구성 : 2계층 장비로 신호증폭 + 2계층 헤더열어 MAC 주소 확인 후 전송해서 port 별로 Collision Domain 나눔
- Mullti Access(다중 접속 환경)에서는 Switch를 사용해야 한다.
- Broadcast Domain : Broadcast 데이터가 전달되는 범위
- 범위내의 단말은 직접 통신, 허용 영역은 라우터 기준으로 분할
- Broadcast 데이터가 증가하면 통신망에 부하가 가해지므로 라우터를 배치함으로서 Broadcast 허용영역을 적절히 분할해 통신망 부하를 줄여야 한다.
VPC
- 하나의 서비스를 위한 네트워크 다루는 단위
- 하나의 Region안에 구성 가능
Subnet
- VPC에서 설정한 네트워크 대역을 더 세부적으로 나눈 네트워크 ( VPC의 CIDR 영역 내에서 구성 가능 )
- 서브넷 구성시 안전조치를 고려해 subnet의 AZ(IDC)을 다르게 구성
- 하나의 VPC 내에 구성된 subnet들은 다른 IDC에 존재하더라도 사설망을 통해 통신 가능
Subnetting
- A 클래스 : 255.0.0.0 -> 11111111.00000000.00000000.00000000
- 자릿수로 표현하면 ~8자리 까지는 채워져있다. CIDR /8 부터 시작한다 .
- B 클래스 : 255.255.0.0 -> 11111111.11111111.00000000.00000000
- 자릿수로 표현하면 ~16자리 까지는 채워져있다. CIDR /16 부터 시작한다.
- C 클래스 : 255.255.255.0 -> 11111111.11111111.11111111.00000000
- 자릿수로 표현하면 ~24자리 까지는 채워져있다. CIDR /24 부터 시작한다.
Q : 네트워크 아이디 192.168.4.0/24 의 네트워크를 3개의 subnet으로 나누고자 한다면?
A :
네트워크는 C class로 나누고자하는 subnet의 개수가 3이므로 테이블을 보았을 때 subnet이 4인 테이블의 column을 참고한다.
호스트는 64(2의 8승(0의 갯수))개 사용할 수있고 서브넷 마스크는 /26 (CIDR)이다.
첫번째 Host ID는 Network ID로 사용해야하고 마지막 Host id는 Broadcast ID로 사용해야 하므로 가용 Host 는 64-2 = 62개가 된다 .
따라서 위와 같이 192.168.4.1~62, 192.168.4.65~126, 192.168.4.129~190으로 나눌 수 있다.
Q: 211.168.83.0의 네트워크를 2개로 분할하려면 서브넷 마스크는?
A : 211.168.83.128 (10000000) /25
C클래스의 네트워크 255.255.255.0 (11111111.11111111.11111111.00000000)에서
2개로 분할 시 211.168.83.128 (10000000) /25
4개로 분할 시 211.168.83.192 (11000000) /26
8개로 분할 시 211.168.83.224 (11100000) /27
16개로 분할 시 211.168.83.240 (11110000) /28
와 같이 계산해서 나타낼 수 있다.
Q: 회사에서 211.168.83.0의 네트워크를 사용하고 있으며 내부적으로 5개의 서브넷을 사용하기 위해 서브넷 마스크를 211.168.83.224 으로 사용하고 있다. 이때 211.168.83.34가 속한 서브넷의 브로드캐스트 ID는?
A :
네트워크는 C class로 나누고자하는 subnet의 개수가 5이므로 테이블을 보았을 때 subnet이 8인 테이블의 column을 참고한다.
호스트는 32개 사용할 수있고 서브넷 마스크는 /27 (CIDR)이다.
따라서 서브넷을 211.168.83.0~31, 211.168.83.32~63, 211.168.83.64~95, 211.168.83.96~127, 211.168.83.128~159,211.168.83.160~191, 211.168.83..192~223, 211.168.83.224~255으로 나눌 수 있다.
여기서 맨 처음 Host ID는 네트워크 아이디, 마지막 Host ID는 브로드캐스트 ID이므로 211.168.83.34가 속한 서브넷의 브로드캐스트 아이디는 211.168.83.63이 된다.
Q: 네트워크 아이디 172.16.0.0/16의 네트워크를 4개의 subnet으로 나누고자 한다면?
A :
네트워크는 B class로 나누고자하는 subnet의 개수가 3이므로 테이블을 보았을 때 subnet이 4인 테이블의 column을 참고한다.
(11111111 11111111 11000000(세번째 영역) 00000000(네번째 영역))
호스트는 16384(2의 14승(0의 갯수))이며 서브넷 마스크는 /18 (CIDR)이다.
여기서 우리는 세번째 영역을 이용해서 서브넷을 나눌 수 있으므로 네번째 영역의 설정을 제외하여 호스트를 설정할 수 있다.
여기서 네번째 영역은 2의8승 256이 되므로 사용할 호스트는 256으로 나눈 64가 된다.
첫번째 Host ID는 Network ID로 사용해야하고 마지막 Host id는 Broadcast ID로 사용해야 한다.
따라서 위와 같이 가용영역은 172.16.0.1~172.16.63.254, 172.16.64.1.~172.16.127.254, 172.16.128.1~172.16.191.254, 172.16.192.1~172.16.255.254 으로 나눌 수 있다.
( 참고한 영상 )
https://www.youtube.com/watch?v=wuIdYxaV46Y&t=10s
Routing Table
- 서브넷이 다른 서브넷 혹은 외부망과 통신하기 위한 정보를 가지고 있다.
Internet Gateway
- 외부망과의 연결 담당
외부 네트워크와 연결
- EC2는 인터넷 게이트웨이를 통해 외부 인터넷과 연결
- 서브넷에 속한 EC2가 외부와 통신하기 위해 자신의 라우팅 테이블에 설정된 정보를 제외한 모든 대역(0.0.0.0/0)에 대한 통신을 인터넷 게이트웨이로 요청하게끔 설정
- 내부망은 별도의 라우팅 테이블 생성
- 내부망 서버가 외부망에 접속해야 할 때 (라이브러리 설치 등 ) NAT 게이트웨이 활용
접근 제어
- Public Cloud의 Official OS image, SpringFramework를 사용한다면 많은 부분에서 보안성을 보장
- SYN Flooding: 커널에 SYN Cookie가 활성화 되어있어 TCP SYN Flooding 공격이 유효하지 않다.
- LAND, Smulf Attack : 라우터에 설정하여 막을 수 있음
- SQL Injection : Preparedstatment, 혹은 JPA의 경우 pre-compile 거쳐 파라미터로 들어가는 값을 바인딩 하여 사용
Security Group 설정
- 22번 포트 : 현재 자신의 공인 IP에서만 접근 가능하도록 설정
- 80, 443, 8080 등의 사용할 포트 : 전체대역(0.0.0.0/0)에 오픈
- ICMP 프로토콜 : 현재 자신의 공인 IP에서만 접근 가능하도록 설정
( 참고한 사이트 ❤️🔥)
NextStep 프로젝트 공방 1기 (망 분리하기)
https://medium.com/insa-tc/defense-in-depth-for-web-applications-38178696f833
https://brainbackdoor.tistory.com/115
https://catsbi.oopy.io/3743db62-615c-473c-a236-424965dfdcdc
'네트워크 & 인프라' 카테고리의 다른 글
웹 성능 진단하기 (0) 2022.04.14 AWS 망 구성하고 서비스 배포하기 (0) 2022.03.28 Mac에서 docker, docker machine, virtualbox설치하기 (0) 2022.03.28 통신 확인하기 (0) 2022.03.23 네트워크 OSI 7 계층 (0) 2022.03.23