본문 바로가기
배포/Linux(Ubuntu)

9. AWS EC2 인스턴스에 Nginx 웹서버 배포 및 보안그룹 설정

by moca7 2024. 12. 5.

 

 

 

ㅁ WSL에 설치된 우분투에 접속한다.

- EC2 인스턴스에 바로 접속하지 않고 WSL의 우분투에 접속하는 이유는, Windows에서 바로 SSH 접속을 시도할 경우 권한 설정이나 환경 설정에 문제가 생길 수 있기 때문이다.

- 특히 Windows에서 PEM 키 파일을 사용할 때 권한 설정이 제대로 되지 않아 접속이 불가능할 수 있다.

- WSL을 사용해서 리눅스 환경에서 쉽게 권한 설정을 하고, 이후 EC2에 접속하는 방식으로 진행한다.

 

 

 

 

 

 

 

 

- MobaXterm에서 WSL에 설치한 우분투로 접속한다.

 

- d드라이브의 lsw-keypair.pem 파일을 드래그 앤 드랍으로 갖다놓는다.

 

 

 

 

 

 

 

 

 

○ ls -l

 

- 현재 디렉토리의 파일과 디렉토리 목록을 자세한 정보(한, 크기, 수정 시간 등)와 함께 출력하는 명령어다.

 

 

 

 

 

 

 

- r, w, x는 각각 읽기, 쓰기, 실행이다.

 

- rwx 대신 숫자로도 표현할 수 있다.

r은 2의 2승자리라 4, w는 2의 1승자리라 2, x는 2의 0승자리라 1이다.

- 모든 권한이 다 있으면 7이다. 7이면 이 파일에 대해서 모든 권한이 있다는 뜻이다.

rw-면 6이다. 이 파일에 대해서 읽기와 쓰기 권한만 있다.

 

- rwx같이 문자 방식으로 표현할 수도 있고 7같이 숫자 방식으로 표현할 수도 있다.

 

 

- 파일에 대해 권한이 있어야 읽고 쓰고 실행할 수 있다.

 

 

 

 

 

 

 

 

○ chmod 400 "lsw-keypair.pem"

 

- "lsw-keypair.pem" 파일의 권한을 소유자만 읽을 수 있도록 설정하는 명령어다.

 

- 사용자(user)는 4, 그룹(group)은 0, 그 외 사용자(other)는 0이다.

저 개인키 파일에 대해서 파일의 소유자만 읽기 권한을 주겠다는 뜻이다.

 

 

 

 

 

 

 

 

 

○ ls -l

- lsw-keypair.pem 파일에 대한 권한이 파일의 소유자(user)만 읽기 권한을 갖도록 변경되었음을 확인할 수 있다.

 

 

 

 

 

 

 

- "퍼블릭 DNS를 사용하여 인스턴스에 연결" 부분을 복사한다.

 

 

 

 

 

 

 

 

ssh -i "lsw-keypair.pem" ubuntu@ec2-43-202-5-167.ap-northeast-2.compute.amazonaws.com

 

- AWS EC2 인스턴스에 SSH로 접속하는 명령어다. yes를 누른다.

 

 

- -i "lsw-keypair.pem" : 개인키 파일(lsw-keypair.pem)을 사용하여 접속한다.

이 파일은 EC2 인스턴스를 시작할 때 생성한 키다.

- ubuntu : 접속할 사용자 이름이다. Ubuntu 인스턴스의 기본 사용자 이름이다.

- ec2-43-202-5-167.ap-northeast-2.compute.amazonaws.com : EC2 인스턴스의 퍼블릭 DNS다.

이 주소를 통해 EC2 인스턴스에 접속한다.

 

 

 

 

 

- 클라이언트로 우분투를 사용할수있는 경우, 이 키를 가지고 SSH로 접속할 수 있다.

윈도우면 MobaXterm과 같은 터미널 프로그램을 통해 접속할 수 있다.

 

- 서버가 어디에 설치되었는지는 중요하지 않다. 그 서버의 IP 주소만 있으면 된다.

시스템에 IP주소가 부여되는데, 외부에서 서버에 접근하기 위해서는 공인주소여야 한다.

 

 

 

 

 

 

 

 

- 인스턴스 세부 정보를 보면 퍼블릭 ipv4 주소와 프라이빗 ipv4 주소 2개가 있다.

 

 

- 퍼블릭 ipv4 주소(공인 IP 주소)는 인터넷 상에서 하나밖에 없는 유일한 주소다. 

그래서 외부에서 찾아갈 수 있다.

 

 

- 프라이빗 ipv4 주소(사설 IP 주소)는 똑같은 주소가 중복될 수 있다.

그래서 외부에서 찾아갈 수 없다. 

- 사설 IP 주소는 그냥 우리 pc에 할당되어있는 내부 주소다. 다른 회사에서도 내 pc와 같은 주소일 수 있다.

 

 

 

 

 

 

 

 

 

○ curl ifconfig.me

- 자신의 공인 IP 주소를 확인하는 명령어다.

 

- 이 서버를 외부에서 접속하려면 172.31.6.32(사설 IP 주소)가 아니라 43.202.5.167(공인 IP 주소)로 접속해야 한다.

 

- 사설 IP 주소로는 내부 네트워크에서는 접속이 가능하지만 외부에선 접속이 불가능하다.

 

 

 

 

 

 

 

 

- 윈도우 cmd로도 curl ifconfig.me를 해본다.

 

 

- 현재 우리반의 pc는 같은 공유기를 쓰기 때문에 공인 IP 주소가 다 똑같다.  14.36.141.71이다.

 

- 각 pc마다 사설 주소는 다 다르다. 사설 IP는 내부 네트워크에서만 유효하다.

 

 

- PC에서 외부와 통신할 때, 사설 IP 주소 대신 공인 IP 주소로 통신이 나간다.

동일한 공유기를 사용하면 모든 PC가 같은 공인 IP 주소로 나간다.

 

 

- 학원 PC는 외부와 통신할 때 NAT (Network Address Translation)를 사용하여 사설 IP 주소를 공인 IP 주소로 변환한다.

NAT는 공유기에서 여러 장치가 하나의 공인 IP 주소를 사용하게 만들어주는 기술이다.

 

 

 

 

 

 

※ 사설 IPv4주소 대역

- 10.X.X.X (10.0.0.0 - 10.255.255.255)
- 172.16.X.X ~ 172.31.X.X (172.16.0.0 - 172.31.255.255)
- 192.168.X.X (192.168.0.0 - 192.168.255.255)

- 127.0.0.1 : Loopback 주소는 시스템 자체를 가리키는 특수한 IP 주소입니다.

 

- 사설 IP 대역은 네트워크 내부에서만 사용되고, 외부 인터넷에서는 인식되지 않습니다.

- 127.0.0.1은 테스트와 디버깅 용도로 사용됩니다.

 

- 주소는 유일한 주소여야 찾아갈 수 있다. 똑같은 주소가 여러군데 있으면 찾아갈 수 없다.

퍼블릭 주소는 하나밖에 없다. 공인 IP는 중복이 되지 않는 주소다.

- 사설 IP는 네트워크 내부 통신에만 사용되며, 공인 IP는 외부 인터넷에서 유일하게 식별될 수 있는 주소다.

 

 

 

 

 

 

 

○ sudo apt update

- 리눅스 시스템의 패키지 목록을 업데이트하는 명령어다.

 

 

 

 

 

 

 

 

 sudo apt install nginx

- 웹서버를 설치한다. 중간에 y를 누른다.

 

- Nginx 웹 서버를 설치하는 명령어다.

- Nginx(엔진엑스)는 주로 웹 서버 소프트웨어다.

 

- apt : 패키지 관리 도구로, 소프트웨어 패키지 설치와 관리를 담당한다.

 

 

 

 

 

 

 

 

 

 sudo service nginx status

- Nginx 웹 서버의 현재 상태를 확인하는 명령어다.

- 이 명령어는 Nginx가 실행 중인지, 중지 상태인지, 또는 문제가 있는지 등의 정보를 출력한다.

 

- active (running)이 뜬다. Nginx가 정상적으로 실행 중이란 뜻이다.

 

 

 

- ctrl + c로 나온다.

 

 

 

 

 

 

 

 

○ netstat -ntlp

- Linux 시스템에서 네트워크 상태를 확인하는 명령어다.

- 그런데 netstat을 찾을 수 없다고 뜬다. 설치하라고 뜨니까 설치한다.

 

- 최신 Linux 배포판에서는 기본적으로 net-tools 패키지가 설치되어 있지 않다.

따라서 netstat을 사용하려면 net-tools를 설치해야 한다.

 

 

 

○ sudo apt install net-tools

- Ubuntu 및 Debian 기반 시스템에서 net-tools 패키지를 설치하는 명령어다.

 

- net-tools : 네트워크 관련 유틸리티 도구 모음이다.

 

 

 

 

 

 

 

 

○ netstat -ntlp

- Linux 시스템에서 네트워크 상태를 확인하는 명령어다.

 

- net-tools 패키지를 설치하고 다시 실행하니 네트워크 상태가 보여진다.

 

 

 

 

 

 

ㅁ AWS에서 보안그룹 설정

 

 

 

 


- 인스턴스를 누른다.

네트워크 및 보안 - 보안그룹에서 80을 넣어줘야 한다.

- 이건 윈도우 디펜더같은 방화벽이다. 그러나 os에 포함된 방화벽은 아니고 별도의 방화벽이다.

 

- 보안그룹 ID 아래의 파란색 링크를 누른다.

 

 

 

 

 

 

 

- 현재 인바인드 규칙에 SSH만 되어있다.

 

- 인바인드 규칙 편집을 들어간다.

 

 

 

 

 

 

 

 

- 규칙추가를 클릭한다. 

 

- (스샷은 못찍음) 유형을 http로 선택하고, 돋보기가 있는 텍스트 박스를 눌러서 0.0.0.0을 누른다.

0.0.0.0은 아무데서나 다 들어올 수 있게 하겠다는 뜻이다.

 

 

 

 

 

 

 

 

- 그러면 이렇게 인바인드 규칙에 포트번호 80이 추가되었다.(유형은 HTTP)

 

- AWS의 보안그룹 설정을 통해 인스턴스(서버)가 외부에서의 HTTP(포트 80) 요청을 받을 수 있도록 방화벽 규칙을 추가했다.

 

 

 

 

 

 

 

- 퍼블릭 IPv4 DNS(이름주소)는 기니까 짧은퍼블릭 IPv4 주소를 카피해서, 인터넷창에 붙여넣기한다.

- 이름주소로도 된다.

 

 

 

 

 

 

 

- 그냥 크롬창에서는 바로 뜨고, 시크릿창에서는 경고한번뜨고 사이트로이동 누르면 이렇게 접속된다.

 

- 여기에 방명록 페이지가 뜨도록 해놨으면 방명록 페이지가 보여졌을 것이다.

 

 

 

 

- 이렇게 접속을 해봤다.

aws안에 있는 가상서버인 ec2에 동작시키고, 거기에 접근하려면 보안그룹이라고 하는 방화벽에서 문을 열어줘야 한다.

 

- 안에서 서비스가 되고 있어도 접속을 막고 있으면 접속할 수가 없다. 방화벽이라 생각하면 된다.