Overview
SSH 프로토콜(보안 셸이라고도 함)은 한 컴퓨터에서 다른 컴퓨터로 안전하게 원격 로그인하는 방법이다.
SSH(Secure Shell)에 대해서 알아보려고 한다.
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 동작방식
- 연결 시작: 클라이언트가 서버에 대한 연결을 시작한다.
- 서버 응답: 서버가 공개 키로 응답한다.
- 클라이언트가 서버 키를 확인합니다: 클라이언트는 서버의 공개 키를 확인한다(이 단계는 중간자 공격을 방지하는 데 도움이 된다).
- 암호화된 세션 키 보내기: 그런 다음 클라이언트는 서버의 공개 키로 암호화된 세션 키를 보낸다.
- 서버가 세션 키를 해독합니다: 서버는 개인 키를 사용하여 세션 키를 해독한다.
- 보안 채널 설정: 세션 키가 해독되면 서버와 클라이언트 모두 이를 사용하여 추가 통신을 암호화하고 보안 채널을 설정한다.
- 보안 통신: 이제 클라이언트와 서버는 모든 데이터가 암호화되어 안전하게 데이터를 교환할 수 있다.
사용법
- 환경설정을 이용한 방법(`/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
'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 |