Nignx를 사용하여 내가 겪은 DDOS 공격을 영리하게 해결하세요
1. 문제
APP을 출시한 지 꽤 됐는데, 어느 날 갑자기 온라인 상품에서 인증코드를 보낼 수 없는 걸 발견했어요.
타사 SMS 인증코드 서비스 백엔드에 로그인해 보니 문제가 심각한 것으로 나타났습니다.
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 |
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 UADalvik/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 공격을 영리하게 해결하기 위해 Nignx를 사용하는 방법을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Alipay PHP ...

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...
