#!/bin/bash
# Script crée par Tourneur Henry-Nicolas (henry.nicolas@tourneur.be) sur Debian avec un kernel 2.4.27 d'origine
# Il se peut qu'il doive être adapté (modprobe et argument au kernel)
# 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.2.0/24 # Adresses du reseau local
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
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
# 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
iptables -t mangle -F # Supprime les chaînes de la table mangle
iptables -t mangle -X # Supprime les chaînes personnelles de la table mangle
}
start()
{
init
# Politique par défaut
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Il se peut que ces passages d'arguments aux kernel doivent être modifiés selon les cas d'utilisations
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)
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses # Ignoré 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
# Autoriser la communicatio sur lo
iptables -A INPUT -i lo --source 127.0.0.1 --destination 127.0.0.1 -j ACCEPT
# Autoriser le trafic local, on peut aussi faire du port par port.
iptables -A INPUT -s $LOCAL_NETWORK -j ACCEPT
iptables -A FORWARD -s $LOCAL_NETWORK -j ACCEPT
iptables -A FORWARD -d $LOCAL_NETWORK -j ACCEPT
# Autorise l'ouverture de connexion vers l'extérieur
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Autoriser la reception des connections établies (suivi de connection)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Activation du routage / masquerade
iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -j MASQUERADE
# Treshold pour le nombre de paquet icmp par seconde accepté du reseau local
iptables -A INPUT --source $LOCAL_NETWORK -p icmp --icmp-type echo-request -m limit --limit $ICMP_PER_SEC/s -j ACCEPT
# Protection contre les scans de ports
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit $SCAN_PER_SEC/s -j ACCEPT
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
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage : $0 {start | stop | restart }"
echo "Utiliser advise pour avoir un conseil sur l'emploi de ce script"
exit 1
;;
esac
exit 0
Partager