Annonce

Réduire
Aucune annonce.

Script Anti DoS

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Script Anti DoS

    Bonjour,

    Voici un script anti-DoS pour vos Sites web :

    Code:
    <?php
    
    /*
    CHMOD /iplog/ to 777
    Create and CHMOD /iplog/iplogfile.dat to 666
    add the following line in any important .php file in the same directory as your anti_dos.php file so it can check IPs when that file is loaded, best example is index.php if you have it.
    include("anti_dos.php"); //anti-DoS, prevents rapid accessing
    
    if you have a known cookie on your site, 
    you can use this, otherwise just ignore this, it will set a different limit 
    for people with this cookie
    
    I use yourothercookie as the cookie ID for the forum, my forum uses ID 
    greater than 0 for all members and -1 for guests and members who have logged out, 
    so making it match greater than zero means members will get better access and 
    guests with or without cookies won't
    
    Also I use these cookies in the "flood alert" emails to make sure an important user didn't get banned. Someone could fake a cookie, so always be suspicious. Tez
    */
    $cookie = $_COOKIE['cookie1'];
    $othercookie = $_COOKIE['cookie2'];
    
    
    if($cookie && $othercookie > 0) $iptime = 10;  // Minimum number of seconds between visits for users with certain cookie
    else $iptime = 10; // Minimum number of seconds between visits for everyone else
    
    
    $ippenalty = 60; // Seconds before visitor is allowed back
    
    
    if($cookie && $othercookie > 0)$ipmaxvisit = 30; // Maximum visits, per $iptime segment
    else $ipmaxvisit = 15; // Maximum visits per $iptime segment
    
    
    $iplogdir = "./iplog";
    $iplogfile = "iplog.dat";
    
    $ipfile = substr(md5($_SERVER["REMOTE_ADDR"]), -2);
    $oldtime = 0;
    if (file_exists($iplogdir.$ipfile)) $oldtime = filemtime($iplogdir.$ipfile);
    
    $time = time();
    if ($oldtime < $time) $oldtime = $time;
    $newtime = $oldtime + $iptime;
    
    if ($newtime >= $time + $iptime*$ipmaxvisit)
    {
    touch($iplogdir.$ipfile, $time + $iptime*($ipmaxvisit-1) + $ippenalty);
    $oldref = $_SERVER['HTTP_REFERER'];
    header("HTTP/1.0 503 Service Temporarily Unavailable");
    header("Connection: close");
    header("Content-Type: text/html");
    echo "<html><title>DDoS détecté !</title>
    <body bgcolor=#999999 text=#ffffff link=#ffff00>
    <font face='Verdana, Arial'><p><b>
    <h1>Accès suspendu temporairement.</h1>Trop de pages ont été ouvertes simultanément avec votre adresse IP (plus de ".$ipmaxvisit." visites en ".$iptime." secondes).</b>
    ";
    echo "<br />Attendez ".$ippenalty." secondes et réssayez.</p></font></body></html>";
    touch($iplogdir.$iplogfile); //create if not existing
    $fp = fopen($iplogdir.$iplogfile, "a");
    $yourdomain = $_SERVER['HTTP_HOST'];
       if ($fp)
       {
       $useragent = "<unknown user agent>";
       if (isset($_SERVER["HTTP_USER_AGENT"])) $useragent = $_SERVER["HTTP_USER_AGENT"];
       fputs($fp, $_SERVER["REMOTE_ADDR"]." ".date("d/m/Y H:i:s")." ".$useragent."n");
       fclose($fp);
       $yourdomain = $_SERVER['HTTP_HOST'];
       
       //the @ symbol before @mail means 'supress errors' so you wont see errors on the page if email fails.
    if($_SESSION['reportedflood'] < 1 && ($newtime < $time + $iptime + $iptime*$ipmaxvisit))
       @mail('[email protected]'.$yourdomain, 'site ddos par '.$cookie.' '
       .$_SERVER['REMOTE_ADDR'],'http://'.$yourdomain.' site ddos, ip bannie :'.$_SERVER['REMOTE_ADDR'].' a http://'.$yourdomain.$_SERVER['REQUEST_URI'].' de '.$oldref.' agent '.$_SERVER['HTTP_USER_AGENT'].' '
       .$cookie.' '.$othercookie, "De: ".$yourdomain."n");
       $_SESSION['reportedflood'] = 1;
       }
       exit();
    }
    else $_SESSION['reportedflood'] = 0;
    
    //echo("loaded ".$cookie.$iplogdir.$iplogfile.$ipfile.$newtime);
    touch($iplogdir.$ipfile, $newtime); //this just updates the IP file access date or creates a new file if it doesn't exist in /iplog
    ?>
    [/PHP]
    
    Les étapes à suivre : 
    
    Créez un dossier au même niveau que votre fichier anti_dos.php nommé iplog.
    
    Dans ce dossier, créez le fichier iplog.dat, vide.
    
    Mettez le chmod a 777 sur ce dossier.
    
    Vous pouvez modifier les variables avant d'afficher la page de DoS...
    
    Sur toutes les pages ou vous voulez que l'anti-DoS soit actif, faites un include en php de anti_dos.php comme ceci :
    
    [PHP]<?php
    include("anti_dos.php");
    ?>
    Source : scriptarea
    Dernière modification par ptinaze, 20 novembre 2011, 10h00. Motif: SOURCE, pour la deuxième fois...

  • #2
    Très utile mais ne fonctionne que sur la couche application.
    Il ne bloquera que les petits DoS (ce qui représente tout de même une bonne partie des botnet :-p).
    mactux †|

    Le savoir n'est réel que s'il est partagé

    Commentaire


    • #3
      Ah je n'etais pas au courant merci pour l'info.

      Commentaire


      • #4
        Mieux vaut avoir ce script sous le coude tout de même, on ne sait jamais...

        Commentaire


        • #5
          c'est mieux que rien
          sigpic

          Commentaire


          • #6
            J'ignorais qu'on puisse limite un ddos avec du php, ça fait quand meme des connexions au site, meme si le contenu ne se charge pas...
            Et je voit l'utilisation de cookie, mais lors d'un ddos, on les désactive en général, donc la sécurité ne sert à rien?

            Je parle sans vraiment m'etre penché sur la question, je n'affirme rien, je pose juste des questions Et j'ai survolé le code...

            Je vais quand meme le tester

            Et merci pour le partage =D
            "Tout le monde savait que c'était impossible. Est arrivé un qui ne le savait pas et qui l'a fait !" Marcel Pagnol ////// "Certains voient les choses telles qu’elles sont et se disent pourquoi donc ? D’autres rêvent de choses qui n’ont jamais existé et se disent pourquoi pas !" George Bernard Shaw

            Commentaire


            • #7
              Tu as surtout plusieurs types de Deny Of Service, les plus importants sont l'attaque applicative et l'autre des requêtes TCP/UDP, dans le cas de l'applicatif, l'attaque va par exemple taper sur la couche logiciel Apache, qui une fois lancer va faire monter l'utilisation de ton serveur à plus de 100%, Apache ne sera plus en mesure de traiter les nouvelles requêtes sur le site et donc empêcher son fonctionnement.
              Pour le TCP et l'UDP c'est autre chose, car il s'attaque à un protocole pour "boucher" l'entrée.
              Ce script est donc bien utile pour une attaque de type applicative.
              mactux †|

              Le savoir n'est réel que s'il est partagé

              Commentaire


              • #8
                D'accord merci Mactux des ces explications supplémentaires
                Je suis en train de me demander quelque chose...
                Pendant les attaques d'Anonymous en réprésaille à la fermerture de MU, il y avait une page web qui lançait une attaque Ddos, mais j'ai pas eu le réflexe de télécharger le code source sur le coup pour l'analyser après >_< et le lendemain, le site avait fermé. VDM
                Quand j'ai besoin d'utiliser de l'AJAX j'utilise cette fonction. Mais peut-t-on la tranformer en attaque ddos juste en rajoutant un setTimeout comme je l'ai fait ?
                Code:
                function ajax(id,url)
                {
                	var xmlHttp;
                	try
                	{
                		xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
                	}
                	catch (e)
                	{
                		try
                		{
                			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
                		}
                		catch (e)
                		{
                			try
                			{
                				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                			}
                			catch (e)
                			{
                				alert("No AJAX!?");
                				return false;
                			}
                		}
                	}
                	xmlHttp.onreadystatechange=function()
                	{
                		if(xmlHttp.readyState==4)
                		{
                			document.getElementById(id).innerHTML=xmlHttp.responseText;
                			var js = document.getElementById(id).getElementsByTagName('script');
                			for( var i in js )
                			{
                				eval(js[i].text);
                			}
                		}
                		else
                		{
                			//document.getElementById(id).innerHTML = "Chargement en cours ...<br />";
                		}
                	}
                	xmlHttp.open("GET",url,true);
                	xmlHttp.send(null);
                	setTimeout('ajax()',3);
                }
                "Tout le monde savait que c'était impossible. Est arrivé un qui ne le savait pas et qui l'a fait !" Marcel Pagnol ////// "Certains voient les choses telles qu’elles sont et se disent pourquoi donc ? D’autres rêvent de choses qui n’ont jamais existé et se disent pourquoi pas !" George Bernard Shaw

                Commentaire

                Chargement...
                X