Index · Правила · Поиск· Группы · Регистрация · Личные сообщения· Вход

Список разделов Не актуальное
 
 
 

Раздел: Не актуальное DDOS-атака на форум 

Создана: 14 Ноября 2011 Пон 7:45:07.
Раздел: "Не актуальное"
Сообщений в теме: 263, просмотров: 53182

На страницу: Назад  1, 2, 3 ... 15,
, 17, 18  Вперёд
  1. 14 Ноября 2011 Пон 7:45:07
    Начиная с 13 ноября продолжается ддос-атака на форум.
    Тысячи злобных ботов посылают нам тысячи запросов в секунду.
    В общем адЪ, израилЪ, локалхостЪ.
    Не удивляйтесь тормозам и отказам.
  2. 19 Ноября 2011 Суб 2:36:45
    ну.....при чем тут новички???я коммуняк проклятых имел в виду. контрацептивы, пишут всякие какашки, уважаемого губернатора оскорбляют, естесственно перед выборами спецслужбы закроют нафик форум, а подстрекателей в попенгаген дрюкнут Гы-гы-гы
  3. 19 Ноября 2011 Суб 2:40:41
    Лёха Юрич писал(а) : ну.....при чем тут новички???я коммуняк проклятых имел в виду. контрацептивы, пишут всякие какашки, уважаемого губернатора оскорбляют, естесственно перед выборами спецслужбы закроют нафик форум, а подстрекателей в попенгаген дрюкнут Гы-гы-гы

    Да ладно тебе.. Чё подметил, атака идёт волновая.. Насрали и ждут реакции...Может то же изъяны ищут? Confused
  4. 19 Ноября 2011 Суб 2:42:00
    avd173791 писал :
    Да ладно тебе.. Чё подметил, атака идёт волновая.. Насрали и ждут реакции...Может то же изъяны ищут? Confused
    да мне хоть зигзагообразная, папу не обижайте Грустно :-(
  5. 19 Ноября 2011 Суб 4:56:18
    nuclearcat писал :ядро корежить

    мдаа.. с этим мне наверно не справиться.
    на одном VDS всё таки вроде поставил, сам не очень понимаю как.
    заманчивая штуковина, но устанавливать проблемно...

    nuclearcat писал :Имхо лучше rp_filter = 1 (если роутинг по умолчанию простой), и роуты атакующих
    ip route add x.x.x.x/y dev lo

    Ну значит так и попробую сделать.
  6. 19 Ноября 2011 Суб 5:09:06
    С роутами мне помогало, знакомым тоже.
    А ipset ... смотря какой дистрибутив
    К примеру: [внешняя ссылка] для CentOS
  7. 19 Ноября 2011 Суб 15:38:24
    В общем сделал бан зомбей через ip route.
    Работает прекрасно.
    Ну по крайней мере сейчас атака почти не ощущается.
  8. 19 Ноября 2011 Суб 17:40:35
    Теперь бы ещё решить вопрос с параллельным запуском процессов и с учетом таймаутов. А то сейчас процесс идёт "по кругу" и целых два минуса:
    -во-первых, если процесс почему то завис, то останавливается апдейт всех фронтендов.
    -во-вторых, если апдейт идёт последовательно, то неоправдано увеличивается на несколько секунд задержка между моментом обнаружения вражеского IP и моментом его забанивания на фронтендах.

    Сейчас как-то вот так:
    Код:

          echo count($for_ban)." IP must be banned on $front\n";
          echo count($for_unban)." IP must be UNbanned on $front\n";
          if (count($for_ban)||count($for_unban)) {
             $sh_file="#!/bin/bash\n\n";
             if (count($for_ban)) {
                $sh_file.="#Banning:\n";
                foreach($for_ban as $ip) {
                   if (!$ip) continue;
                   if ($ip=='0.0.0.0') continue;
                   $sh_file.="ip route add $ip/32 dev lo\n";
                }
             }
             if (count($for_unban)) {
                $sh_file.="\n#UnBanning:\n";
                foreach($for_unban as $ip) {
                   if (!$ip) continue;
                   if ($ip=='0.0.0.0') continue;
                   $sh_file.="ip route del $ip/32\n";
                }
             }
             $sh_file.="\n#END\n";
             $sh_f_name='for_'.$front.'.sh';
             $sh_f_tmp='/var/tmp/'.$sh_f_name;
             $f=fopen($sh_f_tmp,'w');
             if (!$f) die("Error opening $sh_f_tmp");
             fwrite($f,$sh_file);
             fclose($f);
             chmod($sh_f_tmp,0755);
             echo "Sending to $front";
             $out=my_exec("scp -B -i ~/.ssh/$front $sh_f_tmp root@$fr_ip:$sh_f_tmp");
             echo $out['sum'];
             echo "\nDoing:";
             $out=my_exec("ssh -i ~/.ssh/$front root@$fr_ip $sh_f_tmp");
             echo $out['sum'];
             echo "Complete $front.\n";
          }
  9. 19 Ноября 2011 Суб 18:01:29
    В качестве идеи, думаю где-то так, например

    В my_exec("./f_upload.sh $a $b $c &");
    Оно форкнется из-за &, но проверит нет ли старого "застрявшего" файла

    f_upload.sh
    Код:

    #!/bin/sh
    TMP_FILE=$1
    FRONTEND_NAME=$2
    FRONTEND_IP=$3

    #Checking for stale pid file
    if [ -e /var/run/${FRONTEND_NAME}.pid ] ; then
        echo Stale process `cat /var/run/${FRONTEND_NAME}.pid`
        kill `cat /var/run/${FRONTEND_NAME}.pid`
        sleep 1
        kill -9 `cat /var/run/${FRONTEND_NAME}.pid`
        rm /var/run/${FRONTEND_NAME}.pid
    fi

    #Writing PID file
    echo -ne ${BASHPID} >/var/run/${FRONTEND_NAME}.pid

    #Executing commands
    scp -B -i ~/.ssh/${FRONTEND_NAME} ${TMP_FILE} root@${FRONTEND_IP}:${TMP_FILE}
    ssh -i ~/.ssh/${FRONTEND_NAME} root@${FRONTEND_IP} ${TMP_FILE}

    #cleanup
    rm /var/run/${FRONTEND_NAME}.pid

    [/code]
  10. 19 Ноября 2011 Суб 19:45:44
    nuclearcat писал : В качестве идеи, думаю где-то так, например
    В my_exec("./f_upload.sh $a $b $c &");
    Оно форкнется из-за &, но проверит нет ли старого "застрявшего" файла

    Действительно, что то я и не подумал об этом!
    Просто, как всё гениальное.

    А я вот тут нашел процесс-контроллер:
    [внешняя ссылка]

    пофиксил ошибки, и вот что получилось:
    Код:

    <?php
    $pman = new Processmanager();
    $pman->executable = "";
    $pman->path = "";
    $pman->processes = 3;
    $pman->sleep_time = 2;
    $pman->addScript("ls -l /etc/", 5);
    $pman->addScript("ls -l /bin/", 5);
    $pman->addScript("ping 8.8.8.8", 10);
    $pman->addScript("ping 8.8.8.8", 15);
    $pman->addScript("ping 8.8.8.8", 17);
    $pman->addScript("ping 8.8.8.8", 17);
    $pman->addScript("ping 8.8.8.8", 17);

    $pman->exec();
    echo "Complete.\n";

    class Processmanager {
       public $executable = "php -q";//способ запуска (например, для php-скриптов)
       public $root = ""; //путь, который будет добавлен перед именем скрипта
       public $scripts = array();//список запущеных скриптов
       public $processesRunning = 0;//количество запущеных процессов
       public $processes = 3;//максимальное количество одновременных процессов
       public $running = array();//массив выполняющихся процессов (объекты класса Process)
       public $sleep_time = 2;//задержка в цикле перед новой проверкой состояния процессов

       function addScript($script, $max_execution_time = 60) {
          $this->scripts[] = array("script_name" => $script,
                         "max_execution_time" => $max_execution_time);
       }

       function exec() {
          $i = 0;
          while(1) {
             // Fill up the slots
             while (
                ($this->processesRunning<$this->processes)
                and
                ($i<count($this->scripts))
             ) {
                echo "Start: ".$this->scripts[$i]["script_name"]."\n";
                $this->running[] =& new Process(
                   $this->executable,
                   $this->root,
                   $this->scripts[$i]["script_name"],
                   $this->scripts[$i]["max_execution_time"]
                );
                $this->processesRunning++;
                $i++;
             }
             // Check if done
             if (
                ($this->processesRunning==0)
                and
                ($i>=count($this->scripts))
             ) break;
             else echo "Running: ".
                $this->processesRunning.
                " (".(count($this->scripts)-$i)." in queue)\n";

             sleep($this->sleep_time);

             // check what is done
             foreach ($this->running as $key => $val) {
                if (!$val->isRunning() or $val->isOverExecuted()) {
                   if (!$val->isRunning()) {
                      echo "Done: ".$val->script."\n";
                   } else {
                      proc_terminate($val->resource);
                      echo "Killed: ".$val->script."\n";
                   }
                   proc_close($val->resource);
                   unset($this->running[$key]);
                   $this->processesRunning—;
                }
             }
          }
       }
    }

    class Process {
       public $resource;
       public $pipes;
       public $script;
       public $max_execution_time;
       public $start_time;

       function __construct(&$executable, &$root, $script, $max_execution_time) {
          $this->script = $script;
          $this->max_execution_time = $max_execution_time;
          $descriptorspec    = array(
             0 => array('pipe', 'r'),
             1 => array('pipe', 'w'),
             2 => array('pipe', 'w')
          );
          $this->resource    = proc_open($executable." ".$root.$this->script, $descriptorspec, $this->pipes, null, $_ENV);
          $this->start_time = mktime();
       }
       // is still running?
       function isRunning() {
          $status = proc_get_status($this->resource);
          return $status["running"];
       }
       // long execution time, proccess is going to be killer
       function isOverExecuted() {
          if ($this->start_time+$this->max_execution_time<mktime()) return true;
          else return false;
       }
    }


    Сейчас ещё подумаю, как возвращать результаты процесса. Скорее всего надо callback-функцию вызывать.
  11. 19 Ноября 2011 Суб 23:36:37
    А в чем смысл process контроллера в данной ситуации?
  12. 20 Ноября 2011 Вск 0:47:58
    nuclearcat писал : А в чем смысл process контроллера в данной ситуации?

    С его помощью тоже можно асинхронно все задачи запустить.
    То есть сейчас баны загружаются на фронтенды уже вот так:
    Код:

    ...
    //запуск процесса scp копирования, и в нём callback
     $tag=compact('front','fr_ip','sh_f_tmp');
     $pman->addScript("scp -B -i ~/.ssh/$front $sh_f_tmp root@$fr_ip:$sh_f_tmp", 60,            'scp_banlist_send_complete',$tag
    );
    ...
    //когда копирование закончилось - вызывается этот callback
    function scp_banlist_send_complete($in_arr) {
       global $pman;
       $tag=$in_arr['tag'];
       extract($tag);
       if (!isset($in_arr['timeout'])) {
          echo "SCP '$sh_f_tmp' sended to '$front'($fr_ip)\n";
          $pman->addScript(
             "ssh -i ~/.ssh/$front root@$fr_ip $sh_f_tmp", 10,
             'ssh_banlist_execute_complete',$tag
          );
       } else {
          echo "Sending '$sh_f_tmp' by scp to '$front'($fr_ip) timeout.\n";
       }
    }
    //когда исполнение бан-листа закончилось, вызывается этот
    function ssh_banlist_execute_complete($in_arr){
       extract($in_arr['tag']);
       if (!isset($in_arr['timeout'])) {
          echo "OK SSH '$sh_f_tmp' on '$front'($fr_ip).\n";
       } else {
          echo "SSH execution '$sh_f_tmp' on '$front'($fr_ip) timeout.\n";
       }
    }


    Вообще-то я хочу сделать цепочку из трёх функций:
    1) запуск чтения ip route list -> ssh_route_list_compete

    2) ssh_route_list_compete анализирует полученный список ip route list и составляет .sh файл для отправки на фронтенд, -> ssh_banlist_execute_complete

    3) ssh_banlist_execute_complete - просто сообщает что всё готово

    В таком режиме всё будет "выстреливаться" на максимально возможной скрости
  13. 20 Ноября 2011 Вск 1:32:58
    В таком случае подход очень индивидуален
    Я бы написал демона на TCP и вливал бы по TCP нужные удаления-добавления роутов и сьем статистики.
    Можно еще держать открытое ssh соединение и через popen вливать в него постоянно инфу.


    Кстати, у ip route есть batch режим
    ip -b routes.list

    внутри к примеру
    add 1.1.1.1/32 dev lo
    del 1.1.1.132 dev lo

    Еще не забыть про флажок -f (на случай ошибок)

    Выполняется ощутимо быстрее, чем
    ip route add ...
    ip route add ...
  14. 20 Ноября 2011 Вск 1:44:20
    Только запуску вышеозначенного мною решения препятствует такой баг в php: proc_get_status возвращает true всегда, если процесс вывел в stdout больше 64К байт. Прямо хоть баг-репорт пиши((

    запрос ip route list возвращает более 64К информации - в результате php отказывается по proc_get_status признавать что процесс завершился и всегда выдаёт running = true
  15. 20 Ноября 2011 Вск 1:50:08
    Я потому и не люблю сильно использовать сторонние модули в php, в особенности низкоуровневые. Такой же секс, как скажем управлять АТС через RS232 из php :)
    имхо в данном случае вполне хватило бы popen и набора дескрипторов

    Скажем открываем в popen, в "w"
    "ssh root@X.X.X.X \"/sbin/ip -4 -force -b -\""
    и просто в дескриптор пихаем апдейты через fputs
  16. 20 Ноября 2011 Вск 2:05:58
    nuclearcat писал :
    Кстати, у ip route есть batch режим
    ip -b routes.list

    внутри к примеру
    add 1.1.1.1/32 dev lo
    del 1.1.1.132 dev lo


    что то не получилось, в чем я промахнулся?
    файл ip_b.list содержит

    add 39.41.41.212/32 dev lo
    add 41.101.46.14/32 dev lo
    add 41.238.236.58/32 dev lo
    add 41.238.239.110/32 dev lo
    add 95.59.76.211/32 dev lo
    add 178.252.171.172/32 dev lo
    add 182.178.211.88/32 dev lo

    выполняем ip -b ip_b.list , ответ:
    Command "39.41.41.212/32" is unknown, try "ip addr help"
На страницу: Назад  1, 2, 3 ... 15,
, 17, 18  Вперёд