본문 바로가기

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

클라우드 보안 컨설팅 실무 2일차

728x90

• 아마존 문서

https://docs.aws.amazon.com/ko_kr/

 

https://docs.aws.amazon.com/ko_kr/

 

docs.aws.amazon.com

 

 

• VPC

‣ 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있다

‣ 기존 네트워크와 아주 유사한 가상 네트워크

‣ 다른 가상 네트워크와 논리적으로 분리되어 있다

‣ VPC는  IP주소 범위를 지정하고 서브넷과 게이트웨이를 추가하고 보안 그룹을 연결

 

• 기본 VPC

- 기본 서브넷, 연결된 인터넷 게이트웨이, 모든 트래픽을 인터넷 게이트웨이로 보내는 기본 라우팅 테이블의 경로, EC2 인스턴스에 퍼블릭 IP 주소 및 DNS 호스트 이름을 제공하는 DNS 설정

기본 서브넷에서 시작된 EC2 인스턴스는 자동으로 인터넷에 액세스

 

 

• 서브넷

‣ 서브넷은 단일 가용 영역에 상주

‣ 서브넷을 만들 때 해당 서브넷에 대한 IPv4 CIDR 블록을 지정합니다. 이는 VPC CIDR 블록의 서브넷입니다.

‣ 프라이빗 서브넷 : 퍼블릭 인터넷에 엑세스하려면 NAT 장치가 필요합니다. (업데이트할 때 NAT 장치 필요)

‣ 네트워크 ACL를 사용

 

• 라우팅 및 라우팅 테이블

‣ 서브넷 또는 게이트웨이의 네트워크 트래픽이 전달되는 위치를 결정

‣ VPC와 함께 자동으로 제공되는 라우팅 테이블

‣ 다른 라우팅 테이블과 명시적으로 연결되지 않은 모든 서브넷의 라우팅을 제어

‣ 라우팅 테이블과 서브넷, 인터넷 게이트웨이 또는 가상 프라이빗 게이트웨이 간의 연결

기본 라우팅 테이블의 규칙

 

 

• 인터넷 게이트웨이

‣ 인터넷 게이트웨이를 사용하여 VPC를 인터넷에 연결

인터넷 바인딩된 트래픽을 인터넷 게이트웨이로 전달하는 라우팅을 서브넷의 라우팅 테이블에 추가

‣ 서브넷의 인스턴스에 퍼블릭 IPv4 주소나 IPv6 주소가 있는지 확인

‣ 네트워크 액세스 제어 목록 및 보안 그룹 규칙에서 원하는 인터넷 트래픽이 인스턴스로, 그리고 인스턴스에서 흐르도록 허용되는지 확인

 

• VPC 엔드포인트를 사용하여 인터넷 게이트웨이 또는 NAT장치를 사용하지 않고 AWS 서비스에 비공개로 연결

ex) DynamoDB
- 인터페이스 엔드포인트
- 게이트웨이 엔드포인트 : S3, SynamoDB


• Peering
‣ 두 VPC의 리소스 간 트래픽을 라우팅
ex) Peer : 동료, 친구 ---->  P2P (Peer to Peer)



• 듀얼 스택(Dual Stack) 
‣ IPv4와 IPv6도 사용


• RFC

미국의 국제 인터넷 표준화 기구인에서 제공, 관리하는 문서

 

• 프라이빗 IP주소
‣ VPC에서 인스턴스를 시작할 경우, 서브넷의 IPv4 주소 범위에 속한 주 프라이빗 IP 주소는 인스턴스의 주 네트워크 인터페이스(eth0)에 할당
‣ 각 인스턴스에는 인스턴스의 프라이빗 IP 주소를 확인하는 프라이빗(내부) DNS 호스트 이름이 할당

• 퍼블릭 IP주소
‣ 퍼블릭 IPv4 주소를 받을 것인지 여부를 결정하는 속성을 갖습니다.
‣ 따라서 이 속성이 활성화된 서브넷(퍼블릭 서브넷)에서 인스턴스를 시작할 경우, 퍼블릭 IP 주소는 인스턴스에 대해 생성된 주 네트워크 인터페이스(eth0)에 할당
‣ 퍼블릭 IP 주소는 NAT(Network Address Translation)를 통해 주 프라이빗 IP 주소로 매핑

cf) NAT : 외부에서는 퍼블릭IP, 내부에서는 프라이빗IP


• 탄력적 IP주소
‣ 영구 퍼블릭 IP주소가 필요한 경우, 그대신에 탄력적 IP주소를 사용

 

 

• 네트워크 ACL⭐

- 서브넷은 한 번에 하나의 네트워크 ACL에만 연결

- 네트워크 ACL에는 인바운드 규칙과 아웃바운드 규칙이 있음

- 각 규칙에서는 트래픽을 허용하거나 거부

- 규칙에는 1부터 32766까지 번호 사용 (2의 15승)

- 가장 낮은 번호의 규칙부터 순서대로

- 트래픽이 규칙과 일치하면 규칙이 적용(없으면 아래 규칙 검토)

- 필요한 경우 나중에 새 규칙을 삽입할 수 있도록 중분 방식으로 규칙을 생성(예: 10 또는 100 단위씩 증분) 

- 네트워크 ACL 규칙은 트래픽이 서브넷에 들어오고 나갈 때 적용

- 네트워크 ACL은 상태 비저장 (Stateless : 상태를 고려하지 않음) --> 리턴 트래픽은 불허

더보기
  • 규칙 번호. 번호가 가장 낮은 규칙부터 평가됩니다. 규칙에 일치하는 트래픽이 있으면 이와 모순되는 상위 규칙이 있더라도 적용됩니다.
  • 유형. 트래픽 유형(예: SSH)입니다. 모든 트래픽 또는 사용자 지정 범위를 지정할 수도 있습니다.
  • 프로토콜 . 표준 프로토콜 번호를 가진 어떤 프로토콜이든 지정할 수 있습니다. 자세한 내용은 프로토콜 번호를 참조하십시오. ICMP를 프로토콜로 지정하면 ICMP 유형과 코드 중 일부 또는 전부를 지정할 수 있습니다.
  • 포트 범위. 트래픽에 대한 수신 포트 또는 포트 범위입니다. 예를 들어, HTTP 트래픽의 경우 80입니다.
  • 소스: . [인바운드 규칙만 해당] 트래픽의 소스(CIDR 범위)입니다.
  • 대상 [아웃바운드 규칙만 해당] 트래픽의 대상(CIDR 범위)입니다.
  • 허용/거부. 지정된 트래픽을 허용 또는 거부 할지 여부입니다.

‣ 사용자 지정 네트워크 ACL 예시

더보기
사용자 지정 네트워크 ACL 예시

• Return Traffic

‣ 내부망에서 요청을 보낸것을 기록했다가 이에 대한 응답이 오는 것

 

• 방화벽의 Stateful Inspection (SPI)

State Table에 내부망에서 요청한 것을 기록했다가 응답이 오면 허용, 나머지는 안됨

⇒ Return Traffic 허용하는 방식, Stateful은 상태를 고려하는 방식

⇒ 내부망을 보호하는 효과

 

 

• 단일 서브넷에 있는 VPC

더보기
  • IPv4 CIDR 블록의 크기가 /16(예: 10.0.0.0/16)인 Virtual Private Cloud(VPC). 이것은 65,536개의 프라이빗 IPv4 주소를 제공합니다.
  • IPv4 CIDR 블록의 크기가 /24(예: 10.0.0.0/24)인 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다.
  • 인터넷 게이트웨이 VPC를 인터넷 및 다른 AWS 서비스에 연결합니다.
  • 인스턴스가 VPC의 다른 인스턴스와 통신할 수 있게 해주는 서브넷 범위(예: 10.0.0.6)의 프라이빗 IPv4 주소와 인스턴스가 인터넷에 연결하고 인터넷에서 액세스할 수 있게 해주는 퍼블릭 IPv4 주소인 탄력적 IPv4 주소(예: 198.51.100.2)가 있는 인스턴스.
  • 서브넷과 연결된 사용자 정의 라우팅 테이블. 라우팅 테이블 항목은 서브넷의 인스턴스가 IPv4를 사용하여 VPC 내의 다른 인스턴스와 통신할 수 있도록 해주며, 또한 인터넷을 통해 직접 통신할 수 있게 해줍니다. 인터넷 게이트웨이로 이어지는 경로가 있는 라우팅 테이블과 연결된 서브넷을 퍼블릭 서브넷이라고 합니다.

• 퍼블릭 및 프라이빗 서브넷이 있는 VPC(NAT)

‣ 백엔드 서버에 대한 공개적인 액세스를 차단하면서 퍼블릭 웹 애플리케이션을 실행하려는 경우

‣ 웹 서버가 데이터베이스 서버와 통신할 수 있도록 보안

더보기
  • IPv4 CIDR 블록의 크기가 /16(예: 10.0.0.0/16)인 VPC. 이것은 65,536개의 프라이빗 IPv4 주소를 제공합니다.
  • IPv4 CIDR 블록의 크기가 /24(예: 10.0.0.0/24)인 퍼블릭 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다. 퍼블릭 서브넷은 인터넷 게이트웨이로 이어지는 라우팅이 있는 라우팅 테이블과 연결된 서브넷입니다.
  • IPv4 CIDR 블록의 크기가 /24(예: 10.0.1.0/24)인 프라이빗 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다.
  • 인터넷 게이트웨이 VPC를 인터넷 및 다른 AWS 서비스에 연결합니다.
  • 서브넷 범위에서 프라이빗 IPv4 주소가 있는 인스턴스(예: 10.0.0.5, 10.0.1.5). 이 경우 인스턴스가 서로 통신할 수 있으며 VPC의 다른 인스턴스와 통신할 수 있습니다.
  • 탄력적 IPv4 주소(예: 198.51.100.1)가 있는 퍼블릭 서브넷의 인스턴스. 이 경우 탄력적 IPv4 주소는 인터넷을 통해 접근할 수 있게 해주는 퍼블릭 IPv4 주소입니다. 인스턴스는 탄력적 IP 주소 대신 퍼블릭 IP 주소가 실행 시 지정될 수 있습니다. 프라이빗 서브넷의 인스턴스는 인터넷에서 수신되는 트래픽을 수락할 필요가 없는 백 엔드 서버이므로 퍼블릭 IP 주소가 없지만, NAT 게이트웨이를 사용하여 인터넷으로 요청을 전송할 수 있습니다(다음 글머리표 항목 참조).
  • 자체 탄력적 IPv4 주소를 가진 NAT 게이트웨이. 프라이빗 서브넷의 인스턴스는 IPv4를 통한 NAT 게이트웨이를 통해 인터넷에 요청을 보낼 수 있습니다(예: 소프트웨어 업데이트의 경우).
  • 퍼블릭 서브넷과 연결된 사용자 지정 라우팅 테이블. 이 라우팅 테이블에는 서브넷의 인스턴스가 IPv4를 통해 VPC의 다른 인스턴스와 통신할 수 있게 하는 항목과, 서브넷의 인스턴스가 IPv4를 통해 인터넷과 직접 통신할 수 있게 하는 항목이 들어 있습니다.
  • 프라이빗 서브넷과 연결된 기본 라우팅 테이블. 라우팅 테이블에는 서브넷의 인스턴스가 IPv4를 통해 VPC의 다른 인스턴스와 통신할 수 있게 해주는 항목과, 서브넷의 인스턴스가 IPv4로 NAT 게이트웨이를 통해 인터넷과 통신할 수 있게 해주는 항목이 들어 있습니다.

‣ VPC 설정

IPv4 CIDR 블록의 크기가 /16(예: 10.0.0.0/16)인 VPC. 이것은 65,536개의 프라이빗 IPv4 주소를 제공

    10.0.0.0 을 이진수로 표현하면         0000 1010. 0000 0000 . 0000 0000 . 0000 0000

    /16은 Subnet Mask에서 1이 16개    1111 1111 . 1111 1111 . 0000 0000 . 0000 0000  =  255.255.0.0

                                                                      Network                               Host

 

‣ 퍼블릭 서브넷

IPv4 CIDR 블록의 크기가 /24(예: 10.0.0.0/24)인 퍼블릭 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공합니다.

퍼블릭 서브넷은 인터넷 게이트웨이로 이어지는 라우팅이 있는 라우팅 테이블과 연결된 서브넷

    10.0.0.0 을 이진수로 표현하면         0000 1010 . 0000 0000 . 0000 0000 . 0000 0000

    /24는 Subnet Mask에서 1이 24개    1111 1111 . 1111 1111 . 1111 1111 . 0000 0000  =  255.255.255.0

 

‣ 프라이빗 서브넷

IPv4 CIDR 블록의 크기가 /24(예: 10.0.1.0/24)인 프라이빗 서브넷. 이것은 256개의 프라이빗 IPv4 주소를 제공

    10.0.0.0 을 이진수로 표현하면         0000 1010 . 0000 0000 . 0000 0001 . 0000 0000

    /24는 Subnet Mask에서 1이 24개    1111 1111 . 1111 1111 . 1111 1111 . 0000 0000  =  255.255.255.0

 

 

• 프라이빗 서브넷에 있는 EC2에 접근할려면?

‣ 퍼블릭 서브넷에 있는 리눅스를 통해서 접근(Bastion Host) : Key가 필요 ( S3 Bucket을 사용 ---> 위험)

‣ 퍼블릭 서브넷에 있는 윈도우를 통해서 접근(Bastion Host) : Key를 복사하기 쉬움, RDP는 오른쪽 마우스를 복/붙, 권한 설정(상속 제거, 읽기만 허용), 보안 그룹에서 허용

‣ EIP를 통해 접근해서 설정, 설정이 끝나면 EIP를 Release : 가장 간단, 보안 그룹에서 허용

 

 

• EC2에 DB를 직접 설치해서 운영하는 방법  vs.  RDS를 사용하는 방법

‣ RDS를 사용하는 경우 AWS에서 관리해줌, 비용이 약간 더 비쌈, root 권한을 사용할 수 없음, DB에 대한 Tuning, Customizing을 할 수 없음

‣ EC2에 DB를 직접 설치 : 관리를 잘하기 어려움, 기존 DB가 RDS와 호환이 안 되는 경우에 택할 수 있음, root 권한 사용 가능

 

실습  EC2 데이터베이스 만들기

‣ DB 서버 설정

더보기
ec2_DB_server 이름으로 설정
프라이빗 서브넷에 설정
보안 그룹 퍼블릭 서브넷 IP 지정

Public Subnet 접근이 가능하게 하기 위해 퍼블릭 서브넷 IP 지정

EC2 생성 확인
EIP 주소 할당

프라이빗 서브넷 접근을 하기 위해 탄력적 IP 주소 할당을 해줌

EC2에 EIP 주소 연결
EIP 주소 확인
DB server EC2 에 SSH로 접속
sudo apt install mysql-server

mysql-server 설치

sudo myslq -u root -p

데이터베이스에 접속 및 생성

mysql> create database gnuboard;
mysql> create user  bts@'%' identified by '1234';
mysql> grant all privileges on  gnuboard.*  to bts@'%';
mysql> flush privileges;
mysql> exit
sudo vim mtsql.cnf
mtsql.cnf 파일

bind-address 앞에 #을 붙여서 주석처리(외부에서 접속 가능하도록))

‣ Web Server 설정

더보기
ec2_web_server 이름으로 EC2 생성
Public Subnet으로 설정
EC2 생성 확인
ec2_web_server에 SSH로 접속
sudo apt install apache2 -y
sudo  apt  install  php  php-common  php-gd  php-xml  php-json  php-fpm  php-curl  php-mysql  git  -y

‣ Gnuboard에서 DB서버로 연결하기

더보기
sudo  git  clone  https://github.com/gnuboard/gnuboard5
권한 설정 및 아파치 재시작
DB서버의 사설IP주소:3306

• 사설 IP로 설정해도 잘되는 이유

‣ 서브넷들을 라우팅 테이블에 명시적 연결로 구성

보안 그룹에서 퍼블릭 서브넷 IP 주소에서 3306번 포트로 들어오는 경우 허용

‣ DB서버 살펴보기

더보기
show databases;

database가 여러 개라서 s를 붙여야 함

show tables;

테이블 목록 확인

desc g5_board_file;

g5_board_file의 칼럼 목록 확인

select * from g5_board_file;

테이블에 저장된 내용 확인

select mb_id,mb_password,mb_name from g5_member;

회원 목록 확인(id, pw, 이름)

‣ 마무리 작업

더보기
Elastic IP 주소 해제 & Release 해제하고 릴리스
ec2_db_server의 보안 그룹에서 SSH항목 삭제

 

• Spot Instance

‣ 사용자가 제시한 금액 ($0.0044)이 시세 ($0.0043) 보다 높으면 내 인스턴스를 실행하고, 시세가 더 높으면 내 인스턴스를 중지 또는 삭제하도록 설정 가능

 

 

• Amazon Inspector

‣ Amazon EC2 인스턴스에서 소프트웨어 취약성과 의도하지 않은 네트워크 노출을 자동으로 검색하고 스캔

‣ 취약점 분석 및 스캐닝해주는 AWS 서비스

 

 

• 인스턴스 스토어

‣ 인스턴스에서 임시 데이터를 저장하는 데 사용 가능

‣ 인스턴스 스토어에 저장된 데이터를 삭제 : 인스턴스를 중단하거나 최대 절전 모드로 전환하거나 종료

 

 

• LAMP

‣ Linux용 Apache + MySQL + PHP

 

Amazom Linux2에 LAMP 웹 서버 설치

‣ LAMP 서버 준비

더보기
Lamp_server ec2 생성
Public Subnet에 설치
Lamp 서버EC2에 SSH로 접속
Amazon Linux Extras 리포지토리를 설치하여 Amazon Linux 2용 LAMP MariaDB 및 PHP 패키지 설치
Amazon Linux 버전 보기
Apache 웹 서버, MariaDB, PHP 소프트웨어 패키지를 설치
Apache 웹서버 시작 및 매번 시스템 부팅시 자동 시작
웹 서버 테스트
사용자를 apache 그룹에 추가
로그아웃 하고 다시 접속하기
apache 그룹 확인
/var/www  및 그 콘텐츠의 그룹 소유권을  apache  그룹으로 변경
그룹 쓰기 권한을 추가하여 나중에 하위 디렉터리에 대한 그룹 ID를 설정하려면  /var/www 와 그 하위 디렉터리의 디렉터리 권한을 변경
그룹 쓰기 권한을 추가하려면  /var/www  및 그 하위 디렉터리의 파일 권한을 반복하여 변경

‣ LAMP 서버 테스트

더보기
Apache 문서 루트에서 PHP 파일을 생성
웹 브라우저에서는 방금 생성한 파일의 URL을 입력
phpinfo.php  파일을 삭제

이 파일은 유용한 정보를 포함하고 있지만 보안상 이유로 인터넷에 공개되어서는 안 됨

‣ 데이터베이스 서버 보안 설정

더보기
MariaDB 서버를 시작
mysql_secure_installation 를 실행⭐

‣ WordPress 블로그 호스팅

더보기
wget  명령을 사용하여 최신 WordPress 설치 패키지를 다운 및설치 패키지의 압축 및 아카이빙을 해제

 

데이터베이스 서버를 시작
wp-config-sample.php  파일을  wp-config.php 라는 파일에 복사 및 wp-config.php  파일 편집
DB 설정
mysql> create database gnuboard;
mysql> create user  bts@'%' identified by '1234';
mysql> grant all privileges on  gnuboard.*  to bts@'%';
mysql> flush privileges;
mysql> exit
wp-config.php 수정
httpd.conf 파일 수정
httpd.conf 파일 수정
LAMP 스택 설치의 일부로 amazon-linux-extras에서 php7.2를 설치한 경우 이 명령은 PHP 그래픽 그리기 라이브러리의 버전 7.2를 설치
Apache 웹 서버에 대한 파일 권한 수정
시스템이 부팅될 때마다  httpd  및 데이터베이스 서비스가 시작
데이터베이스 서버 실행 및 웹 서버 실행
Wordpress 설정 완료