Networking, Security, Protocols

SSH(Secure Shell)

Somaz 2022. 1. 17. 16:31
728x90
반응형

 

Overview

SSH 프로토콜(보안 셸이라고도 함)은 한 컴퓨터에서 다른 컴퓨터로 안전하게 원격 로그인하는 방법이다.

SSH(Secure Shell)에 대해서 알아보려고 한다.

 

출처 : https://www.sectorlink.com/article/what-is-ssh-and-why-you-should-be-using-it

 


 

SSH(Secure Shell)란?

SSH는 네트워크 상 다른 컴퓨터의 쉘을 사용할 수 있게 해 주는 프로그램 혹은 그 프로토콜을 의미한다.

 

Telnet과 더불어 가장 많이 사용하는 원격 시스템 접속 서비스이다. 평문 형태의 전송 방식인 Telnet과 달리 암호키를 이 용한 전송 방식을 사용 보안상 Telnet은 가급적 사용하지 말고 SSH를 사용한다.


 

왜 SSH를 사용해야 하는가?

SSH는 일반적으로 Unix 계열(Linux) 운영 체제에서 사용된다. 그러나 Windows에서도 사용할 수 있다.

예를 들어 Windows 10은 OpenSSH를 기본 SSH 클라이언트로 사용한다. SSH의 표준 포트는 TCP 22이다.

 

SSH는 일반적으로 원격 시스템에 로그인하고 명령을 실행하는 데 사용되지만 터널링, TCP 포트 전달 및 X11 연결도 지원한다. 관련 SSH 파일 전송(SFTP)을 사용하여 파일을 전송할 수 있다. 또는 보안 복사(SCP) 프로토콜. SSH는 클라이언트-서버 모델을 사용한다.

 


 

SSH 동작방식

  1. 연결 시작: 클라이언트가 서버에 대한 연결을 시작한다.
  2. 서버 응답: 서버가 공개 키로 응답한다.
  3. 클라이언트가 서버 키를 확인합니다: 클라이언트는 서버의 공개 키를 확인한다(이 단계는 중간자 공격을 방지하는 데 도움이 된다). 
  4. 암호화된 세션 키 보내기: 그런 다음 클라이언트는 서버의 공개 키로 암호화된 세션 키를 보낸다. 
  5. 서버가 세션 키를 해독합니다: 서버는 개인 키를 사용하여 세션 키를 해독한다. 
  6. 보안 채널 설정: 세션 키가 해독되면 서버와 클라이언트 모두 이를 사용하여 추가 통신을 암호화하고 보안 채널을 설정한다. 
  7. 보안 통신: 이제 클라이언트와 서버는 모든 데이터가 암호화되어 안전하게 데이터를 교환할 수 있다.

 

 

출처 : Mermaid Chart

 

 

 


 

사용법

  • 환경설정을 이용한 방법(`/etc/ssh/sshd_config`)
  • 명령어를 이용한 방법(`ssh , scp , sftp`)

 

 

설정(CentOS 기준)

`패키지(openssh*) / 포트(22/tcp) / 서비스(ssh) / 데몬(sshd[.service])`

 

yum -y install openssh*(패키지 다운)

systemctl restart sshd.service

systemctl enable sshd.service

firewall-cmd --permanent --add-port=22/tcp

firewall-cmd --permanent --add-service=ssh

firewall-cmd --reload

firewall-cmd --list-all
  • 위의 다섯가지 순서는 어떠한 서비스를 사용하더라도 동일하게 적용된다.
  • (물론 패키지, 포트, 서비스는 각각 서비스에 맞게 적용)

 

 

SSH 실습

# 현재 로그인 했던 사용자 계정명과 동일한 계정으로 접속을 시도한다.
ssh 192.168.10.128

# 접속할 사용자를 지정하면 그 사용자로 접속하고 (su -) 로 관리자 권한 획득한다.
ssh -l somaz 192.168.10.128

# 접속할 사용자를 지정하면 그 사용자로 접속하고 (su -) 로 관리자 권한 획득
ssh somaz@192.168.10.128

 

 

SSH 설정 파일(/etc/sshd/sshd_config)

Port xx

  • SSH 서비스 포트는 22로 규약되어 있지만 보안을 위해 임의의 포트로 변경 하는것도 가능하다.
  • 원하는 포트번호로 변경하고 /etc/services 파일에서 ssh 포트값도 변경해 주면 된다.
  • 포트번호는 1024 이상의 값들을 이용한다. 

 

Protocol 2

  • SSH 프로토콜은 ver 1과 ver 2가 있는데 SSH1 클라이언트와 SSH2 클라이언트의 접속 요청에 대한 것이다.
  • 보안상 Protocol 1은 사용하지 않고 Protocol 2 만을 사용한다(둘다 사용하기 위해서는 Protocol 2,1 을 적어주면 된다).

 

ListenAddress 0.0.0.0

  • SSH 서버에서 Listen 할 로컬 호스트 주소를 설정하는 것이다.
  • 여러개의 IP를 사용중일 때 특정 IP로 SSH 접속이 가능토록 설정하는 옵션으로 0.0.0.0은 모든 네트워크를 의미한다.
  • 사용하고자 하는 특정 IP가 있다면 0.0.0.0 대신 적으면 된다.

 

Hostkey ~

  • Protocol 1, 2(rsa, dsa) 의 호스트키 위치를 지정한다.

 

KeyRegenerationInterval 1h

  • 자동으로 생성된 키의 유효시간을 지정한다(기본 3600sec 이고 h를 붙이면 1 hour의 의미이다).
  • 이 옵션은 호스트의 세션에 있는 키를 캡쳐해서 암호를 해독하거나 훔친 키를 재사용 하지 못하도록 하기 위함이다.

 

ServerKeyBits 768

  • 서버 키의 비트 길이를 설정한다. 최소 512, 기본 768.

 

SyslogFacility AUTH

  • syslog 데몬에 의한 로그 facility를 지정한다.
  • sub system 종류 및 내용은 syslog 관련 자료를 참조한다.

 

LogLevel INFO

  • 로그 레벨(메시지 종류)를 지정한다.

 

LoginGraceTime 2m

  • 지정한 시간내에 로그인 하지 않으면 자동으로 접속을 끊는다.
  • 0값은 무제한이다.

 

PermitRootLogin no

  • 공격자가 임의의 주소에 root 계정으로 접속이 가능한지 여부를 무한 스캐닝을 통해 알아 낼 수 있다.
  • 따라서 위와 같이 root 계정의 접근을 막고 일반 유저로 접속한 다음 root 계정을 불러오는 것이 좋다.

 

StrictModes yes

  • 로그인을 허용하기 앞서 파일 모드 및 사용자 홈 디렉토리 소유권과 원격 호스트의 파일들을 ssh 데몬이 체크 할 수 있도록 할 때 사용한다.

 

MaxAuthTries 6

  • 접속당 최대 인증 시도 횟수. 기본값 6, 3회이상 인증 실패시 로그가 기록된다.

 

#RSAAuthentication yes

  • RSA 인증을 설정. Protocol 1 에서만 적용되는 옵션이므로 주석처리이다.

 

#PubkeyAuthentication yes

  • 공개키 인증 설정. Protocol 2에 적용된다.

 

#AuthorizedKeysFile      .ssh/authorized_keys

  • 인증키를 저장할 위치를 지정한다.

 

RhostsRSAAuthentication no

  • `/etc/ssh/ssh_known_hosts` 파일에 있는 호스트에 대한 인증을 허용할 것인지 설정한다.

 

HostbasedAuthentication no

  • 호스트 기반의 인증 허용 여부를 결정한다.

 

IgnoreUserKnownHosts yes

  • RhostsRSAAuthentication, HostbasedAuthentication 인증시 `~/.ssh/knownhosts` 파일의 호스트들을 제외할 것인지 설정한다.
  • rhosts 파일을 허용하지 않았으므로 yes로 설정한다.

 

IgnoreRhosts yes

  • `~/.rhosts`와 `~/.shosts` 파일 사용여부를 결정한다. 보안상 이유로 사용하지 않는다.

 

PasswordAuthentication yes

  • 패스워드 인증을 허용한다. Protocol 1, 2 모두 적용된다.

 

PermitEmptyPasswords no

  • 패스워드 인증시 비어있는 스트링을 인정할지 여부를 결정한다.

 

ChallengeResponseAuthentication no

  • Challenge-Response 인증을 허용할지 여부를 설정한다.
  • UsePAM 옵션을 yes로 설정할 경우 이 옵션은 no로 설정해야 한다.

 

#UsePAM no

  • ChallengeResponseAuthentication을 이용한 PAM 인증을 허용하는 옵션이다.
  • 이 옵션을 yes로 설정하는 경우 열쇠글 인증과 동일하게 적용되므로, 열쇠글 인증 또ChallengeResponseAuthentication 옵션을 꺼 놓아야 한다.
  • - Kerberos 및 GSSAPI 인증에 관한 내용은 필요에 따라 설정.

 

AllowTcpForwarding yes

  • TCP 포워딩을 가능토록 설정하는 옵션이다.

 

GatewayPorts no

  • 클라이언트에 포워드된 포트로 원격 호스트 들이 접속할 수 있도록 설정하는 옵션이다.

 

X11Forwarding no

  • 원격에서 X11 포워딩을 허용할지 여부를 설정하는 옵션이다.

 

#X11DisplayOffset 10

  • X11 포워딩이 될 때 디스플레이 offset을 설정. 허용하지 않았으므로 주석 처리한다.

 

PrintMotd yes

  • ssh 로그인시 /etc/motd 파일의 내용을 보여줄 것인지 여부결정한다.
  • ssh 로그인을 환영하는 메시지나 공지사항 등을 출력되도록 할 수 있다.

 

PrintLastLog yes

  • 로그인시 지난번 로그인 기록을 보여줄 것인가를 설정한다.

 

TCPKeepAlive yes

  • 클라이언트의 접속이 끊어졌는지를 체크하기 위해 서버가 일정시간 메시지를 전달한다.

 

PermitUserEnvironment no

  • `~/.ssh/enviroment`와 `~/.ssh/authorized_keys` 파일의 environment = 옵션을 sshd 데몬에서 처리 되도록 할것 인가를 설정한다.

 

Compression delayed

  • 압축 사용여부를 결정한다.

 

ClientAliveInterval 0

  • 클라이언트로부터 sshd 데몬이 아무런 데이터를 받지 못하게 되면 암호화된 채널을 통해서 메시지를 클라이언트의 요청에 응답하여 보내는데 이 때의 시간 간격을 초단위로 설정한다.
  • 0은 클라이언트에 메시지를 보내지 않는 것을 의미. Protocol 2에서 적용된다.

 

ClientAliveCountMax 3

  • 서버에게 전달되는 클라이언트의 생존 메시지 회수를 지정한다.
  • 이 옵션으로 지정한 값에 도달하게 되면 sshd 데몬은 클라이언트와의 연결을 끊어 버리고 세션을 종료시킨다.

 

UseDNS yes

  • 클라이언트 호스트 주소를 DNS 해석한다.

 

PidFile /var/run/sshd.pid

  • sshd 데몬의 PID를 저장할 파일을 지정한다.

 

MaxStartups 5

  • 로그인하고 있지 않는 최대 접속 수를 설정한다.
  • 이 값을 초과하게 되고 인증이 성공적으로 이뤄지지 않으면 그 다음 접속이 불가능 하다.

 

Subsystem       sftp    /usr/libexec/openssh/sftp-server

  • sftp는 프로토콜 버전 2에서 사용되는 것으로서 ssh와 같이 ftp의 보안을 강화하기 위해 사용되는 보안 ftp 프로그램이다.
  • openssh를 설치하면 /usr/local/ssh/libexec/sftp-server파일이 설치된다. 이것은 sftp 서버용 프로그램으로 클라이언트 sftp프로그램은 설치되지 않는다.
  • 따라서 서버로 가동시키고 원도용 ssh클라이언트 프로그램이나 SSH2를 설치하면 sftp를 사용이 가능하다.

 

UsePrivilegeSeparation yes

  • 접속된 프로세스에 대해 상위 권한 없이 chroot로 고립된 형태로 작동한다.




Reference

https://www.sectorlink.com/article/what-is-ssh-and-why-you-should-be-using-it

728x90
반응형

'Networking, Security, Protocols' 카테고리의 다른 글

RSA 공개키를 이용한 SSH 접속  (0) 2022.01.20
DNS(Domain Name System)  (0) 2022.01.19
NFS(Network File System) / auto fs(auto file system)  (0) 2022.01.18
FTP란? FTP Server란?  (0) 2022.01.18
SCP(Secure Copy)  (0) 2022.01.17