[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

pb script iptables



Bonjour,

Sur une machine Debian AMD64, je rencontre un problème plutôt bizarre
avec un script iptables. Le script n'arrive pas à s'exécuter jusqu'au
bout et reste bloqué.

Je ne crois pas que ce soit un problème de syntaxe puisque je n'ai aucun
message d'erreur et que le dit script fonctionne sans problème sur une
autre machine ( Athlon XP ). Pire, je n'ai aucun soucis lorsque
j'exécute mes commandes iptables les unes après les autres à la main mais
vous vous doutez bien que c'est loin d'être pratique.

Si quelqu'un dans l'assemblée, à défaut d'avoir la solution, peut
m'indiquer dans quel sens chercher, je suis preneur :-)

Merci,

Oumar

-- 
One OS to rule them all,
One OS to find them.
One OS to call them all,
And in salvation bind them.
In the bright land of Linux,
Where the hackers play.
(J. Scott Thayer, with apologies to J.R.R.T.)
#!/bin/sh

# /etc/network/firewall/fw_serveur 
#
# Auteur original:
#       Pascal Hambourg <pascal.mail(at)plouf.fr.eu.org>
# Adapte par:
#       Oumar Niane <jpon(at)jpon.org>

#=============#
# definitions #
#=============#

# nom de l'interface vers le reseau exterieur (a adapter)
IF_WAN="eth1"

#=====================================#
# initialisation des tables & chaines #
#=====================================#

# politiques par defaut des chaines de la table 'filter' : bloquer
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# vidage des chaines des 3 tables filter, nat & mangle
iptables -F
iptables -t nat -F
iptables -t mangle -F

# suppression des chaines utilisateur des 3 tables
iptables -X
iptables -t nat -X
iptables -t mangle -X

# politiques par defaut des chaines de la table 'nat' : accepter
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# politiques par defaut des chaines de la table 'mangle' : accepter
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

#========================================#
# initialisation des parametres du noyau #
#========================================#

# par defaut le serveur n'est pas un routeur : routage IP desactive
echo "0" > /proc/sys/net/ipv4/ip_forward

# activer le reverse path filtering contre le spoofing IP source
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/$IF_WAN/rp_filter

# ignorer les ICMP "redirect"
echo "0" > /proc/sys/net/ipv4/conf/$IF_WAN/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$IF_WAN/secure_redirects

# ignorer les ICMP "echo request" (ping) sur l'adresse de broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#================================#
# connexions acceptees en entree #
#================================#

# On va logguer avant de dropper

iptables -N log_and_drop
iptables -A log_and_drop -j ULOG --ulog-prefix="[IPTABLES DROP] : "
iptables -A log_and_drop -j DROP

# cette chaine contient les types de paquets NEW acceptes en entree
iptables -N in_accept

# les regles sont definies dans le script 'fw_accept'
# relancer ce script apres modification des connexions acceptees
/etc/network/firewall/fw_accept

#================================#
# traitement des paquets rejetes #
#================================#

# paquets TCP rejetes : emission limitee de TCP RST sauf si RST
iptables -N reject_tcp
iptables -A reject_tcp -p tcp --tcp-flags RST NONE -m limit --limit 10/s -j REJECT --reject-with tcp-reset
iptables -A reject_tcp -j log_and_drop

# paquets UDP rejetes : emission limitee d'ICMP "port unreachable"
iptables -N reject_udp
iptables -A reject_udp -m limit --limit 10/s -j REJECT --reject-with icmp-port-unreachable
iptables -A reject_udp -j log_and_drop

# chaine de traitement de tous les type de paquets IP rejetes
iptables -N reject
iptables -A reject -p tcp -j reject_tcp
iptables -A reject -p udp -j reject_udp
iptables -A reject -p icmp -j log_and_drop
# autres protocoles : emission limitee ICMP "protocol unreachable"
iptables -A reject -m limit --limit 10/s -j REJECT --reject-with icmp-proto-unreachable
iptables -A reject -j log_and_drop

#======================================#
# traitement des paquets NEW en entree #
#======================================#

# chaine de traitement des paquets INPUT NEW sur l'interface wan
iptables -N in_wan_new
# accepte les protocoles et ports autorises
iptables -A in_wan_new -j in_accept
# accepte avec limite les ICMP "echo request" (ping)
iptables -A in_wan_new -p icmp --icmp-type echo-request -m limit --limit 5/s -j ACCEPT
iptables -A in_wan_new -j reject

#==========================================#
# traitement des paquets RELATED en entree #
#==========================================#

# connexions TCP RELATED : accepte connexions sur ports non privilegies
iptables -N related_tcp
iptables -A related_tcp -p tcp --syn --dport 1024: -j ACCEPT
# accepte les paquets RST
iptables -A related_tcp -p tcp --tcp-flags RST RST -j ACCEPT
iptables -A related_tcp -j reject_tcp

# connexions UDP RELATED : accepte connexions sur ports non privilegies
iptables -N related_udp
iptables -A related_udp -p udp --dport 1024: -j ACCEPT
iptables -A related_udp -j reject_udp

# paquets ICMP RELATED : 4 types acceptes, le reste bloque
iptables -N related_icmp
iptables -A related_icmp -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A related_icmp -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A related_icmp -p icmp --icmp-type source-quench -j ACCEPT
iptables -A related_icmp -p icmp --icmp-type parameter-problem -j ACCEPT
iptables -A related_icmp -j log_and_drop

# chaine de traitement des paquets RELATED
iptables -N related
iptables -A related -p tcp -j related_tcp
iptables -A related -p udp -j related_udp
iptables -A related -p icmp -j related_icmp
# autres protocoles : accepte
iptables -A related -j ACCEPT

#=======================#
# regles des interfaces #
#=======================#

# interface de loopback : accepte tout
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# interface WAN

# traitement INPUT WAN : filtrage a etats des paquets entrants
iptables -N in_wan
iptables -A in_wan -m state --state ESTABLISHED -j ACCEPT
iptables -A in_wan -m state --state NEW -j in_wan_new
iptables -A in_wan -m state --state RELATED -j related
# le reste (state INVALID) => bloque
iptables -A in_wan -j log_and_drop
iptables -A INPUT -i $IF_WAN -j in_wan

# traitement OUTPUT WAN : accepte tout
iptables -N out_wan
iptables -A out_wan -j ACCEPT
iptables -A OUTPUT -o $IF_WAN -j out_wan

# fin

Reply to: