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 