방화벽 및 서비스 관리로 Linux 엔드포인트 강화

CompTIABeginner
지금 연습하기

소개

엔드포인트 강화 (Endpoint hardening) 는 모든 컴퓨터 시스템을 안전하게 보호하는 데 중요한 과정입니다. 이는 시스템의 "공격 표면 (attack surface)"을 줄여 보안 위협에 덜 취약하게 만드는 것을 포함합니다. Linux 시스템 강화의 두 가지 근본적인 측면은 실행 중인 서비스 관리와 방화벽 구현입니다.

이 실습에서는 이러한 필수적인 보안 관행에 대한 실습 경험을 쌓게 됩니다. 다음을 배우게 됩니다:

  • 시스템 기능에 필수적이지 않은 서비스 식별 및 비활성화 방법
  • Linux 에서 네트워크 필터링 규칙 관리를 위한 사용자 친화적인 인터페이스인 Uncomplicated Firewall (UFW) 설치 및 구성 방법

이 실습이 끝나면 Linux 엔드포인트에 기본적인 강화 기술을 적용하는 방법에 대한 실질적인 이해를 갖게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 80%의 긍정적인 리뷰율을 받았습니다.

불필요한 서비스 식별 및 비활성화

이 단계에서는 Linux 시스템에서 활성 상태인 서비스를 식별하고 필요하지 않은 서비스를 비활성화하는 방법을 배웁니다. 실행 중인 서비스 수를 줄이면 각 서비스에 잠재적인 취약점이 있을 수 있으므로 잠재적인 공격 표면을 최소화할 수 있습니다.

먼저 모든 활성 서비스를 나열해 보겠습니다. 일부 Linux 환경, 특히 컨테이너에서는 systemctl 명령을 사용할 수 없습니다. 대안으로 service 명령을 사용할 수 있습니다.

모든 서비스의 상태를 보려면 터미널에서 다음 명령을 실행하십시오:

service --status-all

서비스 목록이 표시됩니다. 서비스 이름 옆의 [ + ]는 실행 중임을 나타내고, [ - ]는 중지되었음을 나타냅니다.

 [ - ]  acpid
 [ - ]  apparmor
 [ + ]  apache2
 [ - ]  atop
 [ - ]  atopacct
 [ + ]  cron
...

웹 서버인 apache2가 실행 중임을 알 수 있습니다. 웹사이트를 호스팅할 필요가 없는 일반 목적의 엔드포인트의 경우 이 서비스는 불필요하므로 비활성화해야 합니다.

apache2 서비스를 중지하려면 stop과 함께 service 명령을 사용합니다. 시스템 서비스를 관리하려면 sudo 권한이 필요합니다.

sudo service apache2 stop

이제 상태를 다시 확인하여 서비스가 중지되었는지 확인하십시오:

service apache2 status

출력에서 Apache2 서비스가 더 이상 실행되지 않음을 확인할 수 있습니다.

○ apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Tue 2025-08-05 14:44:53 CST; 2s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 5892 ExecStop=/usr/sbin/apachectl graceful-stop (code=exited, status=0/SUCCESS)
   Main PID: 4800 (code=exited, status=0/SUCCESS)
        CPU: 50ms

불필요한 서비스를 비활성화함으로써 시스템을 강화하는 간단하지만 효과적인 단계를 수행했습니다.

Uncomplicated Firewall (UFW) 설치 및 구성

이 단계에서는 Uncomplicated Firewall (UFW) 을 설치합니다. UFW 는 강력하지만 복잡한 iptables 방화벽을 위한 사용자 친화적인 프론트엔드입니다. 일반적인 방화벽 규칙을 간소화된 방식으로 구성할 수 있도록 해줍니다.

먼저 패키지 목록을 업데이트하고 ufw 패키지를 설치합니다.

sudo apt-get update && sudo apt-get install -y ufw

설치가 완료되면 UFW 가 설치되지만 아직 활성화되지는 않은 상태입니다. 다음 명령어로 상태를 확인할 수 있습니다.

sudo ufw status

출력 결과는 방화벽이 비활성화되어 있음을 보여줍니다.

Status: inactive

방화벽을 활성화하려면 활성화해야 합니다. 이 명령은 방화벽을 시작하고 시스템 시작 시 자동으로 실행되도록 구성합니다.

참고: 원격 서버에서 방화벽을 활성화할 때는 SSH 액세스를 허용하는 규칙이 있는지 확인해야 합니다. 그렇지 않으면 접속이 차단될 수 있습니다. 이 Lab 환경에서는 진행해도 안전합니다.

지금 UFW 를 활성화합니다:

sudo ufw enable

작업을 확인하라는 메시지가 표시됩니다. 이 명령은 방화벽을 활성화하며 기존 연결을 방해할 수 있습니다.

Firewall is active and enabled on system startup

상세 정보 (기본 정책 포함) 를 확인하기 위해 verbose 옵션을 사용하여 상태를 다시 확인해 보겠습니다.

sudo ufw status verbose

이제 출력 결과는 방화벽이 활성화되어 있으며 기본 정책을 나열하고 있음을 보여줍니다. 기본적으로 UFW 는 모든 들어오는 트래픽을 거부하고 모든 나가는 트래픽을 허용하는데, 이는 안전한 시작점입니다.

Status: active
Logging: off
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

방화벽이 이제 활성화되어 기본적으로 모든 들어오는 연결을 차단하므로, 원격으로 시스템 관리를 계속할 수 있도록 SSH 액세스를 허용해야 합니다.

SSH 연결을 허용하는 규칙을 추가합니다:

sudo ufw allow ssh

규칙이 추가되었다는 확인 메시지가 표시됩니다:

Rule added
Rule added (v6)

이를 통해 방화벽이 활성화된 상태에서도 SSH 액세스가 계속 사용 가능하도록 보장합니다.

기본 방화벽 규칙 생성 및 테스트

이제 UFW 가 활성화되었으므로 네트워크 트래픽을 제어하는 규칙을 만드는 방법을 배웁니다. 기본적으로 다른 모든 것을 차단하면서 특정 필수 서비스만 허용하는 규칙을 추가합니다.

먼저 기본 정책이 올바르게 설정되었는지 확인합니다. 명시적으로 정의하는 것이 좋습니다.

sudo ufw default deny incoming
sudo ufw default allow outgoing

이전 단계에서 SSH 액세스가 이미 구성되었으므로 사용자 지정 애플리케이션에 대한 규칙을 추가해 보겠습니다. 포트 8080에서 사용자 지정 웹 애플리케이션을 실행한다고 가정해 보겠습니다. 이 특정 포트로의 트래픽을 허용하는 규칙을 만들어야 합니다.

sudo ufw allow 8080/tcp

이 명령은 TCP 포트 8080의 들어오는 트래픽을 구체적으로 허용합니다.

Rule added
Rule added (v6)

현재 규칙 목록을 보려면 numbered 옵션과 함께 ufw status를 사용할 수 있습니다. 이렇게 하면 나중에 규칙을 더 쉽게 관리하거나 삭제할 수 있습니다.

sudo ufw status numbered

출력에는 각 규칙 옆에 번호가 매겨진 새 규칙이 표시됩니다.

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 8080/tcp                   ALLOW IN    Anywhere
[ 3] 22/tcp (v6)                ALLOW IN    Anywhere (v6)
[ 4] 8080/tcp (v6)              ALLOW IN    Anywhere (v6)

이제 필수 트래픽만 허용하도록 방화벽을 구성하여 시스템 보안을 크게 향상시켰습니다.

방화벽 활동에 대한 시스템 로그 검토

이 단계에서는 UFW(Uncomplicated Firewall) 의 로깅을 활성화하고 검토하는 방법을 배웁니다. 로그는 네트워크 트래픽 모니터링, 잠재적인 보안 위협 식별 및 연결 문제 해결에 필수적입니다.

UFW 로깅은 기본적으로 활성화되어 있지 않습니다. 간단한 명령어로 활성화할 수 있습니다.

sudo ufw logging on

로깅이 활성화되었다는 확인 메시지가 표시됩니다.

Logging enabled

UFW 로그는 /var/log/ufw.log 파일에 기록됩니다. 로그 파일은 로깅을 활성화한 직후에 존재하지 않을 수 있으며, 첫 번째 로그 항목이 기록될 때 자동으로 생성된다는 점에 유의하십시오.

tail 명령과 -f (follow) 플래그를 사용하여 로그 파일을 실시간으로 볼 수 있습니다. 파일이 아직 존재하지 않으면, 명령은 파일이 생성될 때까지 대기합니다.

sudo tail -f /var/log/ufw.log

이 명령은 로그의 마지막 몇 줄을 표시하고 새 항목을 기다립니다. 실제 환경에서는 방화벽이 연결을 차단하거나 허용할 때 로그 항목이 나타나는 것을 볼 수 있습니다. 이 랩 환경에는 외부 트래픽이 접근을 시도하지 않으므로 새 항목이 표시되지 않을 수 있습니다. 로그 추적을 중지하려면 Ctrl+C를 누르십시오.

차단된 패킷에 대한 일반적인 로그 항목은 다음과 같습니다.

Sep 10 12:00:00 ubuntu kernel: [UFW BLOCK] IN=eth0 OUT= MAC=01:02:03:04:05:06:07:08:09:0a:0b:0c SRC=192.168.1.10 DST=192.168.1.20 LEN=40 TOS=0x00 PREC=0x00 TTL=64 ID=12345 PROTO=TCP SPT=54321 DPT=23 WINDOW=0 RES=0x00 SYN URGP=0

다음은 중요한 필드에 대한 간략한 설명입니다.

  • [UFW BLOCK]: 방화벽에서 수행된 작업을 나타냅니다.
  • SRC: 패킷의 소스 IP 주소입니다.
  • DST: 대상 IP 주소입니다.
  • PROTO: 네트워크 프로토콜 (예: TCP, UDP).
  • DPT: 대상 포트입니다.

또한 grep을 사용하여 특정 이벤트를 로그 파일에서 검색할 수도 있습니다. 예를 들어, 차단된 모든 연결 시도를 찾으려면 다음을 실행할 수 있습니다.

sudo grep "UFW BLOCK" /var/log/ufw.log

로그 파일이 아직 존재하지 않거나 비어 있는 경우 이 명령은 결과를 반환하지 않으며 이는 정상입니다. 방화벽 활동이 발생하면 로그 항목이 기록되며 이를 검색할 수 있습니다. 이 명령은 로그를 필터링하여 "UFW BLOCK" 문자열을 포함하는 줄만 표시하므로 의심스러운 활동 패턴을 식별하는 데 매우 유용합니다.

요약

축하합니다! Linux 엔드포인트 강화에 대한 이 실습을 성공적으로 완료했습니다.

이 실습에서는 기본적인 보안 작업에 대한 실질적인 경험을 쌓았습니다. 다음을 배웠습니다.

  • service 명령을 사용하여 Linux 시스템에서 실행 중인 서비스를 식별합니다.
  • 불필요한 서비스를 중지하고 비활성화하여 시스템의 공격 표면을 줄입니다.
  • Uncomplicated Firewall (UFW) 을 설치, 활성화 및 구성합니다.
  • SSH 및 사용자 지정 애플리케이션과 같은 필수 서비스에 대한 특정 allow 규칙을 만듭니다.
  • UFW 로그를 활성화하고 검토하여 방화벽 활동을 모니터링하고 잠재적인 위협을 탐지합니다.

이러한 기술은 안전하고 강력한 Linux 환경을 유지하는 시스템 관리자 또는 개발자에게 필수적인 기본 기술입니다. 이러한 기술을 적용하면 시스템의 보안 상태를 크게 향상시킬 수 있습니다.