CAB TA 4기 22일차의 기록

Urban Jungle·2025년 4월 15일

CAB TA 4기

목록 보기
22/28

SecureWP Infra: Automated WordPress System

Infrastructure Hardening with Ansible, Grafana, and Wordfence on Rocky


Project Overview

이 프로젝트는 실무 환경 수준의 보안성과 운영 자동화를 목표로, Rocky Linux 기반의 WordPress 인프라를 직접 구축한 경험을 담고 있다.

단순 설치가 아닌, 보안 강화, 자동화 구성, 실시간 모니터링 체계 구축이라는 세 가지 핵심을 중심으로 설계했다.

Ansible을 활용해 Apache, PHP-FPM, MariaDB, WordPress, 방화벽, 로그 분석 도구까지 자동화 구성하였으며, SELinux는 enforcing 모드로 운영하여 보안 정책을 강제 적용했다. 또한, Wordfence 보안 플러그인을 통해 로그인 보호, 2단계 인증, 웹 방화벽을 설정하고, Prometheus + Grafana를 통해 시스템의 CPU, 메모리, 디스크, 네트워크 등의 상태를 시각화하여 실시간 운영 가시성을 확보했다.

진행 과정에서는 실제 장애 상황과 유사한 문제들(php-fpm 503 오류, SELinux 접근 차단, 인증서 발급 실패 등)을 직접 해결하며, 문제 분석 및 구조적인 운영 능력을 체득했다.

단순히 돌아가는 시스템이 아닌, 보안과 안정성을 모두 갖춘 실전형 인프라 환경을 자동화 방식으로 완성한 것이 이 프로젝트의 핵심이다.


Technology Stack & Justification

운영체제 및 가상환경

Rocky Linux 9.5

RHEL 계열의 오픈소스 OS로, 기업 실무 환경에서 CentOS 대체로 널리 사용되고 있다. SELinux, systemd, firewalld 등 실무에서 자주 접하는 구성 요소들이 탑재되어 있어 실제 서비스 환경과 유사한 조건을 제공한다.

VirtualBox

독립된 테스트 환경 구축을 위해 사용. 네트워크 설정, 스냅샷 복원 등을 통해 장애 테스트와 복구 실습이 가능하다.

웹/애플리케이션 및 데이터베이스

Apache(httpd)

WordPress와의 호환성과 설정 유연성이 높아 선택했다.

PHP-FPM(FastCGI Process Manager)

성능 및 보안 향상을 위해 Apache와 연동하여 사용한다. socket 및 TCP 방식 모두 테스트하며 실무 연동 방식으로 학습했다.

MariaDB

MySQL 호환 오픈소스 DBMS이다. mysqldump를 활용한 백업 및 복구 자동화가 가능하다.

인프라 자동화 및 관리

Ansible

모든 구성 과정을 role 기반으로 자동화한다. . Apache, PHP, DB, WordPress 설치부터 보안 설정, 백업까지 반복 가능하고 관리가 쉬운 코드 형태로 관리할 수 있다.

Shell Script

일부 로컬 설정 및 수동 작업을 위한 보조 자동화 수단으로 사용한다.

PowerShell

Windows 기반 서버 환경 연동 및 향후 확장성을 고려해 연습, 적용 예정이다.

보안 및 방화벽

SELinux (Enforcing 모드)

서비스 접근 제어 및 시스템 내부 권한을 관리한다. 운영 중 발생하는 차단 로그를 바탕으로 보안 예외 정책을 적용한다.

Firewalld

포트 기반으로 접근을 제어한다. HTTPS 443, SSH 22 등 필요한 포트만 열어 실무 수준의 제어를 학습했다.

ModSecurity (WAF)

웹 애플리케이션 방화벽이다. Apache와 연동하여, OWASP Core Rule Set을 적용, 테스트한다.

Wordfence

WordPress 환경 전용 보안 플러그인이다. 관리자 로그인 제한, 이중 인증, 실시간 공격 탐지 기능으로 실무에서 가장 널리 사용된다.

모니터링 및 시각화

Prometheus

Node Exporter를 통해 시스템 지표를 수집한다. YAML 기반 설정으로 exporter을 연동한다.

Grafana

Prometheus에서 수집한 데이터를 시각화한다. CPU, 메모리, 디스크, 네트워크 트래픽 등을 Stat, Bar Gauge, Table 등의 시각 도구로 표현한다.

logrotate, journalctl

로그 순환 및 시스템 로그 분석을 담당한다. 주기적인 로그 정리를 통한 운영 안정성을 확보한다.

이 스택들은 실제 운영 환경에서 널리 사용되는 구성 요소들로, 단순한 구축이 아닌 실무 수준의 문제 해결 경험을 쌓기 위한 목적으로 선정했다.


프로젝트는 VirtualBox 가상머신을 기반으로 진행되었으며, 테스트와 장애 복구 연습을 고려해 스냅샷 기능을 적극 활용했다.

기본 운영체제는 Rocky Linux 9.5 Minimal ISO를 사용하였고, 설치 시 GUI 없이 CLI 환경을 선택하여 리눅스 시스템 관리 능력 향상에 초점을 맞췄다.


Environment Setup

가상머신 구성

VirtualBox Version

7.0.10

설정 사양

CPU 2코어, RAM 4GB, 저장공간 40GB

네트워크 어댑터

브리지 어댑터로 설정하여 외부 인터넷 접근 및 내부 IP 고정이 가능하게 구성했다.

초기 설정 항목

  • 사용자 계정: root, jm 일반 사용자 구성
  • Hostname: securewp.local 설정
  • SELinux 설정: 설치 후 enforcing 상태 확인 및 정책 적용 준비
  • 패키지 캐시 클리어: dnf clean all 수행 후 dnf update로 최신화
  • EPEL 및 Remi 저장소 추가: 최신 PHP, MariaDB 패키지 설치를 위한 저장소 구성
  • timezone 설정: Asia/Seoul 설정 및 시간 동기화 chronyd 구성
  • 방화벽 초기 설정: firewalld zone 확인 및 HTTP, HTTPS, SSH 포트 개방

getenforce 출력

스냅샷 관리 전략

  • Snapshot 1 (Wordfence 설치 전): Apache, PHP, DB, WordPress 설치 완료
  • Snapshot 2 (PHP 보안 설정 완료 시점)
  • Snapshot 3 (Grafana 대시보드 구성 완료)

실습 중 오류 발생 시 지점 복구 후 재진행 가능하도록 설계, 실무에서 시스템 복구/운영 경험까지 학습할 수 있도록 구성했다.


Infrastructure Automation with Ansible

WordPress 인프라 전체 구성은 수동 설정이 아닌, Ansible 역할 기반(Role-based) 자동화로 설계했습니다.
각 컴포넌트(Apache, PHP, MariaDB, WordPress 등)를 독립된 Role로 나누고, playbook 하나만 실행하면 시스템이 일관되게 설정되도록 구성하였습니다.

디렉토리 구조

주요 Role 및 구성 목적

  • Apache: httpd 설치 및 가상호스트 설정(wordpress-ssl.conf)
  • PHP: PHP 8.1 설치 및 FPM 연동 (Remi repo 활용)
  • MariaDB: DB설치, root 계정 설정, WordPress용 DB/user 생성
  • Wordpress: Wordpress 압축 해제, wp-config.php 자동 구성
  • Firewall: firewalld 포트 개방 (80, 443, 22) 및 서비스 등록
  • SELinux: enforcing 유지, Wordpress 디렉토리 보안 context 설정
  • PHP_Hardening: php.ini 파일 보안 설정 적용 (expose.php, disable_functions 등)
  • Logwatch: 시스템 로그 리포트 자동화 (메일 발송도 구성 가능)

실행 방법

systemctl status httpd 출력화면

자동화 구성 예시 (apache role 내 tasks/main.yml)

  • Role 분리: 각 서비스 단위로 역할이 구분되어 있어 유지보수, 재사용, 확장이 용이함
  • 재현 가능성: 스냅샷 없이도 ansible-playbook 한 번으로 환경 구성 가능
  • 실제 정책 반영: SELinux context, 파일 권한, php.ini 보안 설정 등 실제 운영환경에서 요구되는 설정 반영

Security Hardening & Firewall Configuration

이 단계에서는 시스템 접근 제어, 파일 권한 보호, 웹 애플리케이션 공격 방어를 중심으로 기초 보안 설정을 강화했다.
보안 강화를 위한 핵심 요소는 SELinux, firewalld, ModSecurity, Wordfence 네 가지이다.

SELinux 정책 적용(enforcing 유지)

상태 확인

getenforce 명령어로 SELinux 상태를 Enforcing으로 유지함으로써 비정상 접근을 정책 기반으로 차단한다.

Context 설정

웹 서버 디렉토리(/var/www/html/wordpress)에 대해 httpd_sys_rw_content_t context를 부여했다.

오류 해결 경험

php-fpm 연동 중 SELinux 차단 로그(avc: denied)를 journalctl -xe, ausearch -m avc로 분석해 해결

방화벽 구성 (firewalld)

firewalld 서비스 상태 확인 및 활성화

HTTP, HTTPS, SSH 포트 개방

zone 확인

웹방화벽 구성 (ModSecurity)

설치 및 활성화

기본 룰셋 확인 및 적용

OWASP CRS 연동 가능하며, /etc/httpd/conf.d/mod_security.conf에서 설정을 변경한다.

기능

SQL Injection, XSS, 파일 포함 공격 등을 탐지하고 차단한다.

워드프레스 보안 플러그인 설정 (Wordfence)

  • 2FA, 로그인 제한, 관리자 알림 이메일 활성화
  • Advanced Protection 모드: 모든 PHP 요청을 방화벽이 사전 처리
  • 실시간 공격 탐지 대시보드 구성 완료

실무 관점에서의 강점

  • SELinux: Enforcing 유지 -> 시스템 내 비인가 접근 제어 정책
  • Firewalld: 80/443/22 포트 제한 개방 -> 외부 접근 최소화
  • ModSecurity: 활성화 -> 공격 유형 탐지 및 대응
  • Wordfence: 로그인 보안 + 실시간 탐지 -> WordPress 특화 보호 기능

Wordpress 내부 메뉴 접근 제어

Appearance의 Theme Editor와 Plugin의 Add New Plugin이 차단된 모습을 볼 수 있다.

Wordfence Dashboard

Wordfence 2FA(2중 잠금) 설정


다음 날에 이어서..

profile
똑똑해지고 싶은 공학도

0개의 댓글