nginx 실전 설정: 접근 제어 및 DDOS 예방

nginx 실전 설정: 접근 제어 및 DDOS 예방
1. 접근 제어 설정
여러 가지 원인 에 근거 하여 우 리 는 방문 통 제 를 진행 해 야 한다.예 를 들 어 일반 사이트 의 백 엔 드 는 외부 방문 을 할 수 없 기 때문에 IP 제한 을 추가 하고 회사 의 IP 방문 만 허용 한다.액세스 제 어 는 조건 에 맞 는 IP 만 이 사이트 의 한 구역 에 접근 할 수 있 는 것 을 말한다.
관련 모듈: ngxhttp_access_module
모듈 개요: 일부 IP 주소 의 클 라 이언 트 접근 을 제한 할 수 있 습 니 다.
대응 명령:
  • allow

  • 문법: allow address | CIDR | 유 닉 스: | all;
    기본 값:
    역할 영역: http, server, location, limitexcept
    어떤 IP 나 어떤 IP 세그먼트 에 접근 할 수 있 도록 합 니 다.유 닉 스 를 지정 하면 socket 에 접근 할 수 있 습 니 다.메모: 유 닉 스 가 1.5.1 에 새로 추가 한 기능 입 니 다. 만약 당신 의 버 전이 이것 보다 낮다 면 이 방법 을 사용 하지 마 십시오.
  • deny

  • 문법: deny address | CIDR | 유 닉 스: | all;
    기본 값:
    역할 영역: http, server, location, limitexcept
    어떤 IP 나 IP 세그먼트 에 접근 하 는 것 을 금지 합 니 다.유 닉 스 를 지정 하면 socket 접근 을 금지 합 니 다.메모: 유 닉 스 가 1.5.1 에 새로 추가 한 기능 입 니 다. 만약 당신 의 버 전이 이것 보다 낮다 면 이 방법 을 사용 하지 마 십시오.
    설정 범례:
    location / {    deny  192.168.1.1;    allow 192.168.1.0/24;    allow 10.1.1.0/16;    allow 2001:0db8::/32;    deny  all;
    }

    첫 번 째 규칙 에 맞 을 때 까지 규칙 을 순서대로 검사 합 니 다.이 예 에서 IPv 4 의 네트워크 는 10.1.1.0 / 16 과 192.168.1.0 / 24 만 접근 할 수 있 지만 192.168.1.1 은 제외한다.IPv 6 의 네트워크 에 대해 서 는 2001: 0db 8:: / 32 만 접근 할 수 있 습 니 다.
    ngx_http_access_module 설정 이 허용 하 는 주소 에 접근 할 수 있 습 니 다. 금 지 된 주소 가 거부 되 었 습 니 다.이것 은 간단 한 접근 제어 일 뿐 규칙 이 많은 상황 에서 ngx 를 사용 합 니 다.http_geo_module 모듈 변수 가 더 적합 합 니 다.이 모듈 은 여러분 이 내 려 와 서 알 수 있 습 니 다. ngx_http_geo_module
    2. DDOS 예방 설정
    DDOS 의 특징 은 분포 식 이 고 대역 폭 과 서비스 공격, 즉 4 층 데이터 공격 과 7 층 응용 공격 이다. 해당 하 는 방어 병목 은 4 층 이 대역 폭 에 있 고 7 층 은 구조 적 인 스루풋 에 있다.7 층 의 응용 공격 에 대해 서 는 방 어 를 위 한 설정 을 할 수 있 습 니 다. nginx 의 http 을 사용 합 니 다.limit_conn 과 httplimit_req 모듈 은 연결 수 와 요청 수 를 제한 함으로써 상대 적 으로 효과 적 인 방 어 를 할 수 있 습 니 다.
    ngx_http_limit_conn_module 는 단일 IP 의 연결 수 를 제한 할 수 있다.
    ngx_http_limit_req_module 는 단일 IP 초당 요청 수 를 제한 할 수 있 습 니 다.
    설정 방법:
    (1). 초당 요청 수 제한
    관련 모듈: ngxhttp_limit_req_module
    누 통 원 리 를 통 해 단위 시간 내 요청 수 를 제한 하고 단위 시간 내 요청 수가 제한 을 초과 하면 503 오 류 를 되 돌려 줍 니 다.
    설정 범례:
    http {    limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
        ...
        server {
            ...
            location  ~ \.php$ {            limit_req zone=one burst=5 nodelay;  
                   }
               }
         }

    필요 한 설정 설명 (위 부분 에서 설명 한 것 은 설명 하지 않 음):
    $binary_remote_addr 바 이 너 리 원 격 주소
    rate=10r/s; 주파수 제한 초당 10 개 요청
    burst = 5 주파수 제한 을 초과 할 수 있 는 요청 수 는 5 개 보다 많 지 않 으 며, 1, 2, 3, 4 초 요청 이 초당 9 개 라 고 가정 하면 5 초 안에 15 개 를 요청 하 는 것 이 허용 된다.반면 1 초 간 15 개 를 요청 하면 5 개 를 2 초 간, 2 초 간 10 이상 요청 은 503 으로 다 초 간 평균 속도 제한 과 유사 하 다.
    nodelay 가 초과 한 요청 은 지연 되 지 않 습 니 다. 설정 후 5 (지연 되 지 않 음) + 10 (지연) 개 요청 은 1 초 안에 처리 합 니 다.(이것 은 이론 데이터 일 뿐 가장 많은 상황)
    (2). IP 접속 수 제한
    지난 장 에서 말 했 듯 이 우 리 는 바로 썼 다.
    http {    limit_conn_zone $binary_remote_addr zone=addr:10m; //    
        ...
        server {
            ...
            location /    / {            limit_conn addr 1;   
                    }
               }
         }

    (3). 화이트 리스트 설정
    http_limit_conn 과 httplimit_req 모듈 은 단일 IP 단위 의 시간 내 연결 과 요청 수 를 제한 합 니 다. 그러나 Nginx 앞 에 lvs 나 haproxy 와 같은 부하 균형 이나 역방향 에이전트 가 있 으 면 nginx 는 부하 균형 에서 온 연결 이나 요청 을 가 져 옵 니 다. 이때 부하 균형 적 인 연결 과 요청 을 제한 하지 말고 geo 와 map 모듈 에 화이트 리스트 를 설정 해 야 합 니 다.
    geo $whiteiplist  {
            default 1;        10.11.15.161 0;
        }
    map $whiteiplist  $limit {        1 $binary_remote_addr;        0 "";
        }limit_req_zone $limit zone=one:10m rate=10r/s;limit_conn_zone $limit zone=addr:10m;

    geo 모듈 은 기본 값 이 1 인 변수 whiteiplist 를 정의 합 니 다. ip 가 화이트 리스트 에 있 을 때 변수 whiteiplist 의 값 은 0 이 고 반대로 1 입 니 다.
  • 다음은 설 치 된 논리 적 관계 해석 이다.
  • 화이트 리스트 에 -- > whiteiplist = 0 -- > $limit = "-- > 10m 세 션 상태 (one 또는 addr) 에 저장 되 지 않 습 니 다 -- > 제한 되 지 않 습 니 다.
    반면 화이트 리스트 에 없 는 -- > whiteiplist = 1 -- > $limit = 바 이 너 리 원 격 주소 -- > 10m 에 저 장 된 세 션 상태 에서 -- > 제한 을 받 습 니 다.
    3. 디 도스 예방 설정 테스트
    방금 설정 이 작 용 했 는 지 확인 해 보 겠 습 니 다.
    1. 모든 테스트 에 필요 한 소프트웨어 (원본 설치 nginx, apt 설치 php 5 - fpm, apt 설치 apache - u) 를 설치 합 니 다. 설정 파일 을 수정 하기 위해 원본 설치 nginx 를 선택 하 십시오.
    wget http://labfile.oss.aliyuncs.com/nginx-1.7.9.tar.gz

    다음은 컴 파일 설치.
    sudo apt-get install apache2-utils
    sudo apt-get install php5-fpm

    설치 후 각각 p5 와 nginx 를 시작 합 니 다.
    2. 테스트 pp 파일 을 작성 하고 nginx 설정 파일 을 수정 하여 정상적으로 접근 할 수 있 도록 합 니 다.
    / home / shiyanlou 디 렉 터 리 에 test. php 를 쓰 십시오. 내용 은 다음 과 같 습 니 다.
    nginx 프로필 수정:
    마지막 전시:
    3. 명령 ab 테스트 를 사용 하여 프로필 전후 (연결 수 와 요청 수 분리 테스트) 를 수정 합 니 다.
    아무것도 수정 하기 전에:
    테스트 조건:
    테스트 결과:
    프로필 그림 을 수 정 했 습 니 다. (nginx 를 다시 시작 하 는 것 을 기억 합 니 다) 테스트 조건 도 같 아야 합 니 다.
    마지막 테스트 결과 그림:
    작은 매듭
    이 장 에서 우 리 는 접근 제어 와 DDOS 의 방 어 를 실현 하려 면 두 개의 해당 모듈 의 설정 과 명령 의 사용 을 배 워 야 한다 고 말 했다. 이것 은 모두 이미 작 성 된 모듈 과 명령 이다. 우 리 는 어떤 수요 가 해당 하 는 모듈 에 대해 어떤 명령 을 사용 하 는 지 알 아야 한다.

    좋은 웹페이지 즐겨찾기