웹 서버를 설정할 때 종종 액세스 자체를 제한해야 하는 경우가 있다. 물론 많은 웹 애플리케이션들이 독자적인 인증/권한 관리 시스템을 제공한다. 하지만 그러한 애플리케이션을 이용 할 수 없거나 "그냥 간단하게 웹 서버가 제공하는 기능을 이용해서" 접근제어를 하고 싶을 때가 있다. 회사 내부에서 사용하는 관리자 페이지가 이런 경우다. Nginx 웹 서버를 이용해서 아이디/패스워드 기반으로 접근을 제어하는 방법을 살펴보자. 우분투리눅스 17.04를 기준으로 설명한다.
몇 번의 버튼 클릭으로 만들 수 있다. Aurora는 AWS RDS의 서비스다. RDS를 찾아 들어가면 아래와 같이 설치 화면이 나온다. 1. Launch an Aurora DB instance 1. Restore Aurora DB cluster from S3두 가지 방법으로 데이터베이스를 만들 수 있다. 2번은 특히 빅데이터 처리를 통해서 분석된 데이터를 (온라인 서비스를 위해서) RDBMS로 올리려고 할 때 유용하게 사용 할 수 있다. 2번 방법은 나중에 살펴보자.
Go는 흐름을 제어하기 위한 일반적인 메커니즘인 if, for, switch, goto를 제공한다. 이 외에 고루틴(goroutine)을 실행하기 위한 go 문이 있다. 이외에도 defer, panic, recover이 있다. 여기에서는 defer를 다룬다.defer는 go에서 제공하는 흐름 제어 메커니즘(Control flow mechanism)이다. defer문을 이용해서 기술한 함수는 함수 호출 목록에 푸시(Push)되고, 호출한 함수가 반환된 후에 실행된다. defer 여러 목적으로 사용 할 수 있는데, 일반적으로 열려있는 함수를 닫거나 Mutex 잠금 해제 , 열린 파일 닫기등의 작업을 할 수 있다. 아래 코드를 보자.
와는 달리 전이중 통신 채널을 제공하는 프로토콜이다. HTTP와는 전혀 다른 프로토콜이지만 HTTP로 부터 유도되기 때문에, HTTP와 쎄트로 취급하는 경우가 많기는 하다. WebSocket을 이용하면 서버&클라이언트가 (마치 소켓 프로그램처럼) 자유롭게 메시지를 주고 받을 수 있다.NginX를 이용해서 WS를 프락시하는 방법을 살펴보려 한다. 테스트를 위해서 echo를 서비스하는 에 있는 server.go 프로그램을 그대로 사용했다. 코드를 실행했다. 이 코드는 8080 포트에 바인드 한다.
은 자바스크립트(Javascript)언어에서 파생되는 데이터형식으로 자바스크립트 사용시 자연스럽게 사용하게 된다. JSON은 아래와 같은 목적으로 사용한다. 데이터의 저장 유저입력으로 부터 자료구조의 생성 설정과 데이터 확인 자바스크립트가 웹에 워낙에 널리 펴저있기 때문에, 다른 대부분의 언어들역시 JSON을 다루기 위한 패키지(혹은 라이브러리)들을 제공하고 있다. JSON은 전체가 텍스트로 이루어지며, 중괄호로 표현되는 Key-Value 데이터 형식을 가진다. JSON 데이터는 .json 파일에 JSON 객체를 표시할 수도 있지만 프로그램 내에서 JSON 객체 혹은 문자열로 표시할 수도 있다. .json 파일로 작업할 경우 아래의 모습을 가진다.
히스토리를 조작해서 뒤로가기를 막을 수 있다. 자바스크립트를 이용하는 것이니 만큼, 자바스크립트를 지원하지 않는 브라우저에서는 사용 할 수 없다. 뒤로가기를 눌러서 이전 페이지를 호출할 경우 "에러"가 출력되는 경우가 많을 건데, 유저 실수를 막아서 사이트의 흐름을 원할히하기 위한 목적이라고 보면 된다. 다른 방법도 마찬가지로 완전히 막을 수 있는 그런 방법은 없다.
우분투 리눅스 17.10 환경에서 Virtual Hosts를 설정해보려 한다. Nginx에서는 Server Blocks라는 이름으로 부르는 것 같은데, 아파치웹서버가 득세하던 시절에 virtual host라고 불렀던 까닭에 virtual host라고 하는게 좀 더 익숙하다. (2018년 2월)현재 최신 버전인 우분투리눅스 17.10을 기준으로 한다.테스트가 목적이니 실 도메인을 가지고 설정하지는 않을 것이다. example.com과 test.com두 개의 도메인을 가지고 테스트 할 것이다. 하나의 nginx 서버에서 example.com과 test.com을 모두 서비스하는게 목적이다.
블럭체인(BlockChain)은 말 그대로 "블럭"의 "연속된 연결"이다. 이때 이 연결은 암호로 보호가 된다. 정보의 권한과 소유권은 계속 바뀔 수 있으며, 이를 추적하는 것은 매우 중요한 일이다. 블럭체인을 이용하면, 이러한 연속된 정보의 변경을 안전하게 저장하고 추적 할 수 있다. 블럭의 연결을 암호화해서 안전하게 관리하자라는 작업은 1991년 Stuart Haber와 W.Scott Stornetta에 의해서, 그 개념이 만들어졌다.
bcrypt는 Blowfish를 기반으로 만들어진 "단방향 암호화 해싱함수"로 1999년 USENIX에서 발표됐다. Rainbow table 공격을 막기 위해서 를 사용하며, 암호검사 요청이 반복될 수록 cost를 늘림으로써, 무차별 대입 공격(brute-force search)을 막을 수 있다. cost는 반복횟수로 2^n 이다. bcrypt 함수는 OpenBSD와 SUSE 리눅스를 비롯한 몇몇 리눅스 배포판에서 암호화 해시 알고리즘으로 사용하고 있다. 리눅스의 /etc/shadow 파일을 열어보면 "$2a$"나 "$2b$"로 시작하는 패스워드 해시가 있는데, 이들이 bcrypt 방식의 암호화 해시다.
16 POSTS HERE
NginX Password Authentication 설정
웹 서버를 설정할 때 종종 액세스 자체를 제한해야 하는 경우가 있다. 물론 많은 웹 애플리케이션들이 독자적인 인증/권한 관리 시스템을 제공한다. 하지만 그러한 애플리케이션을 이용 할 수 없거나 "그냥 간단하게 웹 서버가 제공하는 기능을 이용해서" 접근제어를 하고 싶을 때가 있다. 회사 내부에서 사용하는 관리자 페이지가 이런 경우다. Nginx 웹 서버를 이용해서 아이디/패스워드 기반으로 접근을 제어하는 방법을 살펴보자. 우분투리눅스 17.04를 기준으로 설명한다.
Aurora 데이터베이스 만들기
몇 번의 버튼 클릭으로 만들 수 있다. Aurora는 AWS RDS의 서비스다. RDS를 찾아 들어가면 아래와 같이 설치 화면이 나온다. 1. Launch an Aurora DB instance 1. Restore Aurora DB cluster from S3두 가지 방법으로 데이터베이스를 만들 수 있다. 2번은 특히 빅데이터 처리를 통해서 분석된 데이터를 (온라인 서비스를 위해서) RDBMS로 올리려고 할 때 유용하게 사용 할 수 있다. 2번 방법은 나중에 살펴보자.
AWS S3
S3에 대한 내용을 다룬다.
GoLang Defer
Go는 흐름을 제어하기 위한 일반적인 메커니즘인 if, for, switch, goto를 제공한다. 이 외에 고루틴(goroutine)을 실행하기 위한 go 문이 있다. 이외에도 defer, panic, recover이 있다. 여기에서는 defer를 다룬다.defer는 go에서 제공하는 흐름 제어 메커니즘(Control flow mechanism)이다. defer문을 이용해서 기술한 함수는 함수 호출 목록에 푸시(Push)되고, 호출한 함수가 반환된 후에 실행된다. defer 여러 목적으로 사용 할 수 있는데, 일반적으로 열려있는 함수를 닫거나 Mutex 잠금 해제 , 열린 파일 닫기등의 작업을 할 수 있다. 아래 코드를 보자.
Nginx를 이용한 WebSocket reverse proxy
와는 달리 전이중 통신 채널을 제공하는 프로토콜이다. HTTP와는 전혀 다른 프로토콜이지만 HTTP로 부터 유도되기 때문에, HTTP와 쎄트로 취급하는 경우가 많기는 하다. WebSocket을 이용하면 서버&클라이언트가 (마치 소켓 프로그램처럼) 자유롭게 메시지를 주고 받을 수 있다.NginX를 이용해서 WS를 프락시하는 방법을 살펴보려 한다. 테스트를 위해서 echo를 서비스하는 에 있는 server.go 프로그램을 그대로 사용했다. 코드를 실행했다. 이 코드는 8080 포트에 바인드 한다.
자바스크립트와 JSON
은 자바스크립트(Javascript)언어에서 파생되는 데이터형식으로 자바스크립트 사용시 자연스럽게 사용하게 된다. JSON은 아래와 같은 목적으로 사용한다. 데이터의 저장 유저입력으로 부터 자료구조의 생성 설정과 데이터 확인 자바스크립트가 웹에 워낙에 널리 펴저있기 때문에, 다른 대부분의 언어들역시 JSON을 다루기 위한 패키지(혹은 라이브러리)들을 제공하고 있다. JSON은 전체가 텍스트로 이루어지며, 중괄호로 표현되는 Key-Value 데이터 형식을 가진다. JSON 데이터는 .json 파일에 JSON 객체를 표시할 수도 있지만 프로그램 내에서 JSON 객체 혹은 문자열로 표시할 수도 있다. .json 파일로 작업할 경우 아래의 모습을 가진다.
Javascript로 뒤로가기 막기
히스토리를 조작해서 뒤로가기를 막을 수 있다. 자바스크립트를 이용하는 것이니 만큼, 자바스크립트를 지원하지 않는 브라우저에서는 사용 할 수 없다. 뒤로가기를 눌러서 이전 페이지를 호출할 경우 "에러"가 출력되는 경우가 많을 건데, 유저 실수를 막아서 사이트의 흐름을 원할히하기 위한 목적이라고 보면 된다. 다른 방법도 마찬가지로 완전히 막을 수 있는 그런 방법은 없다.
Nginx VirtualHost
우분투 리눅스 17.10 환경에서 Virtual Hosts를 설정해보려 한다. Nginx에서는 Server Blocks라는 이름으로 부르는 것 같은데, 아파치웹서버가 득세하던 시절에 virtual host라고 불렀던 까닭에 virtual host라고 하는게 좀 더 익숙하다. (2018년 2월)현재 최신 버전인 우분투리눅스 17.10을 기준으로 한다.테스트가 목적이니 실 도메인을 가지고 설정하지는 않을 것이다. example.com과 test.com두 개의 도메인을 가지고 테스트 할 것이다. 하나의 nginx 서버에서 example.com과 test.com을 모두 서비스하는게 목적이다.
블럭체인 소개
블럭체인(BlockChain)은 말 그대로 "블럭"의 "연속된 연결"이다. 이때 이 연결은 암호로 보호가 된다. 정보의 권한과 소유권은 계속 바뀔 수 있으며, 이를 추적하는 것은 매우 중요한 일이다. 블럭체인을 이용하면, 이러한 연속된 정보의 변경을 안전하게 저장하고 추적 할 수 있다. 블럭의 연결을 암호화해서 안전하게 관리하자라는 작업은 1991년 Stuart Haber와 W.Scott Stornetta에 의해서, 그 개념이 만들어졌다.
bcrypt
bcrypt는 Blowfish를 기반으로 만들어진 "단방향 암호화 해싱함수"로 1999년 USENIX에서 발표됐다. Rainbow table 공격을 막기 위해서 를 사용하며, 암호검사 요청이 반복될 수록 cost를 늘림으로써, 무차별 대입 공격(brute-force search)을 막을 수 있다. cost는 반복횟수로 2^n 이다. bcrypt 함수는 OpenBSD와 SUSE 리눅스를 비롯한 몇몇 리눅스 배포판에서 암호화 해시 알고리즘으로 사용하고 있다. 리눅스의 /etc/shadow 파일을 열어보면 "$2a$"나 "$2b$"로 시작하는 패스워드 해시가 있는데, 이들이 bcrypt 방식의 암호화 해시다.