서비스 가용성 및 기본 모니터링 시뮬레이션
이 단계에서는 CIA 보안 삼축의 세 번째 구성 요소인 가용성 (Availability) 원칙을 탐구합니다. 가용성은 시스템과 서비스가 필요할 때 작동하고 접근 가능하도록 보장합니다. 간단한 웹 서비스를 시뮬레이션하고, 서비스가 실행 중인지 확인하는 방법, 서비스 장애를 시뮬레이션한 다음, 가용성 확인을 자동화하는 기본 모니터링 스크립트를 작성하는 방법을 배우게 됩니다.
먼저 ~/project 디렉토리에 있는지 확인합니다.
Python 의 내장 웹 서버를 사용하여 실행 중인 서비스를 시뮬레이션합니다. 이 명령은 포트 8000에서 웹 서버를 시작하고 현재 디렉토리의 파일을 제공합니다. 끝에 있는 &는 프로세스를 백그라운드에서 실행하므로 터미널을 계속 사용할 수 있습니다.
python3 -m http.server 8000 &
프로세스가 시작되었음을 나타내는 메시지와 함께 해당 프로세스 ID(PID) 가 표시됩니다.
[1] 12345
Enter를 눌러 계속 진행합니다.
이제 서비스가 실행 중입니다. 서비스가 실행 중인지 확인하는 기본적인 방법은 해당 프로세스가 존재하는지 확인하는 것입니다. pgrep 명령을 사용하여 이름으로 프로세스의 PID 를 찾을 수 있습니다.
pgrep -f http.server
이는 서버 프로세스의 PID 를 반환하여 메모리에서 실행 중임을 확인해야 합니다.
12345
하지만 실행 중인 프로세스가 서비스가 올바르게 작동함을 보장하지는 않습니다. 더 나은 확인 방법은 사용자가 하는 것처럼 서비스에 연결을 시도하는 것입니다. curl 명령을 사용하여 로컬 서버로 요청을 보내겠습니다.
curl http://localhost:8000/confidential_data.txt
서비스가 사용 가능하므로 이전 단계에서 생성한 파일의 내용으로 응답합니다.
Top Secret Details
This is an unauthorized modification.
이제 서비스 장애를 시뮬레이션해 보겠습니다. kill 명령을 사용하여 웹 서버 프로세스를 종료합니다. 이전에 찾은 PID 가 필요합니다.
## pgrep 명령에서 나온 실제 PID로 12345를 바꾸세요
kill 12345
kill을 실행한 후 백그라운드 작업에 대한 "Terminated" 메시지가 표시될 수 있습니다. 이제 curl로 다시 서비스에 액세스해 보겠습니다.
curl http://localhost:8000/confidential_data.txt
이번에는 서비스가 더 이상 실행 중이 아니며 연결을 수락할 수 없으므로 명령이 실패합니다. 이는 가용성 부족을 보여줍니다.
curl: (7) Failed to connect to localhost port 8000 after 0 ms: Connection refused
마지막으로 이 확인을 자동화하기 위한 간단한 모니터링 스크립트를 만들어 보겠습니다. nano를 사용하여 monitor.sh라는 새 파일을 만듭니다.
nano monitor.sh
편집기에 다음 스크립트를 입력합니다. 이 스크립트는 curl을 사용하여 서비스를 확인합니다. 성공적인 응답 (200 OK) 을 받으면 서비스가 "UP"이라고 보고하고, 그렇지 않으면 "DOWN"이라고 보고합니다.
#!/bin/bash
## localhost:8000의 서비스가 응답하는지 확인
if curl -s --head http://localhost:8000 | grep "200 OK" > /dev/null; then
echo "Service Status: UP"
else
echo "Service Status: DOWN"
fi
Ctrl+X, Y, Enter를 눌러 파일을 저장하고 nano를 종료합니다.
chmod를 사용하여 스크립트를 실행 가능하게 만듭니다.
chmod +x monitor.sh
이제 모니터링 스크립트를 실행합니다. 서비스가 중지되었으므로 "DOWN"으로 보고해야 합니다.
./monitor.sh
Service Status: DOWN
이제 서비스를 시작하고, 가용성을 확인하고, 장애를 시뮬레이션하고, 이를 모니터링하는 기본 스크립트를 만드는 방법을 배웠습니다.