SSH 연결 과정
암호화: 대칭키, 공개키
1. 일방향 암호화: md5, sha
2. 양방향 암호화
1) 대칭키(비밀키): des, 3des, aes
1-1) 단점: 키 전달 문제
1-2) 해결책: 비대칭키 암호화
2) 비대칭키 또는 공개키, 개인키: rsa
2-1) 대칭키의 단점을 보완
2-2) 공개키로 암호화한 것은 개인키로만 해독 가능
2-3) 개인키로 암호화한 것은 공개키로만 해독 가능
2-4) 공개키는 누구나 가질 수 있는 전세계에 공유 가능한 키
2-5) 개인키는 절대 누구에게도 주지 않는 키
2-6) 단점1: 중간에 공격자가 키를 바꿔치기할 수 있음 > 키의 신뢰성 문제, 대칭키 방식에 비해 속도가 느림
2-7) 해결책1: 대칭키만 암호화해서 전달하는 데 사용
2-8) 해결책 1-1: 제 3의 인증 기관(SSL) > 인증 기관에서 인증한 공개키 = 인증서
3. SSL
- 평문 통신 프로토콜(http, ftp, telnet 등)을 암호화해주는 프로토콜
- 3.0 이후로 TLS: 현재 전 세계 암호화 통신의 표준
- 일반적으로 http를 암호화하는데 사용해서 https를 SSL로 생각하는 경우가 많음
SSL 통신 과정
3-way-handshake
1. Client Hello: 클라이언트가 서버에 접속, 클라이언트가 생성한 랜덤 데이터(1) 전달, 사용 가능한 암호화 방식
2. Server Hello: 클라이언트에 응답, 서버가 생성한 랜덤 데이터(2) 전달, 인증서(서버의 공개키) 전달, 서버가 선택한 암호화 방식
3. 인증서 확인: 서버의 인증서가 CA에 의해서 발급됐는지 확인, pre master secret 키 생성(1과 2를 조합하여 생성)
1) 클라이언트에 내장된 CA 리스트 확인
2) 클라이언트에 내장된 CA의 공개키를 이용해 인증서 복호화
3) 복호화에 성공한다면 인증서는 CA의 개인키로 암호화된 문서임이 증명됨
4. pre master secret: 인증서 안에 있는 공개키를 이용하여 pre master secret 값을 암호화한 후 서버로 전송
5. pre master secret 복호화: 자신의 비공개키로 복호화
=> 서버와 클라이언트 모두 pre master secret 값을 공유하게 됨
6. master secret 및 session key(대칭키) 생성
1) 서버와 클라이언트는 모두 일련의 과정을 거쳐 pre master secret 값을 master secret 값으로 만듦
2) 서버와 클라이언트가 통신할 때 사용할 세션 키를 서로 가지고 있음
7. session key 값을 이용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화한 후 주고받음
8. 세션 종료
1) 데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알림
2) 통신에서 사용한 세션 키 폐기
SSL 작동 방식
ssh 명령
ssh 접속 사전 확인 사항
1. sshd 서비스가 실행 중인지 확인
systemctl status sshd -l
2. 방화벽: 22번 포트 확인
netstat -an | grep :22
3. 클라이언트와 서버의 네트워크 상태 확인
1) NAT 네트워크 설정
2) 호스트 전용 어댑터 설정
ssh 명령: ssh [사용자 이름]@[IP 주소 또는 DNS 이름]
1. 클라이언트에서 ssh를 이용하여 원격 접속을 시도할 때 사용
1) 사용자 이름: 접속하고자 하는 사용자의 이름
2) IP 주소 또는 DNS 이름: 접속하고자 하는 IP 주소 또는 DNS 이름
2. -X 옵션: x포워딩을 하여 GUI 프로그램 사용 가능
ssh 설정 파일
1. ssh 구성 파일 위치: /etc/ssh 디렉토리
1) ssh_config: 클라이언트 설정
2) sshd_config: 서버 설정
3) ssh_host_[암호화 알고리즘]_key: 해당 알고리즘의 개인키
4) ssh_host_[암호화 알고리즘]_key.pub: 해당 알고리즘의 공개키
2. ssh 서버 설정: /etc/ssh/sshd_config
1) 기본 연결 설정: 22번 포트 사용
2) 키 파일 관련 설정: ssh에서 사용할 암호화 알고리즘의 키 파일 선택
- 현재 rsa, ecdsa, ed25519 암호화 알고리즘을 사용하는 키 파일을 생성하여 /etc/ssh 디렉토리에 저장하도록 설정됨
3. 로그 관련 설정: 생성된 로그 파일은 /var/log/secure 에서 확인
1) 로그 파일 생성 시 해당 로그 파일의 종류 지정
2) AUTHPRIV: 인증 관련 로그
4. 인증 관련 설정
1) 로그인 실패 시 연결 끊는 시간 설정
2) 원격 root 로그인 방지
- 루트 사용자로 원격 접속을 시도할 때 허용 여부 설정
- 일반적으로 루트 사용자 원격 로그인은 비활성화 설정
# /etc/ssh/sshd.config 파일에서 설정
PermitRootLogin no
# 변경 사항 적용을 위한 서비스 재시작
systemctl restart sshd
3) 원격 로그인 실패 시 패스워드 인증 사용 유무 설정
ssh 실습
ssh 비밀번호 없이 로그인 (키 기반 인증)
- 클라이언트의 공개키를 서버로 복사하여 ssh 비밀번호 없이 로그인이 되는지 확인
1. 클라이언트
# 공개키와 개인키를 생성
ssh-keygen
# 클라이언트에서 생성한 공개키를 서버에 등록함
ssh-copy-id id@serverip
ssh-copy-id root@10.0.2.15
# 클라이언트의 공개키 확인
cat /root/.ssh/id_rsa.pub
1) 공개키와 개인키 생성
2) 생성한 클라이언트의 공개키를 서버에 등록
3) 클라이언트의 공개키 확인
2. 서버
# 복사된 클라이언트의 공개키 확인
cat /root/.ssh/authorized_keys
- 복사된 클라이언트의 공개키 확인
3. 클라이언트
- 암호 없이 SSH 연결 성공
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220517_1_리눅스 서비스_네트워크 관리-ip, ifconfig (0) | 2022.05.17 |
---|---|
220516_3_리눅스 서비스_네트워크 관리-nmcli (0) | 2022.05.16 |
220516_1_리눅스 서비스_RPM, YUM (0) | 2022.05.16 |
220512_5_리눅스_로그 관리-journalctl (0) | 2022.05.13 |
220512_4_리눅스_사용자 및 그룹 관리-chage, who, sudo, chown (0) | 2022.05.13 |