Nginx 기반 워드프레스 7G Firewall로 보안 처리하기

박스쿤
박스쿤
읽음 1

Nginx 7G FirewallPerishable Press의 Jeff Starr가 개발한 것으로, 서버 레벨에서 매우 인기가 높은 방화벽입니다. 저 역시도 정말 좋아하는 개발자인데요. 여기에 BBQ Firewall이나 Ban Hammer, BlackHole 플러그인은 워드프레스 운영에 정말 도움이 많이 되는 플러그인입니다. Nginx 7G Firewall은 방화벽인 워드프레스 플러그인인 BBQ가 작동하기 전에 Nginx 단계에서 악성 요청을 차단하여 서버 리소스를 크게 절약할 수 있습니다.

설치 과정은 매우 간단합니다. 먼저 Nginx 설정 디렉터리에 7G Firewall 규칙을 포함할 별도의 파일을 생성합니다.

linux
1
sudo nano /etc/nginx/7g-firewall.conf

그리고 아래 내용을 입력하세요.

7g-firewall.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
# 7G FIREWALL - NGINX VERSION
# @ https://perishablepress.com/7g-firewall/

# 1. BAD QUERY STRINGS (악성 쿼리 스트링 차단)
if ($query_string ~* "([a-z0-9]{2000,})") { return 403; }
if ($query_string ~* "(base64_encode)(.*)(\()") { return 403; }
if ($query_string ~* "(eval\()") { return 403; }
if ($query_string ~* "(GLOBALS)(=|\[|%)") { return 403; }
if ($query_string ~* "(_REQUEST)(=|\[|%)") { return 403; }
if ($query_string ~* "([a-z0-9]{2000,})") { return 403; }
if ($query_string ~* "(<|%3C)(.*)(script)(.*)(>|%3E)") { return 403; }
if ($query_string ~* "(\+|%2B)(concat|delete|get|select|union)(\+|%2B)") { return 403; }
if ($query_string ~* "(union)(.*)(select)(.*)(\()") { return 403; }
if ($query_string ~* "(etc\/passwd)") { return 403; }

# 2. BAD USER AGENTS (악성 봇 차단)
if ($http_user_agent ~* "(binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|snoopy|turnit|vikspider|zmeu)") { return 403; }
if ($http_user_agent ~* "(havij|libwww-perl|nikto|nmap|sqlmap|w3af|whitehat|zmeu)") { return 403; }

# 3. BAD REQUEST URIs (시스템 파일 및 악성 경로 접근 차단)
if ($request_uri ~* "(\.|%2e)(\.|%2e)(f|%2f)") { return 403; } # Directory Traversal
if ($request_uri ~* "(\/)(etc|var)(\/)(hidden|secret|shadow|passwd|tmp)(.*)$") { return 403; }
if ($request_uri ~* "(\/)(boot|conf|bin|ini|log|mk|mysql|niche|old|sql|sys|temp|test|tmp|local|install)(\/)(.*)$") { return 403; }
if ($request_uri ~* "(\.7z|\.bak|\.bz2|\.conf|\.dist|\.fla|\.git|\.inc|\.ini|\.log|\.old|\.psd|\.rar|\.sql|\.swp|\.tar|\.tgz)$") { return 403; }
if ($request_uri ~* "(=)(\$|%24)(_)") { return 403; } # PHP Variable injection

# 4. BAD REFERRERS (악성 리퍼러 차단)
if ($http_referer ~* "(semalt.com|todaperfeita.com|seoanalyses.com|buttons-for-website.com)") { return 403; }

이 파일에는 SQL 인젝션, XSS, 악성 봇 등의 공격을 차단하는 규칙들이 담겨 있습니다. 생성한 파일은 Nginx 설정 파일에 포함시켜야 하며, 특히 워드프레스 설정 파일의 서버 블록 시작 부분에 바로 추가하는 것이 좋습니다. 참고로 설정파일명은 다를 수 있습니다. 본인이 직접 만든게 아니라면 호스팅사에 문의하세요.

linux
1
sudo nano /etc/nginx/sites-available/wordpress

그리고 server 블록 하위에 아래 내용을 추가하세요. (7~8번라인)

linux
1 2 3 4 5 6 7 8 9 10 11
server {
    # 1. GeoIP 차단
    if ($geoip_country_code ~* (CN|RU|UA|KP|NG|RO|IR|BR|VN|IN|MY|ID|DE|ES|SY)) {
        return 444; 
    }

    # [여기에 추가!] 2. Nginx 7G Firewall (악성 요청 차단)
    include /etc/nginx/7g-firewall.conf;

    listen 443 ssl http2;
    # ... (이하 기존 설정 유지) ...

설정을 완료한 후에는 Nginx 문법 검사를 통해 설정이 올바른지 확인하고, 서버를 재시작하여 방화벽이 정상 작동하는지 테스트합니다. 이를 위해 의도적으로 악성 패턴이 포함된 URL로 접근을 시도해보면 403 Forbidden 에러가 발생해야 정상입니다.

linux
1
sudo systemctl restart nginx

이제 https://도메인주소/?foo=union+select 로 접속후 차단되는지 확인해보세요.

7G Firewall은 Nginx 레벨에서 직접 작동하여 악성 요청을 빠르게 차단합니다. 이로 인해 워드프레스와 같은 PHP 기반의 애플리케이션이 실행되기 전에 공격을 막을 수 있습니다. BBQ Firewall 플러그인은 만약 7G 방화벽을 통과한 교묘한 공격이 있을 경우를 대비한 2차 방어선 역할을 합니다.

이 과정을 통해 서버의 최적화 및 보안 설정을 완성할 수 있습니다. 이를 통해 무료로 서버의 효율성을 극대화하고 안전성을 높일 수 있습니다.

댓글 0

댓글 0개

댓글을 남기시면 관리자가 최대한 빠르게 확인 후 답글을 남겨드립니다.
구글 간편 로그인 후 댓글 작성시 포인트가 누적되며, 회원전용글 열람이 가능합니다.

댓글 남기기

이 글이 마음에 드시나요?

최신 소식과 유용한 정보를 메일함으로
무료로 받아보세요!

이미 구독 중이신가요? 로그인