리눅스 서버 보안

JIWON·2025년 6월 4일

Linux

목록 보기
14/20
post-thumbnail

🥑 보안의 기본 조치

1️⃣ 불필요한 서비스 통제

  • 보안 위협은 네트워크를 통해 발생

  • 필요하지 않은 서비스 포트는 막아두어야 한다

    • 모든 포트를 막고 서비스를 제공하려는 포트만 열어주는 것이 좋다

💠 서비스를 통제하는 방법

  1. 불필요한 서비스 자체를 제거하는 방법

  2. 방화벽에서 패킷을 필터링 하는 방법


2️⃣ 소프트웨어 패치 설치

  • Cent OS 나 Ubuntu 같은 주요 리눅스 배포판은 이미 제공한 소프트웨어에 대한 패치를 지속적으로 제공
  • 시스템 관리자는 패치 관련 발표에 주의를 기울이고 있다가 패치가 나오면 즉시 설치
  • 패치를 설치하면 시스템 상태를 재확인 할 필요가 있다

3️⃣ 주기적인 점검

  • 프로세스의 목록과 사용자의 상태, 서비스의 동작 상태, 네트워크 연결 상태, 디스크의 남은 용량 등을 주기적으로 확인
  • 점검할 항목을 체크리스트로 만들고 매일, 매주 등 주기를 정해 점검
  • 시스템과 네트워크 점검을 도와주는 도구를 적극 활용

4️⃣ 백업

  • 주요 시스템 설정과 소프트웨어, 사용자 데이터 등을 주기적으로 백업

🍉 시스템 로그

  • 로그는 커널과 리눅스 시스템이 제공하는 여러 서비스 및 응용 프로그램이 발생시키는 메시지
  • 로그를 기록한 파일은 로그 파일이라고 리눅스에서는 다양한 로그 파일이 존재
  • 로그 파일을 통해 시스템 상태를 파악할 수 있기 때문에 보안 사고에 대비하며 사고가 발생했을 대는 원인을 규명하고 침입

1️⃣ 주요 로그 파일

  • 리눅스의 로그 파일은 /var/log 디렉토리에 존재
    ls /var/log
  • boot.log 나 bootstrap.log : 부팅 시 서비스 데몬의 실행 상태를 기록

    • 시스템이나 애플리케이션의 초기화 및 부팅 과정에서 발생
  • btmp: 실패한 로그인 기록으로 바이너리 파일

  • journal 디렉토리: 데몬이 관리하는 메시지를 기록하는 디렉토리

  • ufw : 방화벽 데몬이 생성하는 메시지

  • lastlog : 각 계정의 가장 최근 로그인 정보를 기록하는데 lastlog 명령으로도 확인 가능

  • mail.log : 메일송수신과 관련된 메시지

  • wtmp: 로그인 정보를 기록하는데 last 명령으로 확인 가능

  • syslog : 공통적인 로그를 기록하는데 커널이나 데몬에서 발생하는 대부분의 메시지가 기록된다.


2️⃣ 로그 파일을 읽는 법

💠 log.py 파일 생성

로그 파일 한줄씩 읽기

with open('/var/log/syslog', 'r') as f:
    for line in f:
        print(line, end='')

시간, 사용자만 나오도록

with open('/var/log/syslog', 'r') as f:
    logs = f.readlines()
    for line in logs:
        messages = line.split()
        print(messages[0], messages[1])


3️⃣ rsyslog 데몬

텍스트 기반의 전통적인 로그 파일로 시스템 로그를 저장

  • 리눅스 시스템의 로그 파일 중 일부 파일은 rsyslog 라는 로그 관리 데몬에 의해 통제

  • journal 데몬이 기본 도구 역할

  • sudo systemctl status rsyslog : active 상태

💠 설정 파일

  • 설정 파일이 /etc/rsyslog.d 디렉토리에 있는 *.conf 파일

  • 어떤 로그를 어떻게 처리할 것인지를 규칙으로 정의한 파일

  • 텍스트 파일이므로 관리자가 편집 가능

  • 규칙은 한 행에 필터동작 으로 작성하고 공백문자 으로 구분

💠 필터링

  • 필터기능명.우선순위 형태로 작성

  • 우선순위 : 메시지의 심각도를 의미

    • emerg: 매우 긴급한 상태
    • alert: 긴급한 상태
    • crit: 중대한 상태
    • err: 오류 상태
    • warning: 경고 메시지
    • notice: 단순 메시지
    • info : 정보성메시지
    • debug: 디버깅용 메시지

필터 예시

  • kern.* : 우선 순위에 상관없이 커널의 모든 메시지를 선택
  • mail.crit : 메일에서 crit 이상 우선순위의 모든 로그 메시지를 선택
  • cron.!ibfo.!debug: info 와 debug 를 제외한 모든 메시지를 선택
  • mail.=info : 메일에서 info인 메시지를 선택

💠 동작

필터가 선택한 메시지를 어떻게 처리할 지 정의한다.
메시지를 파일로 저장하거나 메일로 전송하거나 화면으로 출력하기

동작 예시

kern.crit /var/log/kern.log : kern의 crit 이상의 메시지를 kern.log 파일에 기록


4️⃣ journal 기능

journal은 systemd 데몬의 구성요소로 로그 파일의 관리를 담당
시스템 부팅부터 발생하는 모든 로그를 바이너리 형식으로 수집 및 저장

  • 로깅 데이터는 journald 데몬이 수집해서 가공한 후 journals 라고 불리는 바이너리 파일로 저장
    • 파일에는 커널이나 사용자 프로세스의 메시지, 시스템 서비스의 표준 출력과 표준 오류 등이 저장되고 사용자가 편집할 수 없다
  • 실행 파일의 이름은 systemd-journald 이다
  • 로그 확인: journalctl [옵션]

  • 옵션:

    • n 행수 : 가장 최근에 기록된 로그 중 행 수 만큼 출력
    • r : 가장 최근 로그가 출력
    • o {short|verbose}
      short : syslog 형식으로 출력
      verbose : 로그의 상세한 내용까지 출력
    • f : 최근 로그를 자동으로 출력
    • p 우선순위 : 우선순위로 필터링해서 출력
    • b 시간 : 시간 이후의 로그만 출력
    • --since=시간 --until=시간 : 시간을 필터링해서 출력
    • 필드명=값 : 필드명으로 필터링해서 출력

💠 예시

  • journalctl : 로그파일의 전체 내용 보기
  • journalctl -n 1 : 가장 최근 내용 1개 확인
  • journalctl -n 1 -o verbose : 자세히
  • journalctl -f : 대기상태 - 로그를 자동으로 출력해줌

0개의 댓글