보안을 위해 Nginx 구성

Orignal Post

내가 보안 그룹에 있을 때 많은 프로그래머가 처리 방법을 모르거나 Nginx의 보안을 인식하지 못하는 것을 발견했습니다. 공격자에 의해 웹 서버에서 중요한 데이터를 가져오는 많은 익스플로잇 또는 사례를 발견했습니다.

여기서는 Nginx의 보안에 대한 몇 가지 구성을 나열합니다. 실제 요구 사항에 따라 이러한 구성을 조정하십시오.



민감한 요청 경로 금지



많은 소스 코드가 Git을 버전 제어 도구로 사용하고 있습니다. 디렉터리.git에는 일부 비밀 등을 포함하여 코드베이스의 모든 메타데이터가 포함됩니다. 공개적으로 공개하면 공격자가 코드베이스를 다운시킬 수 있습니다.



따라서 .git 관련 요청 경로를 비활성화해야 합니다.

location ~ /\.git {
  deny all;
}
## Disable .htaccess and other hidden files
location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
}


불필요한 HTTP 요청 메서드 금지



가장 일반적으로 사용되는 HTTP 요청 방법은 GET, POST, HEAD입니다. 사용하지 않는 다른 메서드에 대해서는 444를 반환해야 합니다.

## Only allow these request methods ##
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
         return 444;
}
## Do not accept DELETE, SEARCH, and other methods ##


요청 속도 제한 추가



Rate limiting은 많은 악의적인 요청을 차단하며 웹 사이트에 대한 네트워크 및 애플리케이션 수준 DDoS 공격을 방어하기 위해 자주 사용되는 도구이기도 합니다.

단일 IP에 대한 최대 요청 제한을 추가할 수 있습니다.

limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s;

server {
    listen 80;
    location / {
        limit_req zone=ip burst=12 delay=8;
        proxy_pass http://website;
    }
}


서비스에 HTTPS 추가



회사 이외의 프로젝트를 배포하는 경우 개인용으로 Let's encrypt이면 충분합니다. 그리고 HTTPS가 아닌 모든 요청을 301을 사용하여 HTTPS로 리디렉션해야 합니다.

server {
    listen               80;
    listen               443 ssl;
    server_name          www.coderscat.com;
    ssl_certificate      /etc/letsencrypt/live/coderscat.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/coderscat.com/privkey.pem;
    return 301 https://coderscat.com$request_uri;
}

server {
    listen 80;
    listen 443 ssl http2;
    server_name coderscat.com;

    # ssl on;
    ssl_certificate       /etc/letsencrypt/live/coderscat.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/coderscat.com/privkey.pem;

    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers  on;
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  10m;
}


SELinux 활성화


SELiunux는 Security-Enhanced Linux의 약자로 필수 액세스 제어(MAC)를 포함하여 액세스 제어 보안 정책을 지원하는 메커니즘을 제공하는 Linux 커널 보안 모듈입니다. 시스템이 해킹되기 전에 여러 공격을 방지할 수 있습니다.

우분투에 설치하십시오:

$ sudo apt install policycoreutils selinux-utils selinux-basics
$ sudo selinux-activate
$ sudo selinux-config-enforcing  (Then reboot system)
$ sudo sestatus (query the status of SELinux)


클릭재킹 공격



Clickjacking attack은 사용자가 자신도 모르게 맬웨어를 다운로드하고, 악성 웹 페이지를 방문하고, 자격 증명 또는 중요한 정보를 제공하도록 합니다.

클릭재킹 공격을 방지하기 위해 HTTP 헤더에 X-FRAME-OPTIONS를 삽입할 수 있습니다(이것도 우회할 수 있는 방법이 있습니다). 이는 nginx.conf 파일에 아래를 추가하여 달성됩니다.

add_header X-Frame-Options "SAMEORIGIN";


위의 헤더는 동일한 출처에서만 리소스를 로드하도록 브라우저에 지시합니다.

X-XSS 보호



교차 사이트 스크립팅 공격을 완화하기 위해 X-XSS 보호와 함께 HTTP 헤더를 삽입합니다. nginx.conf 파일을 수정하여 다음을 추가합니다.

add_header X-XSS-Protection "1; mode=block";


구성 파일을 저장하고 Nginx를 다시 시작합니다. Headers Test 도구를 사용하여 구현 후 확인할 수 있습니다.

설명된 OWASP 권장 보안 헤더 구현에 관심이 있을 수도 있습니다here.

참조



Mastering NGINX Second Edition은 Nginx 입문을 위한 훌륭한 참고서입니다.

좋은 웹페이지 즐겨찾기