Lancer mon pare-feu fait maison au démarrage du serveur ?

Bonjour,

Ces dernières années j’ai surtout bossé avec CentOS et Slackware (et occasionnellement Ubuntu) sur des serveurs. J’ai utilisé Debian entre Potato et Sarge, mais j’ai un peu perdu la main. Alors voilà: j’aimerais utiliser mon pare-feu fait maison sur un serveur Debian. Jusque-là ça fonctionne à peu près comme ça devrait, juste que ça ne se lance pas au démarrage du serveur. J’aimerais faire les choses de façon plus ou moins propre et orthodoxe. Et bref, voici ce que j’ai.

  1. Quelques variables générales :

[code]# Fichier /etc/default/firewall

Démarrer le pare-feu : yes/no

FW_ACTIVE=yes

Démarrer le partage de connexion : yes/no

FW_MASQ=yes

Internet

IFACE_INET=eth0

Réseau local

IFACE_LAN=eth1
IFACE_LAN_IP=192.168.2.0/24[/code]

  1. Le script pour désactiver le pare-feu :

[code]#!/bin/bash

/etc/firewall/firewall-stop

Lire la configuration

. /etc/default/firewall
IPT=$(which iptables)
SYS=$(which sysctl)

Remettre iptables à zéro

$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P POSTROUTING ACCEPT -t nat
$IPT -P PREROUTING ACCEPT -t nat
$IPT -P OUTPUT ACCEPT -t nat
$IPT -F
$IPT -F -t nat
$IPT -X

Désactiver le partage de connexion

$SYS -q -w net.ipv4.ip_forward=0[/code]

  1. Le script pour l’activer :

[code]#!/bin/bash

/etc/firewall/firewall-start

Lire la configuration

. /etc/default/firewall
IPT=$(which iptables)
SYS=$(which sysctl)

if [ $FW_ACTIVE != “yes” ]; then
echo "Firewall disabled in /etc/default/firewall."
exit 0
fi

Remise à zéro de toutes les règles de pare-feu

. /etc/firewall/firewall-stop

Les connexions entrantes sont bloquées par défaut

$IPT -P INPUT DROP

Les connexions destinées à être routées sont acceptées par défaut

$IPT -P FORWARD ACCEPT

Les connexions sortantes sont acceptées par défaut

$IPT -P OUTPUT ACCEPT

Faire confiance à nous-mêmes ;o)

$IPT -A INPUT -i lo -j ACCEPT

Ping

$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT

Connexions établies

$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

FTP

/sbin/modprobe ip_conntrack_ftp

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 21 -j ACCEPT

SSH

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 22 -j ACCEPT

$IPT -A INPUT -p tcp -i $IFACE_INET --dport 22 -m state --state NEW \

-m recent --set --name SSH

$IPT -A INPUT -p tcp -i $IFACE_INET --dport 22 -m state --state NEW \

-m recent --update --seconds 60 --hitcount 2 --rttl --name SSH -j DROP

$IPT -A INPUT -p tcp -i $IFACE_INET --dport 22 -j ACCEPT

DNS

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 53 -j ACCEPT

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 53 -j ACCEPT

DHCP

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 67 -j ACCEPT

HTTP

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 80 -j ACCEPT

NTP

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 123 -j ACCEPT

CUPS

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 631 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 631 -j ACCEPT

Samba

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 135 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 137 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 138 -j ACCEPT

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 139 -j ACCEPT

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 445 -j ACCEPT

NFS

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 111 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 111 -j ACCEPT

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 2049 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 2049 -j ACCEPT

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 32765:32769 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 32765:32769 -j ACCEPT

Squid

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 3128 -j ACCEPT

$IPT -A INPUT -p udp -i $IFACE_LAN --dport 3128 -j ACCEPT

$IPT -t nat -A PREROUTING -i $IFACE_LAN -p tcp ! -d 192.168.2.1 \

–dport 80 -j REDIRECT --to-port 3128

Apt-Cacher

$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 3142 -j ACCEPT

Log

$IPT -A INPUT -j LOG --log-prefix "+++ IPv4 packet rejected +++ "
$IPT -A INPUT -j REJECT

Partage de connexion

if [ $FW_MASQ = ‘yes’ ]; then
$IPT -t nat -A POSTROUTING -o $IFACE_INET -s $IFACE_LAN_IP -j MASQUERADE
$SYS -q -w net.ipv4.ip_forward=1
fi[/code]

  1. Et enfin, un script pour intégrer tout ça dans le système Init-V:

[code]#!/bin/sh -e

Script d’initialisation /etc/init.d/firewall

BEGIN INIT INFO

Provides: firewall

Required-Start: networking

Required-Stop:

Default-Start: S

Short-Description: Start firewall and masquerading

END INIT INFO

Fonctions de base

. /lib/lsb/init-functions

Fonctions pour start, stop et restart

case “$1” in
start|restart)
log_begin_msg “Starting firewall and masquerading…”
. /etc/firewall/firewall-start
log_end_msg 0
;;
stop)
log_begin_msg “Stopping firewall and masquerading…”
. /etc/firewall/firewall-stop
log_end_msg 0
;;
*)
log_success_msg "Usage: xxx {start|stop|restart}"
exit 1
;;
esac
exit 0[/code]

Bien sûr, j’ai placé les droits d’exécution là où il fallait. À présent, lorsque j’invoque manuellement 'service firewall start|stop|restart, ça marche très bien (d’après iptables -L).

J’ai voulu lancer le pare-feu proprement au démarrage. Pour ce faire, je me suis servi de sysv-rc-conf.

[root@bernadette:~] # sysv-rc-conf --list firewall firewall 2:on 3:on 4:on 5:on

Malheureusement, cela n’a aucune incidence, et le pare-feu ne se lance pas au démarrage du serveur.

Quelqu’un a une idée de ce que j’ai bien pu oublier ici ?

Un gentil bonjour de la garrigue ensoleillée.

Salut,
Il faut regarder du côté de update-rc.d:

Mais je ne crois pas que cela va fonctionner sans ajouter les “INIT INFOS” dans ton script.

Par exemple:

[code]### BEGIN INIT INFO

Provides: iptables

Required-Start: mountall

Should-Start: $local_fs

Required-Stop:

Should-Stop:

X-Start-Before: networking

X-Stop-After: networking

Default-Start: S

Default-Stop: 0 6

Short-description: iptables

Description: Firewall[/code]

Merci. Effectivement, ça l’a fait. J’avoue qu’après Slackware (chmod 0755 /etc/rc.d/rc.trucmuche) et CentOS (chkconfig --level 2345 trucmuche on|off), je trouve la gestion des services un peu compliquée ici. Est-ce que quelqu’un peut m’indiquer une bonne doc ou c’est clairement expliqué ? J’ai invoqué update-rc comme c’était indiqué, mais j’ai eu un tas de messages d’erreur que mes options n’étaient pas conformes aux “LSB defaults”. Finalement j’y suis arrivé, mais j’avoue que ne ne sais pas trop comment j’ai fait.

wiki.debian.org/LSBInitScripts/D … yBasedBoot
wiki.debian.org/LSBInitScripts

J’ai regardé la doc, et c’est exactement ce que je cherchais. Merci pour le lien !