Digression Installation parefeu (iptables & ip6tables) "pour les nuls"

Merci dric64 pour ta réponse, j’ai clean le parfeudebian, je reprend tout depuis le début,j’ai fais plein de boulette, j’ai préféré pas cc.

J’ai tout réinstallé depuis le début.

Mais se qui est bizzare, je n’aperçoit pas cette ligne

[code]debian:/home/kei# iptables-save

Generated by iptables-save v1.4.2 on Tue Jun 8 17:34:31 2010

*filter
:INPUT DROP [42:6271]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [749:126136]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT
-A INPUT -j ULOG --ulog-prefix "[IPTABLES DROP IN] : "
-A FORWARD -j ULOG --ulog-prefix "[IPTABLES DROP FWD] : "
COMMIT

Completed on Tue Jun 8 17:34:31 2010

Generated by iptables-save v1.4.2 on Tue Jun 8 17:34:31 2010

*nat
:PREROUTING ACCEPT [3:1728]
:POSTROUTING ACCEPT [79:5182]
:OUTPUT ACCEPT [79:5182]
COMMIT

Completed on Tue Jun 8 17:34:31 2010

Generated by iptables-save v1.4.2 on Tue Jun 8 17:34:31 2010

*mangle
:PREROUTING ACCEPT [707:587069]
:INPUT ACCEPT [704:585341]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [749:126136]
:POSTROUTING ACCEPT [791:132407]
COMMIT

Completed on Tue Jun 8 17:34:31 2010

Generated by iptables-save v1.4.2 on Tue Jun 8 17:34:31 2010

*raw
:PREROUTING ACCEPT [707:587069]
:OUTPUT ACCEPT [749:126136]
COMMIT

Completed on Tue Jun 8 17:34:31 2010

[/code]

T’as du oublier de la rentrer

Les mauvaises manipulations,je commence à y être habitué. :075 , mais avant de la mettre j’ai préféré avoir confirmation, c’est se que je pensé aussi,l’avoir oublié.

Il est marrant ton chat :slight_smile:

Résultat.

[code]debian:/home/kei# iptables-save

Generated by iptables-save v1.4.2 on Tue Jun 8 19:26:52 2010

*filter
:INPUT DROP [37:5939]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [148:20976]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5222 -j ACCEPT
-A INPUT -j ULOG --ulog-prefix "[IPTABLES DROP IN] : "
-A FORWARD -j ULOG --ulog-prefix "[IPTABLES DROP FWD] : "
-A OUTPUT -j ULOG --ulog-prefix "[IPTABLES ACCEPT OUT] : "
COMMIT

Completed on Tue Jun 8 19:26:52 2010

Generated by iptables-save v1.4.2 on Tue Jun 8 19:26:52 2010

*nat
:PREROUTING ACCEPT [3:1728]
:POSTROUTING ACCEPT [28:1711]
:OUTPUT ACCEPT [28:1711]
COMMIT

Completed on Tue Jun 8 19:26:52 2010

Generated by iptables-save v1.4.2 on Tue Jun 8 19:26:52 2010

*mangle
:PREROUTING ACCEPT [135:73522]
:INPUT ACCEPT [132:71794]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [148:20976]
:POSTROUTING ACCEPT [185:26915]
COMMIT

Completed on Tue Jun 8 19:26:52 2010

Generated by iptables-save v1.4.2 on Tue Jun 8 19:26:52 2010

*raw
:PREROUTING ACCEPT [135:73522]
:OUTPUT ACCEPT [148:20976]
COMMIT

Completed on Tue Jun 8 19:26:52 2010

debian:/home/kei#

[/code] :049 :049

Salut,

Le sujet ayant refait surface j’en profite pour ouvrir le cahier des réclamations

1 - Pour un parefeu sans réseau :
2 - Pour un parefeu sur une machine serveur dhcp :
3 - Pour un parefeu sur une machine avec réseau sans dhcp :

Celui là est resté dans le stylo ou c’est la même chose que le 2 ?

Non, on attendait que tu l’ajoutes :smiling_imp:

[quote=“ggoodluck47”]Salut,
3 - Pour un parefeu sur une machine avec réseau sans dhcp :
[/quote]

nécessite dnsutils / net-tools
nécessite les modules LOG et conntrack d’iptables aussi (modprobe ipt_LOG / modprobe ipt_conntrack)

#!/bin/sh

IPT=/sbin/iptables

# on récupère les trois premiers segments l'ip de la machine où s'éxécute le script
# si l'ip est 192.168.0.40, on aura 192.168.0
IPSERV=`ifconfig eth0 | grep "inet adr" | sed 's/.*adr:\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`

# on fait pointer par défaut sur ACCEPT
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT

# on nettoie les tables
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F LOG_DROP
$IPT -X LOG_DROP

# on fait pointer par défaut sur DROP
$IPT -P INPUT DROP
$IPT -P FORWARD DROP

# La machine locale est sure
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# ne pas casser les connexions etablies
$IPT -t filter -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# on se protège des scan de port
$IPT -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Protection SYN flood
$IPT -t filter -A INPUT -i eth0 -p tcp --syn -m limit --limit 5/s -j ACCEPT
$IPT -t filter -A INPUT -i eth0 -p udp -m limit --limit 10/s -j ACCEPT

# Protection ping flood
$IPT -t filter -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPT -t filter -A INPUT -i eth0 -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT

# on accepte le traffique sur le réseaux interne tout en passant le tout par filter
# on sait jamais... si une machine était infecté
$IPT -t filter -A INPUT -i eth0 -p tcp --source $IPSERV.0/16 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A OUTPUT -o eth0 -p tcp --destination $IPSERV.0/16 -m state --state RELATED,ESTABLISHED -j ACCEPT

# ports en tcp
for PRT in 20 21 25 80 143
do
$IPT -t filter -A OUPUT -p tcp --dport $PRT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A INTPUT -p tcp --dport $PRT -m state --state RELATED,ESTABLISHED -j ACCEPT
done

# port en udp
# on est serveur dns
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUPUT -p udp --sport 53 -j ACCEPT
# on est client d'un serveur dns
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A OUPUT -p udp --dport 53 -j ACCEPT
# on est client d'un serveur ntp
iptables -t filter -A INPUT -p udp --sport 123 -j ACCEPT
iptables -t filter -A OUPUT -p udp --dport 123 -j ACCEPT

#Logs
$IPT -N LOG_DROP
$IPT -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : ' --log-level debug
$IPT -A LOG_DROP -j DROP
$IPT -t filter -A INPUT -j LOG_DROP
$IPT -t filter -A OUTPUT -j LOG_DROP
$IPT -t filter -A FORWARD -j LOG_DROP

en espérant que ce soit ça que vous vouliez :wink:

À partir de Squeeze le boot utilise un système basé sur des dépendances entre les scripts, le tuto ne marche donc plus pour les utilisateurs de Squeeze et Sid.

Logiquement ce qu’il faudrais c’est lancer le firewall avant ifupdown, l’arrêt on s’en fout royalement.
Voici mon script à titre d’exemple :

[code]### BEGIN INIT INFO

Provides: firewall

Required-Start:

Required-Stop:

Default-Start: S

Short-Description: Met en place le firewall avec iptables

Description: Start met en place les règles de firewall et stop les désactive

store permet de sauvegarder de nouvelles rêgles.

END INIT INFO

Author: Michel Barret michel.barret@gmail.com

Please remove the “Author” lines above and replace them

with your own name if you copy and modify this script.

Do NOT “set -e”

PATH should only include /usr/* if it runs after the mountnfs.sh script

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Firewall système"
RULES=’/etc/config_parefeu’

Protect the rules file

do_protect()
{
if [ -f “$RULES” ] && [ $(stat -c %a “$RULES”) -ne 600 ]; then
chmod 600 "$RULES"
fi
}

Function that starts the daemon/service

do_start()
{
do_protect
if [ -f “$RULES” ]; then
iptables-restore < "$RULES"
fi
}

Function that stops the daemon/service

do_stop()
{
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
}

do_store()
{
iptables-save > "$RULES"
do_protect
}

case “$1” in
start)
do_start
;;
stop)
do_stop
;;
status)
iptables -L
;;
store)
do_store
;;
*)
#echo “Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}” >&2
echo “Usage: firwall {start|stop|status|restart|force-reload}” >&2
exit 3
;;
esac

:[/code]

Ensuite il faut modifier l’entête /etc/init.d/ifupdown :

[code]#!/bin/sh -e

BEGIN INIT INFO

Provides: ifupdown

Required-Start: ifupdown-clean parfeu

Required-Stop: $local_fs

Default-Start: S

Default-Stop: 0 6

Short-Description: Prepare the system for taking up interfaces.

END INIT INFO[/code]

On ajoute “parfeu” (c’est le nom que j’ai donné à mon script) comme dépendance “Required-Start”.

Enfin il lance

Il serait plus propre de mettre en place un détournement de fichier pour être protégé des mises à jour du paquet ifupdown.

En reprenant ton script, j’ai toujours les messages d’erreurs :

[code]update-rc.d mon_parefeu defaults
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: mon_parefeu start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (S)
update-rc.d: warning: mon_parefeu stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none)
insserv: Script mon_parefeu is broken: incomplete LSB comment.
insserv: missing Required-Start:' entry: please add even if empty. insserv: missingRequired-Stop:’ entry: please add even if empty.
insserv: missing Default-Stop:' entry: please add even if empty. insserv: Script mon_parefeu is broken: incomplete LSB comment. insserv: missingRequired-Start:’ entry: please add even if empty.
insserv: missing Required-Stop:' entry: please add even if empty. insserv: missingDefault-Stop:’ entry: please add even if empty.
insserv: Script mon_parefeu is broken: incomplete LSB comment.
insserv: missing Required-Start:' entry: please add even if empty. insserv: missingRequired-Stop:’ entry: please add even if empty.
insserv: missing Default-Stop:' entry: please add even if empty. insserv: Script mon_parefeu is broken: incomplete LSB comment. insserv: missingRequired-Start:’ entry: please add even if empty.
insserv: missing Required-Stop:' entry: please add even if empty. insserv: missingDefault-Stop:’ entry: please add even if empty.
insserv: Script mon_parefeu is broken: incomplete LSB comment.
insserv: missing Required-Start:' entry: please add even if empty. insserv: missingRequired-Stop:’ entry: please add even if empty.
insserv: missing Default-Stop:' entry: please add even if empty. insserv: Script mon_parefeu is broken: incomplete LSB comment. insserv: missingRequired-Start:’ entry: please add even if empty.
insserv: missing Required-Stop:' entry: please add even if empty. insserv: missingDefault-Stop:’ entry: please add even if empty.
insserv: Script mon_parefeu is broken: incomplete LSB comment.
insserv: missing Required-Start:' entry: please add even if empty. insserv: missingRequired-Stop:’ entry: please add even if empty.
insserv: missing Default-Stop:' entry: please add even if empty. insserv: Script mon_parefeu is broken: incomplete LSB comment. insserv: missingRequired-Start:’ entry: please add even if empty.
insserv: missing Required-Stop:' entry: please add even if empty. insserv: missingDefault-Stop:’ entry: please add even if empty.
insserv: warning: current start runlevel(s) (2 3 4 5) of script mon_parefeu' overwrites defaults (S). insserv: Default-Stop undefined, assuming empty stop runlevel(s) for scriptmon_parefeu’

[/code]
Bon, il faut dire que l’ancien script marche toujours hein (les règles sont chargées au démarrage), mais les erreurs sont gênantes.

J’ai fais deux modification au script. J’ai vu après coup que j’avais oublié deux lignes.
Ensuite j’ai modifié la fonction do_protect parce que le script est lancé (chez moi) à un moment où le système de fichier est monté en lecture seule.

Ajout d’une ligne Default-Stop pour retirer une erreur, et petite correction de faute de frappe dans la partie “usage” :

[code]### BEGIN INIT INFO

Provides: firewall

Required-Start:

Required-Stop:

Default-Start: S

Default-Stop:

Short-Description: Met en place le firewall avec iptables

Description: Start met en place les règles de firewall et stop les désactive

store permet de sauvegarder de nouvelles rêgles.

END INIT INFO

Author: Michel Barret michel.barret@gmail.com

Please remove the “Author” lines above and replace them

with your own name if you copy and modify this script.

Do NOT “set -e”

PATH should only include /usr/* if it runs after the mountnfs.sh script

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Firewall système"
RULES=’/etc/config_parefeu’

Protect the rules file

do_protect()
{
if [ -f “$RULES” ] && [ $(stat -c %a “$RULES”) -ne 600 ]; then
chmod 600 "$RULES"
fi
}

Function that starts the daemon/service

do_start()
{
do_protect
if [ -f “$RULES” ]; then
iptables-restore < "$RULES"
fi
}

Function that stops the daemon/service

do_stop()
{
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT
}

do_store()
{
iptables-save > "$RULES"
do_protect
}

case “$1” in
start)
do_start
;;
stop)
do_stop
;;
status)
iptables -L
;;
store)
do_store
;;
*)
#echo “Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}” >&2
echo “Usage: firewall {start|stop|status|restart|force-reload}” >&2
exit 3
;;
esac

:
[/code]
Mais toujours ceci comme erreur :

update-rc.d mon_parefeu defaults update-rc.d: using dependency based boot sequencing update-rc.d: warning: mon_parefeu start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (S) update-rc.d: warning: mon_parefeu stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none) insserv: warning: current start runlevel(s) (2 3 4 5) of script `mon_parefeu' overwrites defaults (S). insserv: warning: current stop runlevel(s) (0 1 6) of script `mon_parefeu' overwrites defaults (empty).
Que des warnings, donc c’est cool, mais allez savoir… Peut-être devrions nous plutot utiliser cron pour le démarrage du parefeu?

[quote=“thuban”]Mais toujours ceci comme erreur :

update-rc.d mon_parefeu defaults update-rc.d: using dependency based boot sequencing update-rc.d: warning: mon_parefeu start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (S) update-rc.d: warning: mon_parefeu stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none) insserv: warning: current start runlevel(s) (2 3 4 5) of script `mon_parefeu' overwrites defaults (S). insserv: warning: current stop runlevel(s) (0 1 6) of script `mon_parefeu' overwrites defaults (empty). [/quote]
Si tu regarde les scripts d’à coté genre /etc/init.d/ifupdown, tu vois un “Default-Start: S” ?

C’est pas tellement logique on cherche pas à le lancer periodiquement.

Salut,

Favoritisme : moi il bougonne sous prétexte que je n’ai rien mis en Required-start & stop !

BEGIN INIT INFO

Provides: firewall

Required-Start:

Required-Stop:

Default-Start: S

Default-Stop:

Short-Description: Met en place le firewall avec iptables

Description: Start met en place les règles de firewall et stop les désactive

store permet de sauvegarder de nouvelles rêgles.

END INIT INFO

@Misterfreeze : Pour cron, je pensais à la solution proposée avant sur le wiki de debian facile (la page n’est plus dispo… ça me rend super crédible :smiley: )
Mais, dans le script que tu propose, tu as bien mis un S dans le default-start, non? Il faut mieux mettre 2 plutot?

@ggoodluck : Il s’agit de warnings ou d’erreurs?

des fois que… j’ai revu mon script qui possède de multiples erreurs…
La passerelle réseaux est en .1, et un serveur mail se situe en .254
Je permet web, ftp, ssh, mail, puis les requetes whois/dns/ntp
Le script est tel qu’il récupère au début l’ip de la machine (histoire d’éviter d’avoir à modifier le script à chaque mise en place sur une machine du réseau)

#!/bin/sh

### BEGIN INIT INFO
# Provides: filtre réseaux
# Required-Start: $network
# Required-Stop: 
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: rc-firewall standard
# Description: Règles iptables standard linux
### END INIT INFO

IPT=/sbin/iptables
IPSERV=`ifconfig eth0 | grep "inet adr" | sed 's/.*adr:\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`

case "$1" in
start)
clear
printf "\n-----------------------------------------"
printf "\n|           Firewall Starting            |"
printf "\n-----------------------------------------"
printf "\n"

# on fait pointer par défaut sur ACCEPT
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# on nettoie
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F LOG_DROP
$IPT -X LOG_DROP

# on fait pointer par défaut sur DROP
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# La machine locale est sure
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# ne pas casser les connexions etablies
$IPT -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# on se protège des scan de port
$IPT -t filter -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Protection SYN flood
$IPT -t filter -A INPUT  -p tcp --syn -m limit --limit 5/s -j ACCEPT
$IPT -t filter -A INPUT  -p udp -m limit --limit 10/s -j ACCEPT

# Protection ping flood
$IPT -t filter -A INPUT  -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPT -t filter -A INPUT  -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT

##################################################

#######
# SSH #
#######

# Client ssh
$IPT -A INPUT -p tcp --sport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT

##################################################

########
# Mail #
########

# SMTP
$IPT -t filter -A INPUT -p tcp --sport 25 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 25 -m state --state RELATED,ESTABLISHED -j ACCEPT

# IMAP
$IPT -t filter -A INPUT -p tcp --sport 143 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 143 -m state --state RELATED,ESTABLISHED -j ACCEPT

##################################################

#######
# DNS #
#######

$IPT -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -p udp --sport 53 -j ACCEPT
$IPT -A INPUT -p tcp --dport 53 -j ACCEPT
$IPT -A OUTPUT -p tcp --sport 53 -j ACCEPT

$IPT -A INPUT -p udp --sport 53 -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -p tcp --sport 53 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 53 -j ACCEPT

##################################################

#######
# NTP #
#######

# on est client NTP
$IPT -A INPUT -p tcp --sport 123 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 123 -m state --state RELATED,ESTABLISHED -j ACCEPT

##################################################

#########
# Whois #
#########

$IPT -A INPUT -p tcp --sport 43 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 43 -j ACCEPT

##################################################

#######
# Web #
#######

# on est client Web
$IPT -A INPUT -p tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT

##################################################

#######
# FTP #
#######

# on est client FTP
$IPT -A INPUT -p tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT

##################################################

$IPT -A INPUT -i eth0 --source $IPSERV.1 -j ACCEPT
$IPT -A OUTPUT -o eth0 --destination $IPSERV.1 -j ACCEPT
$IPT -A INPUT -i eth0 --source $IPSERV.254 -j ACCEPT
$IPT -A OUTPUT -o eth0 --destination $IPSERV.254 -j ACCEPT

#Logs
$IPT -N LOG_DROP
$IPT -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : ' --log-level debug
$IPT -A LOG_DROP -j DROP
$IPT -t filter -A INPUT -j LOG_DROP
$IPT -t filter -A OUTPUT -j LOG_DROP
$IPT -t filter -A FORWARD -j LOG_DROP

exit 0
;;

stop)
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F LOG_DROP
$IPT -X LOG_DROP
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
clear
printf "\n-----------------------------------------"
printf "\n|         Firewall Stopped              |"
printf "\n-----------------------------------------"
printf "\n"
exit 0
;;

restart)

exit 0
;;

*)
echo "Utilisation: /etc/init.d/netfilter {start|stop}"
exit 1
;;

esac

si vous avez des remarques… :wink:

Es-tu sûr que l’interface réseau s’appelle eth0 sur toutes les machines ?
Que toutes les machines sont installées avec la langue française par défaut ? En VO (sans langue installée ou anglais), ifconfig affiche “inet addr” (comme “address”) et non “inet adr” (comme “adresse”), donc ta récupération d’adresse ne marcherait pas. Accessoirement le mélange d’anglais et de français dans la sortie d’ifconfig est quelque peu incongru.

  • AMA les limites sur le ping sont beaucoup trop basses.
  • Ta règle “protection syn flood” est un trou de sécurité puisqu’elle accepte n’importe quel port. Elle devrait bloquer les paquets hors limite plutôt qu’accepter les paquets en dessous de la limite sans autre vérification.
  • Inutile de répéter les règles avec RELATED,ESTABLISHED pour chaque port puisqu’il y a déjà une règle globale en début de chaîne, donc ça ne sert à rien.
  • Tes règles DNS et Whois sont un trou béant : on peut se connecter à n’importe quel port local depuis l’extérieur avec le port source 53 en TCP et UDP ou 43 en TCP.
  • Les règles FTP sur le port 20 sont inutiles et dangereuses, il vaut mieux charger le module de suivi de connexion FTP nf_conntrack_ftp.
  • Je ne vois pas de règle pour les paquets créant une nouvelle connexion (state NEW), donc les règles acceptant les paquets suivants (state ESTABLISHED,RELATED) risquent de ne pas de servir à grand chose puisqu’il n’y aura pas de paquet suivant.
    Bref, y a encore du boulot.

Le principe de base pour utiliser le suivi de connexion, c’est :

  • une règle globale dans INPUT et OUTPUT pour accepter tous les paquets appartenant ou liés à une connexion existante (state ESTABLISHED,RELATED) en début de chaîne (plus efficace car c’est la majorité des paquets)
  • des règles dans OUTPUT pour accepter les paquets créant une nouvelle connexion (state NEW) sortante vers les protocole/ports/types ICMP autorisés
  • des règles dans INPUT pour accepter les paquets créant une nouvelle connexion (state NEW) entrante vers les protocole/ports/types ICMP autorisés

Pascal, puisque te voilà revenu, peux-tu me dire si le parefeu (SIMPLISSIME) originel de ce tuto est fautif ou non.
Je sais que tu me l’as déjà fais améliorer mais je voudrais confirmation : est-ce qu’avec ce parefeu on est couvert, un peu ou pas du tout :?/
le lien :
http://forum.debian-fr.org/viewtopic.php?f=8&t=1901

Le jeu de règles est simple mais solide, c’est la base. Pas la peine de se lancer dans des fioritures genre protection anti synflood et scan si la gestion basique des flux de communication n’est pas gérée correctement.

Il y a juste la règle concernant ICMP dont il me semble avoir déjà écrit tout le mal que je pensais. J’aurais aussi installé le script avec update-rc.d dans le runlevel S avec un numéro inférieur à 40 plutôt que dans les runlevels par défaut (2345) afin que le pare-feu soit actif avant le démarrage des interfaces réseau. Pour finir, je trouve certaines descriptions un peu nébuleuses (pour ne pas dire fumeuses) :

  • “Pour un parefeu sans réseau” ; euh, c’est quoi l’intérêt d’un pare-feu s’il n’y a pas de réseau ? D’après les règles je pense que tu voulais dire “pour un hôte (station ou serveur)” non routeur".

  • “Pour un parefeu sur une machine serveur dhcp” alors qu’il n’y a pas de règle concernant DHCP ? Je pense que tu voulais dire “pour une machine faisant office de routeur avec NAT”.

  • “A INPUT -i lo -j ACCEPT ((C’est la communication du noyau avec les services réseau éventuels, et c’est critique))” ??? C’est pour les communications IP entre processus locaux s’exécutant sur la machine, rien à voir avec le noyau.

Ok pour tout, je vais modifier en fonction dès que possible (travail urgent en ce moment)
pour ce qui suit, par quoi dois-je le remplacer, s’il y a lieu ?

- "A INPUT -i lo -j ACCEPT ((C'est la communication du noyau avec les services réseau éventuels, et c'est critique))" ??? C'est pour les communications IP entre processus locaux s'exécutant sur la machine, rien à voir avec le noyau.

“C’est la communication du noyau avec les services réseau éventuels” pourrait être remplacé par quelque chose du genre “C’est pour les communications IP entre processus locaux s’exécutant sur la machine”. Je ne suis pas certain que ce soit plus clair pour tout le monde, mais au moins c’est plus correct.