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 중국어 웹사이트의 기타 관련 기사를 참조하세요!