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 !
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
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 …
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.
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 !!!
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
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
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.
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
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
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
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
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
Le paramétrage de l’authentification des utilisateurs sur l’annuaire GrandeOurse est décrit au paragraphe 8.2.6.D - .