Parefeu pc perso

Bonjour,

J’ai étudié (en freelance) récemment iptables/ip6tables et me suis mis à écrire un script pour me faire un parefeu pour PC de maison derrière une box. Pas de réseau privé donc, je me sers des fonctionnalités de la box pour ça, le PC est relié via câble et si besoin d’autres appareils via wifi. Mes besoins sont de pouvoir surfer (et je ne me borne à essayer de faire fonctionner que ça pour l’instant :p). Le script ne démarre pas encore tout seul, ce sera pour plus tard quand le schmilblick fonctionnera, là on est en version pré-alpha lamentablement expérimentale et tout le tralala :smiley:.

J’ai suivi pas mal de doc sur le net, ici aussi (exemple type de parefeu de Ricardo avec plein d’autres participants) et j’ai écrit un truc que je qualifierais de parano et qui selon mes maigres et fraîches connaissances devrait fonctionner pour surfer, eh ben comme dirait-on: “çaaaa maaaarche paaaaaaaass…” :slightly_smiling: Pas de surf, on dirait que rien ne passe. Iceweasel cherche désespérément dans son cache pour charger une page qui n’y figure pas et puis c’est tout, message d’erreur type “pas de connexion” ou encore “le serveur met trop de temps à répondre”.

Je poste donc à la suite mon script, si vous pouviez m’aider à comprendre ce qui cloche ce serait super sympa, merci beaucoup d’avance :wink:

[code]#!/bin/sh

BEGIN INIT INFO

Provides: MFFW

Required-Start: $remote_fs

Should-Start:

Required-Stop: $remote_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: Configure le parefeu.

Description: Un script de pare-feu sécuritaire iptables/netfilter pour PC personnel.

END INIT INFO

Fichier: mffw

Auteur: DarkGagan (voir profil sur debian-fr.org pour contact)

License: GNU GPL (version 3 ou supérieure)

Spécifications (sans ordre particulier):

- 3 modes d’utilisation: start, stop, status

- pas de log (on n’est pas sur un serveur)

- pas de NAT (on n’est pas sur un routeur)

- pas de forward (idem)

- pas d’IPv6 (possibilités de filtrage plus limitées que sur IPv4)

- protection contre certaines attaques (SYNflood, Ping of Death, DoS, Smurf et d’autres…)

- sécurisation générale (configuration du noyau en plus des règles iptables)

Note: travail continuellement en cours, tout commentaire ou suggestion sont les bienvenus!

Ce script s’appuie sur bon nombre de documentation trouvées ça et là sur le net, dont en voici une liste non-exhaustive et sans ordre particulier:

- fw_laptop de Uwe Hermann (http://www.hermann-uwe.de/files/fw_laptop)

- la manpage d’iptables (man iptables)

- la documentation sur netfilter (http://netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-7.html)

- Iptables Tutorial 1.2.2 (http://www.inetdoc.net/guides/iptables-tutorial/)

- Formation Debian Chapitre 38. Pare-feu et partage de connexion Internet (http://formation-debian.via.ecp.fr/firewall.html)

- plein de documents revus et corrigés par Pascal Hambourg en général :wink:

- un projet de pare-feu personnel sur debian-fr.org (http://paste.isalo.org/62)

- le manuel traitant de la sécurité sous Debian (https://www.debian.org/doc/manuals/securing-debian-howto/)

- des exemples de script (http://www.plouf.fr.eu.org/bazar/netfilter/firewall/)

- (…)

- tous ceux dont j’ai scruté des bouts de code plus ou moins valables pour ce que je veux créer (ou non…) et dont j’ai oublié les noms, désolé… :frowning:

rajouter " -x" à #!/bin/sh pour aider au débuggage du script (test ligne par ligne)

DÉBUT AIDE-MÉMOIRE------------------------------------------

iptables: écrire les noms des tables en minuscule uniquement

FIN AIDE-MÉMOIRE--------------------------------------------

mffwversion=date --reference="/etc/init.d/mffw" +%y.%m.%d-%H%M
echo -n "MFFW version"
printf “%-1s$mffwversion par DarkGagan.\n”
#début du traitement des arguments donnés en option du lancement en ligne de commande
echo ""
case “$1” in
#début argument ‘–start’
–start)
echo "±----------------------------------------------------------------------------+"
echo "| Démarrage du firewall |"
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 01: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 02: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP
#/sbin/iptables -t filter -P POSTROUTING DROP <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD DROP
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD DROP
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING DROP <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT DROP
/sbin/ip6tables -t filter -P FORWARD DROP
/sbin/ip6tables -t filter -P OUTPUT DROP
#/sbin/ip6tables -t filter -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING DROP
/sbin/ip6tables -t mangle -P INPUT DROP
/sbin/ip6tables -t mangle -P FORWARD DROP
/sbin/ip6tables -t mangle -P OUTPUT DROP
/sbin/ip6tables -t mangle -P POSTROUTING DROP
/sbin/ip6tables -t raw -P PREROUTING DROP
#/sbin/ip6tables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT DROP
#/sbin/ip6tables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT DROP
/sbin/ip6tables -t security -P FORWARD DROP
/sbin/ip6tables -t security -P OUTPUT DROP
#/sbin/ip6tables -t security -P POSTROUTING DROP <-- INEXISTANT
printf “%-2s[OK]\n”

#ÉTAPE 03: on gère les interfaces réseau
echo -n “Application des règles de gestion des interfaces réseau…”
##on accepte loopback
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT
##on ignore toute autre interface réseau que le réseau câble
/sbin/iptables -t filter -A INPUT ! -i eth0 -j DROP
/sbin/iptables -t filter -A OUTPUT ! -o eth0 -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 04: on bloque les connexions non désirées
echo -n “Application des règles amont de connexion…”
##configuration du noyau
###blocage de l’IP spoofing
for reversepathfilteringenable in /proc/sys/net/ipv4/conf//rp_filter;do echo 1 > $reversepathfilteringenable;done
for icmpacceptredirectdisable in /proc/sys/net/ipv4/conf/
/accept_redirects;do echo 0 > $icmpacceptredirectdisable;done

for icmpsecureredirectdisable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 0 > $icmpsecureredirectdisable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectdisable in /proc/sys/net/ipv4/conf//send_redirects;do echo 0 > $icmpsendredirectdisable;done
###blocage du source routing
for sourceroutingdisable in /proc/sys/net/ipv4/conf/
/accept_source_route;do echo 0 > $sourceroutingdisable;done
###blocage des connexions NEW non-SYN (SYNflood)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
###blocage d’IPv6
for IPv6disable in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 1 > $IPv6disable;done
###blocage du ping (Ping of Death,…)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
###blocage du forward
echo 0 > /proc/sys/net/ipv4/ip_forward
##configuration d’iptables

###blocage du ping

/sbin/iptables -t filter -A INPUT -p icmp --icmp-type any -j DROP

/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type any -j DROP

###limitation du nombre de connexion par IP
/sbin/iptables -t filter -A INPUT -m connlimit --connlimit-above 16 --connlimit-mask 32 --connlimit-saddr -j DROP
/sbin/iptables -t filter -A OUTPUT -m connlimit --connlimit-above 8 --connlimit-mask 16 --connlimit-daddr -j DROP
###blocage des connexions NEW non-SYN (SYNflood)
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
###blocage des connexions non valides
/sbin/iptables -t filter -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state INVALID -j DROP
###blocage des connexions non traçables
/sbin/iptables -t filter -A INPUT -m state --state UNTRACKED -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state UNTRACKED -j DROP
###blocage des paquets fragmentés
/sbin/iptables -t filter -A INPUT -f -j DROP
/sbin/iptables -t filter -A OUTPUT -f -j DROP

-m addrtype --src-type UNICAST -m pkttype --pkt-type UNICAST

printf “%-2s[OK]\n”

#ÉTAPE 05: on accepte certaines connexions
echo -n “Application des règles aval de connexion…”
##DHCP
/sbin/iptables -t filter -A INPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT
##DNS
/sbin/iptables -t filter -A INPUT -p tcp --sport 53 -m state --state NEW -j ACCEPT
/sbin/iptables -t filter -A INPUT -p udp --sport 53 -m state --state NEW -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
##HTTP
/sbin/iptables -t filter -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTPS
/sbin/iptables -t filter -A INPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
printf “%-2s[OK]\n”

#ÉTAPE 06: on limite le scan de ports
echo -n “Application des règles contre les scans de ports…”
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
##scan NMAP-XMAS
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
##scan XMAS-PSH
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
##scan XMAS
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP
##scan NULL_SCAN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
##scan SYN/FIN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
##scan FIN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 07: on bloque tout le reste

echo -n “Application des règles de blocage génériques…”

/sbin/iptables -t filter -A INPUT -j DROP

/sbin/iptables -t filter -A OUTPUT -j DROP

printf “%-2s[OK]\n”

echo "±----------------------------------------------------------------------------+"
echo "| Firewall ACTIVÉ |"
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–start’
;;
#début argument ‘–stop’
–stop)
echo "±----------------------------------------------------------------------------+"
echo "| Arrêt du firewall |"
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 1: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 2: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
#/sbin/iptables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- iptables: Bad built-in chain name
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD ACCEPT
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
#/sbin/ip6tables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
#/sbin/ip6tables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
#/sbin/ip6tables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT ACCEPT
/sbin/ip6tables -t security -P FORWARD ACCEPT
/sbin/ip6tables -t security -P OUTPUT ACCEPT
#/sbin/ip6tables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
printf “%-2s[OK]\n”

#on désactive les options de sécurité du noyau

echo -n “Désactivation des options de sécurité du noyau…”

for IPv6restore in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 0 > $IPv6restore;done

echo 1 > /proc/sys/net/ipv4/ip_forward

for reversepathfilteringdisable in /proc/sys/net/ipv4/conf/*/rp_filter;do echo 0 > $reversepathfilteringdisable;done

for icmpacceptredirectenable in /proc/sys/net/ipv4/conf/*/accept_redirects;do echo 1 > $icmpacceptredirectenable;done

for icmpsecureredirectenable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 1 > $icmpsecureredirectenable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectenable in /proc/sys/net/ipv4/conf/*/send_redirects;do echo 1 > $icmpsendredirectenable;done

for sourceroutingenable in /proc/sys/net/ipv4/conf/*/accept_source_route;do echo 1 > $sourceroutingenable;done

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

printf “%-2s[OK]\n”

echo "±----------------------------------------------------------------------------+"
echo "| Firewall DÉSACTIVÉ |"
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–stop’
;;
#début argument ‘–status’
–status)
#liste numérique (-n) détaillée (-v) des règles en fonction des chaînes (-L)
echo ""
echo ""
echo "±----------------------------------------------------------------------------+"
echo "| Rapport d’état d’iptables et ip6tables |"
echo "±----------------------------------------------------------------------------+"
echo ""
echo ""
echo "I. iptables:"
echo ""
echo "I.1. table ‘filter’:"
echo “”
/sbin/iptables -t filter -n -L -v
echo ""
echo ""
echo "I.2. table ‘nat’:"
echo “”
/sbin/iptables -t nat -n -L -v
echo ""
echo ""
echo "I.3. table ‘mangle’:"
echo “”
/sbin/iptables -t mangle -n -L -v
echo ""
echo ""
echo "I.4. table ‘raw’:"
echo “”
/sbin/iptables -t raw -n -L -v
echo ""
echo ""
echo "I.5. table ‘security’:"
echo “”
/sbin/iptables -t security -n -L -v
echo ""
echo ""
echo ""
echo "II. ip6tables:"
echo ""
echo "II.1. table ‘filter’:"
echo “”
/sbin/ip6tables -t filter -n -L -v
echo ""
echo ""
echo "II.2. table ‘nat’:"
echo ""
echo “Table nat non implémentée dans ip6tables.”
#/sbin/ip6tables -t nat -n -L -v <–NON IMPLÉMENTÉ DANS IP6TABLES
echo ""
echo ""
echo "II.3. table ‘mangle’:"
echo “”
/sbin/ip6tables -t mangle -n -L -v
echo ""
echo ""
echo "II.4. table ‘raw’:"
echo “”
/sbin/ip6tables -t raw -n -L -v
echo ""
echo ""
echo "II.5. table ‘security’:"
echo “”
/sbin/ip6tables -t security -n -L -v
echo ""
echo ""
echo ""
echo "Fin du rapport."
echo “”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–status’
;;
#début tout autre argument
*)
#message d’aide
echo “Utilisation: mffw --{start|stop|status}”
#on sort avec l’erreur 1
exit 1
#fin tout autre argument
;;
#fin du traitement des arguments donnés en option du lancement en ligne de commande
esac
[/code]

Essaie d’abord avec une ligne que tu testes pour voir si ça répond bien à ton besoin.
Si ça fonctionne, tu rajoutes une ligne, que tu re-testes. Et ainsi de suite.

Tu finiras bien par trouver d’où vient le problème et ça te permettra de mieux comprendre comment fonctionne le parefeu (perso je ne me suis jamais penché dessus pour l’instant).

Bonjour Cluxter,

Ben j’ai déjà essayé, j’ai même échangé les parties d’ordre, je suppose que ça viendrait des modifications sur le noyau mais je n’en sais rien en fait, ça ne passe que si j’autorise tout (iptables -A IN/OUTPUT -j ACCEPT) à la fin. Mes règles peuvent donc ne pas matcher et je tombe sur la politique DROP par défaut, mais la je coïnce…

Merci de ton aide en tous cas :wink:

J’ai plein de petites remarques mais d’abord j’aborde ce qui ne va vraiment pas.
Lignes 190-192 :

###blocage des connexions NEW non-SYN (SYNflood) /sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP /sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
Ces règles font le contraire de ce que dit le commentaire : elles bloquent les paquets NEW SYN qui sont nécessaires à l’établissement d’une connexion TCP. Pour bloquer les paquets NEW non-SYN, il faut inverser l’option --tcp-flags avec !.
(Accessoirement, NEW non-SYN et SYN flood sont deux choses très différentes : par définition un SYN flood c’est une avalanche de paquets SYN, alors que NEW non-SYN ce n’est pas des paquets SYN.)

Lignes 210-214 :

##DNS /sbin/iptables -t filter -A INPUT -p tcp --sport 53 -m state --state NEW -j ACCEPT /sbin/iptables -t filter -A INPUT -p udp --sport 53 -m state --state NEW -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
Une réponse DNS en UDP a l’état ESTABLISHED, pas NEW. Au lieu d’autoriser les réponses DNS, la première règle autorise le scan de n’importe quel port UDP de ta machine du moment que l’attaquant utilise le port source 53. Une requête DNS en UDP pourrait aussi avoir l’état ESTABLISHED au lieu de NEW si elle réutilise le même port source qu’une précédente requête récente vers le même serveur.
Quant à la connexion DNS en TCP, comme toute connexion TCP il faut autoriser les états NEW et ESTABLISHED dans le sens aller (en sortie ici) et l’état ESTABLISHED dans le sens retour (en entrée ici).

Une fois ces deux points réglés je ferai un autre message avec toutes les autres choses qui ne me plaisent pas.

Avant j’étais nul en programmation iptables, mais grâce à PascalHambourg, ça ce sera bientôt avant :smiley:

Voici mes corrections:
AVANT:

###blocage des connexions NEW non-SYN (SYNflood) /sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP /sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

##DNS /sbin/iptables -t filter -A INPUT -p tcp --sport 53 -m state --state NEW -j ACCEPT /sbin/iptables -t filter -A INPUT -p udp --sport 53 -m state --state NEW -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

APRÈS:

###blocage des connexions NEW non-SYN (SYNflood) /sbin/iptables -t filter -A INPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP /sbin/iptables -t filter -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

##DNS /sbin/iptables -t filter -A INPUT -p tcp --dport 53 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A INPUT -p udp --dport 53 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

J’ai aussi ré-interverti les étapes 5 et 6: anti-scan de ports avant connexions acceptées.

Ça bloque toujours et malheureusement je n’ai pas eu d’éclair de génie…

Je n’ai pas dit de remplacer --sport par --dport. Les paquets de réponse du serveur DNS ont le port 53 comme source, pas comme destination.

Pour déboguer, faire des tests élémentaires plutôt qu’avec un navigateur :

  • résolution DNS avec host/dig/nslookup
  • connexion HTTP(S) par adresse IP avec telnet/nc

Pour le moment laisse les anti-scan à la fin où ils ne servent à rien mais ne gênent pas.

J’ai une question toute bête: faut-il redémarrer le PC si on modifie les règles iptables? Ou à défaut seulement autre chose (un démon réseau par exemple)?

Je demande ça car j’ai refait des tests en commentant au final quasiment tout dans mon script, exception faite des règles ACCEPT et il n’y a vraiment que quand je mets iptables -A INPUT -j ACCEPT que j’arrive à surfer.

Autre piste: pour surfer, a-t-on besoin d’autres ports que le 80 (et le 443)?

J’ai testé ma config sur https://www.grc.com/x/ne.dll?bh0bkyd2 et même quand je désactive mon script il me détecte les ports 53,80,443,161,992 stealthed, et le reste closed et open (50/50 % environ) sur les 1056 premiers ports… Le 161 et le 992 je ne sais pas à quoi ils servent, je ne les ai jamais évoqués. Serai-ce lié aux 2 minutes par défaut d’attente de fermeture de connexion (FIN_WAIT ou TIME_WAIT)?

Non. Il faut juste recharger les règles en exécutant le script, et vérifier qu’elles sont bien en place avec iptables-save.

[quote=“DarkGagan”]j’ai refait des tests en commentant au final quasiment tout dans mon script, exception faite des règles ACCEPT et il n’y a vraiment que quand je mets

que j’arrive à surfer.[/quote]
Donc des paquets indispensables ne sont ni bloqués ni acceptés par les règles et tombent dans la politique par défaut DROP.
Tu peux ajouter une règle LOG en fin de chaîne pour voir quels sont les paquets concernés.

C’est bidon, juste bon à faire frémir les ignorants. Si la machine est derrière une box, au mieux ça affiche les résultats de la box et pas de la machine. Si tu lances le scan plusieurs fois, il y a de bonnes chances que les résultats changent.
Dans tous les cas mieux vaut un bon vieux nmap lancé depuis une autre machine sur le LAN.

Bonsoir tout le monde,

J’ai revu et corrigé la partie DNS qui cette fois devrait être bonne et j’ai ajouté une règle de log en fin de parcours, avant le DROP par défaut, ça donne ça:

[code]#!/bin/sh

BEGIN INIT INFO

Provides: MFFW

Required-Start: $remote_fs

Should-Start:

Required-Stop: $remote_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: Configure le parefeu.

Description: Un script de pare-feu sécuritaire iptables/netfilter pour PC personnel.

END INIT INFO

Fichier: mffw

Auteur: DarkGagan (voir profil sur debian-fr.org pour contact)

License: GNU GPL (version 3 ou supérieure)

Spécifications (sans ordre particulier):

- 3 modes d’utilisation: start, stop, status

- pas de log (on n’est pas sur un serveur)

- pas de NAT (on n’est pas sur un routeur)

- pas de forward (idem)

- pas d’IPv6 (possibilités de filtrage plus limitées que sur IPv4)

- protection contre certaines attaques (SYNflood, Ping of Death, DoS, Smurf et d’autres…)

- sécurisation générale (configuration du noyau en plus des règles iptables)

Note: travail continuellement en cours, tout commentaire ou suggestion sont les bienvenus!

Ce script s’appuie sur bon nombre de documentation trouvées ça et là sur le net, dont en voici une liste non-exhaustive et sans ordre particulier:

- fw_laptop de Uwe Hermann (http://www.hermann-uwe.de/files/fw_laptop)

- la manpage d’iptables (man iptables)

- la documentation sur netfilter (http://netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-7.html)

- Iptables Tutorial 1.2.2 (http://www.inetdoc.net/guides/iptables-tutorial/)

- Formation Debian Chapitre 38. Pare-feu et partage de connexion Internet (http://formation-debian.via.ecp.fr/firewall.html)

- plein de documents revus et corrigés par Pascal Hambourg en général :wink:

- un projet de pare-feu personnel sur debian-fr.org (http://paste.isalo.org/62)

- le manuel traitant de la sécurité sous Debian (https://www.debian.org/doc/manuals/securing-debian-howto/)

- des exemples de script (http://www.plouf.fr.eu.org/bazar/netfilter/firewall/)

- (…)

- tous ceux dont j’ai scruté des bouts de code plus ou moins valables pour ce que je veux créer (ou non…) et dont j’ai oublié les noms, désolé… :frowning:

rajouter " -x" à #!/bin/sh pour aider au débuggage du script (test ligne par ligne)

DÉBUT AIDE-MÉMOIRE------------------------------------------

iptables: écrire les noms des tables en minuscule uniquement

FIN AIDE-MÉMOIRE--------------------------------------------

mffwversion=date --reference="/etc/init.d/mffw" +%y.%m.%d-%H%M
echo -n "MFFW version"
printf “%-1s$mffwversion par DarkGagan.\n”
#début du traitement des arguments donnés en option du lancement en ligne de commande
echo ""
case “$1” in
#début argument ‘–start’
–start)
echo "±----------------------------------------------------------------------------+"
echo "| Démarrage du firewall |"
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 01: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 02: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP
#/sbin/iptables -t filter -P POSTROUTING DROP <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD DROP
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD DROP
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING DROP <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT DROP
/sbin/ip6tables -t filter -P FORWARD DROP
/sbin/ip6tables -t filter -P OUTPUT DROP
#/sbin/ip6tables -t filter -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING DROP
/sbin/ip6tables -t mangle -P INPUT DROP
/sbin/ip6tables -t mangle -P FORWARD DROP
/sbin/ip6tables -t mangle -P OUTPUT DROP
/sbin/ip6tables -t mangle -P POSTROUTING DROP
/sbin/ip6tables -t raw -P PREROUTING DROP
#/sbin/ip6tables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT DROP
#/sbin/ip6tables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT DROP
/sbin/ip6tables -t security -P FORWARD DROP
/sbin/ip6tables -t security -P OUTPUT DROP
#/sbin/ip6tables -t security -P POSTROUTING DROP <-- INEXISTANT
printf “%-2s[OK]\n”

#ÉTAPE 03: on gère les interfaces réseau
echo -n “Application des règles de gestion des interfaces réseau…”
##on accepte loopback
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT
##on ignore toute autre interface réseau que le réseau câble
/sbin/iptables -t filter -A INPUT ! -i eth0 -j DROP
/sbin/iptables -t filter -A OUTPUT ! -o eth0 -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 04: on bloque les connexions non désirées
echo -n “Application des règles amont de connexion…”
##configuration du noyau
###blocage de l’IP spoofing
for reversepathfilteringenable in /proc/sys/net/ipv4/conf//rp_filter;do echo 1 > $reversepathfilteringenable;done
for icmpacceptredirectdisable in /proc/sys/net/ipv4/conf/
/accept_redirects;do echo 0 > $icmpacceptredirectdisable;done
for icmpsecureredirectdisable in /proc/sys/net/ipv4/conf//secure_redirects;do echo 0 > $icmpsecureredirectdisable;done #les activer aide à contrer les attaques ManInTheMiddle
for icmpsendredirectdisable in /proc/sys/net/ipv4/conf/
/send_redirects;do echo 0 > $icmpsendredirectdisable;done
###blocage du source routing
for sourceroutingdisable in /proc/sys/net/ipv4/conf//accept_source_route;do echo 0 > $sourceroutingdisable;done
###blocage des connexions NEW non-SYN (SYNflood)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
###blocage d’IPv6
for IPv6disable in /proc/sys/net/ipv6/conf/
/disable_ipv6;do echo 1 > $IPv6disable;done
###blocage du ping (Ping of Death,…)
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
###blocage du forward
echo 0 > /proc/sys/net/ipv4/ip_forward
##configuration d’iptables
###blocage du ping
/sbin/iptables -t filter -A INPUT -p icmp --icmp-type any -j DROP
/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type any -j DROP
###limitation du nombre de connexion par IP
/sbin/iptables -t filter -A INPUT -m connlimit --connlimit-above 32 --connlimit-mask 32 --connlimit-saddr -j DROP
/sbin/iptables -t filter -A OUTPUT -m connlimit --connlimit-above 16 --connlimit-mask 16 --connlimit-daddr -j DROP
###blocage des connexions NEW non-SYN (SYNflood)
/sbin/iptables -t filter -A INPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
###blocage des connexions non valides
/sbin/iptables -t filter -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state INVALID -j DROP
###blocage des connexions non traçables
/sbin/iptables -t filter -A INPUT -m state --state UNTRACKED -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state UNTRACKED -j DROP
###blocage des paquets fragmentés
/sbin/iptables -t filter -A INPUT -f -j DROP
/sbin/iptables -t filter -A OUTPUT -f -j DROP

-m addrtype --src-type UNICAST -m pkttype --pkt-type UNICAST

printf “%-2s[OK]\n”

#ÉTAPE 05: on limite le scan de ports
echo -n “Application des règles contre les scans de ports…”
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
##scan NMAP-XMAS
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
##scan XMAS-PSH
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
##scan XMAS
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP
##scan NULL_SCAN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
##scan SYN/FIN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
##scan FIN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 06: on accepte certaines connexions
echo -n “Application des règles aval de connexion…”
##DHCP_67,68

/sbin/iptables -t filter -A INPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT

/sbin/iptables -t filter -A OUTPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT

/sbin/iptables -t filter -A INPUT -p udp --dport 67:68 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --dport 67:68 -j ACCEPT
##DNS_53
/sbin/iptables -t filter -A INPUT -p tcp --sport 53 --dport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A INPUT -p udp --sport 53 --dport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --sport 53 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --sport 53 --dport 53 -m state --state ESTABLISHED -j ACCEPT
##HTTP_80
/sbin/iptables -t filter -A INPUT -p tcp --sport 80 --dport 80 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --sport 80 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTPS_443
/sbin/iptables -t filter -A INPUT -p tcp --sport 443 --dport 443 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --sport 443 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
printf “%-2s[OK]\n”

#ÉTAPE 07: on bloque tout le reste

echo -n “Application des règles de blocage génériques…”

/sbin/iptables -t filter -A INPUT -j DROP

/sbin/iptables -t filter -A OUTPUT -j DROP

printf “%-2s[OK]\n”

#ÉTAPE 08: on loggue quand même car ça ne marche pas (à virer ensuite pour être tranquille :p)
echo -n “Application des règles de log…”
/sbin/iptables -t filter -A INPUT -j LOG --log-prefix "iptables INPUT "
/sbin/iptables -t filter -A OUTPUT -j LOG --log-prefix "iptables OUTPUT "
printf “%-2s[OK]\n”

#ÉTAPE 09: on sauvegarde
echo -n “Sauvegarde de l’ensemble de règles…”
/sbin/iptables-save>/etc/init.d/mffw.save
printf “%-2s[OK]\n”

echo "±----------------------------------------------------------------------------+"
echo "| Firewall ACTIVÉ |"
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–start’
;;
#début argument ‘–stop’
–stop)
echo "±----------------------------------------------------------------------------+"
echo "| Arrêt du firewall |"
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 1: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 2: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
#/sbin/iptables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- iptables: Bad built-in chain name
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD ACCEPT
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
#/sbin/ip6tables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
#/sbin/ip6tables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
#/sbin/ip6tables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT ACCEPT
/sbin/ip6tables -t security -P FORWARD ACCEPT
/sbin/ip6tables -t security -P OUTPUT ACCEPT
#/sbin/ip6tables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
printf “%-2s[OK]\n”

#on désactive les options de sécurité du noyau

echo -n “Désactivation des options de sécurité du noyau…”

for IPv6restore in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 0 > $IPv6restore;done

echo 1 > /proc/sys/net/ipv4/ip_forward

for reversepathfilteringdisable in /proc/sys/net/ipv4/conf/*/rp_filter;do echo 0 > $reversepathfilteringdisable;done

for icmpacceptredirectenable in /proc/sys/net/ipv4/conf/*/accept_redirects;do echo 1 > $icmpacceptredirectenable;done

for icmpsecureredirectenable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 1 > $icmpsecureredirectenable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectenable in /proc/sys/net/ipv4/conf/*/send_redirects;do echo 1 > $icmpsendredirectenable;done

for sourceroutingenable in /proc/sys/net/ipv4/conf/*/accept_source_route;do echo 1 > $sourceroutingenable;done

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

printf “%-2s[OK]\n”

echo "±----------------------------------------------------------------------------+"
echo "| Firewall DÉSACTIVÉ |"
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–stop’
;;
#début argument ‘–status’
–status)
#liste numérique (-n) détaillée (-v) des règles en fonction des chaînes (-L)
echo ""
echo ""
echo "±----------------------------------------------------------------------------+"
echo "| Rapport d’état d’iptables et ip6tables |"
echo "±----------------------------------------------------------------------------+"
echo ""
echo ""
echo "I. iptables:"
echo ""
echo "I.1. table ‘filter’:"
echo “”
/sbin/iptables -t filter -n -L -v
echo ""
echo ""
echo "I.2. table ‘nat’:"
echo “”
/sbin/iptables -t nat -n -L -v
echo ""
echo ""
echo "I.3. table ‘mangle’:"
echo “”
/sbin/iptables -t mangle -n -L -v
echo ""
echo ""
echo "I.4. table ‘raw’:"
echo “”
/sbin/iptables -t raw -n -L -v
echo ""
echo ""
echo "I.5. table ‘security’:"
echo “”
/sbin/iptables -t security -n -L -v
echo ""
echo ""
echo ""
echo "II. ip6tables:"
echo ""
echo "II.1. table ‘filter’:"
echo “”
/sbin/ip6tables -t filter -n -L -v
echo ""
echo ""
echo "II.2. table ‘nat’:"
echo ""
echo “Table nat non implémentée dans ip6tables.”
#/sbin/ip6tables -t nat -n -L -v <–NON IMPLÉMENTÉ DANS IP6TABLES
echo ""
echo ""
echo "II.3. table ‘mangle’:"
echo “”
/sbin/ip6tables -t mangle -n -L -v
echo ""
echo ""
echo "II.4. table ‘raw’:"
echo “”
/sbin/ip6tables -t raw -n -L -v
echo ""
echo ""
echo "II.5. table ‘security’:"
echo “”
/sbin/ip6tables -t security -n -L -v
echo ""
echo ""
echo ""
echo "Fin du rapport."
echo “”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–status’
;;
#début tout autre argument
*)
#message d’aide
echo “Utilisation: mffw --{start|stop|status}”
#on sort avec l’erreur 1
exit 1
#fin tout autre argument
;;
#fin du traitement des arguments donnés en option du lancement en ligne de commande
esac
[/code]

J’ai donc lancé le script, il bloque comme d’habitude et l’extraction “iptables” d’un dmesg me donne ceci:

[quote][ 1454.419575] ip_tables: © 2000-2006 Netfilter Core Team
[ 1477.529621] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
[ 1477.567910] ip6_tables: © 2000-2006 Netfilter Core Team
[ 1675.696010] eth0: no IPv6 routers present
[ 2000.625901] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
[ 2000.716982] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=67 TOS=0x00 PREC=0x00 TTL=255 ID=50985 DF PROTO=UDP SPT=5353 DPT=5353 LEN=47
[ 2000.849479] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=309 TOS=0x00 PREC=0x00 TTL=255 ID=50986 DF PROTO=UDP SPT=5353 DPT=5353 LEN=289
[ 2000.892669] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=204 TOS=0x00 PREC=0x00 TTL=255 ID=50987 DF PROTO=UDP SPT=5353 DPT=5353 LEN=184
[ 2000.936032] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
[ 2001.100180] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=309 TOS=0x00 PREC=0x00 TTL=255 ID=50988 DF PROTO=UDP SPT=5353 DPT=5353 LEN=289
[ 2001.350703] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=309 TOS=0x00 PREC=0x00 TTL=255 ID=50989 DF PROTO=UDP SPT=5353 DPT=5353 LEN=289
[ 2001.551185] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=285 TOS=0x00 PREC=0x00 TTL=255 ID=50990 DF PROTO=UDP SPT=5353 DPT=5353 LEN=265
[ 2001.717493] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=67 TOS=0x00 PREC=0x00 TTL=255 ID=50991 DF PROTO=UDP SPT=5353 DPT=5353 LEN=47
[ 2001.972977] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=186 TOS=0x00 PREC=0x00 TTL=255 ID=50992 DF PROTO=UDP SPT=5353 DPT=5353 LEN=166
[ 2002.075488] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=301 TOS=0x00 PREC=0x00 TTL=255 ID=50993 DF PROTO=UDP SPT=5353 DPT=5353 LEN=281
[ 2002.222999] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=186 TOS=0x00 PREC=0x00 TTL=255 ID=50994 DF PROTO=UDP SPT=5353 DPT=5353 LEN=166
[ 2002.454488] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=51 TOS=0x00 PREC=0x00 TTL=64 ID=22599 PROTO=UDP SPT=35837 DPT=53 LEN=31
[ 2002.473173] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=186 TOS=0x00 PREC=0x00 TTL=255 ID=50985 DF PROTO=UDP SPT=5353 DPT=5353 LEN=166
[ 2002.673982] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=174 TOS=0x00 PREC=0x00 TTL=255 ID=50986 DF PROTO=UDP SPT=5353 DPT=5353 LEN=154
[ 2002.733284] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=285 TOS=0x00 PREC=0x00 TTL=255 ID=50987 DF PROTO=UDP SPT=5353 DPT=5353 LEN=265
[ 2003.718089] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=67 TOS=0x00 PREC=0x00 TTL=255 ID=50988 DF PROTO=UDP SPT=5353 DPT=5353 LEN=47
[ 2003.856623] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=174 TOS=0x00 PREC=0x00 TTL=255 ID=50989 DF PROTO=UDP SPT=5353 DPT=5353 LEN=154
[ 2004.258291] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=301 TOS=0x00 PREC=0x00 TTL=255 ID=50990 DF PROTO=UDP SPT=5353 DPT=5353 LEN=281
[ 2004.915898] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=313 TOS=0x00 PREC=0x00 TTL=255 ID=50991 DF PROTO=UDP SPT=5353 DPT=5353 LEN=293
[ 2006.039423] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=174 TOS=0x00 PREC=0x00 TTL=255 ID=50992 DF PROTO=UDP SPT=5353 DPT=5353 LEN=154
[ 2007.454515] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=51 TOS=0x00 PREC=0x00 TTL=64 ID=22600 PROTO=UDP SPT=35837 DPT=53 LEN=31
[ 2007.719344] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=67 TOS=0x00 PREC=0x00 TTL=255 ID=50993 DF PROTO=UDP SPT=5353 DPT=5353 LEN=47
[ 2009.653691] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=58 TOS=0x00 PREC=0x00 TTL=64 ID=22601 DF PROTO=UDP SPT=48628 DPT=53 LEN=38
[ 2009.653718] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=58 TOS=0x00 PREC=0x00 TTL=64 ID=22602 DF PROTO=UDP SPT=47974 DPT=53 LEN=38
[ 2009.653743] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=63 TOS=0x00 PREC=0x00 TTL=64 ID=22603 DF PROTO=UDP SPT=51450 DPT=53 LEN=43
[ 2009.653759] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=63 TOS=0x00 PREC=0x00 TTL=64 ID=22604 DF PROTO=UDP SPT=60455 DPT=53 LEN=43
[ 2009.732024] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=58 TOS=0x00 PREC=0x00 TTL=64 ID=22605 DF PROTO=UDP SPT=35814 DPT=53 LEN=38
[ 2009.732056] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=58 TOS=0x00 PREC=0x00 TTL=64 ID=22606 DF PROTO=UDP SPT=50030 DPT=53 LEN=38
[ 2009.732079] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=63 TOS=0x00 PREC=0x00 TTL=64 ID=22607 DF PROTO=UDP SPT=46805 DPT=53 LEN=43
[ 2009.732095] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=63 TOS=0x00 PREC=0x00 TTL=64 ID=22608 DF PROTO=UDP SPT=33495 DPT=53 LEN=43
[ 2009.748292] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22609 DF PROTO=UDP SPT=47619 DPT=53 LEN=42
[ 2009.748315] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22610 DF PROTO=UDP SPT=40175 DPT=53 LEN=42
[ 2009.748337] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22611 DF PROTO=UDP SPT=55373 DPT=53 LEN=47
[ 2009.748352] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22612 DF PROTO=UDP SPT=40268 DPT=53 LEN=47
[ 2009.784713] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22613 DF PROTO=UDP SPT=46235 DPT=53 LEN=42
[ 2009.784733] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22614 DF PROTO=UDP SPT=49191 DPT=53 LEN=42
[ 2009.784754] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22615 DF PROTO=UDP SPT=52464 DPT=53 LEN=47
[ 2009.784769] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22616 DF PROTO=UDP SPT=33426 DPT=53 LEN=47
[ 2010.752012] eth0: no IPv6 routers present
[ 2011.714213] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22617 DF PROTO=UDP SPT=44675 DPT=53 LEN=42
[ 2011.714235] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22618 DF PROTO=UDP SPT=44729 DPT=53 LEN=42
[ 2011.714255] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22619 DF PROTO=UDP SPT=51540 DPT=53 LEN=47
[ 2011.714271] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22620 DF PROTO=UDP SPT=59607 DPT=53 LEN=47
[ 2011.714371] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22621 DF PROTO=UDP SPT=54078 DPT=53 LEN=42
[ 2011.714387] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22622 DF PROTO=UDP SPT=38365 DPT=53 LEN=42
[ 2011.714404] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22623 DF PROTO=UDP SPT=52628 DPT=53 LEN=47
[ 2011.714419] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22624 DF PROTO=UDP SPT=42119 DPT=53 LEN=47
[ 2011.714591] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22625 DF PROTO=UDP SPT=37055 DPT=53 LEN=42
[ 2011.714607] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=62 TOS=0x00 PREC=0x00 TTL=64 ID=22626 DF PROTO=UDP SPT=59602 DPT=53 LEN=42
[ 2011.714624] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22627 DF PROTO=UDP SPT=48590 DPT=53 LEN=47
[ 2011.714639] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=MON_IP_BOX LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=22628 DF PROTO=UDP SPT=38210 DPT=53 LEN=47
[ 2015.719935] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=67 TOS=0x00 PREC=0x00 TTL=255 ID=50994 DF PROTO=UDP SPT=5353 DPT=5353 LEN=47
[ 2017.665628] iptables OUTPUT IN= OUT=eth0 SRC=MON_IP_PC DST=224.0.0.251 LEN=174 TOS=0x00 PREC=0x00 TTL=255 ID=50995 DF PROTO=UDP SPT=5353 DPT=5353 LEN=154
[ 2017.672064] iptables OUTPUT IN= OUT=eth0 SRC=0.0.0.0 DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2
[ 2027.488062] iptables OUTPUT IN= OUT=eth0 SRC=0.0.0.0 DST=224.0.0.22 LEN=40 TOS=0x00 PREC=0xC0 TTL=1 ID=0 DF PROTO=2 [/quote]

Je ne vois pas de “iptables INPUT”, j’en conclus que ma requête pour me connecter à un site ne sort pas de mon PC car bloquée par mon script.

Se pourrait-il que ma box, qui est une vraie passoire pendant les tests de mon script, histoire d’être tranquille avec ça, bloque je-ne-sais-comment des choses? Les seuls trucs qui pourraient coincer sont la désactivation du DynDNS, de la DMZ et de l’UPnP. Il n’y a pas de règle NAT/PAT non plus. Le DHCP est activé. Ces réglages n’ont pas changé depuis la création de mon script et le parefeu de la box totalement off pour les tests.

Est-ce que ça servirait à quelquechose d’utiliser la fonction DMZ de la box pour être sûr de passer à travers elle?

Merci beaucoup à tous de vos retours et spécialement à PascalHambourg car j’apprends plein de trucs! :wink:

Extrait de ton script qui pose problème :

##DNS_53 /sbin/iptables -t filter -A INPUT -p tcp --sport 53 --dport 53 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A INPUT -p udp --sport 53 --dport 53 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p tcp --sport 53 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p udp --sport 53 --dport 53 -m state --state ESTABLISHED -j ACCEPT ##HTTP_80 /sbin/iptables -t filter -A INPUT -p tcp --sport 80 --dport 80 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p tcp --sport 80 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT ##HTTPS_443 /sbin/iptables -t filter -A INPUT -p tcp --sport 443 --dport 443 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A OUTPUT -p tcp --sport 443 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
Encore une fois, je n’ai pas dit de toucher aux conditions sur les port source et destination. Les condititions sur les ports dans ton script initial étaient correctes, seuls les états étaient à corriger. Sauf dans certains protocoles particuliers comme DHCP, le port local utilisé par le client est indéfini, seul le port côté serveur est défini. Dans la trace, tu vois bien que les paquets DNS bloqués en sortie n’ont pas le port source 53. Il faut filtrer sur le port destination pour les paquets aller et le port source pour les paquets retour.

Cela illustre une règle de base pour l’écriture d’un pare-feu : il ne suffit pas de connaître iptables, il faut aussi et surtout connaître les protocoles que l’on veut filtrer.

Les questions à la fin de ton message sont hors de propos.

Note : Les premiers paquets bloqués dans la trace sont du multicast DNS (mDNS) en UDP sur le port 5353. C’est utilisé par zeroconf/avahi et ça ne sert à rien pour internet.

Hello,

Bon, si je ne mets que ça, je peux enfin surfer :dance:. Je suis donc bon cette fois pour le DNS (ou pas mais en tous cas ça fonctionne au moins cette fois :pray:), merci PascalHambourg pour tes précisions, j’avoue m’être emmêlé les pinceaux.

Je vais réactiver mes autres bidules un par un et on verra bien ce que ça dira… :017

[code]#!/bin/sh

BEGIN INIT INFO

Provides: MFFW

Required-Start: $remote_fs

Should-Start:

Required-Stop: $remote_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: Configure le parefeu.

Description: Un script de pare-feu sécuritaire iptables/netfilter pour PC personnel.

END INIT INFO

Fichier: mffw

Auteur: DarkGagan (voir profil sur debian-fr.org pour contact)

License: GNU GPL (version 3 ou supérieure)

Spécifications (sans ordre particulier):

- 3 modes d’utilisation: start, stop, status

- pas de log (on n’est pas sur un serveur)

- pas de NAT (on n’est pas sur un routeur)

- pas de forward (idem)

- pas d’IPv6 (possibilités de filtrage plus limitées que sur IPv4)

- protection contre certaines attaques (SYNflood, Ping of Death, DoS, Smurf et d’autres…)

- sécurisation générale (configuration du noyau en plus des règles iptables)

Note: travail continuellement en cours, tout commentaire ou suggestion sont les bienvenus!

Ce script s’appuie sur bon nombre de documentation trouvées ça et là sur le net, dont en voici une liste non-exhaustive et sans ordre particulier:

- fw_laptop de Uwe Hermann (http://www.hermann-uwe.de/files/fw_laptop)

- la manpage d’iptables (man iptables)

- la documentation sur netfilter (http://netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-7.html)

- Iptables Tutorial 1.2.2 (http://www.inetdoc.net/guides/iptables-tutorial/)

- Formation Debian Chapitre 38. Pare-feu et partage de connexion Internet (http://formation-debian.via.ecp.fr/firewall.html)

- plein de documents revus et corrigés par Pascal Hambourg en général :wink:

- un projet de pare-feu personnel sur debian-fr.org (http://paste.isalo.org/62)

- le manuel traitant de la sécurité sous Debian (https://www.debian.org/doc/manuals/securing-debian-howto/)

- des exemples de script (http://www.plouf.fr.eu.org/bazar/netfilter/firewall/)

- (…)

- tous ceux dont j’ai scruté des bouts de code plus ou moins valables pour ce que je veux créer (ou non…) et dont j’ai oublié les noms, désolé… :frowning:

rajouter " -x" à #!/bin/sh pour aider au débuggage du script (test ligne par ligne)

DÉBUT AIDE-MÉMOIRE------------------------------------------

iptables: écrire les noms des tables en minuscule uniquement

FIN AIDE-MÉMOIRE--------------------------------------------

mffwversion=date --reference="/etc/init.d/mffw" +%y.%m.%d-%H%M
echo -n “MFFW version”
printf “%-1s$mffwversion par DarkGagan.\n”
#début du traitement des arguments donnés en option du lancement en ligne de commande
echo “”
case “$1” in
#début argument ‘–start’
–start)
echo “±----------------------------------------------------------------------------+”
echo “| Démarrage du firewall |”
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 01: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 02: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP
#/sbin/iptables -t filter -P POSTROUTING DROP <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD DROP
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD DROP
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING DROP <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT DROP
/sbin/ip6tables -t filter -P FORWARD DROP
/sbin/ip6tables -t filter -P OUTPUT DROP
#/sbin/ip6tables -t filter -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING DROP
/sbin/ip6tables -t mangle -P INPUT DROP
/sbin/ip6tables -t mangle -P FORWARD DROP
/sbin/ip6tables -t mangle -P OUTPUT DROP
/sbin/ip6tables -t mangle -P POSTROUTING DROP
/sbin/ip6tables -t raw -P PREROUTING DROP
#/sbin/ip6tables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT DROP
#/sbin/ip6tables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT DROP
/sbin/ip6tables -t security -P FORWARD DROP
/sbin/ip6tables -t security -P OUTPUT DROP
#/sbin/ip6tables -t security -P POSTROUTING DROP <-- INEXISTANT
printf “%-2s[OK]\n”

#ÉTAPE 03: on gère les interfaces réseau
echo -n “Application des règles de gestion des interfaces réseau…”
##on accepte loopback
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT

##on ignore toute autre interface réseau que le réseau câble

/sbin/iptables -t filter -A INPUT ! -i eth0 -j DROP

/sbin/iptables -t filter -A OUTPUT ! -o eth0 -j DROP

printf “%-2s[OK]\n”

#ÉTAPE 04: on bloque les connexions non désirées

echo -n “Application des règles amont de connexion…”

##configuration du noyau

###blocage de l’IP spoofing

for reversepathfilteringenable in /proc/sys/net/ipv4/conf/*/rp_filter;do echo 1 > $reversepathfilteringenable;done

for icmpacceptredirectdisable in /proc/sys/net/ipv4/conf/*/accept_redirects;do echo 0 > $icmpacceptredirectdisable;done

for icmpsecureredirectdisable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 0 > $icmpsecureredirectdisable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectdisable in /proc/sys/net/ipv4/conf/*/send_redirects;do echo 0 > $icmpsendredirectdisable;done

###blocage du source routing

for sourceroutingdisable in /proc/sys/net/ipv4/conf/*/accept_source_route;do echo 0 > $sourceroutingdisable;done

###blocage des connexions NEW non-SYN (SYNflood)

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

###blocage d’IPv6

for IPv6disable in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 1 > $IPv6disable;done

###blocage du ping (Ping of Death,…)

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

###blocage du forward

echo 0 > /proc/sys/net/ipv4/ip_forward

##configuration d’iptables

###blocage du ping

/sbin/iptables -t filter -A INPUT -p icmp --icmp-type any -j DROP

/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type any -j DROP

###limitation du nombre de connexion par IP

/sbin/iptables -t filter -A INPUT -m connlimit --connlimit-above 32 --connlimit-mask 32 --connlimit-saddr -j DROP

/sbin/iptables -t filter -A OUTPUT -m connlimit --connlimit-above 16 --connlimit-mask 16 --connlimit-daddr -j DROP

###blocage des connexions NEW non-SYN (SYNflood)

/sbin/iptables -t filter -A INPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

###blocage des connexions non valides

/sbin/iptables -t filter -A INPUT -m state --state INVALID -j DROP

/sbin/iptables -t filter -A OUTPUT -m state --state INVALID -j DROP

###blocage des connexions non traçables

/sbin/iptables -t filter -A INPUT -m state --state UNTRACKED -j DROP

/sbin/iptables -t filter -A OUTPUT -m state --state UNTRACKED -j DROP

###blocage des paquets fragmentés

/sbin/iptables -t filter -A INPUT -f -j DROP

/sbin/iptables -t filter -A OUTPUT -f -j DROP

-m addrtype --src-type UNICAST -m pkttype --pkt-type UNICAST

printf “%-2s[OK]\n”

#ÉTAPE 05: on limite le scan de ports

echo -n “Application des règles contre les scans de ports…”

##scan inconnu

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP

##scan inconnu

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

##scan inconnu

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP

##scan NMAP-XMAS

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

##scan XMAS-PSH

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

##scan XMAS

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

##scan NULL_SCAN

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

##scan SYN/FIN

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

##scan FIN

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP

printf “%-2s[OK]\n”

#ÉTAPE 06: on accepte certaines connexions
echo -n “Application des règles aval de connexion…”

##DHCP_67,68

/sbin/iptables -t filter -A INPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT

/sbin/iptables -t filter -A OUTPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT

/sbin/iptables -t filter -A INPUT -p udp --dport 67:68 -j ACCEPT

/sbin/iptables -t filter -A OUTPUT -p udp --dport 67:68 -j ACCEPT

##DNS_53
/sbin/iptables -t filter -A INPUT -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTP_80
/sbin/iptables -t filter -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTPS_443
/sbin/iptables -t filter -A INPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
printf “%-2s[OK]\n”

#ÉTAPE 07: on bloque tout le reste

echo -n “Application des règles de blocage génériques…”

/sbin/iptables -t filter -A INPUT -j DROP

/sbin/iptables -t filter -A OUTPUT -j DROP

printf “%-2s[OK]\n”

#ÉTAPE 08: on loggue quand même car ça ne marche pas (à virer ensuite pour être tranquille :p)

echo -n “Application des règles de log…”

/sbin/iptables -t filter -A INPUT -j LOG --log-prefix "iptables INPUT "

/sbin/iptables -t filter -A OUTPUT -j LOG --log-prefix "iptables OUTPUT "

printf “%-2s[OK]\n”

#ÉTAPE 09: on sauvegarde
echo -n “Sauvegarde de l’ensemble de règles…”
/sbin/iptables-save>/etc/init.d/mffw.save
printf “%-2s[OK]\n”

echo “±----------------------------------------------------------------------------+”
echo “| Firewall ACTIVÉ |”
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–start’
;;
#début argument ‘–stop’
–stop)
echo “±----------------------------------------------------------------------------+”
echo “| Arrêt du firewall |”
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 1: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 2: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
#/sbin/iptables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- iptables: Bad built-in chain name
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD ACCEPT
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
#/sbin/ip6tables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
#/sbin/ip6tables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
#/sbin/ip6tables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT ACCEPT
/sbin/ip6tables -t security -P FORWARD ACCEPT
/sbin/ip6tables -t security -P OUTPUT ACCEPT
#/sbin/ip6tables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
printf “%-2s[OK]\n”

#on désactive les options de sécurité du noyau

echo -n “Désactivation des options de sécurité du noyau…”

for IPv6restore in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 0 > $IPv6restore;done

echo 1 > /proc/sys/net/ipv4/ip_forward

for reversepathfilteringdisable in /proc/sys/net/ipv4/conf/*/rp_filter;do echo 0 > $reversepathfilteringdisable;done

for icmpacceptredirectenable in /proc/sys/net/ipv4/conf/*/accept_redirects;do echo 1 > $icmpacceptredirectenable;done

for icmpsecureredirectenable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 1 > $icmpsecureredirectenable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectenable in /proc/sys/net/ipv4/conf/*/send_redirects;do echo 1 > $icmpsendredirectenable;done

for sourceroutingenable in /proc/sys/net/ipv4/conf/*/accept_source_route;do echo 1 > $sourceroutingenable;done

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

printf “%-2s[OK]\n”

echo “±----------------------------------------------------------------------------+”
echo “| Firewall DÉSACTIVÉ |”
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–stop’
;;
#début argument ‘–status’
–status)
#liste numérique (-n) détaillée (-v) des règles en fonction des chaînes (-L)
echo “”
echo “”
echo “±----------------------------------------------------------------------------+”
echo “| Rapport d’état d’iptables et ip6tables |”
echo “±----------------------------------------------------------------------------+”
echo “”
echo “”
echo “I. iptables:”
echo “”
echo “I.1. table ‘filter’:”
echo “”
/sbin/iptables -t filter -n -L -v
echo “”
echo “”
echo “I.2. table ‘nat’:”
echo “”
/sbin/iptables -t nat -n -L -v
echo “”
echo “”
echo “I.3. table ‘mangle’:”
echo “”
/sbin/iptables -t mangle -n -L -v
echo “”
echo “”
echo “I.4. table ‘raw’:”
echo “”
/sbin/iptables -t raw -n -L -v
echo “”
echo “”
echo “I.5. table ‘security’:”
echo “”
/sbin/iptables -t security -n -L -v
echo “”
echo “”
echo “”
echo “II. ip6tables:”
echo “”
echo “II.1. table ‘filter’:”
echo “”
/sbin/ip6tables -t filter -n -L -v
echo “”
echo “”
echo “II.2. table ‘nat’:”
echo “”
echo “Table nat non implémentée dans ip6tables.”
#/sbin/ip6tables -t nat -n -L -v <–NON IMPLÉMENTÉ DANS IP6TABLES
echo “”
echo “”
echo “II.3. table ‘mangle’:”
echo “”
/sbin/ip6tables -t mangle -n -L -v
echo “”
echo “”
echo “II.4. table ‘raw’:”
echo “”
/sbin/ip6tables -t raw -n -L -v
echo “”
echo “”
echo “II.5. table ‘security’:”
echo “”
/sbin/ip6tables -t security -n -L -v
echo “”
echo “”
echo “”
echo “Fin du rapport.”
echo “”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–status’
;;
#début tout autre argument
*)
#message d’aide
echo “Utilisation: mffw --{start|stop|status}”
#on sort avec l’erreur 1
exit 1
#fin tout autre argument
;;
#fin du traitement des arguments donnés en option du lancement en ligne de commande
esac
[/code]

:006 ,

J’ai réactivé certains bidules et modifiés d’autres, ça fonctionne toujours, mais depuis que j’ai réactivé les anti-scans de port ma connexion rame comme pas possible. Est-ce vraiment utile de tous les garder? Lesquels me seraient indispensables et pourquoi? Pour cette partie je me suis contenté de copier-coller et adapter les anti-scans trouvés sur le net mais j’avoue je ne trouve pas d’explications compréhensibles pour ma petite tête sur le net… :blush: Bref, ça donne ça:

[code]#!/bin/sh

BEGIN INIT INFO

Provides: MFFW

Required-Start: $remote_fs

Should-Start:

Required-Stop: $remote_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: Configure le parefeu.

Description: Un script de pare-feu sécuritaire iptables/netfilter pour PC personnel.

END INIT INFO

Fichier: mffw

Auteur: DarkGagan (voir profil sur debian-fr.org pour contact)

License: GNU GPL (version 3 ou supérieure)

Spécifications (sans ordre particulier):

- 3 modes d’utilisation: start, stop, status

- pas de log (on n’est pas sur un serveur)

- pas de NAT (on n’est pas sur un routeur)

- pas de forward (idem)

- pas d’IPv6 (possibilités de filtrage plus limitées que sur IPv4)

- protection contre certaines attaques (SYNflood, Ping of Death, DoS, Smurf et d’autres…)

- sécurisation générale (configuration du noyau en plus des règles iptables)

Note: travail continuellement en cours, tout commentaire ou suggestion sont les bienvenus!

Ce script s’appuie sur bon nombre de documentation trouvées ça et là sur le net, dont en voici une liste non-exhaustive et sans ordre particulier:

- fw_laptop de Uwe Hermann (http://www.hermann-uwe.de/files/fw_laptop)

- la manpage d’iptables (man iptables)

- la documentation sur netfilter (http://netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-7.html)

- Iptables Tutorial 1.2.2 (http://www.inetdoc.net/guides/iptables-tutorial/)

- Formation Debian Chapitre 38. Pare-feu et partage de connexion Internet (http://formation-debian.via.ecp.fr/firewall.html)

- plein de documents revus et corrigés par Pascal Hambourg en général :wink:

- un projet de pare-feu personnel sur debian-fr.org (http://paste.isalo.org/62)

- le manuel traitant de la sécurité sous Debian (https://www.debian.org/doc/manuals/securing-debian-howto/)

- des exemples de script (http://www.plouf.fr.eu.org/bazar/netfilter/firewall/)

- (…)

- tous ceux dont j’ai scruté des bouts de code plus ou moins valables pour ce que je veux créer (ou non…) et dont j’ai oublié les noms, désolé… :frowning:

rajouter " -x" à #!/bin/sh pour aider au débuggage du script (test ligne par ligne)

DÉBUT AIDE-MÉMOIRE------------------------------------------

iptables: écrire les noms des tables en minuscule uniquement

FIN AIDE-MÉMOIRE--------------------------------------------

mffwversion=date --reference="/etc/init.d/mffw" +%y.%m.%d-%H%M
echo -n “MFFW version”
printf “%-1s$mffwversion par DarkGagan.\n”
#début du traitement des arguments donnés en option du lancement en ligne de commande
echo “”
case “$1” in
#début argument ‘–start’
–start)
echo “±----------------------------------------------------------------------------+”
echo “| Démarrage du firewall |”
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 01: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 02: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP
#/sbin/iptables -t filter -P POSTROUTING DROP <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD DROP
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD DROP
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING DROP <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT DROP
/sbin/ip6tables -t filter -P FORWARD DROP
/sbin/ip6tables -t filter -P OUTPUT DROP
#/sbin/ip6tables -t filter -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING DROP
/sbin/ip6tables -t mangle -P INPUT DROP
/sbin/ip6tables -t mangle -P FORWARD DROP
/sbin/ip6tables -t mangle -P OUTPUT DROP
/sbin/ip6tables -t mangle -P POSTROUTING DROP
/sbin/ip6tables -t raw -P PREROUTING DROP
#/sbin/ip6tables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT DROP
#/sbin/ip6tables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT DROP
/sbin/ip6tables -t security -P FORWARD DROP
/sbin/ip6tables -t security -P OUTPUT DROP
#/sbin/ip6tables -t security -P POSTROUTING DROP <-- INEXISTANT
printf “%-2s[OK]\n”

#ÉTAPE 03: on gère les interfaces réseau
echo -n “Application des règles de gestion des interfaces réseau…”
##on accepte loopback
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT
##on ignore toute autre interface réseau que le réseau câble
/sbin/iptables -t filter -A INPUT ! -i eth0 -j DROP
/sbin/iptables -t filter -A OUTPUT ! -o eth0 -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 04: on bloque les connexions non désirées
echo -n “Application des règles amont de connexion…”

##configuration du noyau

###blocage de l’IP spoofing

for reversepathfilteringenable in /proc/sys/net/ipv4/conf/*/rp_filter;do echo 1 > $reversepathfilteringenable;done

for icmpacceptredirectdisable in /proc/sys/net/ipv4/conf/*/accept_redirects;do echo 0 > $icmpacceptredirectdisable;done

for icmpsecureredirectdisable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 0 > $icmpsecureredirectdisable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectdisable in /proc/sys/net/ipv4/conf/*/send_redirects;do echo 0 > $icmpsendredirectdisable;done

###blocage du source routing

for sourceroutingdisable in /proc/sys/net/ipv4/conf/*/accept_source_route;do echo 0 > $sourceroutingdisable;done

###blocage des connexions NEW non-SYN (SYNflood)

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

###blocage d’IPv6

for IPv6disable in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 1 > $IPv6disable;done

###blocage du ping (Ping of Death,…)

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

###blocage du forward

echo 0 > /proc/sys/net/ipv4/ip_forward

##configuration d’iptables

###blocage du ping

/sbin/iptables -t filter -A INPUT -p icmp --icmp-type any -j DROP

/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type any -j DROP

###limitation du nombre de connexion par IP <-- limitation extrême: -m limit --limit 1/second --limit-burst 20 en INPUT et 10 en OUTPUT en règle ACCEPT à la place

/sbin/iptables -t filter -A INPUT -m connlimit --connlimit-above 40 --connlimit-mask 32 --connlimit-daddr -j DROP

/sbin/iptables -t filter -A OUTPUT -m connlimit --connlimit-above 10 --connlimit-mask 32 --connlimit-saddr -j DROP

###blocage des connexions NEW non-SYN (SYNflood)

/sbin/iptables -t filter -A INPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

###blocage des connexions non valides
/sbin/iptables -t filter -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state INVALID -j DROP
###blocage des connexions non traçables
/sbin/iptables -t filter -A INPUT -m state --state UNTRACKED -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state UNTRACKED -j DROP
###blocage des paquets fragmentés
/sbin/iptables -t filter -A INPUT -f -j DROP
/sbin/iptables -t filter -A OUTPUT -f -j DROP

-m addrtype --src-type UNICAST -m pkttype --pkt-type UNICAST

printf “%-2s[OK]\n”

#ÉTAPE 05: on limite le scan de ports
echo -n “Application des règles contre les scans de ports…”
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP
##scan inconnu
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
##scan NMAP-XMAS
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
##scan XMAS-PSH
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
##scan XMAS
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP
##scan NULL_SCAN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
##scan SYN/FIN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
##scan FIN
/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 06: on accepte certaines connexions
echo -n “Application des règles aval de connexion…”

##DHCP_67,68

/sbin/iptables -t filter -A INPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT

/sbin/iptables -t filter -A OUTPUT -p udp --sport 67:68 --dport 67:68 -m state --state NEW -j ACCEPT

/sbin/iptables -t filter -A INPUT -p udp --dport 67:68 -j ACCEPT

/sbin/iptables -t filter -A OUTPUT -p udp --dport 67:68 -j ACCEPT

##DNS_53
/sbin/iptables -t filter -A INPUT -p tcp --sport 53 -m limit --limit 1/second --limit-burst 20 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A INPUT -p udp --sport 53 -m limit --limit 1/second --limit-burst 20 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m limit --limit 1/second --limit-burst 10 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m limit --limit 1/second --limit-burst 10 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTP_80
/sbin/iptables -t filter -A INPUT -p tcp --sport 80 -m limit --limit 1/second --limit-burst 20 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 80 -m limit --limit 1/second --limit-burst 10 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTPS_443
/sbin/iptables -t filter -A INPUT -p tcp --sport 443 -m limit --limit 1/second --limit-burst 20 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 443 -m limit --limit 1/second --limit-burst 10 -m state --state NEW,ESTABLISHED -j ACCEPT
printf “%-2s[OK]\n”

#ÉTAPE 07: on bloque tout le reste

echo -n “Application des règles de blocage génériques…”

/sbin/iptables -t filter -A INPUT -j DROP

/sbin/iptables -t filter -A OUTPUT -j DROP

printf “%-2s[OK]\n”

#ÉTAPE 08: on loggue quand même car ça ne marche pas (à virer ensuite pour être tranquille :p)

echo -n “Application des règles de log…”

/sbin/iptables -t filter -A INPUT -j LOG --log-prefix "iptables INPUT "

/sbin/iptables -t filter -A OUTPUT -j LOG --log-prefix "iptables OUTPUT "

printf “%-2s[OK]\n”

#ÉTAPE 09: on sauvegarde
echo -n “Sauvegarde de l’ensemble de règles…”
/sbin/iptables-save>/etc/init.d/mffw.on
printf “%-2s[OK]\n”

echo “±----------------------------------------------------------------------------+”
echo “| Firewall ACTIVÉ |”
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–start’
;;
#début argument ‘–stop’
–stop)
echo “±----------------------------------------------------------------------------+”
echo “| Arrêt du firewall |”
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 1: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 2: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
#/sbin/iptables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- iptables: Bad built-in chain name
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD ACCEPT
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
#/sbin/ip6tables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
#/sbin/ip6tables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
#/sbin/ip6tables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT ACCEPT
/sbin/ip6tables -t security -P FORWARD ACCEPT
/sbin/ip6tables -t security -P OUTPUT ACCEPT
#/sbin/ip6tables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
printf “%-2s[OK]\n”

#on désactive les options de sécurité du noyau

echo -n “Désactivation des options de sécurité du noyau…”

for IPv6restore in /proc/sys/net/ipv6/conf/*/disable_ipv6;do echo 0 > $IPv6restore;done

echo 1 > /proc/sys/net/ipv4/ip_forward

for reversepathfilteringdisable in /proc/sys/net/ipv4/conf/*/rp_filter;do echo 0 > $reversepathfilteringdisable;done

for icmpacceptredirectenable in /proc/sys/net/ipv4/conf/*/accept_redirects;do echo 1 > $icmpacceptredirectenable;done

for icmpsecureredirectenable in /proc/sys/net/ipv4/conf/*/secure_redirects;do echo 1 > $icmpsecureredirectenable;done #les activer aide à contrer les attaques ManInTheMiddle

for icmpsendredirectenable in /proc/sys/net/ipv4/conf/*/send_redirects;do echo 1 > $icmpsendredirectenable;done

for sourceroutingenable in /proc/sys/net/ipv4/conf/*/accept_source_route;do echo 1 > $sourceroutingenable;done

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

printf “%-2s[OK]\n”

#on sauvegarde
echo -n “Sauvegarde de l’ensemble de règles…”
/sbin/iptables-save>/etc/init.d/mffw.off
printf “%-2s[OK]\n”

echo “±----------------------------------------------------------------------------+”
echo “| Firewall DÉSACTIVÉ |”
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–stop’
;;
#début argument ‘–status’
–status)
#liste numérique (-n) détaillée (-v) des règles en fonction des chaînes (-L)
echo “”
echo “”
echo “±----------------------------------------------------------------------------+”
echo “| Rapport d’état d’iptables et ip6tables |”
echo “±----------------------------------------------------------------------------+”
echo “”
echo “”
echo “I. iptables:”
echo “”
echo “I.1. table ‘filter’:”
echo “”
/sbin/iptables -t filter -n -L -v
echo “”
echo “”
echo “I.2. table ‘nat’:”
echo “”
/sbin/iptables -t nat -n -L -v
echo “”
echo “”
echo “I.3. table ‘mangle’:”
echo “”
/sbin/iptables -t mangle -n -L -v
echo “”
echo “”
echo “I.4. table ‘raw’:”
echo “”
/sbin/iptables -t raw -n -L -v
echo “”
echo “”
echo “I.5. table ‘security’:”
echo “”
/sbin/iptables -t security -n -L -v
echo “”
echo “”
echo “”
echo “II. ip6tables:”
echo “”
echo “II.1. table ‘filter’:”
echo “”
/sbin/ip6tables -t filter -n -L -v
echo “”
echo “”
echo “II.2. table ‘nat’:”
echo “”
echo “Table nat non implémentée dans ip6tables.”
#/sbin/ip6tables -t nat -n -L -v <–NON IMPLÉMENTÉ DANS IP6TABLES
echo “”
echo “”
echo “II.3. table ‘mangle’:”
echo “”
/sbin/ip6tables -t mangle -n -L -v
echo “”
echo “”
echo “II.4. table ‘raw’:”
echo “”
/sbin/ip6tables -t raw -n -L -v
echo “”
echo “”
echo “II.5. table ‘security’:”
echo “”
/sbin/ip6tables -t security -n -L -v
echo “”
echo “”
echo “”
echo “Fin du rapport.”
echo “”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–status’
;;
#début tout autre argument
*)
#message d’aide
echo “Utilisation: mffw --{start|stop|status}”
#on sort avec l’erreur 1
exit 1
#fin tout autre argument
;;
#fin du traitement des arguments donnés en option du lancement en ligne de commande
esac
[/code]

Encore merci de votre aide! :041

Update, sans les anti-scan et avec d’autres bidules ça donne ça, et en plus ça fonctionne toujours :dance:
Si ça peut vous être utile, servez-vous :wink:

Question 1: ça rame un peu quand même (pas à mort comme quand les anti-scan sont activés) et je ne suis pas sûr que ça vienne des règles limitées, auriez-vous des idées?

Question 2: tout le début jusque ### END INIT INFO je l’ai “pompé” sur un script tout fait, pouvez-vous m’expliquer à quoi ça sert? Selon ce que j’ai compris, si je place le script dans /etc/init.d, il est censé se lancer au démarrage avant le démarrage des interfaces réseau, or ce n’est pas le cas.

Question 3: comment puis-je faire pour que si la question 2 ne donne rien, mon script se lance avant le démarrage des interfaces réseau?

Question 4: comment vous remercier pour toute l’aide que vous m’avez apporté et m’apporterez probablement encore? :007

[code]#!/bin/sh

BEGIN INIT INFO

Provides: MFFW

Required-Start: $remote_fs

Should-Start:

Required-Stop: $remote_fs

Should-Stop:

X-Start-Before: $network

X-Stop-After: $network

Default-Start: 2 3 4 5

Default-Stop: 0 1 6

Short-description: Configure le parefeu.

Description: Un script de pare-feu sécuritaire iptables/netfilter pour PC personnel.

END INIT INFO

Fichier: mffw

Auteur: DarkGagan (voir profil sur debian-fr.org pour contact)

License: GNU GPL (version 3 ou supérieure)

Spécifications (sans ordre particulier):

- 3 modes d’utilisation: start, stop, status

- ce qu’il n’y a pas: log (on n’est pas sur un serveur), NAT (on n’est pas sur un routeur), forward (idem), IPv6 (possibilités de filtrage plus limitées que sur IPv4)

- ce qu’il y a: protection contre certaines attaques, sécurisation générale du système (configuration du noyau en plus des règles iptables)

Note: travail continuellement en cours, tout commentaire ou suggestion sont les bienvenus!

Ce script s’appuie sur bon nombre de documentation trouvées ça et là sur le net, dont en voici une liste non-exhaustive et sans ordre particulier:

- fw_laptop de Uwe Hermann (http://www.hermann-uwe.de/files/fw_laptop)

- la manpage d’iptables (man iptables)

- la documentation sur netfilter (http://netfilter.org/documentation/HOWTO/fr/packet-filtering-HOWTO-7.html)

- Iptables Tutorial 1.2.2 (http://www.inetdoc.net/guides/iptables-tutorial/)

- Formation Debian Chapitre 38. Pare-feu et partage de connexion Internet (http://formation-debian.via.ecp.fr/firewall.html)

- plein de documents revus et corrigés par Pascal Hambourg en général :wink:

- un projet de pare-feu personnel sur debian-fr.org (http://paste.isalo.org/62)

- le manuel traitant de la sécurité sous Debian (https://www.debian.org/doc/manuals/securing-debian-howto/)

- des exemples de script (http://www.plouf.fr.eu.org/bazar/netfilter/firewall/)

- (…)

- tous ceux dont j’ai scruté des bouts de code plus ou moins valables pour ce que je veux créer (ou non…) et dont j’ai oublié les noms, désolé… :frowning:

rajouter " -x" à #!/bin/sh pour aider au débuggage du script (test ligne par ligne)

DÉBUT AIDE-MÉMOIRE------------------------------------------

iptables: écrire les noms des tables en minuscule uniquement

FIN AIDE-MÉMOIRE--------------------------------------------

mffwversion=date --reference="/etc/init.d/mffw" +%y.%m.%d-%H%M
echo -n “MFFW version”
printf “%-1s$mffwversion par DarkGagan.\n”
#début du traitement des arguments donnés en option du lancement en ligne de commande
echo “”
case “$1” in
#début argument ‘–start’
–start)
echo “±----------------------------------------------------------------------------+”
echo “| Démarrage du firewall |”
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 01: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 02: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT DROP
#/sbin/iptables -t filter -P POSTROUTING DROP <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD DROP
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD DROP
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING DROP <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT DROP
/sbin/ip6tables -t filter -P FORWARD DROP
/sbin/ip6tables -t filter -P OUTPUT DROP
#/sbin/ip6tables -t filter -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING DROP <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING DROP
/sbin/ip6tables -t mangle -P INPUT DROP
/sbin/ip6tables -t mangle -P FORWARD DROP
/sbin/ip6tables -t mangle -P OUTPUT DROP
/sbin/ip6tables -t mangle -P POSTROUTING DROP
/sbin/ip6tables -t raw -P PREROUTING DROP
#/sbin/ip6tables -t raw -P INPUT DROP <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD DROP <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT DROP
#/sbin/ip6tables -t raw -P POSTROUTING DROP <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING DROP <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT DROP
/sbin/ip6tables -t security -P FORWARD DROP
/sbin/ip6tables -t security -P OUTPUT DROP
#/sbin/ip6tables -t security -P POSTROUTING DROP <-- INEXISTANT
printf “%-2s[OK]\n”

#ÉTAPE 03: on gère les interfaces réseau
echo -n “Application des règles de gestion des interfaces réseau…”
##on accepte loopback
/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o lo -j ACCEPT
##on ignore toute autre interface réseau que le réseau câble
/sbin/iptables -t filter -A INPUT ! -i eth0 -j DROP
/sbin/iptables -t filter -A OUTPUT ! -o eth0 -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 04: on bloque les connexions non désirées
echo -n “Application des règles amont de connexion…”
##configuration du noyau
###blocage de l’IP spoofing
for reversepathfilteringenable in /proc/sys/net/ipv4/conf//rp_filter;do echo 1 > $reversepathfilteringenable;done
for icmpacceptredirectdisable in /proc/sys/net/ipv4/conf/
/accept_redirects;do echo 0 > $icmpacceptredirectdisable;done
for icmpsecureredirectdisable in /proc/sys/net/ipv4/conf//secure_redirects;do echo 0 > $icmpsecureredirectdisable;done #les activer aide à contrer les attaques ManInTheMiddle
for icmpsendredirectdisable in /proc/sys/net/ipv4/conf/
/send_redirects;do echo 0 > $icmpsendredirectdisable;done
###blocage du source routing
for sourceroutingdisable in /proc/sys/net/ipv4/conf//accept_source_route;do echo 0 > $sourceroutingdisable;done
###blocage des connexions NEW non-SYN
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
###blocage d’IPv6
for IPv6disable in /proc/sys/net/ipv6/conf/
/disable_ipv6;do echo 1 > $IPv6disable;done
###blocage du ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
###blocage du forward
echo 0 > /proc/sys/net/ipv4/ip_forward
##configuration d’iptables
###blocage du ping
/sbin/iptables -t filter -A INPUT -p icmp --icmp-type any -j DROP
/sbin/iptables -t filter -A OUTPUT -p icmp --icmp-type any -j DROP

###limitation du nombre de connexion au système

/sbin/iptables -t filter -A INPUT -m connlimit --connlimit-above 100 --connlimit-mask 32 --connlimit-daddr -j DROP

/sbin/iptables -t filter -A OUTPUT -m connlimit --connlimit-above 50 --connlimit-mask 32 --connlimit-saddr -j DROP

###blocage des connexions NEW non-SYN
/sbin/iptables -t filter -A INPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
###blocage des connexions non valides
/sbin/iptables -t filter -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state INVALID -j DROP
###blocage des connexions non traçables
/sbin/iptables -t filter -A INPUT -m state --state UNTRACKED -j DROP
/sbin/iptables -t filter -A OUTPUT -m state --state UNTRACKED -j DROP
###blocage des paquets fragmentés
/sbin/iptables -t filter -A INPUT -f -j DROP
/sbin/iptables -t filter -A OUTPUT -f -j DROP
###blocage des ports non utilisés
/sbin/iptables -t filter -A INPUT -p tcp -m multiport ! --sport 53,80,443 -j DROP
/sbin/iptables -t filter -A INPUT -p udp -m multiport ! --sport 53 -j DROP
/sbin/iptables -t filter -A OUTPUT -p tcp -m multiport ! --dport 53,80,443 -j DROP
/sbin/iptables -t filter -A OUTPUT -p udp -m multiport ! --dport 53 -j DROP

-m addrtype --src-type UNICAST -m pkttype --pkt-type UNICAST

printf “%-2s[OK]\n”

#ÉTAPE 05: on limite le scan de ports

echo -n “Application des règles contre les scans de ports…”

##scan inconnu

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,ACK SYN,FIN,RST -j DROP

##scan inconnu

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

##scan inconnu

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP

##scan NMAP-XMAS

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

##scan XMAS-PSH

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

##scan XMAS

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL ALL -j DROP

##scan NULL_SCAN

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

##scan SYN/FIN

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

##scan FIN

/sbin/iptables -t filter -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP

/sbin/iptables -t filter -A OUTPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP

printf “%-2s[OK]\n”

#ÉTAPE 06: on accepte certaines connexions
echo -n “Application des règles aval de connexion…”
##DNS_53
/sbin/iptables -t filter -A INPUT -p tcp --sport 53 -m limit --limit 10/second --limit-burst 100 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A INPUT -p udp --sport 53 -m limit --limit 10/second --limit-burst 100 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 53 -m limit --limit 5/second --limit-burst 50 -m state --state NEW,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p udp --dport 53 -m limit --limit 5/second --limit-burst 50 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTP_80
/sbin/iptables -t filter -A INPUT -p tcp --sport 80 -m limit --limit 10/second --limit-burst 100 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 80 -m limit --limit 5/second --limit-burst 50 -m state --state NEW,ESTABLISHED -j ACCEPT
##HTTPS_443
/sbin/iptables -t filter -A INPUT -p tcp --sport 443 -m limit --limit 10/second --limit-burst 100 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -p tcp --dport 443 -m limit --limit 5/second --limit-burst 50 -m state --state NEW,ESTABLISHED -j ACCEPT
printf “%-2s[OK]\n”

#ÉTAPE 07: on loggue ce qui ne passe pas les règles et tombe dans la politique par défaut

echo -n “Application des règles de log…”

/sbin/iptables -t filter -A INPUT -j LOG --log-prefix "iptables INPUT "

/sbin/iptables -t filter -A OUTPUT -j LOG --log-prefix "iptables OUTPUT "

printf “%-2s[OK]\n”

#ÉTAPE 08: on bloque tout le reste (redondant)
echo -n “Application des règles de blocage génériques…”
/sbin/iptables -t filter -A INPUT -j DROP
/sbin/iptables -t filter -A OUTPUT -j DROP
printf “%-2s[OK]\n”

#ÉTAPE 09: on sauvegarde
echo -n “Sauvegarde de l’ensemble de règles…”
/sbin/iptables-save>/etc/init.d/mffw.on
printf “%-2s[OK]\n”

echo “±----------------------------------------------------------------------------+”
echo “| Firewall ACTIVÉ |”
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–start’
;;
#début argument ‘–stop’
–stop)
echo “±----------------------------------------------------------------------------+”
echo “| Arrêt du firewall |”
echo “±----------------------------------------------------------------------------+”

#ÉTAPE 01: on nettoie le pare-feu
echo -n “Suppression du paramétrage personnalisé…”
##iptables
###on efface toutes les règles
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/iptables -t filter -X
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -X
/sbin/iptables -t raw -X
/sbin/iptables -t security -X
###on remet les compteurs à zéro
/sbin/iptables -t filter -Z
/sbin/iptables -t nat -Z
/sbin/iptables -t mangle -Z
/sbin/iptables -t raw -Z
/sbin/iptables -t security -Z
##ip6tables
###on efface toutes les règles
/sbin/ip6tables -t filter -F
#/sbin/ip6tables -t nat -F <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -F
/sbin/ip6tables -t raw -F
/sbin/ip6tables -t security -F
###on efface toutes les chaînes personnalisées de toutes les tables
/sbin/ip6tables -t filter -X
#/sbin/ip6tables -t nat -X <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -X
/sbin/ip6tables -t raw -X
/sbin/ip6tables -t security -X
###on remet les compteurs à zéro
/sbin/ip6tables -t filter -Z
#/sbin/ip6tables -t nat -Z <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -Z
/sbin/ip6tables -t raw -Z
/sbin/ip6tables -t security -Z
printf “%-2s[OK]\n”

#ÉTAPE 02: on paramètre la politique par défaut
echo -n “Application de la politique par défaut…”
##iptables
#/sbin/iptables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
#/sbin/iptables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P INPUT ACCEPT
#/sbin/iptables -t nat -P FORWARD ACCEPT <-- iptables: Bad built-in chain name
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
#/sbin/iptables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/iptables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/iptables -t raw -P OUTPUT ACCEPT
#/sbin/iptables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/iptables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/iptables -t security -P INPUT ACCEPT
/sbin/iptables -t security -P FORWARD ACCEPT
/sbin/iptables -t security -P OUTPUT ACCEPT
#/sbin/iptables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
##ip6tables
#/sbin/ip6tables -t filter -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t filter -P INPUT ACCEPT
/sbin/ip6tables -t filter -P FORWARD ACCEPT
/sbin/ip6tables -t filter -P OUTPUT ACCEPT
#/sbin/ip6tables -t filter -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t nat -P PREROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P INPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P FORWARD ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P OUTPUT ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
#/sbin/ip6tables -t nat -P POSTROUTING ACCEPT <–NON IMPLÉMENTÉ DANS IP6TABLES
/sbin/ip6tables -t mangle -P PREROUTING ACCEPT
/sbin/ip6tables -t mangle -P INPUT ACCEPT
/sbin/ip6tables -t mangle -P FORWARD ACCEPT
/sbin/ip6tables -t mangle -P OUTPUT ACCEPT
/sbin/ip6tables -t mangle -P POSTROUTING ACCEPT
/sbin/ip6tables -t raw -P PREROUTING ACCEPT
#/sbin/ip6tables -t raw -P INPUT ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t raw -P FORWARD ACCEPT <-- INEXISTANT
/sbin/ip6tables -t raw -P OUTPUT ACCEPT
#/sbin/ip6tables -t raw -P POSTROUTING ACCEPT <-- INEXISTANT
#/sbin/ip6tables -t security -P PREROUTING ACCEPT <-- INEXISTANT
/sbin/ip6tables -t security -P INPUT ACCEPT
/sbin/ip6tables -t security -P FORWARD ACCEPT
/sbin/ip6tables -t security -P OUTPUT ACCEPT
#/sbin/ip6tables -t security -P POSTROUTING ACCEPT <-- INEXISTANT
printf “%-2s[OK]\n”

#ÉTAPE 03: on désactive les blocages de connexion
echo -n “Désactivation des options de sécurité du noyau…”
for IPv6restore in /proc/sys/net/ipv6/conf//disable_ipv6;do echo 0 > $IPv6restore;done
echo 1 > /proc/sys/net/ipv4/ip_forward
for reversepathfilteringdisable in /proc/sys/net/ipv4/conf/
/rp_filter;do echo 0 > $reversepathfilteringdisable;done
for icmpacceptredirectenable in /proc/sys/net/ipv4/conf//accept_redirects;do echo 1 > $icmpacceptredirectenable;done
for icmpsecureredirectenable in /proc/sys/net/ipv4/conf/
/secure_redirects;do echo 1 > $icmpsecureredirectenable;done #les activer aide à contrer les attaques ManInTheMiddle
for icmpsendredirectenable in /proc/sys/net/ipv4/conf//send_redirects;do echo 1 > $icmpsendredirectenable;done
for sourceroutingenable in /proc/sys/net/ipv4/conf/
/accept_source_route;do echo 1 > $sourceroutingenable;done
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
printf “%-2s[OK]\n”

#ÉTAPE 04: on sauvegarde
echo -n “Sauvegarde de l’ensemble de règles…”
/sbin/iptables-save>/etc/init.d/mffw.off
printf “%-2s[OK]\n”

echo “±----------------------------------------------------------------------------+”
echo “| Firewall DÉSACTIVÉ |”
echo “±----------------------------------------------------------------------------+”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–stop’
;;
#début argument ‘–status’
–status)
#liste numérique (-n) détaillée (-v) des règles en fonction des chaînes (-L)
echo “”
echo “”
echo “±----------------------------------------------------------------------------+”
echo “| Rapport d’état d’iptables et ip6tables |”
echo “±----------------------------------------------------------------------------+”
echo “”
echo “”
echo “I. iptables:”
echo “”
echo “I.1. table ‘filter’:”
echo “”
/sbin/iptables -t filter -n -L -v
echo “”
echo “”
echo “I.2. table ‘nat’:”
echo “”
/sbin/iptables -t nat -n -L -v
echo “”
echo “”
echo “I.3. table ‘mangle’:”
echo “”
/sbin/iptables -t mangle -n -L -v
echo “”
echo “”
echo “I.4. table ‘raw’:”
echo “”
/sbin/iptables -t raw -n -L -v
echo “”
echo “”
echo “I.5. table ‘security’:”
echo “”
/sbin/iptables -t security -n -L -v
echo “”
echo “”
echo “”
echo “II. ip6tables:”
echo “”
echo “II.1. table ‘filter’:”
echo “”
/sbin/ip6tables -t filter -n -L -v
echo “”
echo “”
echo “II.2. table ‘nat’:”
echo “”
echo “Table nat non implémentée dans ip6tables.”
#/sbin/ip6tables -t nat -n -L -v <–NON IMPLÉMENTÉ DANS IP6TABLES
echo “”
echo “”
echo “II.3. table ‘mangle’:”
echo “”
/sbin/ip6tables -t mangle -n -L -v
echo “”
echo “”
echo “II.4. table ‘raw’:”
echo “”
/sbin/ip6tables -t raw -n -L -v
echo “”
echo “”
echo “II.5. table ‘security’:”
echo “”
/sbin/ip6tables -t security -n -L -v
echo “”
echo “”
echo “”
echo “Fin du rapport.”
echo “”
#on sort avec l’erreur 0
exit 0
#fin argument ‘–status’
;;
#début tout autre argument
*)
#message d’aide
echo “Utilisation: mffw --{start|stop|status}”
#on sort avec l’erreur 1
exit 1
#fin tout autre argument
;;
#fin du traitement des arguments donnés en option du lancement en ligne de commande
esac
[/code]

Désolé de ne pas avoir répondu plus tôt, je manque de temps.

Je pense au contraire que ce sont les limites ajoutées aux règles DNS, HTTP et HTTPS qui font “ramer” en bloquant des paquets à tort. D’ailleurs je vois que tu les as augmentées depuis le script précédent. Je ne vois pas de justification à ces limitations. Pourquoi les as-tu ajoutées ?

https://wiki.debian.org/LSBInitScripts
Il ne suffit pas de placer le script dans /etc/init.d, il faut ensuite l’activer avec [mono]update-rc.d[/mono].
Si le réseau est configuré par /etc/network/interfaces, ton script doit démarrer au runlevel S et non aux runlevels 2-5.

(Plus de détails plus tard quand j’aurais le temps).

Aucun souci, moi-même j’essaie de me dégager du temps pour me faire un bon pare-feu et ce n’est pas toujours évident.

[quote][quote]DarkGagan a écrit:
Question 1: ça rame un peu quand même (pas à mort comme quand les anti-scan sont activés) et je ne suis pas sûr que ça vienne des règles limitées, auriez-vous des idées?[/quote]
Je pense au contraire que ce sont les limites ajoutées aux règles DNS, HTTP et HTTPS qui font “ramer” en bloquant des paquets à tort. D’ailleurs je vois que tu les as augmentées depuis le script précédent. Je ne vois pas de justification à ces limitations. Pourquoi les as-tu ajoutées ?[/quote]
J’ai augmenté ces limites car certains sites ne passaient pas alors qu’ils passent tout légitimement sans limite.
J’ai mis ces limites pour contrer une DoS ou une DDoS. Tu as pu voir ceci aussi:

[code]# ###limitation du nombre de connexion au système

/sbin/iptables -t filter -A INPUT -m connlimit --connlimit-above 100 --connlimit-mask 32 --connlimit-daddr -j DROP

/sbin/iptables -t filter -A OUTPUT -m connlimit --connlimit-above 50 --connlimit-mask 32 --connlimit-saddr -j DROP[/code]

(Comme je pense que tu le sais déjà depuis des lustres :wink: ) C’est globalement une limitation de connexion mais au total, pas dans le temps, c’est son défaut par rapport au module limit. Il a cependant un avantage, les options --connlimit-daddr et --conlimit-saddr qui me servent à cibler mon PC. Je pense pouvoir ajouter ça à mes règles d’acceptation avec -s MON_IP et -d MON_IP mais je recherche une commande qui trouve MON_IP (extérieure ou intérieure?) automatiquement.

[quote][quote]DarkGagan a écrit:
je l’ai “pompé” sur un script tout fait, pouvez-vous m’expliquer à quoi ça sert? Selon ce que j’ai compris, si je place le script dans /etc/init.d, il est censé se lancer au démarrage avant le démarrage des interfaces réseau, or ce n’est pas le cas.[/quote]
wiki.debian.org/LSBInitScripts
Il ne suffit pas de placer le script dans /etc/init.d, il faut ensuite l’activer avec update-rc.d.
Si le réseau est configuré par /etc/network/interfaces, ton script doit démarrer au runlevel S et non aux runlevels 2-5.[/quote]
Voici mon /etc/network/interfaces:

[code]# This file describes the network interfaces available on your system

and how to activate them. For more information, see interfaces(5).

The loopback network interface

auto lo
iface lo inet loopback[/code]

Ce n’est donc pas là que mon réseau est géré.
Un “#ifdown eth0” ou un “#ifup eth0” semblent ne pas fonctionner non plus.
J’utilise Wheezy Gnome “normal” (pas classic), j’ai vu que ce serait NetworkManager qui gèrerait le réseau mais je ne trouve pas de trace d’une eth0 dans les fichiers.
Je suis curieux de savoir où et si on peut commander le réseau d’une Wheezy Gnome normal en ligne de commande car je compte ajouter une commande qui active le réseau après les règles iptables de démarrage du parefeu et une en première ligne qui le désactive quand on en demande l’arrêt. Parano? Moi? Nooooooooonnnn :whistle:

Edit: ce n’est pas /etc/networks non plus car pas de trace de eth0 :frowning:

[quote]
j’essaie de me dégager du temps pour me faire un bon pare-feu [/quote]
Tu as compris que ce que tu fait ne sert à rien de faste ?

Quant à désactiver IPv6 et ICMP echo request, c’est complétement débile.

[quote]
###blocage des connexions NEW non-SYN
echo 1 > /proc/sys/net/ipv4/tcp_syncookies[/quote]
Le commentaire est faux : les syncookies permettent de lutter contre les syn floods. Le configurer à 1 active les syncookies.

[quote]
###blocage des paquets fragmentés
/sbin/iptables -t filter -A INPUT -f -j DROP
/sbin/iptables -t filter -A OUTPUT -f -j DROP[/quote]
Pourquoi ?!

[quote]
#ÉTAPE 06 blabla[/quote]
Tu veux limiter ta bande passante utile ?
Tu aimes patienter devant le chargement d’une page ?

[quote]
#ÉTAPE 07 blabla[/quote]
Tu fait bien de le commenter : activer ce genre de truc permet à n’importe qui de mettre ton serveur à genoux d’une manière enfantine.

[quote][quote]Citation:
j’essaie de me dégager du temps pour me faire un bon pare-feu[/quote]

Tu as compris que ce que tu fait ne sert à rien de faste ?[/quote]
Ben si, à ce que mon PC ne puisse pas être attaqué facilement et transformé en zombie si je ne fais rien et laisse les éléments par défaut inactifs (iptables notamment), comme ça a été le cas sur un autre PC pourtant sous Debian et à jour, ce sans aller sur des sites type “nids à virus”/torrents pirates et compagnie… En plus j’apprends plein de choses sur l’administration réseau :wink:

IPv6: pourquoi l’activer si je ne m’en sers pas? (risque de sécurité non maîtrisé, je suis un OpenBSDiste refoulé :wink: )
ping: si on ne me voit pas sur un réseau, on ne me localise pas, on ne rentre pas dans mon PC et je suis (relativement) tranquille

[quote][quote]Citation:
###blocage des connexions NEW non-SYN
echo 1 > /proc/sys/net/ipv4/tcp_syncookies[/quote]

Le commentaire est faux : les syncookies permettent de lutter contre les syn floods. Le configurer à 1 active les syncookies.[/quote]
Les 2 sont liés. A ce que j’ai compris dans ce que j’ai lu: une nouvelle connexion est de type NEW dans la machine d’état (logique), mais peut avoir le flag SYN non actif et cette technique est utilisée par les méchants pour faire tomber un serveur (grosso-modo).
Je te l’accorde, le commentaire n’est pas assez précis, je vais reprendre celui d’une version précédente de mon script:

[code]# ###blocage des connexions NEW non-SYN (SYNflood)

echo 1 > /proc/sys/net/ipv4/tcp_syncookies[/code]

Cette règle va de pair avec celles-ci:

###blocage des connexions NEW non-SYN /sbin/iptables -t filter -A INPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP /sbin/iptables -t filter -A OUTPUT -p tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
C’est peut-être redondant. J’ai juste séparé la configuration noyau des règles iptables pour faire joli dans le formatage du script.

[quote]Citation: ###blocage des paquets fragmentés /sbin/iptables -t filter -A INPUT -f -j DROP /sbin/iptables -t filter -A OUTPUT -f -j DROP

Pourquoi ?![/quote]
Une contre-mesure à une autre technique d’attaque, je ne sais plus laquelle :frowning:

[quote]Citation: #ÉTAPE 06 blabla

Tu veux limiter ta bande passante utile ?
Tu aimes patienter devant le chargement d’une page ?[/quote]
Ben oui voyons, j’aime bien voir tourner le rond de chargement, en attendant béatement comme un Windowsien (que je fus) :laughing:
Plus sérieusement, les limitations sont contre le DoS et DDoS mais je n’ai pas trouvé de valeur concrète et comme le signale PascalHambourg, je vais probablement les augmenter, de combien je n’en sais rien en fait, à tester.

[quote]Citation: #ÉTAPE 07 blabla

Tu fait bien de le commenter : activer ce genre de truc permet à n’importe qui de mettre ton serveur à genoux d’une manière enfantine.[/quote]
Ben perso je ne sais pas faire, c’est seulement là pour les tests (visualisation des entrées et sorties de paquets via un dmesg) avec les soucis de paramétrage de mes règles DNS que j’ai eu plus haut dans le fil:

[code]# Spécifications (sans ordre particulier):

- 3 modes d’utilisation: start, stop, status

- ce qu’il n’y a pas: log (on n’est pas sur un serveur), NAT (on n’est pas sur un routeur), forward (idem), IPv6 (possibilités de filtrage plus limitées que sur IPv4)

- ce qu’il y a: protection contre certaines attaques, sécurisation générale du système (configuration du noyau en plus des règles iptables)[/code]

Ok

J’ai plusieurs remarques :

  • Concernant tes motivations, je ne suis pas d’accord (ormis pour l’aspect didactique), mais qu’importe
  • Concernant l’IPv6, tu devrait t’en servir … :slightly_smiling:
  • Concernant l’ICMP echo request: y’a d’autres solutions que l’ICMP pour savoir si quelqu’un est en ligne. tcpdump et arp par exemple;
  • Concernant les syncookies, si tu veux les désactiver (=les drop), il faut écrire 0 dans le fichier, pas 1
  • Concernant les fragments, je me demande si c’est le NIC qui fait la fragmentation. Dans ce cas, ton truc est bon, sinon, c’est néfaste
  • Concernant la limitation de pps, si tu veux pouvoir saturer ta connexion avec un wget, tu dois mettre des valeurs hautes. Et si tu mets des valeurs hautes, tu peux supprimer les lignes

Voila ma contribution à ton projet !

À mon humble avis, et si tu veux faire des choses géniales avec iptables, renseigne toi sur les sujets suivants :

  • générer des sflow concernant ton trafic, ce qui te permet de faire des graphes par destination, par type, par tout, sans conserver les données
  • faire un cluster de machine
  • modifier le contenu des paquets “on the fly” en fonction de certains motifs

C’est bien la preuve que cette limitation est contre-productive et devrait être supprimée. Elle n’a pas de sens.

Le défaut de ces limites sur DNS et HTTP, c’est qu’elle s’appplique aveuglément aux paquets et non aux connexions. En fait elle ne fait que brider ta bande passante.

Là encore, le défaut de cette limitation est qu’elle s’applique à tous les paquets (y compris ceux des connexions existantes) et non aux seuls paquets qui créent de nouvelles connexions. Accessoirement, il me semble que tu as interverti --connlimit-daddr et --conlimit-saddr.

Normal puisque eth0 n’est pas configurée dans /etc/network/interfaces sur lequel ifup et ifdown se basent.

NetworkManager peut être commandé en ligne de commande avec [mono]nmcli[/mono], inclus dans le paquet network-manager.

Ce fichier ne concerne en rien la configuration réseau. C’est une sorte d’équivalent du fichier /etc/hosts pour les réseaux.

Je suis d’accord avec la majorité des remarques d’Haleth. Comme annoncé dans ma première réponse, je voulais faire un commentaire exhaustif de ton script, mais j’ai renoncé car tu publies de nouvelles versions plus vite que je n’ai le temps de les étudier…