[파이썬] 파이썬을 활용한 리눅스 서버 보안 이벤트 분석 스크립트

리눅스 서버 보안은 중요한 주제입니다. 서버에 발생하는 보안 이벤트를 분석하고 대응하는 것은 보안 전문가 및 시스템 관리자에게 매우 중요한 작업입니다. 이번 블로그 포스트에서는 파이썬을 사용하여 리눅스 서버 보안 이벤트를 분석하는 스크립트를 작성하는 방법을 살펴보겠습니다.

필요한 라이브러리 설치

이 스크립트를 작성하기 위해서는 몇 가지 파이썬 라이브러리가 필요합니다. 다음 명령어를 사용하여 필요한 라이브러리를 설치합니다.

pip install pandas matplotlib seaborn

로그 파일 분석

보안 이벤트를 분석하기 위해서는 로그 파일을 읽어와야 합니다. 흔히 사용되는 로그 파일 형식은 Apache HTTP Server에서 생성되는 access.log 파일입니다. 이번 예제에서는 이 파일을 사용하여 보안 이벤트를 분석하는 스크립트를 작성하겠습니다.

import pandas as pd

# 로그 파일 경로
log_file = "/var/log/apache2/access.log"

# 로그 파일 읽기
df = pd.read_csv(log_file, delimiter=" ", header=None)

# 필요한 컬럼 선택
df = df[[0, 3, 6, 8]]

# 컬럼 이름 변경
df.columns = ["ip", "timestamp", "request", "status_code"]

# 결과 출력
print(df.head())

이 스크립트는 access.log 파일을 읽어와 필요한 컬럼을 선택한 뒤, 컬럼 이름을 변경하여 출력합니다.

데이터 시각화

데이터 시각화는 보안 이벤트 분석에서 매우 유용한 도구입니다. 이 스크립트에서는 matplotlibseaborn 라이브러리를 사용하여 데이터를 시각화하는 예제를 작성하겠습니다.

import matplotlib.pyplot as plt
import seaborn as sns

# 상위 10개의 IP 주소 추출
top_ips = df["ip"].value_counts().head(10)

# 막대 그래프 생성
plt.figure(figsize=(10, 6))
sns.barplot(x=top_ips.index, y=top_ips.values)
plt.xlabel("IP Address")
plt.ylabel("Frequency")
plt.title("Top 10 IP Addresses")

# 그래프 출력
plt.show()

이 스크립트는 IP 주소의 빈도수를 계산하고 상위 10개의 IP 주소를 막대 그래프로 출력합니다.

보안 이벤트 대응

보안 이벤트를 실시간으로 모니터링하고 대응하는 것은 매우 중요합니다. 이번 예제에서는 requests 라이브러리를 사용하여 웹 사이트에 대한 요청을 모니터링하는 스크립트를 작성하겠습니다.

import requests

# 웹 사이트 URL
url = "https://www.example.com"

# 요청 모니터링
while True:
    response = requests.get(url)
    if response.status_code != 200:
        print("Warning: Non-OK status code returned!")

    # 일정 시간 간격으로 요청
    time.sleep(60)

이 스크립트는 주어진 URL에 대한 요청을 1분마다 모니터링하고 응답 상태 코드가 200이 아닌 경우 경고 메시지를 출력합니다.

이제 파이썬을 활용한 리눅스 서버 보안 이벤트 분석 스크립트를 작성하는 방법을 살펴보았습니다. 이 스크립트를 사용하여 리눅스 서버의 보안 상태를 모니터링하고 보호할 수 있습니다.

주의: 보안 이벤트 분석은 복잡하고 전문적인 작업이므로 이 예제는 개념을 이해하기 위한 간단한 예시에 불과합니다. 실제 시스템에서 사용하기 전에 보안 전문가와 함께 검토하고 수정해야 합니다.