Attaques DoS, configuration iptables

Bonjour tout le monde,
Je rencontre un problème depuis quelques jours, j’ai de temps en temps des rapports d’attaques dos sur mon serveur web.
Ces rapports proviennent de mon routeur internet.
Voici l’architecture de l’installation :

internet
|
routeur netgear (192.168.10.253)
|
passerelle (192.168.10.254)
|
serveur esxi (192.168.10.241)
|
machine virtuelle sous Debian Squeeze (192.168.10.247)

voici la configuration de la vm :
-debian Squeeze netinst à jour
-sécurisation standard (suppression des tty inutiles, suppression des paquets inutile portmap, nfs-common, protection des flood syn au niveau noyau…)
-protection ssh (permitrootlogin : no, changement du port etc…)
-fail2ban
-script parefeu iptables
-apache avec modsecurity et mod-evasive, mysql sécurisé, php avec sécurisation de base au niveau du php.ini (pour information l’environnement n’est pas chrooté)
-portsentry

En fait je voudrais que seuls les réseaux locaux en 192.168.10.0, 192.168.20.0 et 192.168.30.0 puissent accéder aux serveurs apache/mysql/php installés sur le serveur.
Le serveur doit avoir un accès à internet afin de pouvoir le maintenir à jour.

voici le script fierwall (emprunter au forum Malekal)

#!/bin/sh

### BEGIN INIT INFO
# Provides:             iptables
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-description:    iptables
# Description:          Firewall
### END INIT INFO


# Definition des interfaces
local=eth0 # cote local
localip=192.168.10.247

# on charge les bon modules
modprobe ip_nat_ftp
modprobe iptable_nat
modprobe iptable_filter
modprobe ipt_state
#modprobe ipt_MASQUERADE

# modules pour conntrack
#modprobe ip_conntrack
#modprobe ip_conntrack_ftp
#modprobe ip_conntrack_irc
#modprobe ipt_conntrack

# on remet la police par debut A ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# On remet les polices par debut pour la table NAT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# On vide (flush) toutes les regles existantes
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

# initialisation log
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-level info --log-prefix '[IPTABLES DROP] : '
iptables -A LOG_DROP -j DROP

iptables -N LOG_ACCEPT
iptables -A LOG_ACCEPT -j LOG --log-level info --log-prefix '[IPTABLES ACCEPT] : '
iptables -A LOG_ACCEPT -j ACCEPT
iptables -N LOG_FORWARD
iptables -A LOG_FORWARD -j LOG --log-level info --log-prefix '[IPTABLES FORWARD] : '
iptables -A LOG_FORWARD -j DROP

# Politique de refus
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Je veux pas de spoofing
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
 for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
     do
       echo 1 > $filtre
     done
fi

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
   echo 0 > $f
done

# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
   echo 0 > $f
done

# Don't send Redirect Messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
   echo 0 > $f
done

# Drop Spoofed Packets coming in on an interface, which if replied to,
# would result in the reply going out a different interface.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
   echo 1 > $f
done

# Log packets with impossible addresses.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
   echo 1 > $f
done

# pas de icmp
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# On accepte tout en local
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT

# ------- Stealth Scans and TCP State Flags ------------

# All of the bits are cleared
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP

# SYN and FIN are both set
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN and RST are both set
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN and RST are both set
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP

# SSH en serveur...
iptables -A INPUT -i $local -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 2220 -s 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -o $local -m state --state ESTABLISHED,RELATED -p tcp --sport 2220 -d 192.168.0.0/16 -j ACCEPT

# Regle pour DNS
iptables -A INPUT -i $local -m state --state ESTABLISHED,RELATED --protocol udp --source-port 53 -j ACCEPT
iptables -A OUTPUT -o $local -m state --state NEW,ESTABLISHED,RELATED --protocol udp --destination-port 53 -j ACCEPT

iptables -A INPUT -i $local -m state --state ESTABLISHED,RELATED --protocol tcp --source-port 53 -j ACCEPT
iptables -A OUTPUT -o $local -m state --state NEW,ESTABLISHED,RELATED --protocol tcp --destination-port 53 -j ACCEPT

# protection contre les attaques...
iptables -A INPUT -i $local -p tcp --dport 80 -m state --state NEW -m limit --limit 25/s --limit-burst 25 -j ACCEPT
iptables -A INPUT -i $local -p tcp --dport 80 -m state --state NEW -j DROP

# Regle HTTP en serveur
iptables -A INPUT -i $local -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 80 -s 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -o $local -m state --state ESTABLISHED,RELATED -p tcp --sport 80 -d 192.168.0.0/16 -j ACCEPT

# ntp
#iptables -A INPUT -i $local -m state --state ESTABLISHED,RELATED -p tcp --sport 123 -j ACCEPT
#iptables -A OUTPUT -o $local -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 123 -j ACCEPT

#iptables -A INPUT -i $local -m state --state ESTABLISHED,RELATED -p udp --sport 123 -j ACCEPT
#iptables -A OUTPUT -o $local -m state --state NEW,ESTABLISHED,RELATED -p udp --dport 123 -j ACCEPT

# On accepte tout en envoi :)
iptables -A INPUT -i $local -m state --state ESTABLISHED,RELATED -p tcp --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -o $local -m state --state NEW,ESTABLISHED,RELATED -p tcp --sport 1024:65535 -j ACCEPT

iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -m limit --limit 1/second -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -m limit --limit 1/second -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT

iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -m limit --limit 1/second -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 3 -m limit --limit 1/second -j ACCEPT

# Logs des paquets refuses
echo "4 4 1 7"> /proc/sys/kernel/printk # Pour ne pas que les logs arrivent sur la console
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP
iptables -A INPUT -p udp -j LOG_DROP
iptables -A OUTPUT -p udp -j LOG_DROP
iptables -A FORWARD -j LOG_FORWARD

Voici un exemple de rapport d’attaque :

Je vos remercie d’avance pour votre aide :wink:

Salut,

J’ai déjà eu des faux positifs avec du matos netgear, du genre un scan de port détecté en DoS.
Donc deux questions :

  • quels sont tes services ouverts sur internet,
  • as-tu un autre mode de détection.

Il me semble qu’il est possible d’autoriser un réseau avec iptables.

Le truc c’est qu’il y a d’autres serveurs sur ce réseau et je n’ai pas de rapport d’attaque dos sur leur adresse IP…
Je pense que je dois avoir un soucis avec mon iptables… Au final je ne veux pas de service ouvert sur le net avec ce serveur.
Pour info aujourd’hui j’ai eu quasiment 10 à 15 fois moins de rapport d’attaque!

Dans ta description de l’installation, tu ne parle que du réseau 192.168.10.0§.
Ou sont les autres réseaux dont tu parles ( 192.168.20.0 et 192.168.30.0)?
L’orverture depuis internet se gére au niveau du routeur. C’est lui qui va ouvrir les accés, et rediriger vers le bon serveur en fonction du service.
.

Salut,

Une remarque …

la configuration de la couche réseau IP se fait grâce à la modification du fichier /etc/sysctl.conf.

Fichier qui d’ailleurs, est prévu à cette effet … :033

La prise en compte s’effectuera comme ceci …

# sysctl -p /etc/sysctl.conf

Exemple.

~ # sysctl -p /etc/sysctl.conf kernel.printk = 3 4 1 3 kernel.domainname = domaine.tld net.ipv4.ip_forward = 0 net.ipv4.conf.all.forwarding = 0 net.ipv6.conf.all.forwarding = 0 net.ipv4.conf.all.proxy_arp = 0 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 net.ipv4.conf.lo.log_martians = 1 net.ipv4.conf.eth0.log_martians = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1 net.ipv4.conf.eth0.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv6.conf.all.accept_redirects = 1 net.ipv4.conf.all.secure_redirects = 1 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_ecn = 1 net.ipv4.tcp_fin_timeout = 15 net.ipv4.tcp_max_syn_backlog = 1280 net.ipv4.tcp_sack = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_window_scaling = 0 ~ #

:whistle: