Docker란?

컨테이너 기술을 사용하여 애플리케이션에 필요한 환경을 신속하게 구축하고 테스트 및 배포를 할 수 있게 해주는 플랫폼이다.

무료로 제공해주는 CE(Community Edition)과 EE(Enterprise Edition)으로 나뉘고 아래와 같은 플랫폼들에서 작동 가능하다.

  • Linux
    • Ubuntu
    • CentOS
    • Debian
  • Cloud
    • Azure
    • AWS
  • Wibdows10
  • MacOS
  • ETC

 

Docker Image란?

도커에서 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 말하며, 특정 프로세스를 실행하기 위한(컨테이너 생성(실행)에 필요한) 모든 파일과 설정값(환경)을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치할 필요가 없는 상태의 파일을 의미한다.

 

또한, 컨테이너를 생성하는 Base가 되는 것이 바로 이미지이다. 이미지는 컨테이너를 실행하는데 핗요한 모든 것을 포함하고 재사용이 가능하다.

 

특징

  • 이미지는 상태 값을 가지지 않고 변하지 않는다. (Immutable)
  • 하나의 이미지는 여러 컨테이너를 생성할 수 있고, 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아있다.
  • 도커 이미지들은 github와 유사한 서비스인 DockerHub를 통해 버전 관리 및 배포(push&pull)가 가능하다.
  • 다양한 API가 제공되어 원하는 만큼 자동화가 가능하다.
  • 도커는 Dockerfile 을 이용하여 이미지를 만든다. Dockerfile에는 소스와 함께 의존성 패키지 등 사용했던 설정 파일을 버전 관리하기 쉽도록 명시된다.

 

Container란?

컨테이너는 Host OS 상에서 리소스를 논리적으로 구분하여 마치 별도의 서버인 것처럼 사용할 수 있게 해주는 기술이다.

물리적으로는 구분하지 않기 때문에 쉽게 제거하고 다시 생성할 수 있어 가볍다고 표현할 수 있다.

컨테이너 사용 이유

  • 여러 애플리케이션에서 사용하고 있는 라이브러리나 미들웨어 버전에 대한 충돌 회피
  • 높은 이식성과 확장성
    • 컨테이너 이미지 그대로 의존성 없이 다른 환경에서 실행 가능
    • 여러 개의 컨테이너 실행하여 이중화 가능
  • 다양한 운영 환경 지원

 

'Infra' 카테고리의 다른 글

MSMTP와 SMTP  (0) 2023.04.18
[Netdata] Email을 이용한 알림 설정  (0) 2023.04.18
[Netdata] 오픈소스 모니터링 시스템  (0) 2023.04.17

MSMTP란?

SMTP 클라이언트이며, 기본 모드에서는 추가 배달을 담당하는 SMTP 서버로 메일을 전송한다.

명령줄 옵션 및 종료 코드는 sendmail과 호환된다.

 

메일 사용자 에이전트(MUA)와 함께 MSMTP를 사용하려면 메일 계정으로 구성 파일을 만들고 msmtp를 호출하도록 MUA에 알려줘야한다.

 

기능은 다음과 같다.

  • Sendmail 호환 인터페이스 (명령줄 옵션 및 종료 코드)
  • 여러 계정 지원
  • 클라이언트 인증서를 포함한 TLS/SSL 지원
  • IDN(국제 도메인 이름) 지원
  • 다양한 인증 방법
  • 명령 파이프라인을 사용한 빠른 SMTP 구현
  • DSN(배송 상태 알림) 지원
  • SOCKS 프록시 지원

 

 

SMTP란?

SMTP(Simple Mail Transfer Protocol)의 약자로, 일반적인 전자 메일 전송을 위한 표준 프로토콜이며, 이메일을 송수신하는 서버를 말한다.

 

  • 다른 사용자에게 메일을 보내려면 넷스케이프의 메신저나 인터넷 익스플로어의 아웃룩 익스프레스, 유도라 등의 윈도우 프로그램을 통해 메일을 보내야 함.
  • 메일을 작성해서 전송하면 그 메일은 SMTP 서버(전송하는 메일 서버, Outgoing mailserver)로 전송되며, 이 SMTP 서버에서 SENDMAIL 프로그램을 구동하여 해당 메일 주소로 메일을 보내게 됨.
  • 바로 이러한 역할을 하는 것을 SMTP 서버라고 함.

 

특징

  • 텍스트 기반 프로토콜
  • 프로토콜은 TCP (SSL?TLS)
  • SMTP 서버와 클라이언트로 구성

 

 

'Infra' 카테고리의 다른 글

[Docker] Docker의 개념  (0) 2023.04.18
[Netdata] Email을 이용한 알림 설정  (0) 2023.04.18
[Netdata] 오픈소스 모니터링 시스템  (0) 2023.04.17
* Netdata 설치는 이전 포스트 참고

2023.04.17 - [Infra] - [Netdata] 오픈소스 모니터링 시스템


다양한 오픈소스 모니터링 툴 중 Netdata를 선택한 가장 큰 이유는 바로!!

20가지가 넘는 알림들을 실시간으로 메일이나, 텔레그램, SMS, Email 등으로 보내주기 때문이다.

 

Netdata의 알림 기능을 사용해서 특정 프로그램의 CPU나 GPU의 점유율이 어느 정도 만큼 줄었을 때 설정한 알림을 통해 전달해주기 때문에 작업 종료를 빠르게 파악할 수 있다.

 

Email 알림을 이용한 글이 몇 개 없어 작업하는데 어려움을 겪어 이렇게 남겨놓는다..

 

Email 알림 구성

Netdata는 기본적으로 sendmail을 사용하여 이메일 알림을 보내지만 이메일 서버를 관리하는 것은 쉬운 일이 아니다.

Netdata는 SMTP를 지원하지 않지만 msmtp 클라이언트라는 패키지를 설치할 수 있어 SMTP 서버로 메일을 보낼 수 있다.

 

1. msmtp 설치

$ yum install msmtp

 

2. msmtp 구성 파일 생성

$ sudo vi /etc/msmtprc

 

3. 위에서 생성한 파일에 아래 내용 입력

# Set default values for all following accounts.
defaults

# Use the mail submission port 587 instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# The SMTP server of your ISP
account gmail
host smtp.gmail.com
auth on
user <yoursesusername>
password <yoursespassword>

# Set default account to isp
account default: gmail

 

4. 생성한 파일의 권한 수정

$ chmod 644 /etc/msmtprc

 

5. Email 알림 설정을 위해 Netdata의 구성 파일 편집

$ cd /usr/lib/netdata/conf.d/
$ vi health_alarm_notify.conf

 

6. 아래 내용을 찾아 msmtp 경로 입력

# The full path to the sendmail command.
# If empty, the system $PATH will be searched for it.
# If not found, email notifications will be disabled (silently).
sendmail="/usr/bin/msmtp"

 

7. 아래 내용을 찾아 이메일 발송인과 수신인의 세부 정보 입력

# email global notification options

# multiple recipients can be given like this:
#              "admin1@example.com admin2@example.com ..."

# the email address sending email notifications
# the default is the system user netdata runs as (usually: netdata)
# The following formats are supported:
# EMAIL_SENDER="user@domain"
# EMAIL_SENDER="User Name <user@domain>"
# EMAIL_SENDER="'User Name' <user@domain>"
# EMAIL_SENDER="\"User Name\" <user@domain>"
EMAIL_SENDER="이메일 발송인"

# enable/disable sending emails
SEND_EMAIL="YES"

# if a role recipient is not configured, an email will be send to:
DEFAULT_RECIPIENT_EMAIL="이메일 수신인"
# to receive only critical alarms, set it to "root|critical"

 

8. 수정한 파일 저장 후 /etc/netdata 경로로 복사

$ cp /usr/lib/netdata/conf.d/health_alarm_notify.conf /etc/netdata/health_alarm_notify.conf

 

Email 알림 테스트

1. 설치 중 생성된 시스템 사용자 netdata로 로그인

$ sudo su -s /bin/bash netdata

 

2. 알람 알림 스크립트를 실행하여 테스트 알람 전송

$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test

 

3. 아래 결과가 나오면 테스트 성공

 

4. 수신인 이메일로 세 개의 테스트 경고 이메일을 받아야 성공

 

'Infra' 카테고리의 다른 글

[Docker] Docker의 개념  (0) 2023.04.18
MSMTP와 SMTP  (0) 2023.04.18
[Netdata] 오픈소스 모니터링 시스템  (0) 2023.04.17

Netdata란?

CPU 사용량, 디스크 활동, 대역폭 사용량, 웹 사이트 방문 등과 같은 실시간 메트릭을 수집한 다음 해석하기 쉬운 실시간 차트로 표시하도록 설계된 오픈 소스 도구이다.

Netdata는 시스템, 하드웨어, 컨테이너, 어플리케이션들로부터 수천개의 데이터를 실시간으로 수집하며 물리/ 가상 서버 및 컨테이너, 클라우드 환경, IOT 장비등 에서 영구적으로 동작한다.

 

대부분의 Linux 배포판 뿐만 아니라 Kubernetes나 Docker 등의 컨테이너 플랫폼 및 MacOS 등에서도 sudo 권한 없이 설치 할 수 있다.

 

Netdata는 아래와 같은 특징들을 가지고 있다.

  • 설정이 필요없다.
  • 관리가 필요없다.
  • 최소한의 Disk I/O 및 메모리 사용하며 싱글코어 1% 만의 CPU 점유한다.
  • 빠르고 인터렉티브 한 시각화를 제공한다.

 

설치방법

1. 서버 접속 후 아래 명령어 입력

curl https://my-netdata.io/kickstart.sh > /tmp/netdata-kickstart.sh && sh /tmp/netdata-kickstart.sh
  설치 중간중간 계속해서 설치할지 물어볼 때마다 Y 혹은 엔터키를 입력해준다.

 

2. 설치 완료 후 ip:19999 로 접속 하면 아래 화면처럼 바로 서버를 모니터링 할 수 있다.

 

* 자세한 설명은 아래 공식 문서를 통해 볼 수 있다.

https://learn.netdata.cloud/docs/getting-started/

'Infra' 카테고리의 다른 글

[Docker] Docker의 개념  (0) 2023.04.18
MSMTP와 SMTP  (0) 2023.04.18
[Netdata] Email을 이용한 알림 설정  (0) 2023.04.18

SI(System Integration, 시스템 통합)

  • 전산시스템을 필요로 하는 곳으로부터 하청을 받아, 시스템의 기획 / 개발 / 유지보수 / 운영 등을 대신해주는 업종
  • 주된 고객은 개인이 아닌 기업, 관공서, 금융권 등
  • 고객의 요청에 따라 제안서를 작성하고, PM과 개발자를 투입하여 프로젝트를 수행한 후, 소요된 인건비와 솔루션의 단가 등을 벌어들이는 형태의 산업
  • 따라서 도급 시스템과 파견 업무를 그 특성으로 함
  • 개발 입문자에게 장벽이 높지 않음
  • 국내의 SI 업계는 주로 스프링 프레임워크를 기반으로 하는 Java 웹 개발이나 모바일 앱 개발을 함
PM이란?
제품과 관련된 모든 활동을 관리, 감독하며 책임지는 사람.
제품 출시와 업데이트를 위한 일정 및 인력관리부터 마케팅, 영업 등 전 분야를 아우르는 사람.

SM (System Management, 시스템 운영 또는 유지보수)

  • SI 프로젝트의 결과로 구축된 시스템을 운영하고 발생하는 문제에 대처하는 업무
  • 좀 더 쉽게 설명하자면 게임 / 어플 등의 응용 프로그램에서 지속적인 업데이트, 버그 수정, 서버 점검 등을 의미함
  • 실제 사용자에게 서비스되고 있는 것을 관리하는 업무인 만큼, 기획자/발주자 만을 상대하는 것이 아닌 실시간으로 발생하는 트러블에 대응한다는 것에 차이가 있음
  • SI 프로젝트가 완료되면 개발자가 일정기간 운영에 개입하여 트러블 슈팅을 담당함. 따라서 SI 개발자는 SM 업무도 흔히 경험함

'💻IT' 카테고리의 다른 글

라이브러리(Library) 와 프레임워크(Framework)의 차이  (0) 2022.08.22

📜Let's Encrypt

사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관

몇 가지 TLS 인증서 종류 중 완전 자동화가 가능한 DV(Domain Validated, 도메인 확인) 인증서를 무료로 발급함.

발급된 인증서는 유효기간이 90일이며 만료 30일 전부터 갱신 가능. 갱신 가능 횟수는 무제한

 

⚠️주의사항

  • 인증서 발급 시, 반드시 80번 포트가 열려있어야 함. 만약 열지 않고 진행한다면 발급해주지 않으며 방화벽이나 포트 포워딩을 통해 열려있나 확인해야함
  • 중복되는 도메인에 성공과 실패 관계없이 1주일 안에 5회 재발급이 카운트된다면, 해당 시간부터 1주일동안 발급 불가

 

인증서 발급 방식

1. standalone

standalone 명령어 사용 시 certbot에 내장된 세팅을 사용하여 도메인만으로 인증서가 발급되고, 갱신 절차도 자동으로 처리됨.

*.example.com 형태의 와일드카드 서브 도메인 인증서는 발급 불가

 

2. webroot

webroot 명령어 사용 시 자신의 웹 서버에서 작동중인 웹사이트를 이용해서 인증서를 발급하고, 갱신 절차도 자동으로 처리됨.

*.example.com 형태의 와일드카드 서브 도메인 인증서는 발급 불가

 

3. dns

도메인이 연결된 DNS에 TXT 레코드를 생성해서 인증서를 발급하는 방식으로, 인증서 발급 과정에 웹 서버가 필요 없고 *.example.com 형태의 와일드카드 서브 도메인 인증서 발급 가능

'🌐Web' 카테고리의 다른 글

SSL 인증서  (0) 2022.08.22
SSL  (0) 2022.08.22

🔒SSL 인증서

SSL 인증서엔 도메인명, 회사 정보, 서버 공개키가 포함되어 있으며, 이 정보를 통해 도메인의 사이트 유효성 확인, 암호화 통신 가능

 

📜SSL 인증서 종류

1. DV(Domain Validation)

도메인의 소유만을 검증하여 발급하는 인증서

2. OV(Organization Validation)

도메인 뿐만 아니라, 해당 도메인을 소유한 회사, 기업에 대해 검증하여 발급하는 인증서

3. EV(Extended Validation)

DV, OV 인증과 더불어 법인 운영 담당자의 재직 증명, 법인 운영 기간 등 디테일한 요일은 검증하여 발급하는 인증서

 

'🌐Web' 카테고리의 다른 글

Let's Encrypt란?  (0) 2022.08.22
SSL  (0) 2022.08.22

🔐SSL(Secure Sockey Layer)

웹 서버와 클라이언트의 통신 암호화 프로토콜

SSL이 적용되지 않은 통신의 경우, 위 그림과 같이 평문(Plain Text)가 그대로 전송됨.

만약 제 3자가 어떠한 방식으로 통신 패킷을 탈취할 경우, 그 내용을 쉽게 확인할 수 있음.

 

SSL을 적용한다면 이러한 문제를 해결할 수 있음.

요청을 암호화해서 보내므로 통신 패킷이 탈취되도 복호화 키가 없으면 원래 내용을 알 수 없기 때문!

 

 

🔒TLS(Transport Layer Security)

SSL 3.0의 보안취약점을 보완한 통신 보안 프로토콜

SSL을 보완한 것이 TLS이지만, 인터넷에 적용되는 통신 보안 프로토콜을 전부 통틀어서 SSL이라 부름.

 

❗️SSL 특징

  1. URL 프로토콜은 https 이며, 기본 포트는 443
  2. 통신 데이터가 암호회되어, 패킷이 탈취되는 사고가 발생해도 데이터를 지킬 수 있음
  3. SSL 인증서를 통해 도메인의 신뢰성을 검증할 수 있음
  4. 데이터 송/수신 과정에서 암/복호화가 발생하므로 속도가 느림

 

🔎SSL 원리

SSL의 통신하는 원리는 아래와 같으며, 이러한 일련의 과정을 HandShake라 함.

클라이언트와 서버 간의 요청/응답을 반복하며 통신에 필요한 사전 작업을 하는게 마치 악수 같아 붙여졌다고 함

1. ClientHello 요청

클라이언트가 특정 주소에 접근하면, 해당하는 서버에 요청을 보냄 (Naver에 접근하면 네이버 서버에 요청을 보내게 됨)

이 요청에는 아래와 같은 정보들이 포함되어 있음.

클라이언트의 주요 정보를 서버에 전송하여, 해당 클라이언트를 식별하고, 어떤 암호화를 사용할 수 있는지 등의 정보를 서버가 인지하도록 함.

  • 난수 데이터
  • 암호화 프로토콜 정보 (프로토콜, 버전 등)
  • 클라이언트가 사용 가능한 암호화 기법
  • 세션 아이디
  • 기타 확장 정보

2. ServerHello 응답

서버가 ClientHello 요청을 받으면, 아래의 정보를 담아 클라이언트에게 일종의 화답을 보냄.

  • 난수 데이터 (ClientHello에서 보낸 데이터와 아무런 상관관계가 없는 별개의 데이터)
  • 서버가 사용할 암호화 기법
  • 인증서
    • CA
    • 도메인
    • 공개키

클라이언트가 사용 가능하다고 통보한 암호화 기법 중 서버에서 활용할 암호화 기법을 전달하여 동일한 암호화 기법으로 송수신할 수 있도록 선언함.

인증서 정보와 함께, 서버와의 암호화 통신을 위한 서버 공개키가 전달됨. 서버의 공개키로 데이터를 암호화하면 서버는 이를 받아 개인키로 복호화하여 요청을 분석할 수 있음.

 

3. 인증서 검토

서버가 전달한 인증서가, 실제 해당 서버의 인증서인지. 신뢰할 수 있는 CA에서 발급된 것인지, 실제 해당 CA에서 발급받았는지 등 인증서를 검토함.

 

4. Premaster Secret 송수신

ClientHello, ServerHello에서 송/수신한 난수 데이터를 조합하여 Premaster Secret을 생성함.

이를 ServerHello에서 전달받았던 공개키로 암호화함. 이 데이터는 서버가 가진 개인키로만 복호화 가능!!

즉, 이 데이터는 탈취된다 하더라도 그 내용이 보호됨.

서버는 수신된 데이터를 복호화하여 클라이언트와 동일한 Premaster Secret을 저장할 수 있음.

 

5. 통신 키 생성

보유한 Premaster Secret을 토대로 Master Secret, Session Key를 생성함.

이를 통해 클라이언트와 서버가 동일한 키를 보유하게 되므로 자신들끼리의 암호화 통신이 가능함.

 

6. 데이터 송수신

필요한 데이터는 저장된 Session Key를 통한 대칭키 암호화 방식으로 암/복호화하여 통신함.

 

7. 세션 종료

클라이언트와의 연결이 끊겼을 경우 사용했던 Session Key는 폐기함.

 

 

📚정리

SSL은 통신 패킷을 암호화하여 패킷 탈취, 정보 누출 등을 방지하기 위한 보안 프로토콜.

현재는 모두 TLS로 교체되었지만, SSL 자체가 고유명사가 되어 넓은 의미의 통신 보안 프로토콜을 명칭하는 의미로 쓰임.

'🌐Web' 카테고리의 다른 글

Let's Encrypt란?  (0) 2022.08.22
SSL 인증서  (0) 2022.08.22

+ Recent posts