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

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 211 : Ligne 211 :
exit 0
exit 0
</code>
</code>
== 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
== Cas d'une machine routeur avec NAT ==
Il faut commenter la ligne :
/sbin/iptables -t filter -P OUTPUT ACCEPT
et décommenter ces lignes :
#REMOTE_TCP_SERVICES=""
#REMOTE_UDP_SERVICES=""
Complétez entre les guillements les ports à ouvrir en sortie.
Enfin, décommentez ces blocs :
#if [ -n "$REMOTE_TCP_SERVICES" ] ; then
# for PORT in $REMOTE_TCP_SERVICES; do
# /sbin/iptables -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT
# done
#fi
#if [ -n "$REMOTE_UDP_SERVICES" ] ; then
# for PORT in $REMOTE_UDP_SERVICES; do
# /sbin/iptables -A OUTPUT -p udp --dport ${PORT} -j ACCEPT
# done
#fi


== Ressources ==
== Ressources ==

Version du 28 août 2011 à 12:31

Introduction

La méthode proposée ici pose parfois souci lors d'un changement de version du noyau, qui ne comprends 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 à éxé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: 2 3 4 5
  9. Default-Stop: 0 1 6
  10. Short-description: Configure le parefeu
  11. Description: Met en place les règles iptables.
      1. END INIT INFO
  1. Exemple de configuration de pare-feu
  2. Défauts :
  3. - Cette configuration s'applique à toutes les interfaces réseau.
  4. Si vous voulez ne restreindre cela qu'à une interface donnée,
  5. utilisez '-i INTERFACE' dans les appels iptables.
  6. - Par défaut, le script autorise tout en sortie. Pour changer ce comportement
  7. veuillez commenter la ligne /sbin/iptables -t filter -P OUTPUT ACCEPT
  8. et décommenter les lignes #REMOTE_TCP_SERVICES=""
  9. #REMOTE_UDP_SERVICES=""
  10. ainsi que les blocs suivant : #if [ -n "$REMOTE_TCP_SERVICES" ] ; then
  11. et #if [ -n "$REMOTE_UDP_SERVICES" ] ; then
  12. description: Active/Désactive le pare-feu au démarrage
  13. ---------------------------------------------------------------

PATH=/bin:/sbin:/usr/bin:/usr/sbin

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

TCP_SERVICES="" UDP_SERVICES=""

  1. Services que le système utilisera du réseau
  2. Décommenter ces lignes pour limiter les services en sortie (défaut : autorise tout en sortie)
  3. REMOTE_TCP_SERVICES=""
  4. REMOTE_UDP_SERVICES=""

if ! [ -x /sbin/iptables ]; then exit 0 fi

fw_start () {

  1. Vidage

/sbin/iptables -t filter -F /sbin/iptables -t filter -X /sbin/iptables -t nat -F /sbin/iptables -t nat -X /sbin/iptables -t mangle -F /sbin/iptables -t mangle -X

echo "Parefeu - Suppression des règles : [OK]"

  1. Interdictions

/sbin/iptables -t filter -P INPUT DROP /sbin/iptables -t filter -P FORWARD DROP /sbin/iptables -t filter -P OUTPUT DROP

echo "Parefeu - interdictions générales établies : [OK]"

  1. Loopback

/sbin/iptables -t filter -A INPUT -i lo -j ACCEPT /sbin/iptables -t filter -A INPUT -i lo -j ACCEPT

  1. Trafic d'entrée :

/sbin/iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

  1. Refus du ping

/sbin/iptables -t filter -A INPUT -p icmp -j LOG /sbin/iptables -t filter -A INPUT -p icmp -j DROP

  1. Sortie autorisée,
  2. à commenter si seuls certains services doivent être autorisés en sortie.

/sbin/iptables -t filter -P OUTPUT ACCEPT

  1. Services à autoriser en entrée

if [ -n "$TCP_SERVICES" ] ; then for PORT in $TCP_SERVICES; do /sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT done fi if [ -n "$UDP_SERVICES" ] ; then for PORT in $UDP_SERVICES; do /sbin/iptables -A INPUT -p udp --dport ${PORT} -j ACCEPT done fi

  1. Décommenter les lignes suivantes pour n'autoriser que certains
  2. services en sortie

#if [ -n "$REMOTE_TCP_SERVICES" ] ; then # for PORT in $REMOTE_TCP_SERVICES; do # /sbin/iptables -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT # done #fi #if [ -n "$REMOTE_UDP_SERVICES" ] ; then # for PORT in $REMOTE_UDP_SERVICES; do # /sbin/iptables -A OUTPUT -p udp --dport ${PORT} -j ACCEPT # done #fi

echo "Parefeu - Mise en place des règles : [OK]"

  1. Décommenter les lignes après les traits
  2. pour une machine faisant office de routeur avec NAT
  3. ethx correspond à l'interface du LAN
  4. ethy correspond à l'interface reliée à la truc-box
  5. -------------------------------------------

#/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]"

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

#/sbin/iptables -t filter -A OUTPUT -j LOG /sbin/iptables -t filter -A INPUT -j LOG --log-level=4

echo "Parefeu - Logging : [OK]" }

fw_stop () { /sbin/iptables -F /sbin/iptables -t nat -F /sbin/iptables -t mangle -F /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -P OUTPUT ACCEPT }

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

fw_status () { /sbin/iptables -L --line-numbers }

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

		fw_start

echo "done."

	;;

stop) echo "Stopping firewall.."

		fw_stop
		echo "done."
	;;

clean)

		echo "Clearing firewall rules.."
		fw_clear
		echo "done."
	;;

status) echo "Firewall status" fw_status ;; *)

		echo "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

Cas d'une machine routeur avec NAT

Il faut commenter la ligne :

/sbin/iptables -t filter -P OUTPUT ACCEPT

et décommenter ces lignes :

#REMOTE_TCP_SERVICES="" 
#REMOTE_UDP_SERVICES="" 

Complétez entre les guillements les ports à ouvrir en sortie. Enfin, décommentez ces blocs :

#if [ -n "$REMOTE_TCP_SERVICES" ] ; then
#	for PORT in $REMOTE_TCP_SERVICES; do
#		/sbin/iptables -A OUTPUT -p tcp --dport ${PORT} -j ACCEPT
#	done
#fi
#if [ -n "$REMOTE_UDP_SERVICES" ] ; then
#	for PORT in $REMOTE_UDP_SERVICES; do
#		/sbin/iptables -A OUTPUT -p udp --dport ${PORT} -j ACCEPT
#	done
#fi

Ressources