Computer >> 컴퓨터 >  >> 체계 >> Linux

Nginx로 DDoS 공격을 방지하는 방법

Nginx로 DDoS 공격을 방지하는 방법

분산 서비스 거부 또는 "DDoS" 공격은 악의적인 디지털 통신 전술을 통해 서버의 리소스를 격리합니다. 이러한 유형의 공격은 컴퓨터 세계의 조직적인 습격입니다. 수많은 성가신 반유사 조치가 결합되어 노련한 서버를 궤도에서 멈추게 할 만큼 충분히 강력한 위협을 만듭니다. 무엇보다도, 순진한 서버에 대해 이러한 게릴라 웹 전쟁을 벌이는 여러 수단이 있습니다. 다행히 서버는 반격하도록 구성할 수 있습니다.

널리 사용되는 Unix 시스템용 서버 시스템인 Nginx에는 DDoS 공격의 효율성을 크게 제한할 수 있는 충분한 기능이 내장되어 있습니다.

다음은 Nginx 기반 서버에서 이러한 위협을 처리하기 위한 몇 가지 효과적인 옵션입니다.

구성 파일 백업

설정을 변경하기 전에 서버 구성을 빠르게 백업해야 합니다. 이를 위해 다음 명령이 작동합니다.

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup-original

Nginx로 DDoS 공격을 방지하는 방법

완료되면 계속 진행할 준비가 된 것입니다.

트래픽 확인

서버의 트래픽을 주시하면 보안을 최적화하고 추가 전술을 구현하기가 더 쉬워집니다. Nginx에는 이를 위해 특별히 제작된 모듈이 있습니다.

상태 페이지 설정

Nginx는 일반적으로 이러한 종류의 기능을 서버 환경에 보다 쉽게 ​​통합할 수 있도록 하는 "stub status"(http_stub_status_module)라는 모듈과 함께 제공됩니다. 먼저 다음 명령을 사용하여 확인하십시오.

nginx -V

Nginx로 DDoS 공격을 방지하는 방법

또는 위의 파이프를 grep에 연결하여 더 빠르게 찾을 수 있습니다.

nginx -V 2>&1 | grep -o with-http_stub_status_module

Nginx로 DDoS 공격을 방지하는 방법

출력이 위의 출력과 같으면 계속 진행할 수 있습니다. 그렇지 않으면 포함된 모듈과 함께 Nginx 설치를 다시 설치하거나 다시 컴파일해야 합니다.

확인할 수 있는 상태 페이지를 설정하는 것은 간단하지만 보안을 유지하기 위해 최소(사용자 컴퓨터)로 액세스를 제한해야 합니다. "/etc/nginx/nginx.conf"에 있는 서버의 기본 구성 파일을 열어 시작하십시오.

Nginx로 DDoS 공격을 방지하는 방법

그것을 열고 "localhost", "/status_page" 및 "127.0.0.1" 대신 자신의 정보를 대체하여 모듈을 활성화하기 위해 "http 지시문"에 다음 코드를 추가합니다.

server {
	listen 80;
	listen [::]:80;
	server_name localhost;	
 
	##
	# Status Page Settings
	##	
 
	location /status_page {
		stub_status on;
		allow 127.0.0.1;
		allow ::1;
		deny all; 		
	}
 
}

참고 :이 파일을 수정하려면 sudo 권한이 필요합니다.

Nginx로 DDoS 공격을 방지하는 방법

이제 구성을 테스트하십시오.

sudo nginx -t

Nginx로 DDoS 공격을 방지하는 방법

모든 것이 정상이면 서버에 다시 로드 신호를 보냅니다.

sudo systemctl reload nginx

Nginx로 DDoS 공격을 방지하는 방법

상태 페이지에 액세스하려면 웹 브라우저에서 "/status_page"가 뒤에 오는 server_name 위치를 방문하거나 curl과 같은 명령줄 도구를 사용하세요. (이는 브라우저의 캐시가 자동으로 업데이트되지 않는 경우에 유용합니다.) 다음은 예제에서 페이지에 액세스하기 위한 curl 명령입니다.

curl localhost/status_page

Nginx로 DDoS 공격을 방지하는 방법

브라우저에서 위의 내용은 다음 이미지와 같습니다.

Nginx로 DDoS 공격을 방지하는 방법

액세스 로그 확인

위에서 설정한 상태 페이지를 확인할 때 비정상적인 트래픽이 발생하면 서버의 접속 로그를 확인하는 것이 좋습니다. 이것은 "/var/log/nginx/access.log"에서 찾을 수 있습니다. 로그에는 사용된 HTTP 방법, 액세스 시도 날짜/시간, 사용자 에이전트 및 액세스된 페이지가 나열됩니다.

Nginx로 DDoS 공격을 방지하는 방법

연결 제한

DDoS 공격을 방지하기 위해 시도해 볼 가치가 있는 여러 유용한 전술 중에서 가장 간단하고 효과적인 것 중 하나는 들어오는 트래픽 속도를 제한하는 것입니다.

이상적으로는 악의적인 봇이 인간 클라이언트에 대해 합리적인 비율을 유지하면서 비인간적인 속도로 서버를 압도하는 것을 방지할 수 있을 정도로 액세스를 억제해야 합니다. Nginx에서는 limit_req_zone을 사용하여 수행할 수 있습니다. 및 limit_req 지시. 다음 코드는 서버가 표시하도록 구성된 모든 위치에서 사용할 메모리 및 속도 제약 조건을 설정합니다.

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

"영역"은 사용자 요청이 저장되는 메모리 공간의 이름과 크기(이 경우 메가바이트)를 지정합니다. "Rate"는 Nginx가 초당 수락할 총 요청 수를 설정합니다(이 예에서는 10). 이 코드를 하나의 규칙으로 생각하고 다음 코드를 해당 규칙의 사용으로 생각하십시오.

limit_req zone=speedbump burst=20;

위의 코드는 실제로 우리의 제한 규칙을 구현하는 것 이상을 수행합니다. 또한 정상보다 조금 더 빨리 나타나는 합법적인 연결을 부드럽게 처리하기 위해 최대 20개의 요청으로 구성된 작은 대기열을 추가합니다. 규칙과 대기열을 모두 초과하면 클라이언트에 503 오류가 발생합니다. nginx.conf에서 두 지시문은 다음과 같습니다.

Nginx로 DDoS 공격을 방지하는 방법

IP 주소 블랙리스트

귀하의 서버를 DDoSing하는 IP 주소를 확보할 수 있는 경우 해당 IP 주소를 블랙리스트에 추가하고 이 IP 주소에서 시작된 모든 연결을 끊을 수 있습니다.

서버 지시문에 다음 코드를 추가하십시오.

location / {
    deny 123.123.123.0/28;
    # ...
}

특정 파일에 대한 차단 요청

DDoS 공격이 서버의 특정 파일을 대상으로 하는 경우(예:WordPress의 xmlrpc.php 파일(대부분의 WordPress 서버에서 많이 대상이 되는 파일)) 해당 파일에 대한 모든 요청을 차단할 수 있습니다. 다음 코드를 서버 지시문에 추가하십시오.

location /xmlrpc.php {
    deny all;
}

위의 절차를 따르면 대부분의 DDoS 공격을 제한할 수 있습니다. 배치할 수 있는 추가 보안 옵션에 대해서는 Nginx 설명서를 확인하십시오.