« Parefeu Simplifié » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Ligne 58 : Ligne 58 :
#------------------------VARIABLES-------------------------------------#
#------------------------VARIABLES-------------------------------------#
readonly IPTABLES=/sbin/iptables
readonly IPTABLES=/sbin/iptables
. /lib/lsb/init-functions


# Services que le système offrira au réseau, à séparer avec des espaces
# Services que le système offrira au réseau, à séparer avec des espaces
Ligne 86 : Ligne 88 :
# Vidage
# Vidage
fw_clear
fw_clear
echo "Parefeu - Suppression des règles : [OK]"
# Parefeu - Suppression des règles
   
   
# Interdictions
# Interdictions
Ligne 93 : Ligne 95 :
$IPTABLES -t filter -P OUTPUT DROP
$IPTABLES -t filter -P OUTPUT DROP
   
   
echo "Parefeu - interdictions générales établies : [OK]"
# Parefeu - interdictions générales établies
   
   
# Loopback
# Loopback
Ligne 127 : Ligne 129 :
$IPTABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT
done
done
echo "Parefeu - Mise en place des règles : [OK]"
# Parefeu - Mise en place des règles
   
   
if $ISROUTERNAT ; then
if $ISROUTERNAT ; then
Ligne 135 : Ligne 137 :
$IPTABLES -A FORWARD -o $ethy -j ACCEPT
$IPTABLES -A FORWARD -o $ethy -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE
  echo "Parefeu - Routeur avec NAT : [OK]"
  # Parefeu - Routeur avec NAT
fi
fi
   
   
Ligne 142 : Ligne 144 :
$IPTABLES -t filter -A INPUT -j LOG --log-level=4
$IPTABLES -t filter -A INPUT -j LOG --log-level=4
   
   
echo "Parefeu - Logging : [OK]"
# Parefeu - Logging
}
}
   
   
Ligne 152 : Ligne 154 :
#$IPTABLES -P FORWARD DROP
#$IPTABLES -P FORWARD DROP
#$IPTABLES -P OUTPUT ACCEPT
#$IPTABLES -P OUTPUT ACCEPT
echo "Arrêt du parefeu : [OK]"
iptables-save > /etc/firewall
}
}
   
   
Ligne 184 : Ligne 186 :
case "$1" in
case "$1" in
start|restart)
start|restart)
echo "Starting firewall.."
log_daemon_msg "Starting firewall.."
  fw_start
  fw_start
echo "done."
log_end_msg $?
  ;;
  ;;
stop)
stop)
echo "Stopping firewall.."
log_daemon_msg "Stopping firewall.."
  fw_stop
  fw_stop
echo "done."
log_end_msg $?
  ;;
  ;;
clean)
clean)
  echo "Clearing firewall rules.."
  log_daemon_msg "Clearing firewall rules.."
  fw_clear
  fw_clear
echo "done."
log_end_msg $?
  ;;
  ;;
status)
status)
echo "Firewall status"
log_daemon_msg "Firewall status"
fw_status
fw_status
;;
;;
*)
*)
  echo "Usage: $0 {start|stop|restart|clean|status}"
  log_action_msg "Usage $0 {start|stop|restart|clean|status}"
  exit 1
  exit 1
  ;;
  ;;

Version du 9 mai 2012 à 06:20

Introduction

La méthode proposée ici pose parfois souci lors d'un changement de version du noyau, qui ne comprend pas les règles enregistrées avec iptables-save comme il faut.

Dans la suite, vous trouverez un script permettant d'établir les règles à chaque démarrage. De plus, ce script ajoute par défaut un enregistrement des erreurs dans les logs, ce qui facilite la surveillance avec logwatch par exemple. Si à l'avenir vous souhaitez ajoutez ou supprimer certaines règles, vous verrez que le script est construit de façon à faciliter ce genre d'opération.

Installation du Pare-feu

Attention, les commandes suivantes sont à exécuter avec les droits superutilisateur Copiez-collez le script suivant dans /etc/init.d/mon_parefeu. Ensuite, rendez ce script éxécutable :

chmod +x /etc/init.d/mon_parefeu

Puis activer le chargement du script au démarrage :

insserv mon_parefeu

Le script

#!/bin/sh

      1. BEGIN INIT INFO
  1. Provides: mon_parefeu
  2. Required-Start: $local_fs
  3. Should-Start:
  4. Required-Stop: $local_fs
  5. Should-Stop:
  6. X-Start-Before: $network
  7. X-Stop-After: $network
  8. Default-Start: S
  9. Default-Stop: 0 6
  10. Short-description: Configure le parefeu
  11. Description: Met en place les règles iptables.
      1. END INIT INFO
  1. ------------------------Explications----------------------------------#
  2. Défauts :
  3. - Cette configuration s'applique à toutes les interfaces réseau.
  4. Si vous voulez restreindre cela à une interface donnée,
  5. utilisez '-i INTERFACE' dans la variables $IPTABLES.
  6. - Par défaut, le script autorise tout en sortie.
  7. Pour changer ce comportement veuillez indiquer les numéros
  8. de port en question dans les variables
  9. $REMOTE_TCP_SERVICES
  10. et/ou $REMOTE_UDP_SERVICES
  11. - Pour configurer une machine routeur,
  12. changez la valeur de la variable
  13. ISROUTERNAT à true, ainsi que
  14. les interfaces ethx et ethy selon votre configuration
  15. ethx correspond à l'interface du LAN
  16. ethy correspond à l'interface reliée à la truc-box
  17. description: Active/Désactive le pare-feu au démarrage
  18. ----------------------------------------------------------------------#
  1. ------------------------VARIABLES-------------------------------------#

readonly IPTABLES=/sbin/iptables

. /lib/lsb/init-functions

  1. Services que le système offrira au réseau, à séparer avec des espaces
  2. ftp : 21, ssh : 22, serveur web : 80, cups : 631, jabber : 5222

TCP_SERVICES="" UDP_SERVICES=""

  1. Services que le système utilisera du réseau
  2. (défaut : autorise tout en sortie)

REMOTE_TCP_SERVICES="" REMOTE_UDP_SERVICES=""

  1. Pour une machine faisant office de routeur avec NAT,
  2. changer la valeur de la variable ISROUTERNAT à 1.

ISROUTERNAT=false

  1. ethx correspond à l'interface du LAN
  2. ethy correspond à l'interface reliée à la truc-box

ethx="eth1" ethy="eth0"

  1. ----------------------------------------------------------------------#

if ! [ -x $IPTABLES ]; then exit 0 fi

  1. ----------------------------FONCTIONS---------------------------------#

fw_start () {

  1. Vidage

fw_clear # Parefeu - Suppression des règles

  1. Interdictions

$IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -P FORWARD DROP $IPTABLES -t filter -P OUTPUT DROP

# Parefeu - interdictions générales établies

  1. Loopback

$IPTABLES -t filter -A INPUT -i lo -j ACCEPT

  1. Trafic d'entrée :

$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  1. Refus du ping pour éviter de répondre aux scans des éventuels vilains

$IPTABLES -t filter -A INPUT -p icmp -j LOG $IPTABLES -t filter -A INPUT -p icmp -j DROP

  1. Sortie autorisée, si aucun port autorisé en sortie n'est défini
       if [ -z "$REMOTE_TCP_SERVICES"] && [ -z "$REMOTE_UDP_SERVICES" ]; then
           $IPTABLES -t filter -P OUTPUT ACCEPT
       fi

  1. Services à autoriser en entrée

for PORT in $TCP_SERVICES; do $IPTABLES -A INPUT -p tcp --dport ${PORT} -j ACCEPT done

for PORT in $UDP_SERVICES; do $IPTABLES -A INPUT -p udp --dport ${PORT} -j ACCEPT done

  1. Services à autoriser en sortie

for PORT in $REMOTE_TCP_SERVICES; do $IPTABLES -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT done for PORT in $REMOTE_UDP_SERVICES; do $IPTABLES -A OUTPUT -p udp --dport ${PORT} -j ACCEPT done # Parefeu - Mise en place des règles

if $ISROUTERNAT ; then $IPTABLES -A INPUT -i $ethx -j ACCEPT $IPTABLES -A INPUT -p icmp -j ACCEPT $IPTABLES -A FORWARD -i $ethy -o $ethx -m state --state RELATED,ESTABLISHED -j ACCEPT $IPTABLES -A FORWARD -o $ethy -j ACCEPT $IPTABLES -t nat -A POSTROUTING -o $ethy -j MASQUERADE

		# Parefeu - Routeur avec NAT

fi

  1. Toutes les autres connexions sont enregistrées dans syslog

#$IPTABLES -t filter -A OUTPUT -j LOG $IPTABLES -t filter -A INPUT -j LOG --log-level=4

# Parefeu - Logging }

fw_stop () { #$IPTABLES -F #$IPTABLES -t nat -F #$IPTABLES -t mangle -F #$IPTABLES -P INPUT DROP #$IPTABLES -P FORWARD DROP #$IPTABLES -P OUTPUT ACCEPT iptables-save > /etc/firewall }

fw_clear () { $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 $IPTABLES -F }

fw_status () { $IPTABLES -L --line-numbers }

  1. ----------------------------------------------------------------------#

case "$1" in start|restart) log_daemon_msg "Starting firewall.."

		fw_start

log_end_msg $?

	;;

stop) log_daemon_msg "Stopping firewall.."

		fw_stop

log_end_msg $?

	;;

clean)

		log_daemon_msg "Clearing firewall rules.."
		fw_clear

log_end_msg $?

	;;

status) log_daemon_msg "Firewall status" fw_status ;; *)

		log_action_msg "Usage $0 {start|stop|restart|clean|status}"
		exit 1
	;;

esac exit 0

Ouvrir des ports

Pour cela, il vous suffit d'ajouter le numéro des ports à ouvrir, séparés par des espaces, entre les guillemets :

TCP_SERVICES="" 

S'il s'agit de ports tcp, et dans

UDP_SERVICES=""

Si ce sont des ports UDP Pour trouver le numéro des ports, la commande suivante peut vous être utile :

less /etc/services

Autoriser au cas par cas en sortie

Complétez entre les guillemets les ports à ouvrir en sortie :

REMOTE_TCP_SERVICES="" 
REMOTE_UDP_SERVICES=""

Cas d'une machine routeur avec NAT

Il va falloir décommenter ces lignes : (OBSOLETE voir ISROUTERNAT)

#/sbin/iptables -A INPUT -i ethx -j ACCEPT
#/sbin/iptables -A INPUT -p icmp -j ACCEPT
#/sbin/iptables -A FORWARD -i ethy -o ethx -m state --state RELATED,ESTABLISHED -j ACCEPT
#/sbin/iptables -A FORWARD -o ethy -j ACCEPT
#/sbin/iptables -t nat -A POSTROUTING -o ethy -j MASQUERADE
#echo "Parefeu - Routeur avec NAT : [OK]"

En remplaçant ethx qui correspond à l'interface du LAN et ethy qui correspond à l'interface reliée à la truc-box

Ressources