>  기사  >  백엔드 개발  >  Nignx를 사용하여 내가 겪은 DDOS 공격을 영리하게 해결하세요

Nignx를 사용하여 내가 겪은 DDOS 공격을 영리하게 해결하세요

WBOY
WBOY원래의
2016-07-29 09:07:001071검색

1. 문제

APP을 출시한 지 꽤 됐는데, 어느 날 갑자기 온라인 상품에서 인증코드를 보낼 수 없는 걸 발견했어요.

타사 SMS 인증코드 서비스 백엔드에 로그인해 보니 문제가 심각한 것으로 나타났습니다.

3 유비권
3 youbiquan 15797 2015-12-25
4 youbiquan 57 2015-12-23
5 youbiquan 49 2015-12-22
6 youbiquan 54 2015-12-21
7 youbiquan 64 2015-12-20
15797
2015- 12-25 4 youbiquan 57 2015-12-23 5 youbiquan 49 2015-12-22 6 youbiquan 54 2015-12-21 7 youbiquan 64 2015-12-20

저는 며칠 전에 SMS 서비스가 실제로 15,000통이 넘는 문자 메시지를 보냈고, 이로 인해 서비스 요금이 직접적으로 없어졌다는 사실을 발견했습니다.

이유를 알고 싶다면 Nignx의 로그만 보면 됩니다.

로그에서 SMS 인터페이스에 대한 액세스가 다수 발견되었으며, 확인해보니 여전히 로그가 미친듯이 추가되고 있었는데 이는 전형적인 DDoS 공격이었습니다. 물론 핵심 내용은 SMS 인터페이스의 엄청난 방문수
221.178.182.21 - - [05/Jan/2016:16:19:25 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.3; XM50h Build/19.1.1.C.1.2)" "-"
171.82.225.66 - - [05/Jan/2016:16:19:32 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 2014812 MIUI/V6.6.3.0.KHJCNCF)" "-"
171.82.225.66 - - [05/Jan/2016:16:19:32 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; 2014812 MIUI/V6.6.3.0.KHJCNCF)" "-"
110.89.16.13 - - [05/Jan/2016:16:19:49 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
110.89.16.13 - - [05/Jan/2016:16:19:49 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"
118.114.160.200 - - [05/Jan/2016:16:21:26 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
118.114.160.200 - - [05/Jan/2016:16:21:39 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
119.122.0.136 - - [05/Jan/2016:16:21:41 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"
118.114.160.200 - - [05/Jan/2016:16:21:51 +0800] "POST /myinterface?showType=smsAuthcode HTTP/1.1" 200 161 "-" "Mozilla/5.0" "-"

방문수가 너무 많아도 서버가 정상적으로 서비스를 제공하지 못하고 붕괴 직전이라는 느낌을 받게 될 것입니다. 2. 임시 해결 방법

문제 파악에 앞서 가장 먼저 떠오르는 것은 공격자가 서비스에 접근할 수는 없지만 서비스를 종료할 수 없도록 SMS 서비스를 중지하는 것입니다. 서버를 삭제하세요. 결국 온라인 사용자는 여전히 이를 사용하고 있습니다.

먼저 nginx를 사용하여 이 인터페이스를 다시 작성하세요.
if ( $request_uri ~* "showType=smsAuthcode" )
{  
    rewrite ^/ http://www.baidu.com/;
}

물론 구성 방법은 다양할 수 있습니다. 여기서는 문제를 해결하기 위한 아이디어일 뿐이며, 보다 전문적인 nginx 구성 정보를 참조할 수도 있습니다.

우선 바이두 측에 사과드리며 공격 요청을 바이두 측에 전달했습니다. 실제로는 200 등 아무 값이나 반환하면 됩니다.

3. 로그 분석 기반 솔루션

물론 문제는 해결되지 않습니다. line 이전 사용자는 신규 사용자를 등록할 수 없습니다.

로그를 분석한 결과, 어떤 IP는 수천 건의 공격이 있었고, 어떤 IP는 물론 몇 번의 방문만 있었던 것을 발견했습니다. 여러 번 방문한 IP의 경우 실제 사용자의 IP인지, 공격 머신의 IP인지 확인할 방법이 사실상 없습니다. 특정 인터페이스가 특정 기간 내에 IP 액세스 횟수를 제한할 수 있도록 하는 솔루션을 인터넷에서 찾았습니다.

iptables -A INPUT -p tcp --dport 80 -d xx.xx.xx.xx -m string --string "/myinterface?showType=smsAuthcode" --algo kmp -m recent --name httpuser --set
iptables -A INPUT -m recent --update --name httpuser --seconds 86400 --hitcount 4 -j LOG --log-level 5 --log-prefix 'HTTP attack: '
iptables -A INPUT -m string --string "/myinterface?showType=smsAuthcode" --algo kmp -m recent --update --name httpuser --seconds 86400 --hitcount 10 -j REJECT                

기본적인 의미는 액세스 요청에 대해 문자열 일치를 수행하는 것입니다. SMS 인터페이스에 대한 액세스가 발견되면 액세스가 하루에 4회를 초과하는 경우 최근 모듈을 사용하여 액세스를 기록합니다. 그러면 SMS 인터페이스에 다시 액세스할 수 없습니다.​ 사실 어느 정도 효과가 있는 솔루션이기도 합니다

序号 账号 数量(条) 日期
       
2 youbiquan 540 2016-01-08
3 youbiquan 2857 2016-01-04
4 youbiquan 388 2016-01-05
5 youbiquan 2469 2016-01-06

IP 주소를 기반으로 한 예방은 어느 정도 효과는 있지만, 아직 완전히 예방할 수는 없습니다. 보통 하루에 약 50개의 메시지만 보내지만, IP 방화벽을 설정한 후에도 여전히 매일 수천 개의 메시지가 전송됩니다. 분석 결과, 이번 공격에 사용된 IP 주소가 너무 많은 것으로 확인됐기 때문에 IP 주소를 사용해 방어할 가능성은 없어 보였다.

어느 날 고민에 빠졌을 때 nginx 액세스 로그를 다시 열어보니 갑자기 공격 행위의 user-agent가 매우 짧다는 것을 발견했는데, 이는 다른 액세스의 user-agent와는 확연히 다른 점이었습니다.

공격자의 user-agen은 모두 "Mozila/5.0"인 것으로 보이며 이후에는 시스템 버전, 브라우저 등을 포함한 추가 정보를 얻을 수 있습니다.

이 추측에 따르면 사용자 에이전트를 분석하는 프로그램을 사용했습니다. 물론 SMS 인터페이스에 액세스하는 UA에는 짧은 "Mozila/5.0"만 존재합니다. Short UA
Dalvik/1.6.0 (Linux; U; Android 4.2.2; R827T Build/JDQ39)" "-"

그래서 검색해보니 Dalvik이 안드로이드 가상머신이라는 걸 알게 되었는데, 갑자기 Mozila/5.0과 가상머신을 완전히 차단할 수 있겠다는 생각이 들었습니다. UA 예방을 기반으로 하면 문제가 해결될 것입니다.

그래서 nginx 구성에 다음 코드를 추가했습니다
if ($http_user_agent = "Mozilla/5.0") {
       return 503;
}

if ($http_user_agent ~* "Dalvik/1.6.0") {
       return 503;
}

첫 번째 문단은 Mozila/5.0과 엄격하게 일치합니다. 두 번째 문단은 가상 UA인 Dalvik으로 시작하는 UA를 의미합니다. 기계의.

물론 이 예방 방법을 적용한 후 효과는 즉시 나타났습니다.

2 youbiquan 57 2016-01-09

새로운 방법과 새로운 예방조치에 따라 문자발송량이 예전 수준으로 바로 돌아왔습니다. 여러 휴대폰으로 테스트해보니 괜찮았습니다. .

그러나 너무 일찍 기뻐하지 마세요. DDOS를 완벽하게 해결하려면 공격자가 UA를 위조하기 쉬운 것 같습니다. 더 과학적이고 문화적인 지식을 배워야 합니다~

위 내용은 제가 접한 DDOS 공격을 영리하게 해결하기 위해 Nignx를 사용하는 방법을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.