보안 · 2 min read · Jan 11, 2026

Apache를 mod_security로 보호하기

Apache를 mod_security로 보호하기

버전 1.0
저자: Falko Timme

이 문서에서는 mod_security를 설치하고 구성하는 방법을 보여줍니다. mod_security는 웹 애플리케이션에 대한 침입 탐지 및 방지를 제공하는 Apache 모듈(Apache 1 및 2용)입니다. 이는 SQL 인젝션 공격, 크로스 사이트 스크립팅, 경로 탐색 공격 등과 같은 알려진 및 알려지지 않은 공격으로부터 웹 애플리케이션을 보호하는 것을 목표로 합니다.

첫 번째 장에서는 Debian Sarge, Ubuntu 6.06 LTS (Dapper Drake) 및 Fedora Core 5에서 mod_security를 설치하는 방법을 보여주고, 두 번째 장에서는 사용 중인 배포판과 독립적으로 mod_security를 위해 Apache를 구성하는 방법을 설명합니다.

먼저 말씀드리고 싶은 것은, 이것이 그러한 시스템을 설정하는 유일한 방법이 아니라는 것입니다. 이 목표를 달성하는 방법은 여러 가지가 있지만, 이것이 제가 선택한 방법입니다. 이것이 여러분에게 효과가 있을 것이라는 보장은 하지 않습니다!

1 설치

1.1 Debian Sarge

mod_security는 기본 Debian 저장소에서 Debian 패키지로 제공되므로 설치는 다음과 같이 간단합니다:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.2 Ubuntu 6.06 LTS (Dapper Drake)

설치는 Debian Sarge와 정확히 동일합니다:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.3 Fedora Core 5

Fedora에서는 다음과 같이 mod_security를 설치하고 활성화할 수 있습니다:

yum install mod_security
/etc/init.d/httpd restart

이제 /etc/httpd/conf.d/mod_security.conf 파일을 찾을 수 있으며, 이 파일에는 기본 mod_security 구성이 이미 포함되어 있습니다:

vi /etc/httpd/conf.d/mod_security.conf

| # mod_security Apache 모듈을 위한 예제 구성 파일 LoadModule security_module modules/mod_security.so # 필터링 엔진 켜기 또는 끄기 SecFilterEngine On # 감사 엔진은 독립적으로 작동하며 # 서버별 또는 디렉토리별로 켜거나 끌 수 있습니다 SecAuditEngine RelevantOnly # URL 인코딩이 유효한지 확인 SecFilterCheckURLEncoding On # 유니코드 인코딩 검사 SecFilterCheckUnicodeEncoding On # 이 범위의 바이트만 허용 SecFilterForceByteRange 1 255 # 쿠키 형식 검사. SecFilterCheckCookieFormat On # 감사 로그 파일의 이름 SecAuditLog logs/audit_log # mod_security가 POST 페이로드를 검사해야 하는지 여부 SecFilterScanPOST On # 기본 동작 설정 SecFilterDefaultAction "deny,log,status:406" # 간단한 예제 필터 # SecFilter 111 # 경로 탐색 (..) 공격 방지 # SecFilter "\.\./" # 약한 XSS 보호지만 일반 HTML 태그 허용 # SecFilter "<( |\n)*script" # XSS 공격 방지 (HTML/JavaScript 주입) # SecFilter "<(.|\n)+>" # SQL 인젝션 공격을 방지하기 위한 매우 조잡한 필터 # SecFilter "delete[[:space:]]+from" # SecFilter "insert[[:space:]]+into" # SecFilter "select.+from" # HTTP_USER_AGENT 및 HTTP_HOST 헤더 필요 SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$" # 우리가 처리할 수 있는 요청 인코딩만 허용 # 일부 (자동화된) 클라이언트는 Content-Type으로 "text/html"을 제공합니다. SecFilterSelective REQUEST_METHOD "!^GET$" chain SecFilterSelective HTTP_Content-Type "!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)" # 모든 POST 요청에 대해 Content-Length가 제공되어야 함 SecFilterSelective REQUEST_METHOD "^POST$" chain SecFilterSelective HTTP_Content-Length "^$" # 우리가 처리할 수 없는 전송 인코딩을 수락하지 않음 # (어쨌든 필요하지 않음) SecFilterSelective HTTP_Transfer-Encoding "!^$" # http://modsecrules.monkeydev.org/rules.php?safety=safe에서 가져온 일부 일반 애플리케이션 관련 규칙 # Nuke Bookmarks XSS SecFilterSelective THE_REQUEST "/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)" # Nuke Bookmarks Marks.php SQL 인젝션 취약점 SecFilterSelective THE_REQUEST "modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)" # PHPNuke 일반 XSS 시도 # /modules.php?name=News&file=article&sid=1&optionbox= SecFilterSelective THE_REQUEST "/modules\.php\?*name=<[[:space:]]*script" # PHPNuke SQL 인젝션 시도 SecFilterSelective THE_REQUEST "/modules\.php\?*name=Search*instory=" # phpnuke SQL 삽입 SecFilterSelective THE_REQUEST "/modules\.php*name=Forums.*file=viewtopic*/forum=.*'/'" # WEB-PHP phpbb quick-reply.php 임의 명령 시도 SecFilterSelective THE_REQUEST "/quick-reply\.php" chain SecFilter "phpbb_root_path=" # phpBB 크로스 사이트 스크립팅 공격을 위한 주제 달력 모드 SecFilterSelective THE_REQUEST "/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)" # phpMyAdmin: 안전 # phpMyAdmin Export.PHP 파일 노출 취약점 SecFilterSelective SCRIPT_FILENAME "export\.php$" chain SecFilterSelective ARG_what "\.\." # phpMyAdmin 경로 vln SecFilterSelective REQUEST_URI "/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc" |

이 구성을 유지할 수 있지만, mod_security가 할 수 있는 것에 대한 더 나은 이해를 얻으려면 부분의 주석을 제거하고 Apache를 재시작한 후 2장을 따라야 합니다. 그 후에는 자신만의 mod_security 규칙 세트를 만들거나, 그냥 이 규칙으로 다시 전환할 수 있습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.