Development Tip

DDoS 보호를 활성화하는 방법은 무엇입니까?

yourdevel 2020. 10. 8. 19:07
반응형

DDoS 보호를 활성화하는 방법은 무엇입니까?


DDoS (Distributed Denial of Service Attacks)는 일반적으로 서버 수준에서 차단됩니까?

PHP 수준에서 차단하거나 최소한 줄이는 방법이 있습니까?

그렇지 않다면 DDoS 공격을 막는 가장 빠르고 일반적인 방법은 무엇입니까?


DDOS는 다음과 같은 데이터 센터의 주요 시스템을 압도하는 공격 군입니다.

  • 호스팅 센터의 인터넷 네트워크 연결
  • 호스팅 센터의 내부 네트워크 및 라우터
  • 방화벽 및로드 밸런서
  • 웹 서버, 애플리케이션 서버 및 데이터베이스.

DDOS 방어를 구축하기 전에 최악의 위험 가치가 무엇인지 고려하십시오. 소규모 커뮤니티를위한 중요하지 않은 무료 사용 서비스의 경우 위험에 처한 총 가치는 땅콩 일 수 있습니다. 수십억 달러 규모의 기존 비즈니스를위한 유료, 공공용, 미션 크리티컬 시스템의 경우 그 가치는 회사의 가치 일 수 있습니다. 후자의 경우 StackExchange를 사용하면 안됩니다. :) 어쨌든 DDOS를 방어하려면 심층 방어 접근 방식이 필요합니다.

  1. 호스팅 센터와 협력하여 제공하는 인터넷 및 방화벽 서비스에 대한 네트워크 연결에서의 IP 및 포트 필터링을 포함하여 제공하는 서비스를 이해하십시오. 이것은 매우 중요합니다. 호스팅 회사가 DDOS로 인해 한 고객에게 발생하는 데이터 센터 전체의 중단을 처리하기 때문에 호스팅 회사 가 인터넷에서 많은 사이트를 가져옵니다 . 또한 DDOS 공격 중에는 호스팅 센터의 직원과 매우 긴밀하게 협력하므로 비상 전화 번호를 알고 그들과 좋은 관계를 유지하십시오 :) 그들은 전체 국제 지역을 차단하고 특정 서비스 또는 네트워크를 완전히 차단할 수 있어야합니다. 프로토콜 및 기타 광범위한 방어 조치 또는 허용 목록에있는 IP 만 허용 (비즈니스 모델에 따라 다름)
  2. 호스팅 센터에서- 콘텐츠 전송 네트워크사용 하여 최종 사용자에게 가까운 서비스 (주로 정적)를 배포하고 DDOS 설계자로부터 실제 서버를 숨 깁니다. 전체 CDN은 DDOS가 모든 국가의 모든 노드를 제거하기에는 너무 큽니다. DDOS가 한 국가에 초점을 맞추고 있다면 적어도 다른 사용자는 여전히 괜찮습니다.
  3. 모든 시스템 및 소프트웨어 패키지를 최신 보안 패치로 업데이트하십시오 .

    • 관리 형 스위치-가끔 업데이트가 필요합니다.
    • 라우터
    • 방화벽
    • 로드 밸런서
    • 운영체제
    • 웹 서버
    • 언어와 라이브러리
  4. 적절한 방화벽 또는 보안 어플라이언스가 설정되어 있고 자격을 갖춘 보안 전문가가 정기적으로 검토 하는지 확인하십시오 . 방화벽에 대한 강력한 규칙은 많은 단순 공격에 대한 좋은 방어입니다. 개방형 서비스마다 사용 가능한 대역폭을 관리 할 수있는 것도 유용합니다.

  5. 적절한 네트워크 모니터링 도구 를 갖추십시오. 다음을 이해하는 데 도움이 될 수 있습니다.

    • 단순히 무거운 부하를받는 것이 아니라 공격을 받고 있음
    • 공격의 출처 (일반적으로 거래하지 않는 국가 포함) 및
    • 공격이 실제로 무엇인지 (포트, 서비스, 프로토콜, IP 및 패킷 콘텐츠)
  6. 공격은 단순히 합법적 인 웹 사이트 서비스를 많이 사용하는 것일 수 있습니다 (예 : 쿼리를 실행하는 '법적'URI를 누르거나 데이터를 삽입 / 업데이트 / 삭제). 수천 또는 수백만 개의 서로 다른 IP 주소에서 들어오는 수천 또는 수백만 개의 요청이 사이트를 무릎. 또는 일부 서비스는 실행 비용이 너무 비싸서 몇 개의 요청으로 만 DOS가 발생할 수 있습니다. 정말 값 비싼 보고서라고 생각하면됩니다. 따라서 무슨 일이 일어나고 있는지에 대한 좋은 애플리케이션 수준 모니터링 이 필요 합니다.

    • 호출 된 서비스 및 전송되는 인수 / 데이터 (예 : 애플리케이션에 로그인)
    • 호출을 수행하는 사용자 및 IP (예 : 애플리케이션에 로그인)
    • DB가 수행하는 쿼리 및 삽입 / 업데이트 / 삭제
    • 시스템의 모든 컴퓨터 (및 VM)에서로드 평균, CPU 사용률, 디스크 I / O, 네트워크 트래픽
    • 이 모든 정보를 쉽게 검색 할 수 있고 서로 다른 컴퓨터 및 서비스의 로그를 연관시킬 수 있는지 확인하십시오 (즉, 모든 컴퓨터가 ntp를 사용하여 시간 동기화되었는지 확인).
  7. 응용 프로그램의 현명한 제약 및 제한 . 예를 들어 다음과 같이 할 수 있습니다.

    • 로드 밸런서의 QoS 기능을 사용하여 모든 익명 세션을 클러스터의 개별 애플리케이션 서버로 보내고 로그온 한 사용자는 다른 세트를 사용합니다. 이것은 응용 프로그램 수준의 익명 DDOS가 귀중한 고객을 빼앗는 것을 방지합니다.
    • 강력한 CAPCHA를 사용하여 익명 서비스 보호
    • 세션 시간 초과
    • 보고서와 같은 특정 유형의 요청에 대해 세션 제한 또는 비율 제한이 있습니다. 필요한 경우 익명 액세스를 끌 수 있는지 확인
    • 사용자의 동시 세션 수에 제한이 있는지 확인하십시오 (해킹 된 계정이 백만 번 로그온하는 것을 방지하기 위해).
    • Have different database application users for different services (eg transactional use vs. reporting use) and use database resource management to prevent one type of web request from overwhelming all others
    • If possible make these constraints dynamic, or at least configurable. This way, while you are under attack, you can set aggressive temporary limits in place ('throttling' the attack), such as only one session per user, and no anonymous access. This is certainly not great for your customers, but a lot better than having no service at all.
  8. 마지막으로 DOS 대응 계획 문서를 작성하고 비즈니스, 관리, SW 개발 팀, IT 팀 및 보안 전문가와 같은 모든 관련 당사자의 내부 검토를받습니다. 문서를 작성하는 과정을 통해 귀하와 귀하의 팀은 문제를 숙고하고 휴일 오전 3시에 최악의 상황이 발생할 경우 대비할 수 있습니다. 문서는 다음 사항을 포함해야합니다.

    • 위험에 처한 요소와 비즈니스 비용
    • 자산 보호를위한 조치
    • 공격이 탐지되는 방법
    • 계획된 대응 및 에스컬레이션 절차
    • 시스템 및이 문서를 최신 상태로 유지하기위한 프로세스

따라서 서문을 제쳐두고 여기에 몇 가지 구체적인 답변이 있습니다.

DDOS는 일반적으로 서버 수준에서 차단됩니다.

실제로는 아닙니다. 최악의 DDOS 공격의 대부분은 저수준 (IP 패킷 수준에서)이며 DDOS 공격을 처리하기 위해 개발 된 라우팅 규칙, 방화벽 및 보안 장치에 의해 처리됩니다.

PHP 수준에서 차단하거나 최소한 줄이는 방법이 있습니까?

일부 DDOS 공격은 유효한 URI 및 HTTP 요청을 보내는 응용 프로그램 자체를 겨냥합니다. 요청 비율이 올라가면 서버가 어려움을 겪고 SLA가 중단됩니다. 이 경우 PHP 수준에서 수행 할 수있는 작업이 있습니다.

  • 애플리케이션 수준 모니터링 : 각 서비스 / 페이지가 진행 상황을 확인할 수있는 방식으로 요청을 기록하는지 확인합니다 (공격을 완화하기위한 조치를 취할 수 있음). 몇 가지 아이디어 :

    • 로그 도구 (또는 Excel 등)에 쉽게로드하고 명령 줄 도구 (grep, sed, awk)로 구문 분석 할 수있는 로그 형식이 있어야합니다. DDOS는 수백만 줄의 로그를 생성합니다. 무슨 일이 일어나고 있는지 파악하기 위해 로그 (특히 URI, 시간, IP 및 사용자와 관련하여)를 분할해야 할 수 있으며 다음과 같은 데이터를 생성해야합니다.

      • 액세스되는 URI
      • 높은 비율로 실패한 URI (공격자가 공격하는 특정 URI의 가능성 표시)
      • 서비스에 액세스하는 사용자
      • 각 사용자가 서비스에 액세스하는 IP는 몇 개입니까?
      • 익명 사용자가 액세스하는 URI는 무엇입니까?
      • 주어진 서비스에 사용되는 인수
      • 특정 사용자 작업 감사
    • 각 요청의 IP 주소를 기록합니다. DNS를 역방향으로 돌리지 마십시오. 역설적이게도 이렇게하면 공격자가 DDOS를 더 쉽게 사용할 수 있습니다.

    • 전체 URI 및 HTTP 메소드를 기록합니다. 예 : "GET http://example.com/path/to/service?arg1=ddos "
    • 존재하는 경우 사용자 ID를 기록하십시오.
    • 중요한 HTTP 인수 기록
  • 합리적인 속도 제한 : 특정 IP 또는 사용자가 특정 기간 동안 만들 수있는 요청 수에 제한을 구현할 수 있습니다. 합법적 인 고객이 초당 10 개 이상의 요청을 할 수 있습니까? 익명의 사용자가 값 비싼 보고서에 액세스 할 수 있습니까?

  • 익명 액세스를위한 CAPTCHA : 모든 익명 요청에 대해 CAPTCHA를 구현하여 사용자가 DDOS 봇이 아닌 사람인지 확인합니다.

DDOS 공격을 막는 가장 빠르고 가장 일반적인 방법은 무엇입니까?

가장 빠른 방법은 아마도 바람직하지 않을 수도 있지만 협박에 굴복하는 것입니다.

그렇지 않은 경우 가장 먼저해야 할 일은 호스팅 및 / 또는 CDN 제공 업체에 연락하여 그들과 협력하는 것입니다 (도대체 무슨 일이 일어나고 있는지 물어 보지 않았다면 ...). DDOS가 발생하면 호스팅 공급자의 다른 고객에게 부수적으로 영향을 미칠 수 있으며 공급자는 단순히 리소스를 보호하기 위해 사이트를 종료해야하는 상당한 압력을받을 수 있습니다. 공급자와 로그 (모든 정보)를 공유 할 준비를하십시오. 이러한 로그는 네트워크 모니터와 결합되어 공격을 차단 / 완화하기에 충분한 정보를 함께 제공 할 수 있습니다.

DDOS를 예상하는 경우 호스팅 제공 업체가 제공 할 수있는 보호 수준에 대해 자격을 부여하는 것이 좋습니다. DDOS 경험과이를 완화 할 도구가 있어야합니다. 도구, 프로세스 및 에스컬레이션 절차를 이해해야합니다. 또한 호스팅 제공 업체에서이 지원하는 일에 대해 물어 자신의 상류 제공. 이러한 서비스는 더 많은 선불 또는 월 비용을 의미 할 수 있지만이를 보험 정책으로 취급하십시오.

공격을받는 동안 로그를 가져 와서 채굴해야합니다. 공격 패턴을 조사하고 해결해야합니다. 익명 액세스를 끄고 공격을받는 서비스를 제한하는 것을 고려해야합니다 (즉, 서비스에 대한 응용 프로그램의 속도 제한을 줄임).

운이 좋고 고정 된 소규모 고객 기반이있는 경우 유효한 고객 IP 주소를 확인할 수 있습니다. 이 경우 잠시 동안 화이트리스트 접근 방식으로 전환 할 수 있습니다. 모든 고객이 새로운 IP에서 액세스해야하는 경우 전화를 걸 수 있도록 진행되고 있는지 확인하세요. :)


Doug McCleanhttps://stackoverflow.com/a/1029613/1395668 에서 훌륭한 조언을 제공합니다.


질문의 PHP 부분에 따르면;

이 작업을 위해 PHP에 의존하지는 않지만 구현할 수는 있지만 이러한 가능성을 모두 고려해야합니다.

  1. 공격자는 각 요청에 대해 IP를 변경할 수 있습니다.
  2. 공격자는 대상 사이트가이 매개 변수를 신경 쓰지 않는 URI에 매개 변수를 전달할 수 있습니다.
  3. 공격자는 만료되기 전에 세션을 다시 시작할 수 있습니다.

단순 의사;

<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
    $_SESSION['ddos'] = $hash;
}

list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
    header('HTTP/1.1 503 Service Unavailable');
    // die('Easy!');
    die;
}

// Save last request
$_SESSION['ddos'] = $hash;
?>

PHP 레벨이 요청 체인에서 너무 늦습니다.

Putting your apache server behind an open source appliance may be a good option for you.

http://tengine.taobao.org/ has some documentation and source code more modules aimed at DDOS prevention. It is a expansion of nginx, so you can easily set it up as a reverse proxy for your apache instance.

See: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ for how to fight collision has DoS attacks.

Totally forgot too, http://www.cloudflare.com is one the top free web application firewall, they have free and paid plans and will save your ass from DDOS we use it for alot of our high traffic sites just for its caching capabilities. It is awsome!


DDoS is best handled by very expensive, purpose-built network appliances. Hosts are generally not good at doing DDoS protection because they are subject to relatively low performance, state exhaustion, limited bandwidth, etc. Use of iptables, apache mods, and similar services can help in some situations if you have no access to DDoS mitigation hardware or a DDoS mitigation service, but it is far from ideal and still leaves you at risk of attack.


How about something like this on PHP side:

//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
    //write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
    $_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}

if ($_SESSION['banip']==1) {
    header('HTTP/1.1 503 Service Unavailable');
    die;
}

You can not do this in PHP level. DDOS is a kind of attack that send too many requests to your webserver. Your webserver will reject request before it call your PHP script.

If you are using Apache, here is some tips from Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html


There are plugins you can use in apache for ddos/dos. Good start here http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html

If you're on LEMP, you can check here. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

These are good inexpensive starting points.


Do NOT use PHP-based protection, it's horrible and will hardly have an impact at all! Configure your webserver to rate-limit requests, for example in Nginx using the limit_req module (http://nginx.org/en/docs/http/ngx_http_limit_req_module.html)

Although, I would recommend using CloudFlare to combat layer-4 - however not layer-7 based attacks unless you're willing to pay.


DDOS are generally blocked on a server level, Please enable DDOS protection in your Server Level. Please check the below notes for DDOS protections.

Apache HTTP Server configuration settings that can help prevent DDOS problems:

The RequestReadTimeout directive allows to limit the time a client may take to send the request.

Allow 10 seconds to receive the request including the headers and 30 seconds for receiving the request body:

RequestReadTimeout header=10 body=30

Allow at least 10 seconds to receive the request body. If the client sends data, increase the timeout by 1 second for every 1000 bytes received, with no upper limit for the timeout (except for the limit given indirectly by LimitRequestBody):

RequestReadTimeout body=10,MinRate=1000

RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

The KeepAliveTimeout directive may be also lowered on sites that are subject to DoS attacks. Some sites even turn off the keepalives completely via KeepAlive, which has of course other drawbacks on performance. The values of various timeout-related directives provided by other modules should be checked.

The directives LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine, and LimitXMLRequestBody should be carefully configured to limit resource consumption triggered by client input. Tune the MaxRequestWorkers directive to allow the server to handle the maximum number of simultaneous connections without running out of resources.


Anti DDOS steps:

  • The very first important thing is to identify the ddos attack first. Identifying the ddos attack more early means more better for your server .
  • Getting better bandwidth available for your server. Always keep more than enough bandwidth which is required to for your server. This won’t prevent DDOS attack but it will take longer time. By which you will get some extra time to act.
  • If you own your own web server then you can defend at network parameter by rate limit your router, add filters to drop packets to different sources of attacks, time out half opened connections more aggressively. Also set lower SYN, ICMP and UDP flood drop thresholds.
  • If you don’t have much idea about these things, then go and contact your hosting providers quickly. They can try their best prevent the DDOS attacks.
  • There are also Special DDOS mitigation service provided by Cloudflare and many other companies. By which they can help you to prevent the DDOS attacks. Also many companies offer cheap ddos protection and dos protection.

참고URL : https://stackoverflow.com/questions/14477942/how-to-enable-ddos-protection

반응형