본문 바로가기
GOORM

GOORM: Kubernetes-17

by hxunz 2021. 11. 16.
          1. Facts (사실, 객관)
            : 어제 배운 작업 스케줄링이랑 ssh에 대해서 복습하고 오늘은 scp, NTP 서버 관리, 방화벽, SELinux에 대해서 배우고 실습 문제도 풀었다.
             
          2. Feelings (느낌, 주관)
            : 하루종일 컴봐서 그런지 두통이 너무 심했던 날 ㅜㅜ 그래도 복습 겸 TIL 쓰고 SQL도 공부하고,,, 코테 연습도 하고,,, 갑자기 진도 너무 쑥쑥나가고 강의도 빨라서 따라가기 조금 버거웠다

          3. Findings (배운 점)
            : scp(Secure Copy) 명령 사용
             - scp는 ssh를 이용하여 원격으로 파일이 전송되기 때문에 데이터 전송 시 암호화 된다
             - scp [option] source1 source2 .. destination

            sftp(Secure File Transfer Protocol) 명령 사용
             - SSH에서 사용하는 암호화 방식을 함께 사용해 좀 더 안전하게 파일을 주고 받는다
             - sftp [user-name]@address
             - put 명령 : 클라이언트에 있는 파일을 서버로 전송
             - get 명령 : 서버에 있는 파일을 클라이언트로 다운

            NTP 
             - NTP 서버는 정확한 시간 정보를 제공하기 위해 원자시계 등으로부터 정확한 시간 정보를 제공받고 있다
             - 전송 받은 정확한 시간 정보와 요청 수신 수 응답하는 정확한 시간 정보를 포함한 정보를 응답

            NTP 계층 구조
             - 시간 정보를 동기화하는 방식에 따라 나누어진다
             - 각각 상위 계층으로부터 시간 정보를 동기화
             - 상위계층일수록 더욱 정확한 시간 정보를 가지고 있다
            단계  특징
            Stratum0 가장 상위 계층 Primary Reference Clock
            원자시계, GPS 등 정확한 시간 신호 발생
            Stratum1 클라이언트가 시간 동기화를 요청할 수 있는 최상위 NTP 이지만 요청이 과도하게 집중 될 경우 부하가 높아질 수 있어 Stratum2 서버 이외의 접근 차단
            Stratum2 일반적인 시간 동기화 요청에 사용할 수 있는 최상위 NTP 서버
            Stratum n 각각 자신보다 상위 단계의 서버로부터 시간을 동기화한다. 계층이 낮아질수록 시간정확도가 낮을 가능성이 높다

            chrony 서비스
             - 서비스 데몬인 chronyd와 chronyd를 제어하기 위한 사용자 명령인 chronyc로 구성
             - 데몬 형태로 동작하며 지속적으로 시스템의 시간을 NTP 서버와 동기화

            chronyd
             - 주기적으로 시스템의 시간을 조정
             - 네트워크 액세스가 허용될 때 NTP 프로토콜을 사용하여 NTP 서버와 동기화를 수행하고 외부참조를 사용할 수 없는 경우 마지막으로 계산된 드리프트 파일을 참고하여 시간 교정을 수행

            /etc/chrony.conf
             - 동작 환경 설정
             - sesrver : 시간을 동기화 해줄 때 상위 계층 서버를 지정
             - iburst : 빠른 동기화를 위해 동기화하는 주기를 짧게 설정

            chronyc
             - chronyd 서비스에 대한 상태정보 및 설정 값을 확인하고 변경하는 용도로 사용할 수 있는 대화형 명령 프롬프트 제공
            시간 정보 내용
            Reference ID 동기화된 서버의 IP주소나 이름을 나타낸다
            Stratum Stratum0으로부터 현재 시스템까지 NTP 계층 홉 수를 의미
            Ref time (UTC) UTC 기준 시간 정보를 표시
            System time NTP와 시스템 간 시간 오차
            Update interval chronyd의 동기화 업데이트 간격
            항목 설명
            M 연결된 대상의 모드 ^ 대상이 서버
            = 대상이 peer
            # 대상이 로컬
            S 연결된 대상의 상태 * 대상과 동기화 된 상태
            + 사용 가능한 대상
            - 시용이 가능하지만 제외된 대상
            ? 연결이 불가능한 대상
            x 시간 정보가 부정확한 대상
            ~ 시간 정보의 변동 폭이 큰 대상
            Poll 측정 간격을 나타냄
            Reach 전송에 대해 유효한 응답 회수가 표시
            LastRx 서버로부터 마지막 샘플을 받은 시간 표시
            Last Sample 마지막 측정 시 서버와 로컬 시간의 오차범위 표시
             - sourcestats : chronyd에서 사용 중인 각 대상에 대한 오차율 및 오프셋 추정 값에 대한 정보 표시
             - -v 옵션 : 상세 정보 확인

            system-config-date
             - GUI 도구를 사용하여 NTP 서버의 설정을 변경할 때 사용되는 패키지

            date 명령
             - 일반적으로는 시스템의 시간에 대한 정보를 제공해주는 용도지만 root 사용자는 시스템의 시간 정보를 변경할 수 있다.

            timedatectl 명령
             - 시스템의 시간 및 날짜 변경, 표준 시간대 변경, 원격 서버와 자동 동기화 설정 수행 가능
             - status : 현재 설정 상태 확인 가능
             - list-timezones : 사용할 수 있는 시간대 정보 확인
             - set-timezone : 현재 시스템의 위치에 따른 시간대 정보 변경
             - set-time : 임의의 시간으로 변경
             - set-local-rtc : 시스템의 시간정보를 사용하여 하드웨어의 RTC시간 정보를 업데이트. 0일 경우 UTC, 1일 경우 현재 시간대
             - set-ntp : NTP 서버 사용 여부 설정

            방화벽
             - 외부의 네트워크에서 내부의 시스템으로 접근하는 네트워크 패킷을 차단하는 서비스
             - Netfilter : 시스템에 접근하는 네트워크 패킷을 시스템 내부로 전달할지 아니면 폐기할지 결정하는 커널 모듈

            iptables
             - 네트워크 패킷 필터링 도구 중 하나로 Netfilter를 제어하는 도구
             - 방화벽 규칙을 변경할 때마다 서비스를 중지 후 재시작해야해서 네트워크 변화가 수시로 발생하는 환경에서 번거롭다.

            firewalld
             - 방화벽 서비스로 동적으로 방화벽 설정을 변경할 수 있기 때문에 수시로 변하는 네트워크 변화에 대해 제한 없이 대응할 수 있다는 장점이 있다.
             - XML 파일형태로 보관
             - Runtime 및 Permanent 설정 : Runtime : 시스템이 운영 중인 상태일 때 서비스 재시작을 하지 않아도 적용
                                                                 Permanent : 방화벽 규칙을 /etc/firewalld/services 디렉토리에 존재하는 XML파일에 규칙을
                                                                                       저장하여 시스템이 부팅되거나 서비스가 재시작 되어도 방화벽 규칙을 유지
             - 사전에 정의된 영역
             - 영역은 네트워크 연결에 대한 신뢰도를 정의한다. 패킷을 카테고리처럼 분류해서 처리하는 매커니즘이다.
                기본 영역은 시스템에 네트워크 인터페이스가 추가될 때 인터페이스가 연결되는 영역이다.
             - 사전에 정의된 서비스 : 서비스 이름과 포트번호 및 프로토콜을 미리 매핑 시켜놓은 사전에 정의된 서비스를 제공
             - D-Bus 사용 : 메시지 버스 시스템으로 응용 프로그램간에 서로 대화할 수 있는 인터페이스를 제공

            firewalld 관리 도구
            도구이름 설명
            firewall-cmd 커맨드 라인에서 사용하는 관리 도구
            firewall-config 그래픽 도구를 사용하는 관리 도구

            상태  및 정보 확인 옵션
             - --get-zones : 정의된 영역의 목록 확인
             - --get-services : 사전에 정의된 서비스의 목록 확인
             - --get-active-zones : 활성화 된 영역 확인, 활성화 된 영역이 어떤 규칙에 의해서 활성화 되었는지 표시
             - --get-default-zone : 기본 영역 확인
             - --list-all : 각 영역에 설정되어 있는 규칙을 확인

            규칙 설정 옵션
             - --set-default-zone : 기본 영역 지정
             - --add-interface : 출발지 주소규칙을 적용받지 않는 특정 네트워크 인터페이스를 통해 전송된 패킷을 특정 영역으로 연결하여 방화벽 규칙을 적용
             - --change-interface : 기본 영역에 연결된 인터페이스를 다른 영역으로 변경
            - --add-source : 출발지 주소 규칙 추가, 특정 주소의 IP만 지정
             - CIDR Prefix : 출발지 주소 규칙 추가, 네트워크 대역 지정
             - --remove-source : 출발지 주소 규칙 제거
             - firewall-cmd-reload : 실행중 설정들을 초기화 시킨 후에 기본 영역의 규칙 리스트 확인
             - --add-service : 특정 영역에 사전에 정의된 서비스 규칙을 추가
             - --remove-service : 사전에 정의된 서비스 규칙 제거
             - --add-port : 허용하고자 하는 규칙이 서비스로 정의되어 있지 않을 경우, 포트나 프로토콜 등의 규칙을 직접 지정하여 네트워크 허용 규칙 생성
             - --remove-port : 포트 규칙 제거
             - --add-protocol : 프로토콜 규칙 추가 
             - --remove-protocol : 프로토콜 규칙 제거
             - icmp(Internet Control Message Protocol) : 인터넷 제어 메시지 프로토콜로 통신 진단 및 장애 통보 등의 기능을 수행하기 위한 프로토콜
             - 포트 포워딩 : 시스템 내부로 들어오는 패킷을 받았을 때 같은 시스템의 다른 포트, 다른 시스템의 특정 포트로 전달하는 규칙

            리치 규칙 (Rich Rule)
             - 방화벽 규칙을 세부적으로 설정할 때 사용
             - 특정 이벤트가 발생 했을 때 해당 이벤트에 대한 로그나 감사 기록 생성

            SELinux
             - 강제 접근 제어 모델인 MAC 모델을 사용하여 시스템의 보안을 강화하는 리눅스 커널 모듈

            접근제어모델
             - DAC(Discretionary Access Control) : 사용자의 권한 설정 기반
             - MAC(Mandatory Access Control) : 강제적 접근 제어 - 개별적인 접근에 대한 체크
             - RBAC(Role-Based Access Control) : 역할(권한을 사용할 수 있는)을 사용자에게 연결하여 사용

            semanage
             - SELinux의 보안 정책을 조회하거나 설정할 수 있는 관리 도구

            SELinux 모드 종류
             - Disabled : SELinux가 비활성화 되어있는 상태. 프로세스가 파일에 접근할 때 파일에 부여된 권한을 기준으로 접근 제어
             - Enforcing : SELinux 활성화. 프로세스가 파일에 접근할 때 권한과 컨텍스트, 부울 등을 확인하고 필요시 차단
             - Permissive : SELinux 활성화. 정책을 위반하더라도 차단을 강제하지 않고 메시지만 로그에 기록

            SELinux 모드 설정
             - getenforce : 현재 시스템의 SELinux확인
             - setenforce : 시스템이 운영 중일때 SELinux모드 변경

            context 
             - 파일에 접근 할 때 비교하는 요소로 사용
             - 사용자, 역할, 유형, 레벨

            context 변경
             - chcon 명령 : 파일의 컨텍스트를 일시적으로 변경. chcon [option] FILE
             - restorecon 명령 : 파일의 컨텍스트를 복구하는 명령. restorecon [option] FILE
            옵션 설명
            -R, -r 디렉토리가 인자로 지정되면 하위 디렉토리까지 지정
            -F 컨텍스트 강제 재설정
            -v 컨텍스트 변경 사항을 출력
             - semanage fcontext 명령 : 시스템에 등록된 보안레이블을 참고하여 컨텍스트를 자동적으로 변경




실습

NTP 및 시간 설정 (Server 및 Client 모두)

1. 시스템의 시간대를 미국 뉴욕 시간대로 설정하시오.

# timedatectl set-timezone America/New_York

2. 시간 정보를 받아오기 위한 서버로 time.bora.net 서버를 등록하시오.

# vi /etc/chrony.conf

...

server time.bora.net iburst



3. chronyd 서비스를 재시작한 후 설정한 동기화 서버로부터 시간정보를 잘 수신하고 있는지 확인하시오.

# systemctl restart chronyd

# chronyc sources

4. 현재 시스템의 시간이 ntp 서버로부터 동기화되도록 되어 있는지 확인하고, 동기화되도록 설정되어 있지 않을 경우 동기화하도록 설정하시오.

# timedatectl

# timedatectl set-ntp true

5. 시스템의 시간대가 아시아 서울 시간대 (KST, +0900) 로 변경되도록 설정하시오.

# timedatectl set-timezone Asia/Seoul


Firewalld (Server 시스템에서)

1. firewalld 설정을 확인하고, 모든 네트워크 인터페이스로부터 오는 패킷을 기본 영역의 규칙을 적용받도록 설정하시오.

# firewall-cmd --get-default-zone

public

# firewall-cmd --change-interface=enp0s8 --zone=public

2. 네트워크 인터페이스 중 enp0s8 네트워크 인터페이스를 통해 전달되는 패킷이 home 영역의 규칙을 적용받도록 설정하시오.

# firewall-cmd --change-interface=enp0s8 --zone=home

3. firewalld 설정에서 home 영역에서 ssh, telnet 서비스를 허용하도록 설정하시오.

# firewall-cmd --add-service=ssh --zone=home

# firewall-cmd --add-service=telnet --zone=home

4. firewalld 설정에서 기본 영역인 public 영역에서 http, https 서비스를 허용하도록 설정하시오.

# firewall-cmd --add-service={http,https} --zone=public

5. 웹 서비스를 설치 및 구동하고, client 시스템에서 server 시스템으로 웹서비스 연결이 가능한지 확인하시오.

 - yum -y install httpd

 - systemctl start httpd

(현재 client와 연결 시 사용하는 인터페이스인 enp0s8에 연결된 영역에 http 서비스가 허용되어 있는지 확인)

6. 서버 시스템의 8080/tcp 포트로 접근 시 웹 서비스가 사용하는 포트인 80 포트로 연결되도록 설정하시오.

# firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80


SELinux (Client 시스템에서)

1. 현재 SELinux 의 동작 모드를 확인하고. Disabled 모드로 변경하시오.

# vi /etc/selinux/config

SELINUX=disabled

# reboot

2. SELinux 동작모드를 다시 Enforcing 모드로 변경하시오.

# vi /etc/selinux/config

SELINUX=enforcing

...

 

'GOORM' 카테고리의 다른 글

GOORM: Kubernetes-19  (0) 2021.11.18
GOORM: Kubernetes-18  (0) 2021.11.17
GOORM: Kubernetes-16  (0) 2021.11.15
GOORM: Kubernetes-15  (0) 2021.11.12
GOORM: Kubernetes-14  (0) 2021.11.11

댓글