Belki kimileri hangi site olduğunu dahi biliyor, bir sosyal ağ sitesi yürütüyorum. Kullanıcı kitlemi her ne kadar kötülemek istemesem de kimileri çocuk oyuncağı şeylerle, anlaşılabilirliği 6-12 yaş arası araçları kuşanıp, alt benliğimi kimse durduramaz moduna girerek “kim takar yönetimi” tavrına bürünüyor, aslan kaplan kesiliyorlar. Kimi uygunsuz davranışlara olan yaptırımların sonucunda, sonuçlarına çok alışık olduklarından genelde bu altbenlik kitlesi susar, ve istemeden de olsa olağan sanal yaşamlarına geri dönerler. Fakat bu sefer çok karşılaşmadığım ama aşina olduğum ‘”senin siteni kapatırım” tehditleriyle karşılandım. Tehdidin sonu tabii ki cookie’siyle IP’siyle artık elimde bir server’ın, makina tanıma konusunda ne yetenekleri varsa önlerine sergileyerek uzaklaştırılmaları oldu. Şöyle 1-2 iki saat sonra, gördüm ki aslan kesilmelerinin gerçekten bir nedeni varmış. Kullanıcı adlarını çeşitli sevgi* sözcükleriyle andığım bir/birkaç şahıs internet camiasının tuvaleti eggdrop botnet’lerden birinde SYN flood öğrenmiş meğer..

Bu SYN flood kısaca nedir anlatayım; TCP/IP de bir bağlantı açmak için ilk SYN gönderilir, fakat bu noktada kesilirse, SYN quoe denilen sıralama deposu eninde sonunda dolar ve sunucu yeni bağlantı kabul etmez. Benim sunucum 1200 civarına kadar thread destekliyordu, bu yüzden 3 kişi 6-12 yaş arası çocuklar için yazılmış sözüm ona saldırı oyuncakları ile 400-500 ‘er packet’ler yollamışlar sağolsunlar.

Korunma yöntemi, tcp packetleri spoofingle (pakette yanlis ip adresi) ile birlikte gelince iptables veya harici bir firewall. Benim harici (fireslayer) firewall’um saldırıyı 15 dakikada anca anlayıp engellediğinden, işimi hızlıca görecek kısmını iptables’dan yaptım.

Aslında bu syn flood koruması module olarak apache güncelleştirmesinin yanında geliyor, fakat ben performans ihtiyacımdan dolayı litespeed kullanıyorum, bunu da not düşeyim.

#!/usr/bin/php -q
< ?
while(true) {
unset($exec);
//sort edilmis, 80 portuna yapilan iplere gore gruplanmis baglanti sayilari
exec("netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1",$exec);
foreach($exec as $i => $v) {
        //trim
        $v = trim($v);
        while(strpos("  ",$v)) //tembel parse
        $v = str_replace(array("  ","   ")," ",$v);
        $d = explode(" ",$v);
        //print_r($d);
        if ($d[0] > 30 && !in_array($d[1],$giden)) {
        echo "Gidici: {$d[0]} tane {$d[1]}\n";
        exec("iptables -A INPUT -s ".$d[1]." -j DROP");
        $giden[] = $dil[1]; //giden bidaha islenmesin
        }
}
sleep(30); // & ile backgrounda birakalim, devamli baksin..
}
?>

Eğer beğendiysen, belki GWG'nin RSS beslemesine kayıt olmak istersin. Ziyaretin için teşekkürler!