쿠버네티스 전문가 양성과정 4주차 2일(1/10)

최수환·2023년 1월 10일
0

Kubernetes

목록 보기
18/75
post-thumbnail

open SSH

  • 원격에서 암호화로 서버에 접속하는 클라이언트 프로그램
    -> 과거에는 telnet을 이용해서 원격으로 접속했지만 평문으로 접속하기 때문에 보안이 약해서 현재는 사용하지 않는다

암호화 이론 : SSH, SSL(HTTPS)

일방향 암호화 : 암호화는 지원하지만 복호화는 안됨

  • 해쉬 : 일방향 암호화되어 나온 암호문
    -> 안전하게 패스워드 같은 중요 데이터를 보관하기 위해 해쉬 사용
    --> 복호화는 안되지만 암호를 깨는 크랙킹은 가능하기 때문에 완전히 안전하지는 않다
    -> 해쉬는 파일이나 데이터의 무결성 검증
    📕 md4, md5, sha, sha256, sha512, sha1024 등의 일방향 암호화 알고리즘이 있다

양방향 암호화 : 암호화, 복호화 둘 다 지원된다

  • 키가 필요하다
    📒 키 : 일정 길이의 문자열 데이터
  • 대칭키 암호화 , 비대칭키 암호화 두가지 방식이 있다.

대칭키 암호화

  • 세션키 암호화 ,비밀키 암호화 두가지가 있다
  • 키가 1개가 사용됨
  • 암호화 키 = 복호화 키
  • AES 256, AES 512등의 알고리즘이 있다
  • 단점 : 키 전달 문제
    -> 중간에 해커가 키를 해킹한다면 평문 통신이랑 같다

비대칭키 암호화

  • 대칭키 암호화의 키 전달 문제를 해결한 암호화
  • 키가 2개가 사용됨
  • 암호화키, 복호화키가 따로 있다
  • 개인키, 공개키 암호화 두가지가 있다
    -> 개인키는 절대 누구에게도 주면 안되는 키, 오직 자기 자신만 소유
    -> 공개키는 누구에게도 줄 수 있다. 해커도 공개키를 가질 수 있다.
    -> 개인키로 암호화한것은 오직 공개키로만 해독이 가능, 공개키로 암호화한것은 오직 개인키로만 해독이 가능
  • '인증' 이라는 또 다른 기능이 있다 = 전자서명 통신
  • 단점 1 : 속도가 느림
    📒 클라이언트는 대칭키를 만들어서 대칭키를 공개키로 암호화해서 전달하면 전달문제와 속도가 느린 단점을 해결 가능
    -> RSA 알고리즘
    📒 개인키는 오로지 서버만 가지고 있다
  • 단점 2 : 키 신뢰성 문제
    -> SSL 알고리즘으로 해결

SSH 실습

  • 게스트pc 두대 (client, server) 를 부팅시킨다

  • client에서 ssh root@server의 natip입력해서 server로 접속
    📒 GUI를 사용 가능하게하는 옵션 : ssh -X (X포워딩)

  • 한번이라도 client에서 server에 ssh로 접속했다면 .ssh 디렉터리에서 known_hosts에 등록되어있는 것을 볼 수 있다
    -> 해당 server의 공개키를 믿을 수 있다고 등록 한 것이다

  • server의 /etc/ssh 디렉터리에서 vi sshd_config후 set nu로 번호를 붙여서 본다

  • 17번줄은 SSH에서 사용할 포트를 의미, 포트번호를 바꾸면 보안을 강화할 수 있다.
  • 19번줄은 sshd 서비스가 대기할 주소다. '0.0.0.0'은 모든 주소에 대해서 대기한다는 의미

  • OpenSSH에서 사용할 암호화 알고리즘의 키 파일을 선택
  • 현재 rsa, dsa, ecdsa, ed25519 암호화 알고리즘을 사용하는 키 파일을 생성하여 /etc/ssh 디렉터리에 저장하도록 설정되어 있다.

  • 32번줄은 로그 파일 생성 시에 해당 로그 파일의 종류를 지정. AUTHPRIV는 인증 관련 로그다. 해당 로그는 /var/log/secure 파일에서 확인 가능
  • 33번줄은 로그 파일 생성 시 로그의 우선순위를 지정

  • 37번줄은 로그인 실패시 연결을 끊는 시간 설정
  • 38번 줄에서 '#' 없애고 yes를 no로 바꾸면 원격으로 ssh접속하는 것을 차단한다
    -> 기업에서 보안을 강화하기 위해 설정하기도 한다.

키 기반 인증 (클라이언트에서 실행하는 명령어)

  • ssh-keygen : 키 기반 인증을 위한 공개키와 개인키 생성
    -> .ssh 디렉터리에 공개키가 생성된 것을 볼 수 있다
  • ssh-copy-id 아이디@서버아이피 : 클라이언트가 생성한 공개키를 서버에 등록하는 명령어
    -> 서버측에서 .ssh디렉터리에 authorized_keys라는 파일이 생성된 것을 볼 수 있다
    -> 이후 클라이언트측에서 ssh root@서버ip로 서버에 접속하면 패스워드 없이도 key를 통해서 바로 접속이 가능하다.

scp실습

  • 로컬 -> 원격
    • scp 로컬파일위치 계정명@원격호스트:원격파일위치
    • ex) scp test root@10.0.2.15:/root/test
      -> 클라이언트의 test파일을 서버에 복사한다
    • ex) scp root@10.0.2.15:/root/hello ./
      -> 서버의 hello파일을 클라이언트의 현재위치로 복사
    📒 키를 등록했기 때문에 암호를 입력하지 않아도 된다

방화벽

  • 네트워크를 통한 외부의 접속을 차단하려면 방화벽을 사용

  • 페도라 19에서는 이전의 iptables대신에 firewall데몬 서비스 제공

  • zone : 네트워크를 신뢰도 수준에 따라 여러 개의 영역으로 구분하여 사용

  • /usr/lib/firewalld/zones 디렉터리에 zone파일 확인가능

  • firewall-cmd --list-all-zones : 모든 zone에 대한 자세한 설정 보기

  • firewall-cmd --get-default-zone : 기본값으로 설정된 zone보기

  • firewall-cmd --info-zone=public : 특정 zone에 대한 정보 보기

  • firewall-cmd --set-default-zone=trusted : default zone 바꾸기

  • firewall-cmd --get-services : firewall에서 지원하는 모든 서비스 보기

  • firewall-cmd --list-services : 현재 zone이 허용하는 서비스 보기

  • curl -L localhost : 로컬호스트로 웹에 접속

일시적으로 포트 / 서비스 추가

  • firewall-cmd --list-ports : 열려있는 포트 확인
  • firewall-cmd --add-service=http : 서비스 추가
  • firewall-cmd --remove-service=http : 서비스 제거
  • firewall-cmd --add-port=80/tcp : 포트 추가
  • firewall-cmd --remove-port=80/tcp : 포트제거

영구적으로 포트 / 서비스 추가

  • firewall-cmd --add-service=http --permanent
    -> 당장 runtime내에 적용되지 않는다
    -> firewall-cmd --reload를 통해서 현재 runtime에 적용 시킨다

dns 서비스

  • docs.google.com = FQDN(fully qualified domain name) = 전체 도메인 이름
    • docs : 호스트이름
    • google.com : 도메인 이름
  • nslookup -> server 입력 : server의 ip 알 수 있다
  • nslookup 도메인 : 도메인의 ip를 알 수 있다

dig

  • 다른 명령에 비해 기본 출력 정보가 상세한 특징을 가지고 있다.
  • 형식 : dig [@server][option] [도메인]
  • ex) dig @8.8.8.8 google.com

host

  • 도메인에 대한 정보 얻는다.
  • 형식 : host [옵션] 도메인 [server]
  • ex) host google.com 8.8.8.8
  • 옵션 -a : DNS를 조회할 때 모든 타입의 레코드를 조회한다

/etc/hosts 파일

  • ip에 해당하는 도메인을 등록하는 파일
  • dns에 보다 우선되는 파일로 먼저 /etc/hosts 파일을 우선적으로 확인한다
  • ex) vi /etc/hosts 접속해서 서버ip 도메인이름 저장
    -> ping 도메인이름 , ssh root@도메인이름 가능

dns과정 velog참조

  • 최종적으로 순환쿼리로 찾은 도메인에 해당하는 ip를 재귀쿼리의 결과로 반환된다

dns실습

서비스 구축
1. 소프트웨어 패키지 설치
2. 서비스 환경설정 및 구축
3. 설치한 서비스 실행
4. 방화벽 오픈

캐시 dns서버 구성

  • yum -y install bind bind-chroot = named 서비스 = dns 서비스
  • vi /etc/named.conf 접속 후 아래 사진처럼 수정한다
  • systemctl start named : named 프로그램 실행
  • systemctl enable named : named 프로그램 활성화
  • firewall-cmd --add-service=dns --permanent : 방화벽 오픈
  • firewall-cmd --reload : 방화벽 오픈한거 적용
  • 클라이언트에서 dig @서버ip주소 naver.com입력
    -> 이전에 설치한 캐시 dns서버에서 캐시테이블을 확인해서 naver.com에 대한 ip정보를 받는다

dns 서버 구축 (primary dns서버 구축)

  • 웹 페이지 간단하게 구축
    • rpm -qa httpd
    • systemctl start httpd
    • firewall-cmd --add-service=http
    • firewall-cmd --reload
    • cd /var/www/html
    • vi index.html 접속해서 텍스트 입력
      -> 웹에 ip입력하면 웹사이트 접속되서 텍스트 보임
  • ip가 아닌 도메인으로 접속하기 위해 dns서버 구축
    • vi /etc/named.conf 접속 후 마지막 줄에 아래 사진처럼 입력
    • named-checkconf : 오타 체크 명령어
    • cd /var/named : 존 파일이 존재한다
    • cp named.localhost linux.com.db
    • vi linux.com.db 접속 후 아래 사진처럼 저장
    • named-checkzone linux.com linux.com.db
    • chmod -R 754 /var/named
    • systemctl restart named
    • 클라이언트에서 vi /etc/resolv.conf 접속후 아래 사진처럼 저장
    • 이제 클라이언트에서 firefox키고 해당 도메인 입력하면 접속 된다
    • curl -L linux.com 입력했을 때 이전에 웹사이트 구축 시 작성했던 텍스트 나오면 이상없는 것이다
      📒 추가로 nslookup -> linux.com, www.linux.com, ns.linux.com에 대한 ip가 잘 나오는지 확인

dns 레코드

  • DNS서비스를 구축하거나 DNS서버에 쿼리를 날리기 위함
  • NS : 도메인의 네임서버
  • MX : 도메인의 메일서버
  • A : 호스트의 IP주소
  • CNAME : 별칭
  • SOA : 도메인의 Start Of Authority, 해당 도메인에 권한이 있다 라는 뜻
  • PTR : IP주소에 대한 호스트명
  • ANY : 호스트에 관련된 모든 레코드들의 정보

📒 DNS서버에 쿼리를 날렸을때 재귀쿼리의 결과로 얻는 도메인에 대한 IP는 레코드값이 A인 경우이다.

profile
성실하게 열심히!

0개의 댓글