Bonjour !
Si tu souhaites installer manuellement des règles iptables, il faut tout d’abord utiliser un squelette qui loggue les différents paquets. Seuls ces logs t’aideront à voir ce qui ne va pas.
Personnellement, j’utilise ceci comme base :
[code]#!/bin/bash
Si pas de parametre passe derriere l’appel au script, on considere
qu’il faut activer le firewall
PARAM=$1
if [ “x$PARAM” == “x” ]; then
PARAM="on"
fi
Niveau (syslog) pour les logs du firewall
0 Emerg (emergency) ⇒ Systeme inutilisable
1 Alert ⇒ Une intervention immediate est necessaire
2 Crit (critical) ⇒ Erreur critique pour le systeme
3 Err (error) ⇒ Erreur de fonctionnement
4 Warning ⇒ Avertissement
5 Notice ⇒ Evenement normal meritant d’etre signale
6 Info (informational) ⇒ pour information seulement
7 Debug ⇒ Message de mise au point
8 none ⇒ Ignorer ce message
LOGLEVEL=“1”
Doit-on activer le debuggage ?
#DEBUG=“yes”
Interface internet
NETIF=“eth0”
Calcul de l’adresse Ip de $NETIF
NETIP=ip addr show $NETIF | grep "inet " | awk '{print $2}' | awk -F"/" '{print $1}'
LOGIF=echo "$NETIF" | tr '[:lower:]' '[:upper:]'
function Clean() {
# Honteusement pique dans les scripts FWBuilder
echo " - Nettoyage des regles"
cat /proc/net/ip_tables_names | while read table; do
iptables -t $table -L -n | while read c chain rest; do
if test “X$c” == “XChain”; then
iptables -t $table -F $chain
fi
done
iptables -t $table -X
done
cat /proc/net/ip6_tables_names | while read table; do
ip6tables -t $table -L -n | while read c chain rest; do
if test “X$c” == “XChain”; then
ip6tables -t $table -F $chain
fi
done
ip6tables -t $table -X
done
}
function Activate() {
# Script de firewall
echo ""
echo "** Activation du firewall **"
echo “”
# Positionnement de la politique par defaut
# /!\ ON DROPPE TOUT /!\
echo " - Politique par defaut (DROP)"
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP
# Nettoyage des regles
Clean;
# Regle pour le debuggage (Loggue tout avant toutes les autres regles)
# Ne pas activer en fonctionnement normal, cela genere beaucoup trop
# de logs.
if [ "$DEBUG" == "yes" ]; then
echo " - Debugging"
iptables -N DEBUG
iptables -A INPUT -j DEBUG
iptables -A FORWARD -j DEBUG
iptables -A OUTPUT -j DEBUG
iptables -A DEBUG -j LOG --log-level $LOGLEVEL --log-prefix "[DEBUG] "
ip6tables -N DEBUG
ip6tables -A INPUT -j DEBUG
ip6tables -A FORWARD -j DEBUG
ip6tables -A OUTPUT -j DEBUG
ip6tables -A DEBUG -j LOG --log-level $LOGLEVEL --log-prefix "[DEBUG] "
fi
# On autorise tout sur l'interface Loopback
echo " - Loopback"
iptables -N LOOPBACK
iptables -A INPUT -i lo -j LOOPBACK
iptables -A OUTPUT -o lo -j LOOPBACK
iptables -A LOOPBACK -j ACCEPT
ip6tables -N LOOPBACK
ip6tables -A INPUT -i lo -j LOOPBACK
ip6tables -A OUTPUT -o lo -j LOOPBACK
ip6tables -A LOOPBACK -j ACCEPT
# Autorise les paquest etablis et relatifs a la connexion en cours
echo " - Paquets etablis et relatifs"
iptables -N ESTREL
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ESTREL
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ESTREL
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ESTREL
iptables -A ESTREL -j ACCEPT
# loggue et droppe les paquets invalides
echo " - Paquest invalides"
iptables -N INVALID
iptables -A OUTPUT -m state --state INVALID -j INVALID
iptables -A INPUT -m state --state INVALID -j INVALID
iptables -A FORWARD -m state --state INVALID -j INVALID
iptables -A INVALID -j LOG --log-level $LOGLEVEL --log-prefix "[INVALID] "
iptables -A INVALID -j DROP
#########################################
# #
# Inserer ici vos regles de firewalling #
# #
#########################################
#########################################
# #
# Fin des regles personnalisees #
# #
#########################################
echo " - Dropper"
iptables -N DROPPER
iptables -A DROPPER -j DROP
ip6tables -N DROPPER
ip6tables -A DROPPER -j DROP
iptables -N DRP0.IN
iptables -A INPUT -i $NETIF -j DRP0.IN
iptables -A DRP0.IN -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER IN $LOGIF] "
iptables -A DRP0.IN -j DROPPER
iptables -N DRP0.FW
iptables -A FORWARD -i $NETIF -j DRP0.FW
iptables -A DRP0.FW -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER FW $LOGIF] "
iptables -A DRP0.FW -j DROPPER
iptables -N DRP0.OUT
iptables -A OUTPUT -o $NETIF -j DRP0.OUT
iptables -A DRP0.OUT -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER OUT $LOGIF] "
iptables -A DRP0.OUT -j DROPPER
# Dropper global
iptables -N DRP.IN
iptables -A INPUT -j DRP.IN
iptables -A DRP.IN -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER INPUT] "
iptables -A DRP.IN -j DROPPER
iptables -N DRP.FW
iptables -A FORWARD -j DRP.FW
iptables -A DRP.FW -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER FORWARD] "
iptables -A DRP.FW -j DROPPER
iptables -N DRP.OUT
iptables -A OUTPUT -j DRP.OUT
iptables -A DRP.OUT -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER OUTPUT] "
iptables -A DRP.OUT -j DROPPER
ip6tables -N DRP.IN
ip6tables -A INPUT -j DRP.IN
ip6tables -A DRP.IN -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER INPUT] "
ip6tables -A DRP.IN -j DROPPER
ip6tables -N DRP.FW
ip6tables -A FORWARD -j DRP.FW
ip6tables -A DRP.FW -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER FORWARD] "
ip6tables -A DRP.FW -j DROPPER
ip6tables -N DRP.OUT
ip6tables -A OUTPUT -j DRP.OUT
ip6tables -A DRP.OUT -j LOG --log-level $LOGLEVEL --log-prefix "[DROPPER OUTPUT] "
ip6tables -A DRP.OUT -j DROPPER
}
function Desactivate() {
# Script de firewall
echo ""
echo "** Desactivation du firewall **"
echo “”
# Positionnement de la politique par defaut
# /!\ ON ACCEPTE TOUT /!\
echo " - Politique par defaut (ACCEPT)"
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
# Nettoyage des regles
Clean;
}
Gestion des differents appels au script
case $PARAM in
-a|-activate|activate|on|start)
# Activation du firewall
Activate;
;;
-d|-desactivate|desactivate|off|stop)
# Desactivation du firewall
Desactivate;
;;
*)
echo ""
echo "Utilisation : $0 [on|off]"
echo ""
echo " Activation: -a | -activate | activate | on | start"
echo " Desactivation: -d | -desactivate | desactivate | off | stop"
echo “”
;;
esac
echo “”[/code]
Avec cela, tu auras des logs parlants, qui te permettront rapidement de voir ce qui bloque, sur quelle interface et dans quel sens.