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

5. SSH 인증 방식

by moca7 2024. 12. 5.

 

 

 

SSH와 텔넷 비교

 

 

(1) SSH(Secure Shell)

- 원격 서버에 접속해 명령을 실행할 수 있는 보안 서비스.

- 통신이 암호화되어 중간에 스니핑(도청)을 당해도 데이터가 노출되지 않는다.

- 기본적으로 22번 포트를 사용한다.

 

 

(2) 텔넷(Telnet)

- SSH와 동일한 목적의 서비스지만 암호화되지 않은 통신을 사용한다.

- 중간에 스니핑 당하면 데이터가 노출되기 때문에 보안 문제로 거의 사용되지 않는다. 당연히 SSH를 쓴다.

 

 

 

 

포트와 프로토콜

 

- SSH : TCP 22번 포트 사용.

- HTTP : TCP 80번 포트(암호화 없음).

- HTTPS : TCP 443번 포트(암호화 지원).

- 톰캣 : TCP 8080번 포트를 사용.

 

- DNS: UDP 53번 포트(IP 주소와 도메인 이름 매핑).

 

- 서비스들은 각자 고유 포트 번호를 사용하며, 이 번호를 통해 서비스가 구분된다.

- 우리가 일반적으로 사용했던 서비스는 대부분 tcp다.

- DNS(Domain Name System)는 도메인 이름을 IP 주소로 변환하는 서비스다.

 

 

 

 

- 웹 서비스(HTTP) : 표준 포트는 TCP 80번이며, TCP 8080번은 대체 포트로 사용된다.

8080번은 주로 개발 환경에서 사용되거나, 80번 포트를 사용할 수 없을 때 대안으로 지정된다.

 

 

- http(80)은 telnet과 마찬가지로 암호화가 없다. 

요즘 어떤사이트를들어가든간에 http로 되어있는 사이트는 거의 없다.

http로 되어있는 사이트는 보안에 전혀 신경쓰지 않는 사이트다. 

현재 대부분은 https(443)이다.

 

 

- 이런 포트번호가 왜 쓰이냐면 http, https, 톰캣 다 tcp 위에서 동작을 한다.

그래서 얘네를 구분하기 위한 번호가 필요하다.

그래서 번호를 보면 바꾸지 않는 이상 어떤 서비스인지 알 수 있다.

 

 

 

 

 

ㅁ 포트

 

- 포트(port)는 "논리적인 접속장소"이다.

- 인터넷 프로토콜인 TCP/IP를 사용할 때에는 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용된다.

 

- 네트워크 상에서는 통신 시 IP를 토대로 해당 서버가 있는 컴퓨터에 접근한다.

그런데 대부분의 컴퓨터에는 하나의 컴퓨터에서 여러개의 서버가 실행된다. 

그래서 어느 서버에 접속해야 하는지 컴퓨터에게 알려주어야 한다. 이를 위해 사용되는 것이 포트 번호이다.

 

 

- 포트 번호는 해당 컴퓨터에서 실행되고 있는 서버를 구분 짓기 위한 16비트의 논리적 할당으로, 0 ~ 65536번이 존재한다.

 

- 0~1023번 포트는 특정 통신이 어떤 포트를 사용할지 정해져 있는 구간으로, well-known port라고 한다.

예를 들어 HTTP 통신은 80번 포트, HTTPS 통신은 443번 포트, SSH 통신은 22번 포트를 사용한다.

- 우리가 사용하는 웹서버는 기본적으로 80번 포트와 연결(listening)되어 있다.

 

 

 

 

 

ㅁ 한 개의 호스트에서 2개 이상의 서비스를 운영하는 경우

 

- 한 호스트에서 80번 포트를 사용하는 웹서버가 이미 실행 중인 상황에서,

추가적인 웹서버를 실행하려면 well-known port 범위(0~1023번) 외의 포트를 사용해야 한다.

- 이때 8080번 포트가 관습적으로 사용되는 포트다.

 

 

 

 

 

ㅁ 한 개의 호스트에서 2개 이상의 서비스를 운영하는 방법

 

 

(1) 도메인 분리 방식

- 한 서비스가 여러 도메인에 따라 다르게 동작하도록 설정한다.

- 같은 80번 포트를 사용하면서도 도메인을 분리해 운영할 수 있다. 

- 예: http://www.example.com과 http://test.example.com 등으로 도메인을 나누어 관리한다.

- 개발서버, 테스트서버, 실서버를 분리 운영할 때 많이 사용된다.

80번 포트를 이용한 한 개의 서비스지만, 그 서비스 내에서 도메인에 따라 다르게 동작하도록 한다.

 

 

(2) 다른 포트를 이용한 방식

- 성격이 다른 서비스를 운영할 때 유용하다.

- 예: 8080번 포트를 사용하는 추가 웹서버를 설치하여 http://localhost:8080처럼 포트번호를 명시해 접속한다.

- 현업에서는 핫픽스로 수정한 내용을 서버에 올리기 전에 같은 서버에서 테스트하기 위해서 localhost:8080 환경에서 테스트를 해본다. 

이렇게 하면 실서버에 영향을 주지 않으면서도 실서버와 같은 환경에서 핫픽스로 테스트가 가능하다.

 

 

 

 

 

ㅁ SSH 인증 방식

 

- SSH는 두 가지 인증 방식을 지원한다.

 

 

(1) 패스워드 인증

 

- 사용자가 서버에서 설정한 비밀번호를 입력해 인증한다.

- 패스워드 인증은 보안상 취약하기 때문에 키 인증을 사용하는 것이 권장된다.

- 패스워드는 안쓴다고 보면 되고 보통 키로 접속하는 방식을 쓴다. 

 

 

 

(2) 키 인증

 

- 공개키/개인키를 사용한 인증 방식으로, 보안성과 편리성에서 패스워드 인증보다 우수하다.

- 개인키 파일(id_rsa 등)을 사용하여 하나의 키로 여러 서버에 접속이 가능하다.

- 개인키는 USB 같은 저장 장치에 보관하여 휴대가 가능하다.

 

 

 

 

 

ㅁ 공개키/개인키 인증 방식

 

 

- 키 인증에는 공개키/개인키 방식을 쓴다. 비대칭키 방식이다.

- 공개키는 서버에 저장하고, 개인키는 칼라이언트가 소유한다.

개인키는 내가 가지고, 공개키는 내가 들어가고자 하는 시스템에 넣어두면 된다.

 

- 공개키와 개인키는 한쌍이기 때문에 공개키를 해킹해서 가져가도 개인키가 없으면 의미가 없다. 

 

 

- 클라이언트가 개인키를 사용해 서버의 공개키와 짝을 맞춰서 인증한다.

- 인증 성공 후, 클라이언트와 서버 간에 세션키(대칭키)를 생성하고 교환한다.

- 세션키는 보통 서버에서 생성되며, 클라이언트와 안전하게 교환된다.

 

- 실제 데이터 송수신 시에는 공개키/개인키가 아니라 세션키를 사용한 대칭키 방식으로 암호화하여 전송한다.

- 세션키를 사용하는 이유는 비대칭키 방식은 암호화와 복호화에 서로 다른 키를 사용해서 속도가 느린 반면,

세션키는 대칭키로 암호화와 복호화에 동일한 키를 사용해 암호화와 복호화 속도가 빠르기 때문이다.

 

 

- 클라이언트와 서버가 세션키(대칭키)를 사용해 암호화된 데이터를 주고받는다는 말은,

양측이 데이터 통신을 안전하게 하기 위해 동일한 키를 사용해 데이터를 암호화하고 복호화한다는 뜻이다.

 

 

 

 

 

ㅁ 세션키

 

 

1. 세션키의 생성

- 클라이언트와 서버는 먼저 세션키를 생성하여 서로 공유합니다.

- 이 세션키는 대칭키로, 암호화와 복호화에 같은 키를 사용합니다.

- 보통 세션키는 임시적으로 사용되며, 하나의 세션(통신 기간) 동안만 유효합니다.

 

2. 세션키의 교환

- 클라이언트와 서버가 세션키를 주고받는 과정에서 안전성을 보장해야 합니다.

- 공개키 암호화 방식을 사용하여 세션키를 안전하게 교환합니다.

- 예: 서버의 공개키로 세션키를 암호화해 전송하고, 서버는 개인키로 복호화.

 

 

3. 암호화된 데이터 통신

- 세션키가 공유된 후, 클라이언트와 서버는 이를 사용해 서로 데이터를 주고받습니다.

- 클라이언트가 데이터를 세션키로 암호화 → 서버는 같은 세션키로 복호화.

- 서버가 데이터를 세션키로 암호화 → 클라이언트는 같은 세션키로 복호화.

 

 

4. 세션키 사용의 장점

- 대칭키 암호화는 비대칭키 암호화보다 속도가 빠르므로, 세션 내의 데이터 통신은 세션키를 사용해 효율적으로 암호화합니다.

- 세션이 종료되면 세션키를 폐기해 보안성을 높입니다.