Precedent Haut Suivant


8.2.3 -  Serveur Hercule :

8.2.3.A -  Concentrateur IPSEC :

Le serveur Hercule est destiné à pouvoir établir des tunnels IPSEC entre un client distant et les DMZ au travers d’Internet. Installer cette fonctionnalité passe par une mise à jour et une recompilation du noyau Linux mis à jour à l’aide du patch FreeSwan.

L’installation IPSEC passe par les manipulations suivantes :

è      Installation du package « initrd-tools » (obligatoire pour un noyau 2.4)

è      Installation des sources Linux :

   apt-get install kernel-source-2.4.18

è      Installation du patch FreeSwan :

   apt-get install kernel-patch-freeswan

è      cd /usr/src

è      Décompilation des sources Linux :

        tar –xzf kernel-source-2.4.18.tar.bz2

è      cd kernel-source-2.4.18

è      ../kernel-patches/all/apply/Freeswan

è      export PATCH_THE_KERNEL=auto

è      Compilation du noyau Linux :

   make-kpkg –added-patches=Freeswan –append-to-version=-1-Freeswan-sga –revision=hercule.1 –config=menuconfig configure

   make-kpkg clean

   make-kpkg –initrd –revision=hercule.1 kernel-image

 

NB : La configuration en cours d’un serveur Linux est toujours stockée dans un fichier /boot/configxxxxx. Ce fichier au format texte contient toutes les options utilisées pour la compilation du noyau en cours !

8.2.3.A.1 -  Installation du noyau généré :

Le noyau généré par les opérations décrites ci-dessus se trouve dans le répertoire « /usr/src ». Pour installer ce noyau il faut effectuer les opérations suivantes :

è      modification du fichier « /etc/lilo.conf ». Le fichier du serveur Hercule est donné ci-dessous :

#

# Emplacement : Maquette de test SGA

# Description : Fichier de configuration du chargeur de demarrage lilo

#             : Voir man lilo et man lilo.conf pour tous les details

#             : NE PAS OUBLIER DE LANCER LA COMMANDE LILO APRES TOUTE

#             : MODIFICATION DE CE FICHIER !!!

# Serveur     : Hercule

# Copyright   : marc.boget@gendarmerie.org

 

# Support du mode LBA pour les disques de grande capacité

#

lba32

 

# Specification du disque de demarrage : cela peut etre soit un disque

# soit un partition : dans le cas d'un disque cela signifie que lilo doit

# ecrire dans le MBR

boot=/dev/sda

 

# Definition de la partition à monter comme "/"

root=/dev/sda5

 

# Definition du fichier a installer comme nouveau secteur de boot

install=/boot/boot-menu.b

 

# Definition de la table de caracteres a utiliser au demarrage

map=/boot/map

 

# Definition du mot de passe allant de pair avec l'option restricted

# Ce mot de passe est exigé des que la configuration de boot souhaitée

# n'est pas celle par defaut. Cela permet d'eviter qu'un pirate puisse

# bypasser la sequence de boot normal

password=sga

 

# Definition du temps d'attente avant demarrage de la config par defaut

delay=20

 

prompt

timeout=150

 

# Definition du mode graphique au demarrage de lilo

vga=normal

 

# Nom de l'image de boot par defaut

default=Linux-Freeswan

 

# Definition des images de boot disponibles

image=/vmlinuz.freeswan

     label=Linux-Freeswan

     read-only

     initrd=/initrd.img

     restricted

     alias=1

 

image=/vmlinuz

     label=Linux

     read-only

     initrd=/initrd.img

     restricted

     alias=2

 

image=/vmlinuz.old

     label=Linux-bf24

     read-only

     restricted

     alias=3

 

# Definition d'une partition de boot de type autre

other=/dev/sda1

  label="Part. Compaq"

 

è    installation du package généré à l’aide de la commande « dpkg –i /usr/src/kernel-image-2.4.18-hercule.1

8.2.3.A.2 -  Mise en place des tunnels IPSEC :

Un tunnel IPSEC se traduit par l’utilisation de deux certificats. Les manipulations décrites paragraphe 8.2.1 - doivent être mises en œuvre pour la génération d’un certificat IPSEC destiné au concentrateur FreeSwan ainsi que d’un certificat IPSEC par client devant se connecter sur le concentrateur.

Le fichier de configuration du serveur FreeSwan est le fichier « /etc/ipsec.conf ». Le fonctionnement de FreeSwan est d’indiquer ce qu’il doit considérer comme étant à « gauche » de lui et ce qu’il doit considérer comme étant à droite de lui. La notion de gauche et de droite n’a aucune signification particulière, la seule contrainte étant que les informations doivent être cohérente entre ce que le concentrateur FreeSwan considère comme étant à gauche ou à droite et ce que le client IPSEC considère lui comme étant la gauche et la droite !!!.

Le fichier de configuration de FreeSwan du serveur Hercule est relativement explicite et est donné ci-dessous :

#

# Emplacement : Maquette de test SGA

# Description : Fichier de configuration du concentrateur FreeSwan

#             : Voir /usr/share/doc/freeswan/doc/index.htmlpour tous les details

# Serveur     : Hercule

# Copyright   : marc.boget@gendarmerie.org

#

 

# Paramétrage par defaut du concentrateur FreeSwan

config setup

     # defaultroute correspond à la route correspondante au paquet

     # c'est a dire celle trouvée en appliquant les regles classiques

     # du routage IP

     #interfaces=%defaultroute

     # On peut aussi définir specifiquement l'interfaces qui fait

# de l'IPSEC

     interfaces="ipsec0=eth1"

     # Controle du mode debug : bon courage !!!

     klipsdebug=none

     plutodebug=none

     # Permet de definir si la connexion definie est automatiquement

     # activée au demarrage au juste chargée

     # Use auto= parameters in conn descriptions to control startup actions.

     plutoload=%search

     plutostart=%search

     #plutoload="sga"

     #plutostart="sga"

     # Option permettant de fermer les vieilles connections quand une nelle

     # portant le meme ID se pointe : cela permet de retomber sur ces pieds

     # en cas d'arret brutal de la connexion

     uniqueids=yes

 

# Paramétrage par defaut des connexions

conn %default

     keyingtries=1

     compress=yes

     disablearrivalcheck=no

 

# Definition du réseau des clients

conn sga2-net

     leftsubnet=192.168.0.0/24

     also=sga2

 

# Definition de la connexion IPSEC

conn sga2

     authby=rsasig

     leftrsasigkey=%cert

     left=%any

     rightrsasigkey=%cert

     right=192.168.0.1

     rightsubnet=10.1.4.0/24

     rightcert=/etc/ipsec.d/hercule.pem

     pfs=yes

     auto=add

 

# Des exemples en vrac ...

# connection description for (experimental!) opportunistic encryption

# (requires KEY record in your DNS reverse map; see doc/opportunism.howto)

#conn me-to-anyone

#    left=%defaultroute

#    right=%opportunistic

#    keylife=1h

#    rekey=no

#    # uncomment this next line to enable it

#    #auto=route

 

 

# sample VPN connection

#conn sample

#    # Left security gateway, subnet behind it, next hop toward right.

#    left=%any

#    leftsubnet=192.168.0.0/24

#    #leftnexthop=10.22.33.44

#    # Right security gateway, subnet behind it, next hop toward left.

#    right=10.12.12.1

#    rightsubnet=192.168.0.0/24

#    rightnexthop=10.101.102.103

#    # To authorize this connection, but not actually start it, at startup,

#    # uncomment this.

#    #auto=add

 

#conn sga

#    # Left security gateway, subnet behind it, next hop toward right.

#    left=%any

#    #leftsubnet=192.168.0.0/24

#    #leftnexthop=10.22.33.44

#    # Right security gateway, subnet behind it, next hop toward left.

#    right=192.168.0.1

#    rightsubnet=10.1.4.0/24

#    rightnexthop=10.1.4.5

#    # To authorize this connection, but not actually start it, at startup,

#    # uncomment this.

#    auto=add

 

#leftid="C=FR, ST=France, L=MALAKOFF, O=SGA, OU=Maquette de test, CN=cassiopee7"

#rightid="E=root@sga.def, C=FR, ST=FRANCE, L=MALAKOFF, O=SGA, OU=Maquette de test, CN=Hercule"

 

NB : le fichier /etc/ipsec.d/hercule.pem doit être enregistré au format PEM (cf. paragraphe 8.2.1.B - ). La clé correspondante « hercule.key » est situé dans le répertoire défini dans le fichier « /etc/ipsec.secrets » dont un exemple est donné ci-dessous :

 

: RSA /etc/ipsec.d/private/hercule.key

 

Le caractère « : » permet éventuellement de specifier quelle connexion doit utiliser cette clé secrète …

8.2.3.A.3 -  Installation des clients IPSEC Windows :

L’installation des clients IPSEC sous Windows 2000 s’effectue en deux temps :

-                     installation du certificat IPSEC,

-                     paramétrage de la stratégie IP de Windows 2000.

8.2.3.A.3.a -  Installation du certificat IPSEC :

De manière à installer le certificat IPSEC il faut :

è      générer le certificat (cf. paragraphe 8.2.1 - ) ;

è      lancer la MMC (Microsoft Management Console) sur le poste client IPSEC ;

è      choisir dans le menu « Console » l’option « Ajouter/Supprimer un composant logiciel enfichable » ;

è      cliquer sur « Ajouter » et choisir « Certificats » puis « le compte de l’ordinateur »

è      cliquer sur « Personnel » puis « Certificats » puis faire « Actions - Toutes les taches – Importer » et importer le certificat client. En effet le certificat IPSEC doit être attaché à l’ordinateur et non à l’utilisateur ce qui se passe immanquablement lorsque l’on double clique sur le fichier .PFX !!!

8.2.3.A.3.b -  Paramétrage de la stratégie IP :

La stratégie IP se paramètre à l’aide de la MMC « Stratégie de sécurité locale » (Menu Edition / Paramètres / Outils d’administration / Stratégie de sécurité locale).  L’installation des outils de Marcus Muller (http://vpn.ebootis.de) permet l’adoption d’un fichier de configuration du client ressemblant au fichier de configuration du concentrateur Freeswan. Il est à noter que ces outils ne font que paramétrer automatiquement la liaison (il suffit d’examiner la politique FreeSwan au travers de la MMC pour en avoir la preuve). De manière à permettre un affichage plus concis le contenu de ce fichier est donné ci-dessous en lieu et place des copies d’écran de la MMC :

conn Cassiopee6

     left=%any

     leftsubnet=192.168.0.6/32

     right=192.168.0.1

     rightsubnet=10.1.4.0/24

     rightca="E=ca@sga.def, C=FR, O=SGA, CN=Autorite certification test maquette SGA"

     network=auto

     auto=start

     pfs=yes

8.2.3.A.3.c -  Activation du mode DEBUG des clients IPSEC :

Pour activer le mode debug des clients Windows IPSEC il faut effectuer les manipulations suivantes :

è      Création de la clé HKLM/System/Current Control Set/Services/PolicyAgent/OAKLEY

è      Création du DWORD « EnableLogging=1 » sous OAKLEY

è      net stop policyagent

è      net start policyagent

 

Les traces de debug IPSEC sont alors activées dans le fichier \WINNT\DEbug\Oakley.log

8.2.3.B -  Serveur de temps :

NTP signifie Network Time Protocol et permet a une machine cliente de synchroniser son horloge sur un serveur de strate N lui même se synchronisant sur un serveur de strate supérieure ou directement sur un serveur de référence.

8.2.3.B.1 -  Partie serveur :

La partie serveur du démon NTP (version 1:4.1.0-8) s’installe à l’aide de la commande suivante :

è      apt-get install ntp

 

L’installation de ce démon nécessite l’installation des programmes suivants :

- ntp-simple ou ntp-refclock,

- debconf,

- libc6 (version >= 2.2.4-4),

- libreadline4 (version >= 4.2a-4)

 

Le fichier de configuration de ce démon est le fichier /etc/ntp.conf. La configuration employée sur le serveur Hercule est la suivante :

# Emplacement : Maquette de test SGA

# Description : Fichier de configuration du démon NTP

# Serveur     : Hercule

# Copyright   : marc.boget@gendarmerie.org

 

# Dans le cas ou la directive logfile n'est pas définie, le démon NTP

# utilise syslog

logfile /var/log/ntpd

 

# Fichier contenant la dérive de temps ou drift

driftfile /var/lib/ntp/ntp.drift

 

# Fichier de stats

statsdir /var/log/ntpstats/

 

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

 

# Serveurs de synchronisation

# La directive « prefer » permet d’indiquer le serveur de prédilection

server ntp.univ-lyon1.fr prefer

server ntp.obspm.fr

server ntp.tuxfamily.net

8.2.3.C -  Déport des logs :

Il a été fait le choix de concentrer les logs sur la machine « PetiteOurse ». De manière à ne pas aider un éventuel pirate à deviner le déport de logs il a été mis en place les mécanismes suivants :

-                     création d’une partition spéciale pour le répertoire « /var/log » : en effet dans le cas ou une attaque en déni de service par submersion des logs du firewall il faut impérativement empêcher que la partition hébergeant le répertoire « / » soit pleine sous peine de voir le serveur s’écrouler ;

-                     maintien des logs en local sur « /var/log » ;

-                     installation du package « logrotate » (version 3.5.9-8) :

è      apt-get install logrotate

-                     Ce package dépend des packages suivants :

- libc6 (version >= 2.2.4-4) ;

- libpopt0 (version >= 1.6.2-1) ;

- cron (version >= 3.0pl1-53) ou anacron ;

- mailx ;

- base-passwd (version >= 2.0.3.4)

-                     compression des logs à l’aide de la commande « logrotate » dont le fichier de configuration « /etc/logrotate.conf » est donné ci-dessous :

#

# Emplacement : Maquette de test SGA

# Description : Fichier de configuration pour la compression des logs

#             : Voir man logrotate pour plus de details

# Serveur     : Hercule

# Copyright   : marc.boget@gendarmerie.org

 

# Compression des logs chaque semaine

weekly

 

# Conservation des logs sur 4 périodes (soit 4 semaines)

rotate 4

 

# Creation de fichiers de logs vide après rotation

create

 

# Compression des logs au moment de la rotation

compress

 

# Répertoire contenant les directives particulières à certains logs

include /etc/logrotate.d

 

# Exemple de directives pouvant être incluses dans le rep. ci-dessus

# La directive missingok permet d’éviter la génération d’un log si le

# fichier de logs attendu n’existe pas !

/var/log/wtmp {

    monthly

    create 0664 root utmp

    rotate 1

}

 

/var/log/btmp {

    missingok

    monthly

    create 0664 root utmp

    rotate 1

}

-                     déport des logs vers le serveur « PetiteOurse » à l’aide du démon syslog dont le fichier de configuration /etc/syslog.conf est donné ci-dessous :

#

# Emplacement : Maquette de test SGA

# Description : Fichier de configuration du démon syslog

#             : Voir man syslog.conf pour tous les details

# Serveur     : Hercule

# Copyright   : marc.boget@gendarmerie.org

 

# Deport des logs sur PetiteOurse

*.*                             @petiteourse

 

# Traitement par catégories d'evenements

# La colonne de gauche indique la catégorie

# La colonne de droite indique l'action à effectuer

# Le signe "-" devant certains fichiers de droite indique

# que le système n'est pas obligé de synchroniser son disque

# a chaque écriture (gain en vitesse mais perte d'informations

# en cas de crash serveur).

 

auth,authpriv.*                 /var/log/auth.log

*.*;auth,authpriv.none          -/var/log/syslog

#cron.*                         /var/log/cron.log

daemon.*                        -/var/log/daemon.log

kern.*                          -/var/log/kern.log

lpr.*                           -/var/log/lpr.log

mail.*                          -/var/log/mail.log

user.*                          -/var/log/user.log

uucp.*                          /var/log/uucp.log

mail.info                       -/var/log/mail.info

mail.warn                       -/var/log/mail.warn

mail.err                        /var/log/mail.err

news.crit                       /var/log/news/news.crit

news.err                        /var/log/news/news.err

news.notice                     -/var/log/news/news.notice

 

*.=debug;\

        auth,authpriv.none;\

        news.none;mail.none     -/var/log/debug

*.=info;*.=notice;*.=warn;\

        auth,authpriv.none;\

        cron,daemon.none;\

        mail,news.none          -/var/log/messages

 

# Les événements de la catégorie emergency sont envoyés à tous

# les utilisateurs loggés

 

*.emerg                         *

 

#

# Exemple pour envoyer les logs sur un TTY particulier

#

#daemon,mail.*;\

#       news.=crit;news.=err;news.=notice;\

#       *.=debug;*.=info;\

#       *.=notice;*.=warn       /dev/tty8

 

# Pour envoyer les logs sur la console xconsole

# Peu utile sur un serveur sans serveur X !

# Attention : il faut invoquer xconsole avec l'option -file

# pour pouvoir avoir les logs : ex : xconsole -file /dev/xconsole [...]

 

daemon.*;mail.*;\

        news.crit;news.err;news.notice;\

        *.=debug;*.=info;\

        *.=notice;*.=warn       |/dev/xconsole

8.2.3.D -  Firewall de paquets :

Le démon iptables (version 1.2.6a-5) s’installe à l’aide de la commande suivante :

è      apt-get install iptables

Il dépend des packages suivants :

- libc6 (version >= 2.2.4-4),

- debconf (version >= 0.5)

Il est entièrement paramétré à l’aide du script « /etc/init.d/rc.firewall » lancé au démarrage du serveur (il faut créer les liens symboliques Sxxfirewall et Kxxfirewall dans le répertoire correspondant au niveau de démarrage par défaut du serveur Linux, ici « /etc/rc2.d/ ») :

#!/bin/bash

#

# Emplacement : Maquette de test SGA

# Description : Fichier de parametrage du firewall par paquets

# Serveur     : Hercule

# Copyright   : marc.boget@gendarmerie.org

#

 

 

# Definition des différentes interfaces du FW

#--------------------------------------------

interface_pub_externe=eth0

interface_externe=eth1

interface_reverse=eth2

interface_conf_externe=eth3

interface_esentry=eth4

 

# Définition des différents réseaux raccordés au FW

#--------------------------------------------

reseau_externe=192.168.0.0/24

reseau_pub_externe=10.1.2.0/24

reseau_conf_externe=10.1.1.0/24

reseau_esentry=10.1.3.0/24

reseau_interne=52.30.184.0/24

reseau_reverse=10.1.4.0/24

reseau_interco=10.1.6.0/24

 

# Définition des éléments clés du réseau

#--------------------------------------------

colombe=10.1.1.2

pegase=10.1.2.2

eridan=10.1.3.3

grandeourse=10.1.3.2

dauphin=52.30.184.1

fleche=10.1.4.2

petiteourse=10.1.4.3

routeur_internet=192.168.0.101

firewall_applicatif=10.1.6.2

honeypot=10.1.1.4

 

# Définition des éléments clés externe au réseau

#--------------------------------------------

serveur_ref_ntp1=$(host ntp.univ-lyon1.fr|grep address|cut -d' ' -f4)

serveur_ref_ntp2=$(host ntp.obspm.fr|grep address|cut -d' ' -f4)

serveur_ref_ntp3=$(host ntp.tuxfamily.net|grep address|cut -d' ' -f4)

serveur_ref_dns1=212.46.206.2

serveur_ref_dns2=194.2.0.20

serveur_ref_dns3=194.2.0.50

serveurs_maj_debian="security.debian.org debian.via.ecp.fr non-us.debian.org ftp.fr.debian.org"

 

# Définition des ports utilisés dans le cadre de la maquette

#--------------------------------------------

port_web=80

port_web_ssl=443

port_web_fullssl=4443

port_dns=53

port_ntp=123

port_ipsec=500

port_imap=143

port_imap_ssl=993

port_smtp=25

port_syslog=514

port_ldap=389

port_ldap_ssl=636

port_agent_esentry=1701

port_ssh=22

ports_tcp_windows="138 139 445"

ports_udp_windows="137 138 139"

 

case "$1" in

  start)

 

#==================================

# PARTIE INITIALISATION

#--------------------------------------------

# -F: permet de vider toutes les regles d'une chaine

# -X: permet d'effacer une chaine

# -P: permet de spécifier au kernel la target par defaut d'une chaine

# PREROUTING : a l'arrivee du firewall

# POSTROUTING: a la sortie du firewall

#==================================

 

# On va utiliser iptable si on l'a compilé en module

# dans le kernel, il faut charger le module ip_tables

#--------------------------------------------

modprobe ip_tables

 

# On va charger quelques modules supplémentaires

# pour gérer la translation d'adresse

#--------------------------------------------

modprobe iptable_filter

modprobe iptable_nat

 

# Vidage des chaînes

#--------------------------------------------

iptables -F

iptables -F INPUT

iptables -F OUTPUT

iptables -F FORWARD

iptables -t nat -F

 

#Destruction des chaînes "personnelles"

#--------------------------------------------

iptables -X

 

# Définition d'une chaîne permettant de logguer puis de dropper

#--------------------------------------------------------------

iptables -N LOG_PUIS_DROP 2>/dev/null

iptables -F LOG_PUIS_DROP

iptables -A LOG_PUIS_DROP -j LOG --log-prefix="[FW Paquet rejete]: " #--log-level notice

iptables -A LOG_PUIS_DROP -j DROP

 

#Stratégie par défaut: DROP

#--------------------------------------------

#iptables -P INPUT   DROP

#iptables -P FORWARD DROP

#iptables -P OUTPUT  DROP

 

#==================================

# PARTIE DEFINITION

#==================================

 

# Toutes les connexions établies et relatives sont acceptées

iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

 

# Autorise accès machine locale

#--------------------------------------------

iptables -A INPUT  -i lo -p ALL -j ACCEPT

iptables -A OUTPUT -o lo -p ALL -j ACCEPT

 

# Autorise acces DNS des serveurs de la maquette

#--------------------------------------------

for serveur_ref_dns in $serveur_ref_dns1 $serveur_ref_dns2 $serveur_ref_dns3

do

     iptables -A OUTPUT \

          -p udp --destination-port $port_dns \

          -d $serveur_ref_dns \

          -o $interface_externe \

          -j ACCEPT

 

     iptables -A FORWARD \

          -p udp --destination-port $port_dns \

          -s $reseau_pub_externe -d $serveur_ref_dns \

          -i $interface_pub_externe -o $interface_externe \

          -j ACCEPT

 

     iptables -A FORWARD \

          -p udp --destination-port $port_dns \

          -s $reseau_conf_externe -d $serveur_ref_dns \

          -i $interface_conf_externe -o $interface_externe \

          -j ACCEPT

 

     iptables -A FORWARD \

          -p udp --destination-port $port_dns \

          -s $reseau_esentry -d $serveur_ref_dns \

          -i $interface_esentry -o $interface_externe \

          -j ACCEPT

 

     iptables -A FORWARD \

          -p udp --destination-port $port_dns \

          -s $reseau_interco -d $serveur_ref_dns \

          -i $interface_reverse -o $interface_externe \

          -j ACCEPT

 

     iptables -A FORWARD \

          -p udp --destination-port $port_dns \

          -s $reseau_interne -d $serveur_ref_dns \

          -i $interface_reverse -o $interface_externe \

          -j ACCEPT

 

     iptables -A FORWARD \

          -p udp --destination-port $port_dns \

          -s $reseau_reverse -d $serveur_ref_dns \

          -i $interface_reverse -o $interface_externe \

          -j ACCEPT

done

 

# Autorise acces WEB

#--------------------------------------------

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_externe -d $fleche \

     -i $interface_externe -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $firewall_applicatif -d $colombe \

     -i $interface_reverse -o $interface_conf_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $firewall_applicatif -d $pegase  \

     -i $interface_reverse -o $interface_pub_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web_ssl \

     -s $reseau_externe -d $eridan \

     -i $interface_externe -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web_ssl \

     -s $reseau_externe -d $fleche \

     -i $interface_externe -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web_ssl \

     -s $fleche -d $eridan \

     -i $interface_reverse -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web_ssl \

     -s $fleche -d $colombe \

     -i $interface_reverse -o $interface_conf_externe \

     -j ACCEPT

 

# Autorise dialogue agents E-Sentry

#--------------------------------------------

iptables -A FORWARD \

     -p tcp --destination-port $port_agent_esentry \

     -s $fleche -d $eridan \

     -i $interface_reverse -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_agent_esentry \

     -s $colombe -d $eridan \

     -i $interface_conf_externe -o $interface_esentry \

     -j ACCEPT

 

# Autorise acces LDAPS pour authentification utilisateur

#--------------------------------------------

iptables -A OUTPUT \

     -p tcp --destination-port $port_ldap_ssl \

     -d $grandeourse \

     -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ldap_ssl \

     -s $reseau_reverse -d $grandeourse \

     -i $interface_reverse -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ldap_ssl \

     -s $reseau_conf_externe -d $grandeourse \

     -i $interface_conf_externe -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ldap_ssl \

     -s $reseau_pub_externe -d $grandeourse \

     -i $interface_pub_externe -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ldap_ssl \

     -s $reseau_interne -d $grandeourse \

     -i $interface_reverse -o $interface_esentry \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ldap_ssl \

     -s $firewall_applicatif -d $grandeourse \

     -i $interface_reverse -o $interface_esentry \

     -j ACCEPT

 

# Autorise acces SYSLOG pour deport des logs

#--------------------------------------------

iptables -A OUTPUT \

     -p udp --destination-port $port_syslog \

     -d $petiteourse \

     -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p udp --destination-port $port_syslog \

     -s $reseau_conf_externe -d $petiteourse \

     -i $interface_conf_externe -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p udp --destination-port $port_syslog \

     -s $reseau_pub_externe -d $petiteourse \

     -i $interface_pub_externe -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p udp --destination-port $port_syslog \

     -s $reseau_esentry -d $petiteourse \

     -i $interface_esentry -o $interface_reverse \

     -j ACCEPT

 

# Autorise acces NTP pour mise a l'heure des serveurs

#--------------------------------------------

for serveur_ref_ntp in $serveur_ref_ntp1 $serveur_ref_ntp2 $serveur_ref_ntp3

do

     iptables -A OUTPUT \

          -p udp --destination-port $port_ntp \

          -d $serveur_ref_ntp \

          -o $interface_externe \

          -j ACCEPT

done

 

iptables -A INPUT \

     -p udp --destination-port $port_ntp \

     -s $reseau_esentry \

     -i $interface_esentry \

     -j ACCEPT

 

iptables -A INPUT \

     -p udp --destination-port $port_ntp \

     -s $reseau_reverse \

     -i $interface_reverse \

     -j ACCEPT

 

iptables -A INPUT \

     -p udp --destination-port $port_ntp \

     -s $reseau_conf_externe \

     -i $interface_conf_externe \

     -j ACCEPT

 

iptables -A INPUT \

     -p udp --destination-port $port_ntp \

     -s $reseau_pub_externe \

     -i $interface_pub_externe \

     -j ACCEPT

 

# Autorise transfert de messages entre serveurs

#--------------------------------------------

iptables -A FORWARD \

     -p tcp --destination-port $port_smtp \

     -s $pegase -d $dauphin \

     -i $interface_pub_externe -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_smtp \

     -s $firewall_applicatif -d $pegase \

     -i $interface_reverse -o $interface_pub_externe \

     -j ACCEPT

 

# Autorise acces Messagerie pour les clients

#--------------------------------------------

iptables -A FORWARD \

     -p tcp --destination-port $port_imap \

     -s $reseau_externe -d $pegase \

     -i $interface_externe -o $interface_pub_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_imap_ssl \

     -s $reseau_externe -d $pegase \

     -i $interface_externe -o $interface_pub_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_smtp \

     -s $reseau_externe -d $pegase -o $interface_pub_externe \

     -i $interface_externe \

     -j ACCEPT

 

# Autorise MAJ des serveurs sur sites debian

#--------------------------------------------

for serveur_maj in $serveurs_maj_debian

do

iptables -A OUTPUT \

     -p tcp --destination-port $port_web \

     -d $serveur_maj \

     -o $interface_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_reverse -d $serveur_maj \

     -i $interface_reverse -o $interface_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_pub_externe -d $serveur_maj \

     -i $interface_pub_externe -o $interface_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_conf_externe -d $serveur_maj \

     -i $interface_conf_externe -o $interface_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_esentry -d $serveur_maj \

     -i $interface_esentry -o $interface_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_interco -d $serveur_maj \

     -i $interface_reverse -o $interface_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_web \

     -s $reseau_interne -d $serveur_maj \

     -i $interface_reverse -o $interface_externe \

     -j ACCEPT

done

 

# Autorise acces Webmail pour les clients

#--------------------------------------------

iptables -A FORWARD \

     -p tcp --destination-port $port_web_ssl \

     -s $reseau_externe -d $dauphin \

     -i $interface_externe -o $interface_reverse \

     -j ACCEPT

 

# Autorise administration SSH des serveurs

#--------------------------------------------

iptables -A INPUT \

     -p tcp --destination-port $port_ssh \

     -j ACCEPT

 

iptables -A OUTPUT \

     -p tcp --destination-port $port_ssh \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ssh \

     -d $reseau_conf_externe \

     -o $interface_conf_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ssh \

     -d $reseau_pub_externe \

     -o $interface_pub_externe \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ssh \

     -d $reseau_reverse \

     -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ssh \

     -d $reseau_interne \

     -o $interface_reverse \

     -j ACCEPT

 

iptables -A FORWARD \

     -p tcp --destination-port $port_ssh \

     -d $reseau_esentry \

     -o $interface_esentry \

     -j ACCEPT

 

# Autorise acces Windows avec controleur SAMBA

#--------------------------------------------

for port_tcp_windows in $ports_tcp_windows

do

iptables -A FORWARD \

     -p tcp --destination-port $port_tcp_windows \

     -d $colombe \

     -o $interface_conf_externe \

     -j ACCEPT

done

 

for port_tcp_windows in $ports_tcp_windows

do

iptables -A FORWARD \

     -p tcp --source-port $port_tcp_windows \

     -s $colombe \

     -i $interface_conf_externe \

     -j ACCEPT

done

 

for port_udp_windows in $ports_udp_windows

do

iptables -A FORWARD \

     -p udp --source-port $port_udp_windows \

     -d $colombe \

     -o $interface_conf_externe \

     -j ACCEPT

done

 

for port_udp_windows in $ports_udp_windows

do

iptables -A FORWARD \

     -p udp --destination-port $port_udp_windows \

     -s $colombe \

     -i $interface_conf_externe \

     -j ACCEPT

done

 

# Autorise tout acces sur honeyPot

#--------------------------------------------

iptables -A FORWARD \

     -d $honeypot \

     -o $interface_conf_externe \

     -j ACCEPT

 

# Mise en place du masquage d'adresse pour les adresses internes

#----------------------------------------------------------------

iptables -t nat -A POSTROUTING -s $reseau_interne -o $interface_externe -j MASQUERADE

iptables -t nat -A POSTROUTING -s $reseau_interco -o $interface_externe -j MASQUERADE

iptables -t nat -A POSTROUTING -s $reseau_reverse -o $interface_externe -j MASQUERADE

iptables -t nat -A POSTROUTING -s $reseau_esentry -o $interface_externe -j MASQUERADE

iptables -t nat -A POSTROUTING -s $reseau_conf_externe -o $interface_externe -j MASQUERADE

iptables -t nat -A POSTROUTING -s $reseau_pub_externe -o $interface_externe -j MASQUERADE

 

# Autorise le ping

#--------------------------------------------

iptables -A INPUT   -p icmp -j ACCEPT

iptables -A OUTPUT  -p icmp -j ACCEPT

iptables -A FORWARD -p icmp -j ACCEPT

 

# Log ce qui a ete refuse

#--------------------------------------------

iptables -A INPUT   -j LOG_PUIS_DROP

iptables -A OUTPUT  -j LOG_PUIS_DROP 

iptables -A FORWARD -j LOG_PUIS_DROP 

 

# Mise en place du routage du noyau

#--------------------------------------------

echo "1" > /proc/sys/net/ipv4/ip_forward

 

# Mise en place des routes

#--------------------------------------------

route add default gw $routeur_internet >/dev/null 2>&1

route add -net $reseau_interne gw $firewall_applicatif >/dev/null 2>&1

route add -net $reseau_reverse gw $firewall_applicatif >/dev/null 2>&1

 

# Affiche l'etat des regles

#--------------------------------------------

echo ">Etat des regles du FW"

iptables -L

echo ">"

                ;;

 

 

  stop)

 

# Vidage des chaînes

#--------------------------------------------

iptables -F

iptables -F INPUT

iptables -F OUTPUT

iptables -F FORWARD

iptables -t nat -F

 

#Destruction des chaînes "personnelles"

#--------------------------------------------

iptables -X

 

# Ouverture du firewall

#----------------------

iptables -A INPUT -j ACCEPT

iptables -A OUTPUT -j ACCEPT

iptables -A FORWARD -j ACCEPT

 

# Mise en place des routes

#--------------------------------------------

route add default gw $routeur_internet >/dev/null 2>&1

route add -net $reseau_interne gw $firewall_applicatif >/dev/null 2>&1

route add -net $erseau_reverse gw $firewall_applicatif >/dev/null 2>&1

                ;;

 

  *)

     echo "Usage: /etc/init.d/rc.firewall {start|stop}"

     exit 1

esac

 

exit 0


8.2.3.E -  Serveur SSH :

Le serveur SSH (version 1:3.4p1-0.0woody1) s’installe de la manière suivante :

è      apt-get install ssh

 

Ce package dépend des packages suivants :

   - libpam0g (version >= 0.72-1) ;

   - libc6 (version >= 2.2.4-4) ;

   - libssl0.9.6 ;

   - libwrap0 ;

   - zlib1g (version >= 1:1.1.4) ;

   - libpam-modules (version >= 0.72-9) ;

   - debconf ;

   - adduser.

 

L’ensemble des serveurs SSH des différents serveurs de la maquette est configuré de la manière suivante :

-                     mise en place d’un serveur SSH en cage écoutant sur le port 2222 ;

-                     mise en place d’un serveur SSH non encagé écoutant sur le port 22 mais n’acceptant des connexions que depuis le serveur local.

Cette configuration est mise en place en modifiant le fichier « /etc/init.d/ssh » de la manière indiquée ci-dessous :

start)

     …

     echo -n "Starting OpenBSD Secure Shell server: sshd on port 22"

    start-stop-daemon --start --quiet --pidfile /var/run/sshd.pid --exec /usr/sbin/sshd

     echo "."

     echo -n "Starting OpenBSD Secure Shell server: sshd on port 2222"

     chroot /cages/ssh usr/sbin/sshd -p 2222

    

 

et en paramétrant les fichiers de configuration des serveurs SSH « /etc/ssh/sshd_config » de la manière suivante :

è      Fichier /etc/ssh/sshd_config : ListenAddress 127.0.0.1

è      Fichier /cages/ssh/etc/sshd_config : ListenAddress 0.0.0.0

8.2.3.F -  Mise en places des adresses ARP statiques :

De manière à éviter l’ARP Poisoning, chaque serveur se voit doter d’un fichier de définition des adresses ARP. Le fichier suivant est implémenté sur chaque serveur à l’aide de la commande « arp -s -f nom_fichier » :

10.1.1.1      00:02:B3:CD:F9:FA

10.1.1.2      00:10:B5:F0:75:A9

10.1.1.4      00:03:BA:06:10:3D

 

10.1.2.1      00:02:B3:CD:F9:67

10.1.2.2      00:02:55:5B:EF:7F

 

10.1.3.1      00:80:5F:05:25:E5

10.1.3.2      00:02:B3:CD:F9:6A

10.1.3.3      00:10:B5:F0:99:70

 

10.1.4.1      00:80:5F:26:E2:3C

10.1.4.2      00:04:AC:13:DC:B2

10.1.4.3      00:08:C7:FA:A9:A8

10.1.4.4      00:80:5F:F7:DC:24

10.1.4.5      00:10:B5:B9:2C:0C

 

10.1.6.1      00:02:B3:CD:F9:6C

10.1.6.2      00:10:4B:65:71:CB

 

192.168.0.1   00:02:B3:CD:F8:9B

192.168.0.7   00:09:6B:51:69:4F

192.168.0.8   00:09:6B:51:5E:3E

192.168.0.9   00:00:39:6C:E0:8C

192.168.0.101 00:20:6F:0D:65:34

8.2.3.G -  Authentification des utilisateurs sur l’annuaire LDAP :

Le paramétrage de l’authentification des utilisateurs sur l’annuaire GrandeOurse est décrit au paragraphe 8.2.6.D - .



Precedent Haut Suivant