Nginx 및 Nginx Plus를 사용하여 DDOS 공격에 저항하는 방법
1. 애플리케이션 계층 DDoS 공격의 특징
애플리케이션 계층(7계층/http 계층) DDoS 공격은 일반적으로 설계를 통해 대상 시스템의 취약점을 더 잘 악용할 수 있는 트로이 목마 프로그램에 의해 시작됩니다. 예를 들어, 많은 수의 동시 요청을 처리할 수 없는 시스템의 경우 세션을 유지하기 위해 많은 수의 연결을 설정하고 주기적으로 소수의 데이터 패킷을 보내는 것만으로는 시스템의 리소스가 고갈되어 작업을 수행할 수 없게 됩니다. DDoS 목적을 달성하기 위해 새로운 연결 요청을 수락합니다. 다른 공격에는 대규모 데이터 패킷을 전송하기 위해 다수의 연결 요청을 보내는 것이 포함됩니다. 공격은 트로이 목마 프로그램에 의해 시작되기 때문에 공격자는 짧은 시간 내에 많은 수의 연결을 빠르게 구축하고 많은 수의 요청을 발행할 수 있습니다.
다음은 DDoS 특성 중 일부입니다. 이러한 특성을 사용하여 DDoS(포함하되 이에 국한되지 않음)에 저항할 수 있습니다.
공격은 비교적 고정된 일부 IP 또는 IP 세그먼트에서 발생하는 경우가 많으며 각 IP의 수는 다음과 같습니다. 실제 사용자 연결 및 요청 수입니다. (참고: 이러한 요청이 모두 DDoS 공격을 의미하는 것은 아닙니다. NAT를 사용하는 많은 네트워크 아키텍처에서 많은 클라이언트는 게이트웨이의 IP 주소를 사용하여 공용 네트워크 리소스에 액세스합니다. 그러나 그럼에도 불구하고 그러한 요청의 수와 수는 연결 수도 DDOS 공격보다 훨씬 적습니다. )
공격은 트로이 목마에 의해 전송되고 목적은 서버에 과부하를 주는 것이므로 요청 빈도는 트로이목마의 공격보다 훨씬 높습니다. 평범한 사람.
user-agent는 일반적으로 비표준 값입니다.
referer는 때때로 공격과 쉽게 연관되는 값입니다.
2. ddos 공격에 저항하려면 nginx 및 nginx plus를 사용하세요.
위에서 언급한 것과 결합하여 nginx와 nginx plus는 Ddos 공격을 효과적으로 방어하는 데 사용할 수 있는 많은 기능을 가지고 있으며 입구 액세스 트래픽을 조정하고 트래픽을 제어함으로써 Ddos 공격에 저항할 수 있습니다. 백엔드 서버에 대한 역방향 프록시.
1. 요청 속도를 제한하세요
nginx와 nginx plus의 연결 요청을 실제 사용자 요청의 합리적인 범위 내에서 설정하세요. 예를 들어 일반 사용자가 2초마다 로그인 페이지를 요청할 수 있다고 생각한다면 nginx가 2초마다 클라이언트 IP로부터 요청을 받도록 설정할 수 있습니다(이는 대략 분당 30개의 요청에 해당).
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { ... location /login.html { limit_req zone=one; ... } }
`limit_req_zone` 명령은 요청 상태의 특정 키 값을 저장하기 위해 1이라는 공유 메모리 영역을 설정합니다. 위의 예에서는 클라이언트 IP($binary_remote_addr)입니다. 위치 블록의 `limit_req`는 하나의 공유 메모리 영역을 참조하여 /login.html에 대한 액세스를 제한합니다.
2. 연결 수를 제한하세요
실제 사용자 요청의 합리적인 범위 내에서 nginx 및 nginx plus에 대한 연결 수를 설정하세요. 예를 들어 클라이언트 IP당 /store에 대한 연결을 10개 이하로 설정할 수 있습니다.
limit_conn_zone $binary_remote_addr zone=addr:10m; server { ... location /store/ { limit_conn addr 10; ... } }
`limit_conn_zone` 명령은 특정 키 값(위 예에서는 클라이언트 IP($binary_remote_addr))의 상태를 저장하기 위해 addr이라는 공유 메모리 영역을 설정합니다. 위치 블록의 `limit_conn`은 addr 공유 메모리 영역을 참조하여 /store/에 대한 최대 연결 수를 10으로 제한합니다.
3. 느린 연결 종료
slowlris와 같은 일부 DDoS 공격은 다수의 연결을 설정하고 주기적으로 일부 데이터 패킷을 전송하여 세션을 유지함으로써 공격 목적을 달성합니다. . 묻다. 이 경우 느린 연결을 닫음으로써 공격에 저항할 수 있습니다.
`client_body_timeout` 명령은 클라이언트 요청 읽기에 대한 시간 제한을 정의하는 데 사용되고 `client_header_timeout` 명령은 클라이언트 요청 헤더 읽기에 대한 시간 제한을 설정하는 데 사용됩니다. 이 두 매개변수의 기본값은 60초이며 다음 명령을 통해 5초로 설정할 수 있습니다.
server { client_body_timeout 5s; client_header_timeout 5s; ... }
4. IP 블랙리스트 설정
공격이 특정 IP 주소에서 오는 것으로 판단되면, 블랙리스트에 추가되면 nginx는 더 이상 요청을 수락하지 않습니다. 예를 들어 공격이 123.123.123.1부터 123.123.123.16까지의 IP 주소 범위에서 발생한다고 판단한 경우 다음과 같이 설정할 수 있습니다.
location / { deny 123.123.123.0/28; ... }
또는 공격이 여러 IP 주소에서 발생한다고 판단한 경우: 123.123 .123.3, 123.123.123.5 및 123.123.123.7과 같이 설정할 수 있습니다:
location / { deny 123.123.123.3; deny 123.123.123.5; deny 123.123.123.7; ... }
5. IP 허용 목록 설정
웹사이트에서 특정 IP 또는 IP 세그먼트에 대한 액세스만 허용하는 경우 허용을 사용할 수 있습니다. 지정한 IP 주소에만 액세스를 제한하는 명령을 조합하여 거부합니다. 다음과 같이 192.168.1.0 세그먼트의 인트라넷 사용자만 액세스를 허용하도록 설정할 수 있습니다.
location / { allow 192.168.1.0/24; deny all; ... }
deny 명령은 허용으로 지정된 IP 세그먼트를 제외한 다른 모든 IP의 액세스 요청을 거부합니다.
6. 트래픽 피크 감소를 위해 캐싱 사용
nginx의 캐싱 기능을 켜고 특정 캐싱 매개변수를 설정하면 공격으로 인한 트래픽을 줄이고 백엔드 서버에 대한 요청 부담도 줄일 수 있습니다. 다음은 몇 가지 유용한 설정입니다.
proxy_cache_use_stale`의 업데이트 매개변수는 nginx에게 캐시된 객체를 업데이트할 시기를 알려줍니다. 백엔드에 대한 업데이트 요청만 필요하며, 캐시가 유효한 동안에는 객체에 대한 클라이언트 요청이 백엔드 서버를 방문할 필요가 없습니다. 파일에 대한 빈번한 요청을 통해 공격이 수행될 경우 캐싱을 사용하면 백엔드 서버에 대한 요청 수를 크게 줄일 수 있습니다.
proxy_cache_key ` 命令定义的键值通常包含一些内嵌的变量(默认的键值 $scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 `$query_string` 变量,当攻击的请求字符串是随机的时候就会给 nginx 代理过重的缓存负担,因此我们建议一般情况下不要包含 `$query_string` 变量。
7. 屏蔽特定的请求
可以设置 nginx、nginx plus 屏蔽一些类型的请求:
针对特定 url 的请求
针对不是常见的 user-agent 的请求
针对 referer 头中包含可以联想到攻击的值的请求
针对其他请求头中包含可以联想到攻击的值的请求
比如,如果你判定攻击是针对一个特定的 url:/foo.php,我们就可以屏蔽到这个页面的请求:
location /foo.php { deny all; }
或者你判定攻击请求的 user-agent 中包含 foo 或 bar,我们也可以屏蔽这些请求:
location / { if ($http_user_agent ~* foo|bar) { return 403; } ... }
http_name 变量引用一个请求头,上述例子中是 user-agent 头。可以针对其他的 http 头使用类似的方法来识别攻击。
8. 限制到后端服务器的连接数
一个 nginx、nginx plus 实例可以处理比后端服务器多的多的并发请求。在 nginx plus 中,你可以限制到每一个后端服务器的连接数,比如可以设置 nginx plus 与 website upstream 中的每个后端服务器建立的连接数不得超过200个:
upstream website { server 192.168.100.1:80 max_conns=200; server 192.168.100.2:80 max_conns=200; queue 10 timeout=30s; }
`max_conns` 参数可以针对每一个后端服务器设置 nginx plus 可以与之建立的最大连接数。`queue` 命令设置了当每个后端服务器都达到最大连接数后的队列大小,`timeout` 参数指定了请求在队列中的保留时间。
9. 处理特定类型的攻击
有一种攻击是发送包含特别大的值的请求头,引起服务器端缓冲区溢出。nginx、nginx plus 针对这种攻击类型的防御,可以参考
[using nginx and nginx plus to protect against cve-2015-1635]
)
10. 优化nginx性能
ddos 攻击通常会带来高的负载压力,可以通过一些调优参数,提高 nginx、nginx plus 处理性能,硬抗 ddos 攻击,详细参考:
[tuning nginx for performance]
三、识别ddos攻击
到目前为止,我们都是集中在如何是用 nginx、nginx plus 来减轻 ddos 攻击带来的影响。如何才能让 nginx、nginx plus 帮助我们识别 ddos 攻击呢?`nginx plus status module` 提供了到后端服务器流量的详细统计,可以用来识别异常的流量。nginx plus 提供一个当前服务状态的仪表盘页面,同时也可以在自定义系统或其他第三方系统中通过 api 的方式获取这些统计信息,并根据历史趋势分析识别非正常的流量进而发出告警。
위 내용은 Nginx 및 Nginx Plus를 사용하여 DDOS 공격에 저항하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











nginx 버전을 쿼리 할 수있는 메소드는 다음과 같습니다. nginx -v 명령을 사용하십시오. nginx.conf 파일에서 버전 지시문을 봅니다. nginx 오류 페이지를 열고 페이지 제목을 봅니다.

클라우드 서버에서 nginx 도메인 이름을 구성하는 방법 : 클라우드 서버의 공개 IP 주소를 가리키는 레코드를 만듭니다. Nginx 구성 파일에 가상 호스트 블록을 추가하여 청취 포트, 도메인 이름 및 웹 사이트 루트 디렉토리를 지정합니다. Nginx를 다시 시작하여 변경 사항을 적용하십시오. 도메인 이름 테스트 구성에 액세스하십시오. 기타 참고 : HTTPS를 활성화하려면 SSL 인증서를 설치하고 방화벽에서 포트 80 트래픽을 허용하고 DNS 해상도가 적용되기를 기다립니다.

nginx가 시작되었는지 확인하는 방법 : 1. 명령 줄을 사용하십시오 : SystemCTL 상태 nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. 포트 80이 열려 있는지 확인하십시오. 3. 시스템 로그에서 nginx 시작 메시지를 확인하십시오. 4. Nagios, Zabbix 및 Icinga와 같은 타사 도구를 사용하십시오.

Windows에서 Nginx를 구성하는 방법은 무엇입니까? nginx를 설치하고 가상 호스트 구성을 만듭니다. 기본 구성 파일을 수정하고 가상 호스트 구성을 포함하십시오. 시작 또는 새로 고침 Nginx. 구성을 테스트하고 웹 사이트를보십시오. SSL을 선택적으로 활성화하고 SSL 인증서를 구성하십시오. 포트 80 및 443 트래픽을 허용하도록 방화벽을 선택적으로 설정하십시오.

Nginx 서버를 시작하려면 다른 운영 체제에 따라 다른 단계가 필요합니다. Linux/Unix System : Nginx 패키지 설치 (예 : APT-Get 또는 Yum 사용). SystemCTL을 사용하여 nginx 서비스를 시작하십시오 (예 : Sudo SystemCtl start nginx). Windows 시스템 : Windows 바이너리 파일을 다운로드하여 설치합니다. nginx.exe 실행 파일을 사용하여 nginx를 시작하십시오 (예 : nginx.exe -c conf \ nginx.conf). 어떤 운영 체제를 사용하든 서버 IP에 액세스 할 수 있습니다.

단계를 따르면 Docker 컨테이너 이름을 쿼리 할 수 있습니다. 모든 컨테이너 (Docker PS)를 나열하십시오. 컨테이너 목록을 필터링합니다 (GREP 명령 사용). 컨테이너 이름 ( "이름"열에 위치)을 가져옵니다.

Nginx가 Apache를 실행하려면 다음을 수행해야합니다. 1. Nginx 및 Apache를 설치하십시오. 2. NGINX 에이전트를 구성합니다. 3. nginx와 apache를 시작하십시오. 4. 구성을 테스트하여 도메인 이름에 액세스 한 후 Apache 컨텐츠를 볼 수 있는지 확인하십시오. 또한 포트 번호 매칭, 가상 호스트 구성 및 SSL/TLS 설정과 같은 다른 문제에주의를 기울여야합니다.

Docker에서 컨테이너 만들기 : 1. 이미지를 당기기 : Docker Pull [Mirror Name] 2. 컨테이너 만들기 : Docker Run [옵션] [미러 이름] [명령] 3. 컨테이너 시작 : Docker Start [컨테이너 이름]
