Re: [firewall] iptables, le script parfait?
Le Thu, 01 Feb 2007 19:53:29 +0100
franck <joncourt_franck@yahoo.co.uk> a écrit:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> xtz.info@gmail.com wrote:
> > Bonjours,
> >
> > voilà, j'aimerai savoir si une personne avait fait un script
> > iptables pas mal? (parfait même)
> > qui bloque ce qu'il faut bloqué (SYN FLOOD, SCAN NULL....)
> > un peut comme iplog (qui enregistre les types d'attaque connues)
> > mais sans iplog...
> >
> > je vous remerci d'avance
> >
> >
>
> Bonsoir,
>
> tu peux jeter un coup d'oeil sur :
>
> http://smhteam.info/upload_wiki/firewall.tar.gz
>
> tu y trouveras peut etre ton bonheur. Je l'ai mis au point avec
> l'aide de la liste. Il ne correspondra pas forcement a tes besoins,
> mais tu peux surement reprendre des idees.
J'utilise le script en pièce jointe. Si vous pouviez donner votre avis dessus, ça m'intéresse...
Merci.
Gaëtan
#!/bin/sh -norc
###############################################################################
# NOM: iptable-final-1.sh
#
# COMMENTAIRE : Synthèse d'utilisation de ce qui a été vu dans le document
# (chapitre III-10-3)
#
# Ce script fait partie du document :
# "Firewall et sécurité d'un réseau personnel sous Linux"
# http://olivieraj.free.fr/fr/linux/information/firewall/
#
# Auteur: Olivier ALLARD-JACQUIN (http://olivieraj.free.fr/)
# Créé le : 2003/07/09 Dernière modification le : 2003/07/09
###############################################################################
# Adapté par Gaëtan PERRIER le 04/02/2004
###############################################################################
###############################################################################
# Variables globales
###############################################################################
# Paramètrage du réseau local (LAN = Local Area Network)
LAN_INTERFACE=lan ; # Interface réseau interne
LAN_IP=192.168.10.1 ; # Adresse réseau interne
LAN_NETWORK=192.168.10.0/24 ; # Réseau interne
LAN_BROADCAST=192.168.10.255 ; # Adresse de broadcast interne
# Paramètrage de la connexion Internet (WAN = Wild Area Network = Réseau Large)
WAN_INTERFACE=adsl ; # Interface réseau externe (Internet)
if [ -z "$@" ]; then
WAN_IP=`/sbin/ifconfig $WAN_INTERFACE | grep "inet adr" | sed "s/^[: a-z]*\([.0-9]*\).*/\1/g"` ; # Récupère l'adresse réseau externe (Internet)
elif [ "$@" == "boot" ]; then
WAN_IP=$new_ip_address
fi
WAN_NETWORK=0.0.0.0/0
#WAN_IP=10.0.0.1 ; # Adresse réseau externe (Internet)
#WAN_NETWORK=10.0.0.0/8 ; # Réseau externe (Internet)
# REMARQUE:
# Si vous utiliser une connexion par modem (RTC/RNIS/ADSL) pour vous connecter à Internet
# utilisez les variables ci-dessous. Elle permettrons à ce script de détecter
# automatiquement votre adresse IP Internet
#WAN_INTERFACE=ppp0 ; # Interface modem
#WAN_IP=`/sbin/ifconfig | grep "P-t-P" | sed "s/^[: a-z]*\([.0-9]*\).*/\1/g"` ; # Récupère l'adresse réseau externe (Internet)
#WAN_NETWORK=0.0.0.0/0
# Paramètrage de l'IP masquerading
# NAT=0 <=> Le NAT N'est PAS autorisé
# NAT=1 <=> Le NAT est autorisé
NAT=1
# Paramètrage du port forwarding
# PF=0 <=> Le port forwarding N'est PAS autorisé
# PF=1 <=> Le port forwarding est autorisé
PF=0
PF_PROTO=tcp ; # Type de frame
PF_PORT=80 ; # Port ouvert sur le WAN
PF_IP=192.168.0.2 ; # Adresse IP du serveur sur le LAN
# Autoriser XMULE?
# XMULE=0 <=> XMULE N'est PAS autorisé
# XMULE=1 <=> XMULE est autorisé
XMULE=0
XMULE_TCP_PORT=4662
XMULE_UDP_PORT=4672
# Autoriser Jabber?
# JABBER=0 <=> JABBER N'est PAS autorisé
# JABBER=1 <=> JABBER est autorisé
JABBER=1
JABBER_TCP_PORT=5222
JABBER_SSL_TCP_PORT=5223
# Autoriser Msn?
# MSN=0 <=> MSN N'est PAS autorisé
# MSN=1 <=> MSN est autorisé
MSN=1
MSN_TCP_PORT=1863
MSN_UDP_PORT=1863
MSN_TRANSFERT_TCP_PORT=6891:6900
MSN_TRANSFERT_UDP_PORT=6891:6900
MSN_VOIX_TCP_PORT=6901
MSN_VOIX_UDP_PORT=6901
# Autoriser MP9?
# MP9=0 <=> MP9 N'est PAS autorisé
# MP9=1 <=> MP9 est autorisé
MP9=1
MP9_TCP_CMD_PORT=26180
MP9_TCP_SMB_PORTS=137:139,445
MP9_TCP_FLUX_PORT=26134
MP9_IP=172.16.255.253
# Paramétrage du LOG
# LOG=LOG_IN <=> On log toutes les tentatives d'intrusions non autorisées
# LOG=LOG_OUT <=> On log toutes les tentatives de sortie non autorisées
# LOG=LOG_IN-OUT <=> On log toutes les tentatives d'entrées et sorties non autorisées
# LOG=ULOG_IN <=> On log (avec ULOG) toutes les tentatives d'intrusions non autorisée
# LOG=ULOG_OUT <=> On log (avec ULOG) toutes les tentatives de sorties non autorisées
# LOG=ULOG_IN-OUT <=> On log (avec ULOG) toutes les tentatives d'entrées et sorties non autorisées
# LOG=NONE <=> On ne log RIEN du tout
LOG=ULOG_IN-OUT
LOG_PREFIX=Netfilter
###############################################################################
###############################################################################
# A PARTIR DE CE POINT, VOUS N'AVEZ PLUS BESOIN DE CONFIGURER CE SCRIPT!!!
###############################################################################
###############################################################################
###############################################################################
# Initialisation de Netfilter
###############################################################################
# Initialise la table Filter (par défaut tout les échanges sont refusés)
echo "+ Initialisation de la table Filter"
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# Initialise la table NAT (par défaut tout les échanges sont activés)
echo "+ Initialisation de la table NAT"
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# Initialise la table Mangle (par défaut tout les échanges sont activés)
echo "+ Initialisation de la table Mangle"
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
echo "+ Desactivation du NAT"
echo 0 > /proc/sys/net/ipv4/ip_forward
###############################################################################
# Règles du localhost
# On NE fait PAS de restriction aux adresses IP source / destination 127.0.0.0
###############################################################################
echo "+ Règles du localhost"
iptables -t filter -A OUTPUT -o lo -p all -j ACCEPT
iptables -t filter -A INPUT -i lo -p all -j ACCEPT
###############################################################################
# Règles de conexion au reseau local
# Tout est autorisé
###############################################################################
echo "+ Règles du réseau local ($LAN_INTERFACE - $LAN_IP - $LAN_NETWORK)"
# Connexions firewall <-> réseau
iptables -t filter -A OUTPUT -o $LAN_INTERFACE -s $LAN_IP -d $LAN_NETWORK -p all -j ACCEPT
iptables -t filter -A INPUT -i $LAN_INTERFACE -s $LAN_NETWORK -d $LAN_IP -p all -j ACCEPT
# Connexions firewall <-> broadcast réseau
iptables -t filter -A OUTPUT -o $LAN_INTERFACE -s $LAN_IP -d $LAN_BROADCAST -p all -j ACCEPT
iptables -t filter -A INPUT -i $LAN_INTERFACE -s $LAN_BROADCAST -d $LAN_IP -p all -j ACCEPT
###############################################################################
# Règles de connexion à Internet
# Seul les connexions initialisés par la machine sont autorisées
# C'est le suivit de connexion
###############################################################################
# Chargement des modules pour le suivit de connexion
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
echo "+ Règles pour Internet ($WAN_INTERFACE - $WAN_IP - $WAN_NETWORK)"
iptables -t filter -A OUTPUT -o $WAN_INTERFACE -s $WAN_IP -d $WAN_NETWORK -p all -m state --state ! INVALID -j ACCEPT
iptables -t filter -A INPUT -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p tcp --tcp-flags ! ALL SYN -m state --state NEW,RELATED -j DROP #06/05/2006
iptables -t filter -A INPUT -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p all -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p tcp --destination-port auth -j REJECT --reject-with tcp-reset #06/05/2006
###############################################################################
# Règles pour le port forwarding
# Pour que le port forwarding soit activé, il faut la variable "$PF" soit à "1"
###############################################################################
if [ "$PF" == "1" ]; then
# Chargement des modules pour le port forwarding
modprobe iptable_nat
echo "+ Autorise le port forwardong de $WAN_IP:$PF_PORT -> $PF_IP:$PF_PORT"
iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p $PF_PROTO --dport $PF_PORT -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p $PF_PROTO --sport $PF_PORT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p $PF_PROTO --dport $PF_PORT -j DNAT --to-destination $PF_IP
iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d $PF_IP -p $PF_PROTO --dport $PF_PORT -j SNAT --to-source $LAN_IP
echo 1 > /proc/sys/net/ipv4/ip_forward
else
echo "+ Le port forwarding N'est PAS autorisé"
if [ "$NAT" == "0" ]; then
echo 0 > /proc/sys/net/ipv4/ip_forward
fi
fi
###############################################################################
# Règles pour l'IP masquerading
# Pour que le IP masquerading soit activé, il faut la variable "$NAT" soit à "1"
###############################################################################
if [ "$NAT" == "1" ]; then
# Chargement des modules pour l'IP masquerading
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
echo "+ Autorise l'IP masquerading de $LAN_NETWORK -> $WAN_NETWORK"
iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -m state --state ! INVALID -j ACCEPT
iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
else
echo "+ L'IP masquerading N'est PAS autorisé"
echo 0 > /proc/sys/net/ipv4/ip_forward
fi
###############################################################################
# Règles pour XMULE
###############################################################################
if [ "$XMULE" == "1" ]; then
echo "+ Règles pour XMULE"
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p tcp --dport $XMULE_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p udp --dport $XMULE_UDP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p tcp --sport $XMULE_TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p udp --sport $XMULE_UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
fi
###############################################################################
# Règles pour JABBER
###############################################################################
if [ "$JABBER" == "1" ]; then
echo "+ Règles pour JABBER"
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p tcp --dport $JABBER_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p tcp --sport $JABBER_TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p tcp --dport $JABBER_SSL_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p tcp --sport $JABBER_SSL_TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
fi
###############################################################################
# Règles pour MSN
###############################################################################
if [ "$MSN" == "1" ]; then
echo "+ Règles pour MSN"
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p tcp --dport $MSN_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p tcp --sport $MSN_TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p udp --dport $MSN_UDP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p udp --sport $MSN_UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p tcp --dport $MSN_TRANSFERT_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p tcp --sport $MSN_TRANSFERT_TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p udp --dport $MSN_TRANSFERT_UDP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p udp --sport $MSN_TRANSFERT_UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p tcp --dport $MSN_VOIX_TCP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p tcp --sport $MSN_VOIX_TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -d $WAN_IP -p udp --dport $MSN_VOIX_UDP_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -d $WAN_IP -p udp --sport $MSN_VOIX_UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
fi
###############################################################################
# Règles pour MP9
###############################################################################
if [ "$MP9" == "1" ]; then
echo "+ Règles pour MP9"
iptables -A INPUT -i $WAN_INTERFACE -s $MP9_IP -d $WAN_IP -p tcp --dport $MP9_TCP_CMD_PORT -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -s $WAN_IP -d $MP9_IP -p tcp --sport $MP9_TCP_CMD_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -s $MP9_IP -d $WAN_IP -p tcp -m multiport --dports $MP9_TCP_SMB_PORTS -m state --state ! INVALID -j ACCEPT
iptables -A OUTPUT -o $WAN_INTERFACE -s $WAN_IP -d $MP9_IP -p tcp -m multiport --sports $MP9_TCP_SMB_PORTS -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $WAN_INTERFACE -s $MP9_IP -d $WAN_IP -p icmp -m state --state ! INVALID -j ACCEPT
fi
###############################################################################
# Règles pour le log
###############################################################################
echo "+ Definition des logs ($LOG)"
case "$LOG" in
LOG_IN)
iptables -t filter -A INPUT -p all -j LOG --log-prefix $LOG_PREFIX
;;
LOG_OUT)
iptables -t filter -A OUTPUT -p all -j LOG --log-prefix $LOG_PREFIX
;;
LOG_IN-OUT)
iptables -t filter -A INPUT -p all -j LOG --log-prefix $LOG_PREFIX
iptables -t filter -A OUTPUT -p all -j LOG --log-prefix $LOG_PREFIX
;;
ULOG_IN)
iptables -t filter -A INPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX
;;
ULOG_OUT)
iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX
;;
ULOG_IN-OUT)
iptables -t filter -A INPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX
iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX
;;
esac
echo "+ ------====== SCRIPT TERMINE! ======------"
echo "+ Pour afficher votre configuration Netfilter, lancez:"
echo " - 'iptables -L -n -v' pour la table 'Filter'"
echo " - 'iptables -L -n -v -t nat' pour la table 'NAT'"
echo " - 'iptables -L -n -v -t mangle' pour la table 'Mangle'"
Reply to: