

이 프로젝트는 실무 환경 수준의 보안성과 운영 자동화를 목표로, Rocky Linux 기반의 WordPress 인프라를 직접 구축한 경험을 담고 있다.
단순 설치가 아닌, 보안 강화, 자동화 구성, 실시간 모니터링 체계 구축이라는 세 가지 핵심을 중심으로 설계했다.
Ansible을 활용해 Apache, PHP-FPM, MariaDB, WordPress, 방화벽, 로그 분석 도구까지 자동화 구성하였으며, SELinux는 enforcing 모드로 운영하여 보안 정책을 강제 적용했다. 또한, Wordfence 보안 플러그인을 통해 로그인 보호, 2단계 인증, 웹 방화벽을 설정하고, Prometheus + Grafana를 통해 시스템의 CPU, 메모리, 디스크, 네트워크 등의 상태를 시각화하여 실시간 운영 가시성을 확보했다.
진행 과정에서는 실제 장애 상황과 유사한 문제들(php-fpm 503 오류, SELinux 접근 차단, 인증서 발급 실패 등)을 직접 해결하며, 문제 분석 및 구조적인 운영 능력을 체득했다.
단순히 돌아가는 시스템이 아닌, 보안과 안정성을 모두 갖춘 실전형 인프라 환경을 자동화 방식으로 완성한 것이 이 프로젝트의 핵심이다.
RHEL 계열의 오픈소스 OS로, 기업 실무 환경에서 CentOS 대체로 널리 사용되고 있다. SELinux, systemd, firewalld 등 실무에서 자주 접하는 구성 요소들이 탑재되어 있어 실제 서비스 환경과 유사한 조건을 제공한다.
독립된 테스트 환경 구축을 위해 사용. 네트워크 설정, 스냅샷 복원 등을 통해 장애 테스트와 복구 실습이 가능하다.
WordPress와의 호환성과 설정 유연성이 높아 선택했다.
성능 및 보안 향상을 위해 Apache와 연동하여 사용한다. socket 및 TCP 방식 모두 테스트하며 실무 연동 방식으로 학습했다.
MySQL 호환 오픈소스 DBMS이다. mysqldump를 활용한 백업 및 복구 자동화가 가능하다.
모든 구성 과정을 role 기반으로 자동화한다. . Apache, PHP, DB, WordPress 설치부터 보안 설정, 백업까지 반복 가능하고 관리가 쉬운 코드 형태로 관리할 수 있다.
일부 로컬 설정 및 수동 작업을 위한 보조 자동화 수단으로 사용한다.
Windows 기반 서버 환경 연동 및 향후 확장성을 고려해 연습, 적용 예정이다.
서비스 접근 제어 및 시스템 내부 권한을 관리한다. 운영 중 발생하는 차단 로그를 바탕으로 보안 예외 정책을 적용한다.
포트 기반으로 접근을 제어한다. HTTPS 443, SSH 22 등 필요한 포트만 열어 실무 수준의 제어를 학습했다.
웹 애플리케이션 방화벽이다. Apache와 연동하여, OWASP Core Rule Set을 적용, 테스트한다.
WordPress 환경 전용 보안 플러그인이다. 관리자 로그인 제한, 이중 인증, 실시간 공격 탐지 기능으로 실무에서 가장 널리 사용된다.
Node Exporter를 통해 시스템 지표를 수집한다. YAML 기반 설정으로 exporter을 연동한다.
Prometheus에서 수집한 데이터를 시각화한다. CPU, 메모리, 디스크, 네트워크 트래픽 등을 Stat, Bar Gauge, Table 등의 시각 도구로 표현한다.
로그 순환 및 시스템 로그 분석을 담당한다. 주기적인 로그 정리를 통한 운영 안정성을 확보한다.
이 스택들은 실제 운영 환경에서 널리 사용되는 구성 요소들로, 단순한 구축이 아닌 실무 수준의 문제 해결 경험을 쌓기 위한 목적으로 선정했다.
프로젝트는 VirtualBox 가상머신을 기반으로 진행되었으며, 테스트와 장애 복구 연습을 고려해 스냅샷 기능을 적극 활용했다.
기본 운영체제는 Rocky Linux 9.5 Minimal ISO를 사용하였고, 설치 시 GUI 없이 CLI 환경을 선택하여 리눅스 시스템 관리 능력 향상에 초점을 맞췄다.
7.0.10
CPU 2코어, RAM 4GB, 저장공간 40GB
브리지 어댑터로 설정하여 외부 인터넷 접근 및 내부 IP 고정이 가능하게 구성했다.

실습 중 오류 발생 시 지점 복구 후 재진행 가능하도록 설계, 실무에서 시스템 복구/운영 경험까지 학습할 수 있도록 구성했다.
WordPress 인프라 전체 구성은 수동 설정이 아닌, Ansible 역할 기반(Role-based) 자동화로 설계했습니다.
각 컴포넌트(Apache, PHP, MariaDB, WordPress 등)를 독립된 Role로 나누고, playbook 하나만 실행하면 시스템이 일관되게 설정되도록 구성하였습니다.




이 단계에서는 시스템 접근 제어, 파일 권한 보호, 웹 애플리케이션 공격 방어를 중심으로 기초 보안 설정을 강화했다.
보안 강화를 위한 핵심 요소는 SELinux, firewalld, ModSecurity, Wordfence 네 가지이다.
getenforce 명령어로 SELinux 상태를 Enforcing으로 유지함으로써 비정상 접근을 정책 기반으로 차단한다.
웹 서버 디렉토리(/var/www/html/wordpress)에 대해 httpd_sys_rw_content_t context를 부여했다.

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




OWASP CRS 연동 가능하며, /etc/httpd/conf.d/mod_security.conf에서 설정을 변경한다.
SQL Injection, XSS, 파일 포함 공격 등을 탐지하고 차단한다.


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


다음 날에 이어서..
