네트워크 지식 정리(3)
11. DNS
DNS는 Domain Name System의 줄임말이다. 192.168.2.1과 같이 컴퓨터가 읽을 수 있는 IP주소를 www.example.com과 같이 사람이 읽을 수 있는 이름과 맵핑하기 위해서 사용한다.
웹 브라우저에서 도메인 이름을 입력하면 브라우저는 도메인이름을 IP 주소로 변환하기 위해서 DNS 서버로 요청을 보낸다.
DNS 서버는 데이터베이스에서 도메인 이름을 조회하여 IP 주소를 반환한다. 웹 브라우저는 IP 주소를 이용해서 웹 서버에 연결할 수 있다.
DNS는 인터넷상에서 웹 사이트 및 리소스를 쉽게 액세스 할 수 있도록 도와주는 데이터베이스 서비스다. 다른 데이터베이스 서비스와 마찬가지로 DNS는 여러 정보들을 저장하고 있는데 이를 레코드(Record)라고 한다. 주요 레코드는 아래와 같다.
- A (Address) : IPv4 주소와 도메인 이름을 맵핑한다.
- AAAA (IPv6 Address) : IPv6 주소와 도메인 이름을 맵핑한다.
- CNAME (Canoncial Name) : 도메인 정식이름(canoncial name)에 대한 별칭.
- MX (Mail Exchange) : 도메인에 대한 이메일을 처리하는 메일 서버를 지정한다.
- NS (Name Server) : 도메인 서비스를 위한 네임 서버를 지정한다.
- SOA (Start of Authority) :
- TXT (Text) : 이메일 인증에 사용하는 SPF(Sender Policy Framework) 레코드와 같이 도메인과 관련된 추가적인 정보를 포함한다.
- SPF(Sender Policy Framework) : 도메인 소유자가 도메인을 대신하여 이메일을 전송할 수 있는 서버를 지정하여 이메일 스푸핑 또는 피싱 공격을 방지하기 위해서 사용한다.
TLD(Top-Level Domain) 혹은 최상위 도메인은 DNS 이름에서 마지막 점(".") 뒤에 오는 도메인 이름을 의미한다. TLD는 인터넷에서 가장 높은 수준의 도메인 이름을 나타낸다. 예를 들어 "example.com"에서 TLD는 ". com"이다. ". org", ". co.kr", ". io", ". gov" 등이 TLD이다.
TLD는 크게 일반 최상위 도메인(gTLD)과 국가 코드 최상위 도메인(ccTLD)의 두 가지 유형이 있다.
gTLD는 특정 국가나 지역에 한정되지 않는 일반적인 목적으로 사용한다. ". com", ". org", ". net", ". edu" 등이 gTLD의 예이다.
ccTLD는 국가나 지역에 따라 달라진다. 영국의 경우 ". uk", 프랑스 ". fr", 미국 ". us", 대한민국 ". co.kr"등이 있다.
DNS 구성 요소
DNS는 아래의 3가지 요소로 구성된다.
- 도메인 네임 스페이스(Domain Name Space)
- 네임 서버(Name Server) : 권한 있는 DNS
- 리졸버(Resolver) : 권한 없는 DNS
네임 서버(DNS 서버와 동일)는 도메인 이름에 대한 IP 정보를 포함한 레코드를 저장하고 있는 서버다.
DNS recursive resolver이라고 부르기도 하는 DNS Resolver는 DNS 이름을 IP 주소로 변환하는 역할을 하는 서버다. DNS Resolver는 클라이언트와 DNS Server의 중간에 위치하는데, 어떤 네임서버로 요청을 해야 하는지에 대한 정보를 가지고 있다. 또한 캐시도 가지고 있는데, 클라이언트가 요청한 도메인 정보가 캐시에 저장돼 있다면, 클라이언트에게 바로 반환한다.
DNS 작동 과정
- 웹 브라우저(Client)에 www.example.com를 입력한다. 웹 브라우저는 Resolver Server에 www.example.com에 대한 IP 주소를 요청한다.
- Resolver Server는 Root Name Server에. com TLD 네임 서버에 대한 IP 정보를 요청하고, Root Name Server는. com TLD 서버의 IP 5.6.7.8을 반환한다.
- Resolver Server는. com TLD 네임 서버에 www.example.com example.com SLD 네임 서버의 IP를 요청하고,. com TLD Name Server는 1.2.3.4를 반환한다.
- Resolver Server은 SLD 네임서버에 www.example.com의 IP를 요청하고 SLD 네임 서버는 123.123.123.123을 반환한다.
- Resolver Server는 121.123.123.123을 클라이언트에 반환하고, 클라이언트는 해당 IP로 연결을 한다.
12. VPC
VPC(Virtual Private Cloud)는 AWS에서 제공하는 서비스로 가상의 네트워크를 구성할 수 있게 해 준다. 사용자는 VPC를 사용해서 자체 데이터 센터로 생각할 수 있는 논리적으로 격리된 네트워크를 만들 수 있다. 이 네트워크는 IP 주소, 서브넷, 라우팅 테이블, 인터넷 게이트웨이, NAT를 포함하여 가상 네트워크 환경을 완벽하게 제어할 수 있다.
VPC로 만든 네트워크 위에 EC2 인스턴스(가상머신), 데이터베이스, 로드밸런서 등의 모든 AWS 리소스가 실행된다.
13. VPN
VPN(Virtual Private Network - 가상 사설망)은 네트워크와 네트워크 혹은 사용자와 네트워크 간에 암호화된 암호화된 네트워크 연결을 생성하는 기술이다. VPN은 인터넷상에 암호화된 터널을 만들기 때문에, 안전한 데이터 통신이 가능하다.
VPN은 크게 두 가지 타입이 있다.
- Site-To-Site VPN : 두 개의 네트워크를 VPN 장치를 이용해서 연결한다. 네트워크 단위에서 직접 연결이 되기 때문에, 사용자는 PC에 VPN 클라이언트등을 설치할 필요 없이 다른 네트워크에 접근할 수 있다. 온-프레미스 데이터 센터를 클라우드에 연결하기 위해서 혹은 회사 네트워크를 클라우드나 온-프레미스 데이터 센터에 연결하기 위해서 사용한다.
- Host-To-Site VPN : 개별 사용자가 자신의 PC에 설치된 VPN 클라이언트를 이용해서 네트워크에 접근한다. 원격 근무자가 안전하게 네트워크에 접근할 수 있도록 하기 위해서 사용한다.
14. SSL
SSL(Secure Sockets Layer)는 인터넷 데이터 통신에 사용하는 보안 및 암호화 프로토콜이다. SSL은 TLS(Transport Layer Security)로 대체되었지만 여전히 SSL을 사용한다. 보통은 SSL 혹은 SSL/TLS로 부른다.
SSL은 암호화가 필요한 여러 애플리케이션에 사용하는데, 유명한 애플리케이션은 SSH와 HTTPS다. HTTPS의 경우 웹 서버와 웨 브라우저간에 보안 채널을 통해서 암호화된 통신을 할 수 있다. 이를 통해 해커에 의한 도청, 데이터 변조 및 위조를 방지할 수 있다.
SSL HandShake
SSL/TLS Handshake는 TLS 암호화를 사용하기 위해서 클라이언트와 서버 간 통신 세션을 시작하는 일련의 과정이다. TLS Handshake를 하는 동안 서버와 클라이언트는 서로 메시지를 교환하면서 사용할 알고리즘을 설정하고, 세션키를 생성한다. TLS Handshake는 TCP Handshake 이후에 수행된다.
아래 그림은 SSL Handshake 과정을 묘사하고 있다.
- 먼저 TCP 3-Way Handshake 과정을 거친다.
- Client Hello: 클라이언트는 서버에 SSL/TLS 버전, 지원하는 cipher suites "ClientHello.random"이라고 부르는 랜덤값을 전송한다.
- Server Hello: 서버는 SSL/TLS 버전, 선택한 sipher suite, "ServerHello.random"이라고 부르는 랜덤 값, 암호화에 사용할 퍼블릭 키(public key), 디지털 서명 정보를 응답한다.
- Server Key Exchange: 경우에 따라 서버는 암호화 키를 설정하는 데 사용할 Diffie-Hellman 공개키와 같은 추가 정보를 클라이언트에 전송한다.
- Certificate Request(인증서 요청): 서버가 클라이언트 인증을 요청하는 경우 클라이언트의 디지털 인증서를 요청한다.
- Server Hello Done: 서버가 Server Hello 프로세스가 완료되었음을 알리는 메시지를 전송한다.
- Client Key Exchange: 클라이언트는 shared secret key를 생성하는 데 사용할 임의의 값을 생성하고 서버의 공개키로 암호화한다.
- Certificate Verification: 서버가 클라이언트의 인증서를 요청했다면 이를 서버로 전송한다. 인증서를 받은 서버는 인증서의 디지털 서명을 확인하고 신뢰할 수 있는 인증기관이 발급했는지를 확인한다.
- Change Cipher Spec: 클라이언트와 서버가 합의된 암호를 사용하여 암호화된 통신으로 전환할 것임을 나타내는 메시지를 보낸다.
- Finished : 클라이언트와 서버의 handshake 프로세스가 완료되고 암호화된 데이터를 교환할 준비가 되었음을 확인하는 메시지를 전송한다.
Handshake가 완료되면 클라이언트와 서버는 "shared secret key"를 이용해서 암호화된 데이터를 교환한다.