Problème d'attaque SYN

Bonjour à tous,

Voilà plusieurs années que je suis chez online.net et je n’ai rencontré jusqu’à ce jour aucun véritable problème.

J’ai une dédibox pro sous debian 64 bits avec openpanel d’installé.

Or depuis 3 jours, mon serveur commence à saturer avec une importante consommation de paquets (voir le screenshot).

Après quelques reboots et de re-configuration apache le problème est toujours présent, la mémoire utilisée est bonne.
Je me suis donc penché vers un problème de SYN/DDOS, j’ai contacté le support d’online.net qui m’a dit que mon serveur était en train de télécharger (alors que non.)

J’ai executé

for i in ` netstat -tanpu | grep "SYN_RECV" | awk {'print $5'} | cut -f 1 -d ":" | sort | uniq -c | sort -n | awk {'if ($1 > 3) print $2'}` ; do echo $i; done

Qui m’a retourné une dizaine de lignes

Qui me retourne entre 250 et 300.

J’ai donc configuré mon IPTABLE comme cela :

#!/bin/sh
#

IPTABLES="/sbin/iptables"
IP6TABLES="/sbin/ip6tables"

# Flush and Delete existing chains
$IPTABLES -F openpanel || /bin/true
$IPTABLES -F openpanel-allow || /bin/true
$IPTABLES -F openpanel-deny || /bin/true
$IPTABLES -F openpanel-fwd || /bin/true
$IPTABLES -F INPUT
$IPTABLES -t nat -F PREROUTING
$IPTABLES -t nat -F POSTROUTING
$IPTABLES -F FORWARD
$IPTABLES -X openpanel || /bin/true
$IPTABLES -X openpanel-allow || /bin/true
$IPTABLES -X openpanel-deny || /bin/true


$IPTABLES -X openpanel-fwd || /bin/true
$IP6TABLES -F openpanel || /bin/true
$IP6TABLES -F openpanel-fwd || /bin/true
$IP6TABLES -F openpanel-allow || /bin/true
$IP6TABLES -F openpanel-deny || /bin/true
$IP6TABLES -F INPUT
$IP6TABLES -F FORWARD
$IP6TABLES -X openpanel || /bin/true
$IP6TABLES -X openpanel-fwd || /bin/true
$IP6TABLES -X openpanel-allow || /bin/true
$IP6TABLES -X openpanel-deny || /bin/true



# Create new chains
$IPTABLES -N openpanel
$IPTABLES -N openpanel-fwd
$IPTABLES -N openpanel-allow
$IPTABLES -N openpanel-deny



$IP6TABLES -N openpanel
$IP6TABLES -N openpanel-fwd
$IP6TABLES -N openpanel-allow
$IP6TABLES -N openpanel-deny



# Configure openpanel accept/deny behaviour
$IPTABLES -A openpanel-allow -j ACCEPT
$IP6TABLES -A openpanel-allow -j ACCEPT
$IPTABLES -A openpanel-deny -j DROP


$IP6TABLES -A openpanel-deny -j DROP


# Sysadmin defined policies through openpanel
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 110 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 110 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 111 -j openpanel-deny
$IP6TABLES -A openpanel -p tcp --dport 111 -j openpanel-deny
$IPTABLES -A openpanel -p udp -s 0.0.0.0/0 --dport 111 -j openpanel-deny
$IP6TABLES -A openpanel -p udp --dport 111 -j openpanel-deny
$IPTABLES -A openpanel -p tcp -s MON.IP./255.255.255.255 --dport 1337 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 1337 -j openpanel-deny
$IP6TABLES -A openpanel -p tcp --dport 1337 -j openpanel-deny
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 143 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 143 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 21 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 21 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 22 -j openpanel-deny
$IP6TABLES -A openpanel -p tcp --dport 22 -j openpanel-deny
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 25 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 25 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 4089 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 4089 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 443 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 443 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 53 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 53 -j openpanel-allow
$IPTABLES -A openpanel -p udp -s 0.0.0.0/0 --dport 53 -j openpanel-allow
$IP6TABLES -A openpanel -p udp --dport 53 -j openpanel-allow
$IPTABLES -A openpanel -p tcp -s 0.0.0.0/0 --dport 80 -j openpanel-allow
$IP6TABLES -A openpanel -p tcp --dport 80 -j openpanel-allow
$IPTABLES -I INPUT -p icmp -j ACCEPT
$IP6TABLES -I INPUT -p icmp -j ACCEPT
$IPTABLES -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IP6TABLES -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -i lo -j openpanel-allow
$IPTABLES -A INPUT -j openpanel
$IPTABLES -A FORWARD -j openpanel-fwd
$IP6TABLES -A INPUT -i lo -j openpanel-allow
$IP6TABLES -A INPUT -j openpanel
$IP6TABLES -A FORWARD -j openpanel-fwd
$IPTABLES -P INPUT ACCEPT
$IP6TABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IP6TABLES -P FORWARD ACCEPT


# Rajout 18.04.2012 #
$IPTABLES -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
$IP6TABLES -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT

J’ai aussi exécuté ces lignes :

echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

Qui sont aussi présentes dans /etc/sysctl.conf

Voici mon top:

Tasks: 470 total,   1 running, 469 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.0%us,  0.4%sy,  0.0%ni, 97.2%id,  0.0%wa,  0.0%hi,  1.4%si,  0.0%st
Mem:  16428152k total,  2689596k used, 13738556k free,    41472k buffers
Swap:  1044216k total,        0k used,  1044216k free,   450268k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1693 root      20   0  109m 3320 1612 S    1  0.0   0:04.07 logax
 2249 www-data  20   0  278m  13m 3948 S    1  0.1   0:00.20 apache2
 2309 www-data  20   0  278m  13m 3948 S    1  0.1   0:00.19 apache2
 2729 root      20   0 19336 1684 1016 R    1  0.0   0:00.06 top
 2130 www-data  20   0  278m  13m 3964 S    0  0.1   0:00.31 apache2
 2424 www-data  20   0  278m  13m 3952 S    0  0.1   0:00.25 apache2
 2425 www-data  20   0  278m  13m 4100 S    0  0.1   0:00.33 apache2
 2445 www-data  20   0  300m  36m 4720 S    0  0.2   0:00.48 apache2
 2461 www-data  20   0  278m  13m 3952 S    0  0.1   0:00.26 apache2
 2471 www-data  20   0  278m  13m 3936 S    0  0.1   0:00.17 apache2
 2480 www-data  20   0  278m  13m 3940 S    0  0.1   0:00.28 apache2
 2493 www-data  20   0  278m  13m 3936 S    0  0.1   0:00.15 apache2
    1 root      20   0  8356  804  676 S    0  0.0   0:00.66 init
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0
    4 root      20   0     0    0    0 S    0  0.0   0:00.00 ksoftirqd/0
    5 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/0
    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/1
    7 root      20   0     0    0    0 S    0  0.0   0:00.00 ksoftirqd/1
    8 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/1
    9 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/2
   10 root      20   0     0    0    0 S    0  0.0   0:00.00 ksoftirqd/2
   11 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/2
   12 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/3
   13 root      20   0     0    0    0 S    0  0.0   0:00.00 ksoftirqd/3
   14 root      RT   0     0    0    0 S    0  0.0   0:00.00 watchdog/3
   15 root      20   0     0    0    0 S    0  0.0   0:00.02 events/0
   16 root      20   0     0    0    0 S    0  0.0   0:00.08 events/1
   17 root      20   0     0    0    0 S    0  0.0   0:00.00 events/2
   18 root      20   0     0    0    0 S    0  0.0   0:00.00 events/3
   19 root      20   0     0    0    0 S    0  0.0   0:00.00 cpuset
   20 root      20   0     0    0    0 S    0  0.0   0:00.00 khelper
   21 root      20   0     0    0    0 S    0  0.0   0:00.00 netns
   22 root      20   0     0    0    0 S    0  0.0   0:00.00 async/mgr
   23 root      20   0     0    0    0 S    0  0.0   0:00.00 pm
   24 root      20   0     0    0    0 S    0  0.0   0:00.00 sync_supers
   25 root      20   0     0    0    0 S    0  0.0   0:00.00 bdi-default
   26 root      20   0     0    0    0 S    0  0.0   0:00.00 kintegrityd/0
   27 root      20   0     0    0    0 S    0  0.0   0:00.00 kintegrityd/1
   28 root      20   0     0    0    0 S    0  0.0   0:00.00 kintegrityd/2
   29 root      20   0     0    0    0 S    0  0.0   0:00.00 kintegrityd/3
   30 root      20   0     0    0    0 S    0  0.0   0:00.00 kblockd/0
   31 root      20   0     0    0    0 S    0  0.0   0:00.00 kblockd/1
   32 root      20   0     0    0    0 S    0  0.0   0:00.00 kblockd/2
   33 root      20   0     0    0    0 S    0  0.0   0:00.00 kblockd/3
   34 root      20   0     0    0    0 S    0  0.0   0:00.00 kacpid
   35 root      20   0     0    0    0 S    0  0.0   0:00.00 kacpi_notify
   36 root      20   0     0    0    0 S    0  0.0   0:00.00 kacpi_hotplug
   37 root      20   0     0    0    0 S    0  0.0   0:00.00 kseriod
   42 root      20   0     0    0    0 S    0  0.0   0:00.00 kondemand/0
   43 root      20   0     0    0    0 S    0  0.0   0:00.00 kondemand/1
   44 root      20   0     0    0    0 S    0  0.0   0:00.00 kondemand/2
   45 root      20   0     0    0    0 S    0  0.0   0:00.00 kondemand/3
   46 root      20   0     0    0    0 S    0  0.0   0:00.00 khungtaskd
   47 root      20   0     0    0    0 S    0  0.0   0:00.00 kswapd0
   48 root      25   5     0    0    0 S    0  0.0   0:00.00 ksmd
   49 root      20   0     0    0    0 S    0  0.0   0:00.00 aio/0
   50 root      20   0     0    0    0 S    0  0.0   0:00.00 aio/1
   51 root      20   0     0    0    0 S    0  0.0   0:00.00 aio/2
   52 root      20   0     0    0    0 S    0  0.0   0:00.00 aio/3
   53 root      20   0     0    0    0 S    0  0.0   0:00.00 crypto/0
   54 root      20   0     0    0    0 S    0  0.0   0:00.00 crypto/1
   55 root      20   0     0    0    0 S    0  0.0   0:00.00 crypto/2
   56 root      20   0     0    0    0 S    0  0.0   0:00.00 crypto/3
  281 root      20   0     0    0    0 S    0  0.0   0:00.00 ksuspend_usbd
  282 root      20   0     0    0    0 S    0  0.0   0:00.00 khubd

Ce qui est étrange c’est qu’aux alentours de 19h30/20h ça revient à la normale…

Si vous avez une solution à mon problème je suis preneur, merci de m’avoir lu :wink:

C’est pas du téléchargement, regarde bien le graphique ton serveur envoi du paquet à gogo depuis le port 80.

Regarde si tu n’a pas du script perl d’installé avec de jolie nom :083

fais un petit audit par la même si tu trouve des script douteux de tout tes mots de passe et assure toi d’avoir à jour tes paquets.

Bonjour,

s’il s’agit d’attaque sur ton serveur apache2, tu peux utiliser le module mod_security qui fonctionne un peu comme un firewall mais pour l’applicatif web.

Merci à vous deux pour vos réponses :

[quote=“Clochette”]C’est pas du téléchargement, regarde bien le graphique ton serveur envoi du paquet à gogo depuis le port 80.

Regarde si tu n’a pas du script perl d’installé avec de jolie nom :083

fais un petit audit par la même si tu trouve des script douteux de tout tes mots de passe et assure toi d’avoir à jour tes paquets.[/quote]

Je n’ai que des sites hébergés avec quelques scripts php, rien de plus. J’ai desactivé perl sous apache (a2dismod perl), j’ai redémarré mais ça envoie toujours autant :confused:

Qu’entends-tu par un audit?

Sinon oui, mes paquets sont à jour!

[quote=“grigric”]Bonjour,

s’il s’agit d’attaque sur ton serveur apache2, tu peux utiliser le module mod_security qui fonctionne un peu comme un firewall mais pour l’applicatif web.[/quote]

J’ai installé le libapache-mod-security puis ajouté cette configuration dans mon apache.conf

<IfModule mod_security.c>
    # Turn ModSecurity On
    SecFilterEngine On

    # Reject requests with status 403
    SecFilterDefaultAction "deny,log,status:403"

    # Some sane defaults
    SecFilterScanPOST On
    SecFilterCheckURLEncoding On
    SecFilterCheckUnicodeEncoding Off

    # Accept almost all byte values
    SecFilterForceByteRange 1 255

    # Server masking is optional
    # SecServerSignature "Microsoft-IIS/5.0"

    SecUploadDir /tmp
    SecUploadKeepFiles Off

    # Only record the interesting stuff
    SecAuditEngine RelevantOnly
    SecAuditLog /var/log/apache2/audit_log

    # You normally won't need debug logging
    SecFilterDebugLevel 0
    SecFilterDebugLog /var/log/apache2/modsec_debug_log

    # Only accept request encodings we know how to handle
    # we exclude GET requests from this because some (automated)
    # clients supply "text/html" as Content-Type
    SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
    SecFilterSelective HTTP_Content-Type \
    "!(^application/x-www-form-urlencoded$|^multipart/form-data;)"

    # Do not accept GET or HEAD requests with bodies
    SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
    SecFilterSelective HTTP_Content-Length "!^$"

    # Require Content-Length to be provided with
    # every POST request
    SecFilterSelective REQUEST_METHOD "^POST$" chain
    SecFilterSelective HTTP_Content-Length "^$"

    # Don't accept transfer encodings we know we don't handle
    SecFilterSelective HTTP_Transfer-Encoding "!^$"
</IfModule>

Malheureusement, après un redémarrage le problème reste le même!

Je continue mes recherches et vous tiens au courant si je trouve la solution, si vous avez une idée n’hésitez pas, merci :slightly_smiling:

tu a fait une capture avec wireshark pour voir ce que le serveur envoyait?

Quel est le protocole utilisais pour ces envoi massif ( envoi c’est vite dit car 80M c’est pas beaucoup pour du DDOS, peut-être du brute force si effectivement ce n’est pas un script à toi ) depuis le port 80 ?

Je parlais de script perl mais cela existe en python aussi :wink:

Oui, protocol 80, des images, rien de plus.

[quote=“Clochette”]Quel est le protocole utilisais pour ces envoi massif ( envoi c’est vite dit car 80M c’est pas beaucoup pour du DDOS, peut-être du brute force si effectivement ce n’est pas un script à toi ) depuis le port 80 ?

Je parlais de script perl mais cela existe en python aussi :wink:[/quote]

Protocol 80, maintenant ça monte à 160M.

Mais maintenant tout va bien, j’ai ré-installer apache, activé le minimum de module et augmenté mon MaxClients à 1024 (étrange car dans mon error.log je n’avais pas ce problème détecté).

Désolé de la réponse et solution tardive j’avais beaucoup de travail, merci encore :wink:

Re-bonjour,

Je reviens vers vous car finalement, mon problème persiste :119

La solution d’augmenter mon MaxClients n’a été que de courte durée, après l’avoir augmenté à 1024, j’ai très vite dû l’augmenter à 1500+ à cause du MaxClients atteint dans le error.log.

Seulement maintenant je ne peux l’augmenter plus sinon ma RAM ne suit pas et de plus la bande passante commence à devenir critique j’ai reçu un avertissement de mon hébergeur (online.net), comme quoi j’utilisais trop de bande passante.

Je pense que cela vient de mon hébergeur d’images qui doit utiliser beaucoup de bande passante.
J’ai donc fouillé un peu tout, mais je ne vois pas vraiment comment régler le problème…

Ma configuration d’apache à ce jour :

Timeout 30
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2

<IfModule prefork.c>
StartServers         10
MinSpareServers      10
MaxSpareServers      30
ServerLimit          768
MaxClients           768
MaxRequestsPerChild  10000
</IfModule>

Je suis redescendu à 768 pour ne plus trop utiliser de bande passante.

Je ne sais pas vraiment si c’est une attaque syn, apache qui sature ou tout simplement autre chose, j’ai ré-installé mon serveur et mis à jour tous mes sites mais le problème persiste :confused:

regarde les ip dans wireshark pour savoir si s’est toujours la même ou si elles changent.
(si il n’y a pas de donné sensible tu peut même nous donner une capture).
ce serveur héberge un site web public? si oui on peut avoir sont adresse pour avoir une idée du type de site.

Ca m’inspire pas trop confiance ton problème … tu as essayé de passer un anti-rootkit ? du genre rkhunter ou chkrootkit ?
Essaye de regarder ce qui se passe sur le réseau avec iptraf =/

J’ai résolu mon problème, vous pouvez voir mon message ici : forum.online.net/index.php?/topi … entry11268

Merci à tous pour votre aide :slightly_smiling:

Salut,

[quote]après m’être creusé les méninges avec l’aide d’un ami sur les fuites de BP on a remarqué que beaucoup de connexions venaient de sites chinois, voire beaucoup trop.

Avec ses connaissances, il a pu créer un script en perl pour filtrer les images étant accédées via des sites chinois et ainsi les supprimer[/quote]

Tu balance le script pour voir ?

[quote=“lol”]Salut,

Tu balance le script pour voir ?[/quote]

Je pense que l’auteur du script viendra apporter sa réponse une fois le script finalisé :wink:

[quote=“Gomah”][quote=“lol”]Salut,
Tu balance le script pour voir ?[/quote]
Je pense que l’auteur du script viendra apporter sa réponse une fois le script finalisé :wink:[/quote]

Merci, je pense que ça en intéressera plus d’un… :023