Je n'ai pas la prétention d'être un expert ern sécurité mais néanmoins, je me suis déjà intéressé au sujet, je vais donc te passer le script que j'emploie.
En premier lieu, un conseil : ton script, lance-le via les directives post-down et pre-up dans ton fichier /etc/network/interfaces. Cela te permettera d'avoir un firewall fonctionnel avant que n'importe quel service soit lancé.
Ensuite voici mon script (un peut plus long)
#!/bin/sh
# Début configuration
ICMP_PER_SEC=5 # Nombre max d'icmp par seconde
SCAN_PER_SEC=5 # Nombre max de scan de port par seconde
WAN_INTERFACE="eth0" # Interace(s) pour le wan (wired area network) : zone externe
LAN_INTERFACE="eth1" # Interface(s) pour le lan (Local area network) : zone interne
LOCAL_NETWORK="192.168.8.0/255.255.255.0" # Adresses du reseau local
LOCAL_BROADCAST="192.168.8.255" # Adresse locale de broadcast
LOG_PREFIX='[iptables DROP]' # Tag à ajouté lors du log de paquet droppé
# Fin configuration
init()
{
if [ `whoami` != "root" ]
then
echo "Vous devez être root pour éxecuter ce script"
exit 1
fi
# D'abord charger les modules nécessaires : dépend du kernel
# Réinitialisation
iptables -F # Supprime les chaînes de la table filter (INPUT, FORWARD et OUTPUT)
iptables -X # Supprime les chaînes personnelles de la table filter
iptables -t nat -F # Supprime les chaînes de la table nat (PREROUTING, OUTPUT et POSTROUTING)
iptables -t nat -X # Supprime les chaînes personnelles de la table nat
}
start()
{
init
# Politique par défaut
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Définition du comportement géneral de netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward # Active le forwarding des ip
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Refuse l'icmp broadcasting
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects # Refuse les redirections (protection contre les attaques mim) : changement de route
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Ignorer les paquets icmp invalide
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route # Refuse le routage par la source
echo 1 > /proc/sys/net/ipv4/conf/all/log_martians # Log des martiens activé
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter # Activation du filtre rp (protection contre ip spoofing)
echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Protection contre les syn flood
echo 0 > /proc/sys/net/ipv4/tcp_timestamps # Suppression des timestamps
# Evite quelques DOS avec des limites temporelles
echo 60 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog
# Gestion de la chaine INPUT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT # Autoriser la communicatio sur lo
iptables -A INPUT -i $WAN_INTERFACE -s $LOCAL_NETWORK -j DROP # Refuse tous paquets depuis l'extérieur prétendant être du réseau interne.
iptables -A INPUT -p icmp -d $LOCAL_BROADCAST -j DROP # Refuse le ping sur une adresse de broadcast
iptables -A INPUT -i $WAN_INTERFACE -p icmp --icmp-type echo-request -j DROP # Refuse les pings de l'extérieur
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit $ICMP_PER_SEC/s -j ACCEPT # Nombre de ping accepté par sec.
iptables -A INPUT -s $LOCAL_NETWORK -j ACCEPT # Accepte les paquets du reseau local
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Autoriser le trafic local
# Gestion de la chaine FORWARD
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -p icmp --icmp-type echo-request -o $LAN_INTERFACE -j DROP # Refuser les pings externes vers le reseau local
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit $SCAN_PER_SEC/s -j ACCEPT # Protection contre les scans de ports
iptables -A FORWARD -s $LOCAL_NETWORK -j ACCEPT # Autoriser le trafic local
iptables -A FORWARD -d $LOCAL_NETWORK -m state --state RELATED,ESTABLISHED -j ACCEPT
# Activation du routage / masquerade
iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -j MASQUERADE
iptables -A OUTPUT -m state --state INVALID -j DROP
# Autorise l'ouverture de connexion vers l'extérieur
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Loggé tout ce qui est droppé
iptables -A INPUT -j LOG --log-prefix "$LOG_PREFIX"
iptables -A OUTPUT -j LOG --log-prefix "$LOG_PREFIX"
iptables -A FORWARD -j LOG --log-prefix "$LOG_PREFIX"
}
stop()
{
init
# Politique par défaut : tout accepter ! Dangereux !
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# Activation du routage / masquerade
iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -j MASQUERADE
}
# installer un pare feu
Posté par Henry-Nicolas Tourneur . En réponse au message debian 3.1: installer un pare feu. Évalué à 2.
En premier lieu, un conseil : ton script, lance-le via les directives post-down et pre-up dans ton fichier /etc/network/interfaces. Cela te permettera d'avoir un firewall fonctionnel avant que n'importe quel service soit lancé.
Ensuite voici mon script (un peut plus long)
Voila déjà une bonne base de travail.