본문 바로가기
+ Security/보안 가이드

[보안가이드] Nginx User-Agent 제한 설정

by :: Teacher :: 2021. 7. 31.
728x90
반응형

Nginx를 이용하여 서비스 구동 시 해당 서비스에 여러 User-Agent(UA)로 접근이 된다. 

이때 정상적으로 사용하는 사용자는 크게 상관이 없으나, 크롤러, 취약점 스캐너 혹은 공격 Tool 등을 이용하여 해당 서비스에 대해서 정보 수집을 하는 경우가 있다. 

그럴 경우, 취약점 발견 혹은 서비스 장애 등이 발생되어 현재 사용되는 서비스에 영향을 줄 수 있다. 

그렇다면 이런 경우 어떻게 대비를 해야 하는지 아래와 같이 한번 알아보도록 하자. 

Nginx에서는 이런 경우를 대비하기 위해 User-Agent 제한을 하거나 특정 User-Agent만 사용하도록 할 수 있다.

1. User-Agent 제한 설정

Nginx의 기본 설정 파일인 nginx.conf 파일에 아래와 같이 설정하여 User-Agent(UA)에 대해서 제한을 설정할 수 있다.

현재 기본적으로 넣어놓은 User-Agent는 일반적으로 많이 사용되는 취약점 스캐너, 공격 Tool에서 사용하는 User-Agent이다. 

  • Paros|ZmEu|nikto|dirbuster|sqlmap|openvas|w3af|Morfeus|JCE|Zollard|Arachni|Brutus|bsqlbf|Grendel-Scan|Havij|Hydra|N-Stealth|Netsparker|Pangolin|pmafind|webinspect

vi nginx.conf
... 이하 생략 ...
# User-Agent 제한
    if ($http_user_agent ~* "Paros|ZmEu|nikto|dirbuster|sqlmap|openvas|w3af|Morfeus|JCE|Zollard|Arachni|Brutus|bsqlbf|Grendel-Scan|Havij|Hydra|N-Stealth|Netsparker|Pangolin|pmafind|webinspect") {
        return 404;
    }
   
    
# 미적용시
$ curl -i -X GET -H "User-Agent: paros" http://test.com
HTTP/1.1 200 OK
Server: nginx
... 이하 생략 ...


# 적용시
$ curl -i -X POST -H "User-Agent: paros" http://test.com
HTTP/1.1 404 Not Found
Server: nginx
... 이하 생략 ...

2. 특정 User-Agent 허용 설정

반대로 특정 User-Agent에 대해서만 설정하여 사용하는 방법도 있다.

이 방법은 어떻게 사용하느냐에 따라 다르겠지만, 가급적 Rest API 혹은 특정 서비스와 연동 등과 같이 특정 영역에서만 접근을 하는 경우에 허용 IP ACL과 같이 허용된 User-Agent를 통해서만 서비스가 되도록 할 때 사용하는 편이 좋을 것 같다.

# "User-agent: test"가 아닌 경우, 접근 제한
    if ($http_user_agent !~ "^test$") {
        return 404;
    }

# 미적용시
$ curl -i -X GET -H "User-Agent: test" http://test.com
HTTP/1.1 200 OK
Server: nginx
... 이하 생략 ...


# 적용시
$ curl -i -X POST -H "User-Agent: paros" http://test.com
HTTP/1.1 404 Not Found
Server: nginx
... 이하 생략 ...

이제 쉽게 User-Agent 설정만을 통해서 서비스 접속에 대한 제한 / 허용 등을 하는 방법을 알아보았다. 

3. 같이 보면 좋은 문서

728x90
반응형

댓글


loading