SK shieldus Rookies 9기/클라우드 보안 컨설팅 실무

클라우드 보안 컨설팅 실무 1일차 (22/11/07)

ksh_5 2022. 11. 7. 11:56
  • IPv4 주소 배분 및 연결
  • IP주소는 네트워크와 호스트로 구분 {네트워크 부분은 Lastname(성), 호스트 부분은 Firstname(이름)}

 

 

Q. 어디까지 네트워크일까?

A. Subnet Mask에서 1에 해당하는 IP주소 부분이 네트워크 부분

 

 

  • VPC에 적용

 

클라우드에 할당된 자유롭게 구성할 수 있는 나만의 공간

/16 이상 만들 수 없음

 

10.10.0.0/16

172.16.0.0/16 → 호스트를 2¹⁶ = 65536 (실제 65000개 정도 사용 가능)

172.16.10.0/24 → 호스트를 2⁸ = 256 (실제 250개 정도 사용 가능)

10.0.0.0/8 → 생성 불가능

 

 

  • IP 주소의 범위

 

ex) 1921.168.100.0/24 → 네트워크 주소가 24bit로 호스트 부분 8bit

- IP 주소는 전체가 8bit로 32bit이다

- 호스트 부분이 8bit = 2⁸ = 256 (0~255)

- 0 : Network 주소에 할당, 255는 Broadcast 주소, 실제 호스트 할당 가능 주소는 1~254

- 1~254 중 Gateway, AWS에서 모니터링하는 주소 등 제외하고 약 250개 정도 실제 EC2에 할당 가능

 

* VPC 10.10.0.0/16 

- 사용가능한 호스트 부분이 16bit (65536)

- 65536 안에 256이 256개 들어감 (=16bit 안 8bit가 256개 들어감)

 

더보기

첫 번째 서브넷 : 10.10.0.0/24

두 번째 서브넷 : 10.10.1.0/24

세 번째 서브넷 : 10.10.2.0/24

...

마지막 서브넷 : 10.10.255.0/24

→ 256개

10.10은 VPC에 할당된 부분으로 10.10으로 시작하지 않을 시 다른 VPC가 됨

→ 세 번째 옥텟 부분 0~255까지 모두 256 = 서브넷의 주소부분이 됨

→ 네 번째 옥텟 부분은 호스트 부분 (0:Network, 255:Broadcast라서 호스트 할당 불가, GW, ASW monitoring : 1~254까지 할당

 

※ 8bit = 1byte (=Octet)

 

 

  • NAT

① 공유기 통해 나갈 때

- IP 헤더의 출발지 IP에 써있는 사설 IP를(다른 장부에 기록하고) 지운 후 공인 IP로 바꿔 써넣음

- 인터넷으로 나가서 목적지를 찾아감, 목적지에서는 회신을 줄 때, 출발지는 자신의 IP, 목적지는 바꿔 넣은 공인 IP를 사용해 패킷 생성

 

② 공유기 통해 들어올 때

- IP 헤더의 목적지 IP에 써있는 공인 IP를 (장부 참고) 사설 IP로 변경

- 내부망에서는 사설 IP만 사용하기  때문에 목적지에 있는 사설 IP를 보고 해당 호스트 찾아주게 됨

* Internet GW는 퍼블릭 IP를 내부에 부여해 1:1 매칭 시킴 (외↔내)

- NAT GW는 내부망에 있는 호스트가 외부로 나가는 것만 가능 (외←내), 리턴 트래픽 허용, 외부에서 들어오는 건 연결X

 

 

  • NAT 기술

① 고정 NAT (static NAT)

- 퍼블릭 IP 1개, 사설 IP 1개 매핑하는 기술 (주소 변경X, 항상 퍼블릭 IP와 같은 사설 IP 연결)

   ex) IP가 바뀌면 책임 묻기 어렵

Elastic IP (탄력적 IP)

 

② 유동 NAT (Dynamic NAT)

- 퍼블릭 IP 1개, 사설 IP 1개 1:1 매핑이지만, 일시적으로 사용중지나 리부팅 시 IP 변경됨 (퍼블릭 IP가 모자라 사용하는 컴퓨터에만 할당)

  ex)  EC2를 사용중지했다가 나중에 다시 킬 시 퍼블릭 IP 변경됨

인터넷 게이트웨이

 

③ Port NAT (=NAT Overload)

- 퍼블릭 IP 1개, 여러 개 사설 IP 연결하는 기술

- 퍼블릭 IP에 각각 다른 포트 사용해 여러 사설 IP와 1:1 매칭

- Port 활용

NAT 게이트웨이

 

 

  • Private Subnet과 Public Subnet

 

- Subnet 만들면 Private Subnet으로 생성됨

- 설정에서 '자동으로 퍼블릭 IP주소를 할당' 체크하면 Public Subnet으로 변경됨

- Private & Public 둘 다 사설 IP로 구성되어있음 → VPC 내 사설 IP로 통신

- Public에 EC2 or ECS 생성 시 퍼블릭 IP를 부여해 IGW로 들어올 때 공인 IP를 사설 IP로 변경해줌(NAT)

 

 

  • 가용영역 (AZ : Availability Zone)

 

- 가상의 데이터 센터, 실제 3~5개 정도의 데이터센터의 일부 빌려 가상 데이터 센터 생성

 

 

  • 리전 (Region)

 

- 가용영역 3개 이상 모아 해당 지역에서 클라우드 서비스 제공하는 단위

 

 

  • 보안 그룹 (Security Group)

 

- 순서 의미 부여 X

- 거부 따로 설정X, 모든 거부 상태엣 허용만 설정

- 리턴 트래픽 허용 (요청에 대한 응답 들어옴)

- 인스턴스에 대해 설정 → 윈도우 방화벽, UFW(우분투 방화벽) 등과 비슷 (호스트 방화벽)

- 소스 (출발지 IP주소)를 허용 or 거부

   Anywhere : 모든 곳에서 접근 가능

  내 IP : 내가 있는곳에서만 접근 가능, 외부에서 접속해야 하는 경우, 수정해놓고 접근

- 포트는 용도 따라 설정

  앱서버는 어디서든 접속 허용

  22(SSH), 3389(RDP)는 접속 IP 제한해야 함

 

 

cf. 어디서든 접속 가능하게 하면 어떤 공격을 당할 수 있을까?

Brute Force Attack : 모든 가능한 경우 수 대입 ex) 숫자 4자리 : 0000~9999 대문자 4자리 : AAAA-ZZZZ → 시간 오래 걸림

Dictionary Attack : 자주 사용하는 패스워드 목록 파일로 저장해 순차적으로 대입해보는 방법 ex) password.txt→ 시간 절약

 

cf. Port Scan :어떤 포트가 열려 있는지 확인하기 위해서

 

 

  • 방화벽

 

- Rule Set (=Access List)

출IP, 출Port, 목 IP, 목 Port, 허용/거부, 시간, 방향 등

 

10 Admin FW 허용
20 Any FW 거부
30 Any Game/Stock 거부
40 Internal Any 허용
* Any Any 거부

→ 맨 마지막 줄에 모두 거부 포함

 

 

  • Network Access Control List (NACL, 네트워크 기반 접근 통제 목록)

 

- 허용과 거부 모두 설정

- 위에서부터 내려가며 적용 (윗줄이 우선), 번호 작을수록 우선 적용

- 맨 아랫줄에는 모두 거부

- 최소 하나의 허용 존재해야 함

- 규칙대로만 적용하므로, 리턴 트래픽 허용되지 않음

- 자주 참조되면 윗줄에 배치 (효율성)

- Subnet에 적용 (Network ACL이므로)

 

 

클라우드 기본 환경 설정 실습)

 

- vpc 생성

 

① VPC 생성 클릭

② VPC만 클릭 후 이름 작성 (ksh_vpc)

③ IPv4 CIDR 수동 입력

④ IPv4 CIDR (10.1.0.0/16)

⑤ IPv4 CIDR 블록 설정 없음

⑥ 테넌시 기본값

⑦ VPC 생성 클릭

 

vpc 생성 마친 화면

 

 

- 서브넷 생성

 

① 서브넷 생성 클릭

② VPC 선택 (ksh_vpc)

③ 서브넷 이름 (ksh_pub, ksh_pri)

④ 가용 영역 (ap-northeast-3a, ap-northeast-3b)

⑤ IPv4 CIDR : 10.1.1.0/24, 10.1.2.0/24

⑥ 서브넷 생성 클릭

⑦ 서브넷 선택 후 작업에서 설정 편집 선택

⑧ 퍼블릭 IPv4 주소 자동할당 활성화 체크 (public subnet으로 변환)

⑨ 저장

 

서브넷 생성 마친 화면

 

 

- 인터넷 게이트웨이

 

① 인터넷 게이트웨이 생성 클릭

② 이름 태그 후 생성 (igw-ksh)

③ 인터넷 게이트웨이 생성 클릭

④ 만든 이름 선택 후 작업에서 VPC 연결

⑤ 사용 가능한 VPC에서 vpc 선택

⑥ 인터넷 게이트웨이 연결 클릭

 

인터넷 게이트웨이 생성 마친 화면

 

 

- 라우팅 테이블

 

① 라우팅 테이블 목록 테이블 클릭

② 해당 라우팅 테이블 ID 클릭

③ 라우팅 탭 클릭 후 편집 클릭

③ 라우팅 추가 클릭 0.0.0.0/0 (게이트웨이)로 라우팅 추가

④ 인터넷 게이트웨이 클릭 > 대상 클릭 후 변경 사항 저장

⑤ 서브넷 연결 탭에서 서브넷 연결 편집 클릭

⑥ 체크 후 저장하면 명시적 서브넷 연결로 이동됨

 

게이트웨이로 라우팅 추가

 

명시적 서브넷 연결한 화면

 

 

- ec2 생성

 

① EC2 목록 클릭 후 인스턴스 시작 클릭

② 이름 (webserver) 작성 후 OS 선택 (ubuntu)

③ 새 키 페어 생성 (ksh)

※ key 속성 변경 : 참고 → https://shy-109x.tistory.com/19 

④ 네트워크 설정에서 생성한 VPC, 서브넷 클릭

⑤ 방화벽 보안 그룹 생성 클릭

⑥ 인바인드 보안 그룹 규칙 추가해주기

⑦ 스팟 인스턴스 요청 체크

⑧ 인스턴스 시작 클릭

 

인바운드 보안 그룹 규칙 추가

 

스팟 인스턴스 요청

- 오사카 가격 설정 : $ 0.0046 (리전마다 다름)

 

인스턴스 생성을 마친 화면

 

① 윈도우10에서 cmd창 열어 SSH 클라이언트 > 예에 있는 ssh -i "aws_~" 복사

② 복사한 값 cmd에 붙여 넣으면 만든 인스턴스에 접속이 됨

 

③ $ sudo apt install apache2 -y

     $ sudo apt install vim -y

 

④ $ cd /var/www/html

     $ sudo rm index.html

     $ sudo vi index.html

 

index.html 수정

 

⑤ 웹사이트에 퍼블릭 IP로 접속

 

 

- wordpress 설치

 

$ sudo rm -rf html

 

$ sudo wget https://ko.wordpress.org/latest-ko_KR.tar.gz 

 

$ sudo tar -xvf latest-ko_KR.tar.gz

 

$ sudo mv wordpress html

$ sudo chwon -Rf www-data:www-data html

 

디렉터리의 소유자와 그룹 소유권을 변경

sudo apt install php php-mysql php-common php-gd php-json php-xml php-curl php-fpm php-mbstring 설치

 

$ sudo apt install mysql-server

 

$ sudo service apache2 restart

 

$ sudo mysql -u root -p

 

mysql> create database wordpress;

mysql> create user wordpress@localhost identified by '1234';

mysql> grant all privileges on *.* to wordpress@localhost;

mysql> flush privileges;

 

웹브라우저에 EC2 IP로 접속

 

웹브라우저에서 wordpress 접속한 화면