현재 운영 중인 환경은 Nginx 컨테이너를 기반으로 클라이언트 서비스를 배포하여 구성되어 있다.
사용자가 많지 않더라도, 외부에서 언제든 다양한 방식의 스크립트 공격이나 서버 침투 시도가 발생할 수 있는 구조다.
이러한 보안 위협에 대비하기 위한 여러 방법 중 하나로 ModSecurity를 도입해보았다.
ModSecurity는 WAS 앞단에서 동작하는 **웹 애플리케이션 방화벽(WAF)**이다.
일반적인 네트워크 방화벽과는 달리, 웹 애플리케이션 특화 공격에 대응하도록 설계되어 있다는 점에서 차별점이 있다.
ModSecurity는 대표적으로 다음과 같은 웹 공격을 탐지하고 차단할 수 있다:
- SQL Injection
- XSS(Cross-site Scripting)
- CSRF(Cross-site Request Forgery)
- JavaScript 기반의 악성 요청 등
특히, 단순 차단에 그치지 않고 모든 의심 요청을 로그로 기록하며,
환경에 맞게 룰셋을 커스터마이징할 수 있다는 점에서 유연한 운영이 가능하다.
AS-IS

현재 시스템 구성은 다음과 같다.
- Nginx를 통해 프론트엔드 프로젝트를 정적 파일로 서빙하고 있으며
- 백엔드 서버는 별도로 분리되어 동작 중이다.
다만, 보안 관련 설정이 별도로 적용되어 있지 않아,
SQL Injection이나 URL에 스크립트를 삽입하는 방식의 공격에 대해 취약한 상태다.
외부 요청에 대한 필터링이나 차단 기능이 없기 때문에, 기본적인 웹 공격에도 노출될 가능성이 존재한다.


TO-BE
그래서 이런 구조적인 문제를 조금이라도 개선해보려고 보안 쪽 방법을 찾아보다가,
ModSecurity라는 걸 알게 됐다.
코드 자체를 일일이 수정하거나, 백엔드에 복잡한 인증 시스템을 얹는 것보단
앞단에서 공격을 먼저 막아주는 구조가 필요하다고 생각했다.
웹 요청을 들어오는 시점에 실시간으로 검사하고, 악성 요청은 서버에 도달하기 전에 차단한다는 점에서 도입이 꼭 필요하다고 생각들었다.
ModSecurity는 nginx 앞단에서 동작한다는점,
게다가 기존에 쓰고 있던 nginx 도커 이미지를 ModSecurity 포함 이미지로 교체만 해주면 적용 가능해서
도입 자체도 어렵지 않았다.
일반 방화벽이 포트나 IP를 기준으로 막는다면,
ModSecurity는 웹 요청 안의 내용(쿼리, 스크립트 등)을 분석해서
XSS나 SQL Injection 같은 공격을 사전에 차단할 수 있기 때문이다.
어떤 요청이 차단됐는지도 로그로 전부 기록해주기 때문에
나중에 문제를 분석하거나 룰을 조정할 때도 꽤 유용할것이라고 생각이 들었고,
어쨌든 지금의 단순한 구조에 보안을 덧붙이기엔
ModSecurity가 꽤 괜찮은 선택지라고 생각해서, 실제로 도입해보기로 했다.

1. NGINX 이미지 변경
# 변경전
nginx:
container_name: nginx
image: nginx:latest # 이부분 변경
...
# 변경후
nginx:
container_name: nginx
image: owasp/modsecurity-crs:nginx # 이부분 변경
...

1.2 이미지를 변경했지만 여전히 공격이 허용되는 NGINX...

무엇이 문제일까?
1.3 owasp/modsecurity-crs:nginx 컨테이너 내 SecRuleEngine DetectionOnly(디폴트 모드)
(On | Off | DetectionOnly)
/etc/modsecurity.d/modsecurity.conf 속성의
SecRuleEngine 속성이 On 일때 악성 요청 차단
해결책
1. 로컬 경로에 modsecurity.conf 생성
(도커 내 modsecurity.conf 복사)
2. SecRuleEngine Detection -> On 으로 변경
3. 도커 컴포즈 사용 시 Nginx 볼륨 마운트 설정
(로컬 modsecurity.conf / 도커 경로)
4. CRS 셋업 및 보안 규칙 관련 정보 main.conf에 추가 후 마찬가지로 볼륨 마운트
(
~마운트 경로/crs-setup.conf
~마운트 경로/rules/*.conf
)
+
nginx.conf 내 악성 요청 방지를 원하는 블록에 modsecurity on 설정 추가!
그리고..



설정을 마친 후
불온하게 요청오는 SQL Injection 공격이나 스크립트 공격등을
잘 처리해주는 모습을 보았다.
이후로도 ModSecurity를 활용해서 행복하게 잘 먹고 잘 살았다고 한다.
끝
+
그리고 ...
이어보기
'공부 > 인프라' 카테고리의 다른 글
| 네트워크 기본 (쉬운 도커3) (0) | 2025.08.12 |
|---|---|
| ModSecurity 도입기 2(Trouble Shooting) (2) | 2025.08.06 |
| 백지에서 따라가며 배우는 젠킨스 & EC2 (4) (0) | 2024.01.14 |
| 백지에서 따라가며 배우는 젠킨스 & EC2 (3) (0) | 2024.01.14 |
| 백지에서 따라가며 배우는 젠킨스 & EC2 (2) (0) | 2024.01.14 |