Récemment, j'ai beaucoup d'attaques de DOS à petite échelle. Je me demande quelles règles IPTABLES devrais-je utiliser pour contrer les attaques de DOS les plus courantes et généralement sécuriser mon serveur Web.
Le vernis de sport serveur Web -> NGinx/PHP5 -> Memcached -> MySQL
J'ai essayé des reçus génériques, mais ils bloquent également l'accès à mon serveur de base de données qui repose sur un serveur distant, donc je viens de rougir les règles suggérées, et je me sens maintenant un peu à la main et volnur quand je ne vois que des iptables.
Alors, appréciez vos règles de bloquer les vecteurs d'attaque les plus courants.
Voici quelques règles que j'utilise:
# Reject spoofed packets
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Stop smurf attacks
iptables -A INPUT -p icmp -m icmp --icmp-type address-mask-request -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type timestamp-request -j DROP
iptables -A INPUT -p icmp -m icmp -j DROP
# Drop all invalid packets
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
# Drop excessive RST packets to avoid smurf attacks
iptables -A INPUT -p tcp -m tcp --tcp-flags RST RST -m limit --limit 2/second --limit-burst 2 -j ACCEPT
# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP
# Once the day has passed, remove them from the portscan list
iptables -A INPUT -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove
# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
Alors, appréciez vos règles anti-bulle.
Vous devez contacter votre fournisseur de services Internet et avoir le trafic déposé sur la colonne vertébrale avant de vous frapper. Si vous êtes au point où votre pare-feu doit déposer le trafic, vous consommez déjà votre bande passante disponible et utilisez les ressources de votre système.
C'est la seule façon "Bullefropa".
J'utilise iptables afin de limiter l'accès à FTP et à SSH, je permet simplement à IPS de mon ordinateur de se connecter au serveur. Je ne peux pas dire que j'ai eu des problèmes d'attaque DOS.
/sbin/iptables -A INPUT -p tcp --dport 22 -s 86.106.0.0/16 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -s 89.122.0.0/16 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 21 -s 86.106.0.0/16 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -s 89.122.0.0/16 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j DROP
Ces règles permettent l'accès aux ports 22 et 21 sur deux IP différents. Vous pouvez probablement ajouter le port MySQL de votre serveur DB et ce type bloque d'autres clients de se connecter directement à votre serveur.
EDIT: Lorsque Server est surchargé, je trouve qu'il est utile de voir les statistiques d'Apache "Status Mod-Status", la sortie ressemble à ceci: http://www.apache.org/server-status Vous pouvez voir tous Visiteurs de site, araignées, demandes d'URL, etc. La mise en œuvre prend moins de 1 minute: http://httpd.apache.org/docs/2.2/mod/mod_status.html