- Facts (사실, 객관)
: 어제 배운 작업 스케줄링이랑 ssh에 대해서 복습하고 오늘은 scp, NTP 서버 관리, 방화벽, SELinux에 대해서 배우고 실습 문제도 풀었다.
- Feelings (느낌, 주관)
: 하루종일 컴봐서 그런지 두통이 너무 심했던 날 ㅜㅜ 그래도 복습 겸 TIL 쓰고 SQL도 공부하고,,, 코테 연습도 하고,,, 갑자기 진도 너무 쑥쑥나가고 강의도 빨라서 따라가기 조금 버거웠다 - 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 마지막 측정 시 서버와 로컬 시간의 오차범위 표시
- -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 컨텍스트 변경 사항을 출력
실습
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 |
댓글