Subversion Repositories ALCASAR

Rev

Rev 286 | Rev 288 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
1 root 1
#!/bin/sh
57 franck 2
#  $Id: alcasar.sh 287 2010-09-27 20:34:54Z richard $ 
1 root 3
 
4
# alcasar.sh
5
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
8
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
9
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
10
 
11
# ALCASAR is based on a stripped Mandriva (LSB) with the following open source softwares :
12
# ALCASAR est architecturé autour d'une distribution Linux Mandriva minimaliste et les logiciels libres suivants :
5 franck 13
# Coovachilli (a fork of chillispot), freeradius, mysql, apache, netfilter, squid, dansguardian, mondo, mindi, dialupadmin, awstat, ntpd, dhcpd, openssl bind and firewalleyes
1 root 14
 
15
# Options :
5 franck 16
#       -install
17
#       -uninstall
1 root 18
 
19
# Funtions :
29 richard 20
#	testing		: Tests de connectivité et de téléchargement avant installation
1 root 21
#	init		: Installation des RPM et des scripts
22
#	network		: Paramètrage du réseau
23
#	gestion		: Installation de l'interface de gestion
24
#	AC		: Initialisation de l'autorité de certification. Création des certificats
25
#	init_db		: Création de la base 'radius' sur le serveur MySql
26
#	param_radius	: Configuration du serveur d'authentification FreeRadius
27
#	param_web_radius: Configuration de l'interface de gestion de FreeRadius (dialupadmin)
28
#	param_chilli	: Configuration du daemon 'coova-chilli' et de la page d'authentification
29
#	param_squid	: Configuration du proxy squid en mode 'cache'
30
#	param_dansguardian : Configuration de l'analyseur de contenu DansGuardian
159 franck 31
#	antivirus	: Installation havp + clamav
1 root 32
#	firewall	: Mise en place des règles du parefeu et de l'interface WEB FirewallEyes
33
#	param_awstats	: Configuration de l'interface des statistiques de consultation WEB
34
#	bind		: Configuration du serveur de noms
35
#	cron		: Mise en place des exports de logs (+ chiffrement)
36
 
37
 
95 franck 38
VERSION=`cat VERSION`
219 jeremy 39
MDV_NEEDED="2010.1"
1 root 40
DATE=`date '+%d %B %Y - %Hh%M'`
41
DATE_SHORT=`date '+%d/%m/%Y'`
42
# ******* Files parameters - paramètres fichiers *********
43
DIR_INSTALL=`pwd`				# répertoire d'installation
44
DIR_GESTION="$DIR_INSTALL/gestion"		# répertoire d'installation contenant l'interface de gestion
45
DIR_CONF="$DIR_INSTALL/conf"			# répertoire d'installation contenant les fichiers de configuration
46
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# répertoire d'installation contenant les scripts
47
DIR_SAVE="/var/Save"				# répertoire de sauvegarde (ISO, backup, etc.)
48
DIR_WEB="/var/www/html"				# répertoire du centre de gestion
49
DIR_DEST_BIN="/usr/local/bin"			# répertoire des scripts
50
DIR_DEST_SBIN="/usr/local/sbin"			# répertoire des scripts d'admin
51
DIR_DEST_ETC="/usr/local/etc"			# répertoire des fichiers de conf
52
FIC_PARAM="/root/ALCASAR-parameters.txt"	# fichier texte résumant les paramètres d'installation
53
FIC_PASSWD="/root/ALCASAR-passwords.txt"	# fichier texte contenant les mots de passe et secrets partagés 
54
# ******* DBMS parameters - paramètres SGBD ********
55
DB_RADIUS="radius"				# nom de la base de données utilisée par le serveur FreeRadius
56
DB_USER="radius"				# nom de l'utilisateur de la base de données
57
# ******* Network parameters - paramètres réseau *******
58
DOMAIN="localdomain"				# domaine local
59
EXTIF="eth0"					# ETH0 est l'interface connectée à Internet (Box FAI)
60
INTIF="eth1"					# ETH1 est l'interface connectée au réseau local de consultation
61
CUSTOM_PRIVATE_NETWORK_MASK="192.168.182.0/24"	# adresse du réseau de consultation proposée par défaut
62
SQUID_PORT="3128"				# Port d'écoute du proxy Squid
63
UAMPORT="3990"
64
# ****** Paths - chemin des commandes *******
65
SED="/bin/sed -i"
66
# ****** Alcasar needed RPMS - paquetages nécessaires au fonctionnement d'Alcasar ******
235 richard 67
PACKAGES="freeradius freeradius-mysql freeradius-ldap freeradius-web apache-mpm-prefork apache-mod_ssl apache-mod_php squid dansguardian postfix MySQL logwatch ntp awstats mondo cdrecord buffer vim-enhanced bind-utils wget arpscan ulogd dhcp-server openssh-server php-xml coova-chilli pam_ccreds rng-utils lsb-release dnsmasq clamav sudo cronie-anacron"
1 root 68
# ****************** End of global parameters *********************
69
 
70
header_install ()
71
{
72
	clear
73
	echo "-----------------------------------------------------------------------------"
74
	echo "                     Installation d'ALCASAR V$VERSION"
75
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
76
	echo "-----------------------------------------------------------------------------"
77
} # End of header_install ()
78
 
79
##################################################################
29 richard 80
##			Fonction TESTING			##
81
## - Test de la connectivité Internet				##
82
## - Test la mise à jour système				##
83
## - Test l'installation des RPM additionnels			##
84
##################################################################
85
testing ()
86
{
87
	echo -n "Tests des paramètres réseau : "
88
# On teste l'état du lien des interfaces réseau
89
	for i in $EXTIF $INTIF
90
	do
91
		/sbin/ifconfig $i up
92
		sleep 2
93
		if [ "`/usr/sbin/ethtool $i|grep Link|cut -d' ' -f3`" != "yes" ]
94
			then
95
			echo "Échec"
96
			echo "Le lien réseau de la carte $i n'est pas actif."
97
			echo "Réglez ce problème avant de poursuivre l'installation d'ALCASAR."
98
			exit 0
99
		fi
100
	done
101
# On teste la présence d'un routeur par défaut (Box FAI)
102
	if [ `/sbin/route -n|grep -c ^0.0.0.0` -ne "1" ] ; then
103
		echo "Échec"
104
		echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
105
		echo "Réglez ce problème avant de poursuivre."
106
		exit 0
107
	fi
108
# On traite le cas où l'interface configurée lors de l'installation est "eth1" au lieu de "eth0" (mystère sur certains BIOS et sur VirtualBox)
109
	if [ `/sbin/route -n|grep ^0.0.0.0|grep -c eth1` -eq "1" ] ; then
110
		echo "Échec. La configuration des cartes réseau va être corrigée."
111
		/etc/init.d/network stop
112
		mv -f /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth0
113
		$SED "s?eth1?eth0?g" /etc/sysconfig/network-scripts/ifcfg-eth0
114
		/etc/init.d/network start
115
		echo 0 > /proc/sys/net/ipv4/conf/all/log_martians
116
		sleep 2
117
		echo "Configuration corrigée"
118
		sleep 2
119
		echo "Vous pouvez relancer ce script (sh alcasar.sh -install)."
120
		exit 0
121
	fi
122
# On teste la connectivité Internet
123
	rm -rf /tmp/con_ok.html
124
	/usr/bin/curl www.google.fr -# -o /tmp/con_ok.html
125
	if [ ! -e /tmp/con_ok.html ]
126
	then
127
		echo "La tentative de connexion vers Internet a échoué (google.fr)."
128
		echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
129
		echo "Vérifiez la validité des adresses DNS."
130
		exit 0
131
	fi
132
	echo "Tests de connectivité Internet corrects"
133
	rm -rf /tmp/con_ok.html
134
# On configure les dépots et on les teste 
148 franck 135
	echo "Configuration des dépôts de paquetages Internet (repository)"
29 richard 136
	chmod u+x $DIR_SCRIPTS/alcasar-urpmi.sh
137
	$DIR_SCRIPTS/alcasar-urpmi.sh >/dev/null
138
	if [ "$?" != "0" ]
139
	then
140
		echo
148 franck 141
		echo "Une erreur s'est produite lors de la synchronisation avec les dépôts Internet"
142
		echo "Relancez l'installation ultérieurement."
139 richard 143
	       echo "Si vous rencontrez de nouveau ce problème, changez de dépôt en modifiant le fichier 'scripts/alcasar-urpmi.sh'"
29 richard 144
		exit 0
145
	fi
73 franck 146
# On teste la mise à jour du système
72 franck 147
	echo "Récupération des paquetages de mise à jour. Veuillez patienter ..."
287 richard 148
	urpmi --auto --auto-update --quiet --test --retry 2
29 richard 149
	if [ "$?" != "0" ]
150
	then
151
		echo
148 franck 152
		echo "Une erreur  a été détectée lors de la récupération des paquetages de mise à jour."
153
		echo "Relancez l'installation ultérieurement."
139 richard 154
	       echo "Si vous rencontrez de nouveau ce problème, changez de dépôt en modifiant le fichier 'scripts/alcasar-urpmi.sh'"
29 richard 155
		exit 0
156
	fi
73 franck 157
# On teste l'installation des paquetages complémentaires
72 franck 158
	echo "Récupération des paquetages complémentaires. Veuillez patienter ..."
29 richard 159
	urpmi --auto $PACKAGES --quiet --test
160
	if [ "$?" != "0" ]
161
	then
162
		echo
148 franck 163
		echo "Une erreur a été détectée lors de la récupération des paquetages complémentaires."
164
		echo "Relancez l'installation ultérieurement."
139 richard 165
	       echo "Si vous rencontrez de nouveau ce problème, changez de dépôt en modifiant le fichier 'scripts/alcasar-urpmi.sh'"
29 richard 166
		exit 0
167
	fi
168
} # end of testing
169
 
170
##################################################################
1 root 171
##			Fonction INIT				##
172
## - Création du fichier "/root/ALCASAR_parametres.txt"		##
173
## - Installation et modification des scripts du portail	##
29 richard 174
## - Mise à jour système					##
1 root 175
## - Installation des paquetages complémentaires		##
176
##################################################################
177
init ()
178
{
5 franck 179
	if [ ! "$mode" = "update" ]
1 root 180
	then
181
		header_install
5 franck 182
# On affecte le nom d'organisme
1 root 183
		header_install
184
		ORGANISME=!
214 richard 185
		PTN='^[a-zA-Z0-9-]*$'
1 root 186
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
187
                do
188
			echo -n "Entrez le nom de votre organisme : "
189
                        read ORGANISME
190
                        if [ "$ORGANISME" = "" ]
191
                                then
192
                                ORGANISME=!
193
                        fi
194
                done
5 franck 195
	fi
29 richard 196
# On mets à jour le système
197
	urpmi --auto --auto-update 
198
# On installe les paquetages complémentaires
199
	urpmi --auto $PACKAGES 
287 richard 200
# On supprime les paquetages, les services et les utilisateurs inutiles
259 richard 201
	for rm_rpm in avahi mandi shorewall libc-icap0 cyrus-sasl
5 franck 202
	do
287 richard 203
		/usr/sbin/urpme --auto $rm_rpm --auto-orphans
5 franck 204
	done
235 richard 205
	for svc in alsa sound dm atd dc_server
5 franck 206
	do
207
		/sbin/chkconfig --del $svc
208
	done
287 richard 209
	for rm_users in avahi avahi-autoipd icapd
210
	do
211
		$user=`cat /etc/passwd|grep $rm_user`
212
		if [ "$user" = "$rm-user" ]
213
		then
214
			/usr/sbin/userdel -f $rm_user
215
		fi
216
	done
217
 
80 richard 218
# On installe les RPMs spécifiques à la version
219
	fic=`cat /etc/product.id`
220
	old="$IFS"
221
	IFS=","
222
	set $fic
223
	for i in $*
224
	do
225
		if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
226
		then 
227
			ARCH=`echo $i|cut -d"=" -f2`
228
		fi
229
	done
230
	IFS="$old"
231
	urpmi --no-verify --auto $DIR_CONF/rpms/$ARCH/*.rpm
29 richard 232
# On vide le répertoire temporaire
233
	urpmi --clean
1 root 234
# On crée aléatoirement les mots de passe et les secrets partagés
235
	rm -f $FIC_PASSWD
59 richard 236
	grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# mot de passe de protection du menu Grub
237
	echo -n "mot de passe de protection du menu de démarrage (GRUB) : " > $FIC_PASSWD
238
	echo "$grubpwd" >> $FIC_PASSWD
239
	md5_grubpwd=`/usr/bin/md5pass $grubpwd`
240
	sed -i "/^password.*/d" /boot/grub/menu.lst
241
	sed -i "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
1 root 242
	mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# mot de passe de l'administrateur Mysqld
59 richard 243
	echo -n "compte et mot de passe de l'administrateur Mysqld : " >> $FIC_PASSWD
1 root 244
	echo "root / $mysqlpwd" >> $FIC_PASSWD
245
	radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# mot de passe de l'utilisateur Mysqld (utilisé par freeradius)
246
	echo -n "compte et mot de passe de l'utilisateur Mysqld : " >> $FIC_PASSWD
247
	echo "$DB_USER / $radiuspwd" >> $FIC_PASSWD
248
	secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# secret partagé entre intercept.php et coova-chilli
249
	echo -n "secret partagé entre le script 'intercept.php' et coova-chilli : " >> $FIC_PASSWD
250
	echo "$secretuam" >> $FIC_PASSWD
251
	secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# secret partagé entre coova-chilli et FreeRadius
252
	echo -n "secret partagé entre coova-chilli et FreeRadius : " >> $FIC_PASSWD
253
	echo "$secretradius" >> $FIC_PASSWD
254
	chmod 640 $FIC_PASSWD
255
# On installe et on modifie les scripts d'Alcasar
5 franck 256
	cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
257
	cp -f $DIR_SCRIPTS/sbin/alcasar* $DIR_DEST_SBIN/. ; chown root:root $DIR_DEST_SBIN/alcasar* ; chmod 740 $DIR_DEST_SBIN/alcasar*
258
	cp -f $DIR_SCRIPTS/etc/alcasar* $DIR_DEST_ETC/. ; chown root:apache $DIR_DEST_ETC/alcasar* ; chmod 660 $DIR_DEST_ETC/alcasar*
1 root 259
	$SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_SBIN/alcasar-logout.sh
260
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh
5 franck 261
	$SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
262
	$SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
1 root 263
# On génère le début du fichier récapitulatif
264
	cat <<EOF > $FIC_PARAM
265
########################################################
266
##                                                    ##
267
##   Fichier récapitulatif des paramètres d'ALCASAR   ##
268
##                                                    ##
269
########################################################
270
 
271
- Date d'installation : $DATE
272
- Version istallée : $VERSION
273
- Organisme : $ORGANISME
274
EOF
275
	chmod o-rwx $FIC_PARAM
276
} # End of init ()
277
 
278
##################################################################
279
##			Fonction network			##
280
## - Définition du plan d'adressage du réseau de consultation	##
281
##  (merci à Alexandre Trias pour le calcul de masque et RegEx) ##
282
## - Nommage DNS du système (portail + nom d'organisme)		##
283
## - Configuration de l'interface eth1 (réseau de consultation)	##
284
## - Modification du fichier /etc/hosts				##
285
## - Configuration du serveur de temps (NTP)			##
286
## - Renseignement des fichiers hosts.allow et hosts.deny	##
287
##################################################################
288
network ()
289
{
290
	header_install
291
	echo "Par défaut, le plan d'adressage du réseau de consultation est : $CUSTOM_PRIVATE_NETWORK_MASK"
292
	response=0
293
	PTN='^[oOnN]$'
294
	until [[ $(expr $response : $PTN) -gt 0 ]]
295
		do
296
			echo -n "Voulez-vous utiliser ce plan d'adressage (recommandé) (O/n)? : "
297
			read response
298
		done
299
	if [ "$response" = "n" ] || [ "$response" = "N" ]
300
	then
301
		CUSTOM_PRIVATE_NETWORK_MASK="0"
302
		PTN='^\([01]\?[[:digit:]][[:digit:]]\?\|2[0-4][[:digit:]]\|25[0-5]\).\([01]\?[[:digit:]][[:digit:]]\?\|2[0-4][[:digit:]]\|25[0-5]\).\([01]\?[[:digit:]][[:digit:]]\?\|2[0-4][[:digit:]]\|25[0-5]\).\([01]\?[[:digit:]][[:digit:]]\?\|2[0-4][[:digit:]]\|25[0-5]\)/[012]\?[[:digit:]]$'
303
		until [[ $(expr $CUSTOM_PRIVATE_NETWORK_MASK : $PTN) -gt 0 ]]
304
			do
305
				echo -n "Entrez un plan d'adressage au format CIDR (a.b.c.d/xx) : "
306
				read CUSTOM_PRIVATE_NETWORK_MASK
307
 
308
			done
309
	fi
14 richard 310
# Récupération de la config réseau côté "LAN de consultation"
1 root 311
	HOSTNAME=alcasar-$ORGANISME
312
	hostname $HOSTNAME
313
	echo "- Nom du système : $HOSTNAME" >> $FIC_PARAM
314
	PRIVATE_NETWORK=`/bin/ipcalc -n $CUSTOM_PRIVATE_NETWORK_MASK | cut -d"=" -f2`		# @ réseau de consultation (ex.: 192.168.182.0)
5 franck 315
	private_prefix=`/bin/ipcalc -p $CUSTOM_PRIVATE_NETWORK_MASK |cut -d"=" -f2`		# prefixe du réseau (ex. 24)
1 root 316
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$private_prefix					# @ réseau + masque (x.0.0.0/8 ou x.y.0.0/16 ou x.y.z.0/24)
317
	classe=$((private_prefix/8));								# classe de réseau (ex.: 2=classe B, 3=classe C)
318
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.			# @ compatible hosts.allow et hosts.deny (ex.: 192.168.182.)
319
	PRIVATE_MASK=`/bin/ipcalc -m $PRIVATE_NETWORK_MASK | cut -d"=" -f2`			# masque réseau de consultation (ex.: 255.255.255.0)
320
	PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`		# @ broadcast réseau de consultation (ex.: 192.168.182.255)
321
	TMP_MASK=`echo $PRIVATE_NETWORK_MASK|cut -d"/" -f2`; HALF_MASK=`expr $TMP_MASK + 1`	# masque du 1/2 réseau de consultation (ex.: 25)
322
	PRIVATE_STAT_IP=$PRIVATE_NETWORK/$HALF_MASK						# plage des adresses statiques (ex.: 192.168.182.0/25)
323
	PRIVATE_STAT_MASK=`/bin/ipcalc -m $PRIVATE_STAT_IP/$HALF_MASK | cut -d"=" -f2`		# masque des adresses statiques (ex.: 255.255.255.128)
324
	classe_sup=`expr $classe + 1`
325
	classe_sup_sup=`expr $classe + 2`
326
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup`
327
	private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f$classe_sup`
328
	private_plage=`expr $private_broadcast_ending - $private_network_ending + 1`
329
	private_half_plage=`expr $private_plage / 2`
330
	private_dyn=`expr $private_half_plage + $private_network_ending`
331
	private_dyn_ip_network=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`"."$private_dyn"."`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup_sup-5`
332
	PRIVATE_DYN_IP=`echo $private_dyn_ip_network | cut -d"." -f1-4`/$HALF_MASK		# plage des adresses dynamiques (ex.: 192.168.182.128/25)
333
	PRIVATE_DYN_MASK=`/bin/ipcalc -m $PRIVATE_DYN_IP/$HALF_MASK | cut -d"=" -f2`		# masque des adresses dynamiques (ex.: 255.255.255.128)
334
	private_dyn_ip_network=`echo $PRIVATE_DYN_IP | cut -d"/" -f1`				# plage des adresses dynamiques sans le masque (ex.: 192.168.182.0)
335
	private_dyn_ip_end=`echo $private_dyn_ip_network | cut -d"." -f4`			# dernier octet de la plage des adresses dynamiques (ex.: 128)
336
	PRIVATE_DYN_FIRST_IP=`echo $private_dyn_ip_network | cut -d"." -f1-3`"."`expr $private_dyn_ip_end + 1`	# 1ère adresse de la plage dynamique (ex.: 192.168.182.129)
337
	private_broadcast_end=`echo $PRIVATE_BROADCAST | cut -d"." -f4`
338
	PRIVATE_DYN_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_end - 1`	# dernière adresse de la plage dynamique (ex.: 192.168.182.254)
14 richard 339
	PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_end + 1`	# @ip du portail (côté réseau de consultation)
340
# Récupération de la config réseau côté "Internet"
341
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
342
	EXT_IP=`grep IPADDR /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip du portail (côté Internet)
1 root 343
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
14 richard 344
	DNS1=`grep DNS1 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 1er DNS
345
	DNS2=`grep DNS2 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 2ème DNS
70 franck 346
	DNS1=${DNS1:=208.67.220.220}
347
	DNS2=${DNS2:=208.67.222.222}
14 richard 348
	EXT_NETMASK=`grep NETMASK /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
349
	EXT_GATEWAY=`grep GATEWAY /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
350
	echo "- Adresse IP 'côté Internet' ($EXTIF) : $EXT_IP / $EXT_NETMASK" >> $FIC_PARAM
351
	echo "- Serveurs DNS renseignés : $DNS1 et $DNS2" >> $FIC_PARAM
352
	echo "- Routeur de sortie : $EXT_GATEWAY" >> $FIC_PARAM
353
# Configuration réseau
1 root 354
	cat <<EOF > /etc/sysconfig/network
355
NETWORKING=yes
356
HOSTNAME="$HOSTNAME"
357
FORWARD_IPV4=true
358
EOF
359
# Modif /etc/hosts
360
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
361
	cat <<EOF > /etc/hosts
362
127.0.0.1	$HOSTNAME localhost.localdomain localhost
363
$PRIVATE_IP	$HOSTNAME alcasar portail
364
EOF
14 richard 365
	echo "- Adresse IP 'côté réseau de consultation' ($INTIF) : $PRIVATE_IP / $PRIVATE_NETWORK_MASK" >> $FIC_PARAM
366
	echo "    - plage d'adresses statiques : $PRIVATE_STAT_IP" >> $FIC_PARAM
367
	echo "    - plage d'adresses dynamiques (via DHCP) : $PRIVATE_DYN_IP" >> $FIC_PARAM
368
# Configuration de l'interface eth0 (Internet)
369
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
370
DEVICE=$EXTIF
371
BOOTPROTO=static
372
IPADDR=$EXT_IP
373
NETMASK=$EXT_NETMASK
374
GATEWAY=$EXT_GATEWAY
375
DNS1=127.0.0.1
376
ONBOOT=yes
377
METRIC=10
378
NOZEROCONF=yes
379
MII_NOT_SUPPORTED=yes
380
IPV6INIT=no
381
IPV6TO4INIT=no
382
ACCOUNTING=no
383
USERCTL=no
384
EOF
1 root 385
# Configuration de l'interface eth1 (réseau de consultation)
386
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
387
DEVICE=$INTIF
388
BOOTPROTO=static
389
IPADDR=$PRIVATE_IP
390
NETMASK=$PRIVATE_MASK
391
ONBOOT=yes
392
METRIC=10
393
NOZEROCONF=yes
394
MII_NOT_SUPPORTED=yes
14 richard 395
IPV6INIT=no
396
IPV6TO4INIT=no
397
ACCOUNTING=no
398
USERCTL=no
1 root 399
EOF
400
# Configuration du serveur de temps
401
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
402
	cat <<EOF > /etc/ntp.conf
403
server 0.fr.pool.ntp.org
404
server 1.fr.pool.ntp.org
405
server 2.fr.pool.ntp.org
406
restrict default nomodify notrap noquery
407
restrict $PRIVATE_NETWORK mask $PRIVATE_MASK
408
restrict 127.0.0.1
409
driftfile /etc/ntp/drift
410
logfile /var/log/ntp.log
411
EOF
412
	chown -R ntp:ntp /etc/ntp
120 franck 413
# Configuration du serveur dhcpd
1 root 414
	[ -e /etc/dhcpd.conf.default ] || cp /etc/dhcpd.conf /etc/dhcpd.conf.default 2> /dev/null
415
	cat <<EOF > /etc/dhcpd.conf
416
ddns-update-style interim;
417
subnet $PRIVATE_NETWORK netmask $PRIVATE_MASK {
123 franck 418
  option routers $PRIVATE_IP;
419
  option subnet-mask $PRIVATE_MASK;
420
  option domain-name-servers $PRIVATE_IP;
421
  option domain-name "localdomain";
422
  range dynamic-bootp $PRIVATE_DYN_LAST_IP $PRIVATE_DYN_FIRST_IP;
423
  default-lease-time 21600;
424
  max-lease-time 43200;
1 root 425
}
123 franck 426
log-facility	local3;
427
## Exemple reservation @IP fixe sur @MAC
428
# host MACHINE1  {
429
#      hardware ethernet 00:06:9a:f3:07:01;
430
#      fixed-address 192.168.182.140;
431
# }
1 root 432
EOF
433
# écoute côté LAN seulement
434
	[ -e /etc/sysconfig/dhcpd.default ] || cp /etc/sysconfig/dhcpd /etc/sysconfig/dhcpd.default 2> /dev/null
435
	$SED "s?^#INTERFACES=.*?INTERFACES=\"$INTIF\"?g" /etc/sysconfig/dhcpd
234 richard 436
	/sbin/chkconfig --level 345 dhcpd off
1 root 437
# Renseignement des fichiers hosts.allow et hosts.deny
438
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
439
	cat <<EOF > /etc/hosts.allow
440
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
441
sshd: $PRIVATE_NETWORK_SHORT
442
ntpd: $PRIVATE_NETWORK_SHORT
443
EOF
444
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
445
	cat <<EOF > /etc/hosts.deny
446
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
447
EOF
448
} # End of network ()
449
 
450
##################################################################
451
##			Fonction gestion			##
452
## - installation du centre de gestion				##
453
## - configuration du serveur web (Apache)			##
454
## - définition du 1er comptes de gestion 			##
455
## - sécurisation des accès					##
456
##################################################################
457
gestion()
458
{
459
# Suppression des CGI et des pages WEB installés par défaut
460
	rm -rf /var/www/cgi-bin/*
461
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
462
	mkdir $DIR_WEB
463
# Copie et configuration des fichiers du centre de gestion
464
	cp -rf $DIR_GESTION/* $DIR_WEB/
465
	echo "$VERSION du $DATE" > $DIR_WEB/VERSION
466
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_WEB/menu.php
467
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_WEB/phpsysinfo/includes/xml/portail.php
468
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_WEB/phpsysinfo/includes/xml/portail.php
469
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_WEB/phpsysinfo/includes/xml/portail.php
470
	chmod 640 $DIR_WEB/phpsysinfo/includes/xml/portail.php
5 franck 471
	chown -R apache:apache $DIR_WEB/*
1 root 472
	for i in ISO base logs/firewall logs/httpd logs/squid ;
473
	do
474
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
475
	done
5 franck 476
	chown -R root:apache $DIR_SAVE
71 richard 477
# Configuration et sécurisation php
478
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
1 root 479
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 20M?g" /etc/php.ini
480
	$SED "s?^post_max_size.*?post_max_size = 20M?g" /etc/php.ini
71 richard 481
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
482
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
483
# Configuration et sécurisation Apache
1 root 484
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
485
	$SED "s?^#ServerName.*?ServerName $PRIVATE_IP?g" /etc/httpd/conf/httpd.conf
486
	$SED "s?^Listen.*?#Listen 127.0.0.1:80?g" /etc/httpd/conf/httpd.conf
487
	$SED "s?^ServerTokens.*?ServerTokens Prod?g" /etc/httpd/conf/httpd.conf
488
	$SED "s?^ServerSignature.*?ServerSignature Off?g" /etc/httpd/conf/httpd.conf
489
	$SED "s?^#ErrorDocument 404 /missing.html.*?ErrorDocument 404 /index.html?g" /etc/httpd/conf/httpd.conf
490
	FIC_MOD_SSL=`find /etc/httpd/modules.d/ -type f -name *mod_ssl.conf`
491
	$SED "s?^Listen.*?Listen $PRIVATE_IP:443?g" $FIC_MOD_SSL # On écoute en SSL que sur INTIF
492
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /var/www/error/include/top.html
493
	[ -e /var/www/error/include/bottom.html.default ] || mv /var/www/error/include/bottom.html /var/www/error/include/bottom.html.default
494
	cat <<EOF > /var/www/error/include/bottom.html
495
</body>
496
</html>
497
EOF
498
	echo "- URL d'accès au centre de gestion : https://$PRIVATE_IP" >> $FIC_PARAM
499
# Définition du premier compte lié au profil 'admin'
500
	if [ "$mode" = "install" ]
501
	then
502
		header_install
503
		echo "Pour administrer Alcasar via le centre de gestion WEB, trois profils de comptes ont été définis :"
504
		echo " - le profil 'admin' capable de réaliser toutes les opérations"
505
		echo " - le profil 'backup' lié uniquement aux fonctions d'archivage"
506
		echo " - le profil 'manager' lié uniquement aux fonctions de gestion des usagers"
507
		echo ""
508
		echo "Définissez le premier compte du profil 'admin' :"
509
		echo
510
		echo -n "Nom : "
511
		read admin_portail
512
		echo "- Nom du premier compte lié au profil 'admin' : $admin_portail" >> $FIC_PARAM
513
# Création du fichier de clés de ce compte dans le profil "admin"
514
		[ -d $DIR_WEB/digest ] && rm -rf $DIR_WEB/digest
515
		mkdir -p $DIR_WEB/digest
516
		chmod 755 $DIR_WEB/digest
517
		until [ -s $DIR_WEB/digest/key_admin ]
518
			do
519
				/usr/sbin/htdigest -c $DIR_WEB/digest/key_admin $HOSTNAME $admin_portail
520
			done
521
# Création des fichiers de clés des deux autres profils (backup + manager) contenant ce compte
522
		$DIR_DEST_SBIN/alcasar-profil.sh -list
523
	fi
109 richard 524
# synchronisation horaire
525
	ntpd -q -g &
1 root 526
# Sécurisation du centre
527
	rm -f /etc/httpd/conf/webapps.d/*
528
	cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
529
<Directory $DIR_WEB/digest>
530
	AllowOverride none
531
	Order deny,allow
532
	Deny from all
533
</Directory>
534
<Directory $DIR_WEB/admin>
535
	SSLRequireSSL
536
	AllowOverride None
537
	Order deny,allow
538
	Deny from all
539
	Allow from 127.0.0.1
540
	Allow from $PRIVATE_NETWORK_MASK
541
	require valid-user
542
	AuthType digest
543
	AuthName $HOSTNAME
544
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
545
	AuthUserFile $DIR_WEB/digest/key_admin
546
	ErrorDocument 404 https://$PRIVATE_IP/
547
</Directory>
548
<Directory $DIR_WEB/manager/htdocs>
549
	SSLRequireSSL
550
	AllowOverride None
551
	Order deny,allow
552
	Deny from all
553
	Allow from 127.0.0.1
554
	Allow from $PRIVATE_NETWORK_MASK
555
	require valid-user
556
	AuthType digest
557
	AuthName $HOSTNAME
558
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
559
	AuthUserFile $DIR_WEB/digest/key_manager
560
	ErrorDocument 404 https://$PRIVATE_IP/
561
</Directory>
562
<Directory $DIR_WEB/manager/html>
563
	SSLRequireSSL
564
	AllowOverride None
565
	Order deny,allow
566
	Deny from all
567
	Allow from 127.0.0.1
568
	Allow from $PRIVATE_NETWORK_MASK
569
	require valid-user
570
	AuthType digest
571
	AuthName $HOSTNAME
572
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
573
	AuthUserFile $DIR_WEB/digest/key_manager
574
	ErrorDocument 404 https://$PRIVATE_IP/
575
</Directory>
576
<Directory $DIR_WEB/backup>
577
	SSLRequireSSL
578
	AllowOverride None
579
	Order deny,allow
580
	Deny from all
581
	Allow from 127.0.0.1
582
	Allow from $PRIVATE_NETWORK_MASK
583
	require valid-user
584
	AuthType digest
585
	AuthName $HOSTNAME
586
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
587
	AuthUserFile $DIR_WEB/digest/key_backup
588
	ErrorDocument 404 https://$PRIVATE_IP/
589
</Directory>
590
Alias /save/ "$DIR_SAVE/"
591
<Directory $DIR_SAVE>
592
	SSLRequireSSL
593
	Options Indexes
594
	Order deny,allow
595
	Deny from all
596
	Allow from 127.0.0.1
597
	Allow from $PRIVATE_NETWORK_MASK
598
	require valid-user
599
	AuthType digest
600
	AuthName $HOSTNAME
601
	AuthUserFile $DIR_WEB/digest/key_backup
602
	ErrorDocument 404 https://$PRIVATE_IP/
603
	ReadmeName	/readmeSave.html
604
</Directory>
605
EOF
606
} # End of gestion ()
607
 
608
##########################################################################################
609
##				Fonction AC()						##
610
## - Création d'une Autorité de Certification et du certificat serveur pour apache 	##
611
##########################################################################################
612
AC ()
613
{
614
	$SED "s?ifcfg-eth.?ifcfg-$INTIF?g" $DIR_DEST_BIN/alcasar-CA.sh
615
	$DIR_DEST_BIN/alcasar-CA.sh $mode
616
	MOD_SSL=`find /etc/httpd/conf -type f -name *default_ssl*`
617
	$SED "s?localhost.crt?alcasar.crt?g" $MOD_SSL
618
	$SED "s?localhost.key?alcasar.key?g" $MOD_SSL
5 franck 619
	chown -R root:apache /etc/pki
1 root 620
	chmod -R 750 /etc/pki
621
} # End AC ()
622
 
623
##########################################################################################
624
##			Fonction init_db()						##
625
## - Initialisation de la base Mysql							##
626
## - Affectation du mot de passe de l'administrateur (root)				##
627
## - Suppression des bases et des utilisateurs superflus				##
628
## - Création de la base 'radius'							##
629
## - Installation du schéma de cette base						##
630
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)	##
631
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)		##
632
##########################################################################################
633
init_db ()
634
{
635
	mkdir -p /var/lib/mysql/.tmp
636
	chown mysql:mysql /var/lib/mysql/.tmp
227 franck 637
	[ -e /etc/my.cnf.rpmnew ] && mv /etc/my.cnf.rpmnew /etc/my.cnf		# prend en compte les migrations de MySQL
1 root 638
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
639
	$SED "s?^#bind-address.*?bind-address=127.0.0.1?g" /etc/my.cnf
640
	/etc/init.d/mysqld start
641
	sleep 4
642
	mysqladmin -u root password $mysqlpwd
643
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
644
# On supprime les tables d'exemple
645
	$MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;CONNECT mysql;DELETE from user where user='';FLUSH PRIVILEGES;" 
646
	# On crée la base 'radius'
647
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES"
648
	FICSQL_LIBFREERADIUS=`find /etc/raddb/sql/mysql -type f -name schema.sql`
649
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $FICSQL_LIBFREERADIUS
650
	$MYSQL="connect $DB_RADIUS;ALTER table radpostauth DROP column pass;" 
651
# Ajout des tables de comptabilité journalière et mensuelle (accounting)
652
	DIRSQL_FREERADIUS=`find /usr/share/doc/freeradius-web* -type d -name mysql`
653
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/mtotacct.sql
654
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/totacct.sql
655
# correction d'un bug sur la table 'userinfo' avant import
656
	$SED "s?^  id int(10).*?  id int(10) NOT NULL auto_increment,?g" $DIRSQL_FREERADIUS/userinfo.sql
657
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/userinfo.sql
658
# correction d'un bug sur la table 'badusers' avant import (elle reste inutilisée par Alcasar pour l'instant)
659
	#$SED "s?^  id int(10).*?  id int(10) NOT NULL auto_increment,?g" $DIRSQL_FREERADIUS/badusers.sql
660
	#mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/badusers.sql
661
} # End init_db ()
662
 
663
##########################################################################
664
##			Fonction param_radius				##
665
## - Paramètrage des fichiers de configuration FreeRadius		##
666
## - Affectation du secret partagé entre coova-chilli et freeradius	##
667
## - Modification de fichier de conf pour l'accès à Mysql		##
668
##########################################################################
669
param_radius ()
670
{
671
	cp -f $DIR_CONF/radiusd-db-vierge.sql /etc/raddb/
672
	chown -R radius:radius /etc/raddb
673
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
674
# paramètrage radius.conf
675
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
676
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
677
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
678
# suppression de la fonction proxy
679
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
680
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
681
# écoute sur loopback uniquement (à modifier plus tard pour l'EAP)
682
	$SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
683
# prise en compte du module SQL et des compteurs SQL
684
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
685
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
686
	$SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
687
# purge du répertoire des serveurs virtuels et copie du fichier de configuration d'Alcasar
688
	rm -f /etc/raddb/sites-enabled/*
689
       	cp $DIR_CONF/alcasar-radius /etc/raddb/sites-available/alcasar
690
	chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
691
	chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
692
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
693
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
694
	# Inutile dans notre fonctionnement mais les liens sont recrés par un update de radius ... donc là forcé en tant que fichier
695
	touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
696
# configuration du fichier client.conf (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
697
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
698
	cat << EOF > /etc/raddb/clients.conf
699
client 127.0.0.1 {
700
	secret = $secretradius
701
	shortname = localhost
702
}
703
client $PRIVATE_NETWORK_MASK {
704
	secret = $secretradius
705
	shortname = localhost
706
}
707
EOF
708
# modif sql.conf
709
	[ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
710
	$SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
711
	$SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
712
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
713
	$SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
714
# modif dialup.conf
715
	[ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
716
	cp -f $DIR_CONF/dialup.conf /etc/raddb/sql/mysql/dialup.conf
717
} # End param_radius ()
718
 
719
##########################################################################
720
##			Fonction param_web_radius			##
721
## - Import, modification et paramètrage de l'interface "dialupadmin"	##
722
## - Création du lien vers la page de changement de mot de passe        ##
723
##########################################################################
724
param_web_radius ()
725
{
726
# copie de l'interface d'origine dans la structure Alcasar
727
	[ -d /usr/share/freeradius-web ] && cp -rf /usr/share/freeradius-web/* $DIR_WEB/manager/
728
# copie des fichiers modifiés et suppression des fichiers inutiles
729
	cp -rf $DIR_GESTION/manager/* $DIR_WEB/manager/
730
	rm -f $DIR_WEB/manager/index.html $DIR_WEB/manager/readme 
731
	rm -f $DIR_WEB/manager/htdocs/about.html $DIR_WEB/manager/htdocs/index.html $DIR_WEB/manager/htdocs/content.html
5 franck 732
	chown -R apache:apache $DIR_WEB/manager/
1 root 733
# Modification du fichier de configuration
734
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
5 franck 735
	$SED "s?^general_domain:.*?general_domain: $ORGANISME.$DOMAIN?g" /etc/freeradius-web/admin.conf
1 root 736
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
737
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
738
	$SED "s?^sql_debug:.*?sql_debug: false?g" /etc/freeradius-web/admin.conf
739
	$SED "s?^sql_usergroup_table: .*?sql_usergroup_table: radusergroup?g" /etc/freeradius-web/admin.conf
740
	$SED "s?^sql_password_attribute:.*?sql_password_attribute: Crypt-Password?g" /etc/freeradius-web/admin.conf
741
	$SED "s?^general_finger_type.*?# general_finger_type: snmp?g" /etc/freeradius-web/admin.conf
742
	$SED "s?^general_stats_use_totacct.*?general_stats_use_totacct: yes?g" /etc/freeradius-web/admin.conf
131 richard 743
	cat <<EOF > /etc/freeradius-web/naslist.conf
1 root 744
nas1_name: alcasar.%{general_domain}
745
nas1_model: Portail captif
746
nas1_ip: $PRIVATE_IP
747
nas1_port_num: 0
748
nas1_community: public
749
EOF
750
# Modification des attributs visibles lors de la création d'un usager ou d'un groupe
751
	[ -e /etc/freeradius-web/user_edit.attrs.default ] || mv /etc/freeradius-web/user_edit.attrs /etc/freeradius-web/user_edit.attrs.default
752
	cp -f $DIR_CONF/user_edit.attrs /etc/freeradius-web/user_edit.attrs
114 richard 753
# Ajout du mappage des attributs chillispot
754
	[ -e /etc/freeradius-web/sql.attrmap.default ] || mv /etc/freeradius-web/sql.attrmap /etc/freeradius-web/sql.attrmap.default
755
	cp -f $DIR_CONF/sql.attrmap /etc/freeradius-web/sql.attrmap
1 root 756
# Modification des attributs visibles sur les pages des statistiques (suppression NAS_IP et NAS_port)
757
	[ -e /etc/freeradius-web/sql.attrs.default ] || cp /etc/freeradius-web/sql.attrs /etc/freeradius-web/user_edit.attrs.default
758
	$SED "s?^NASIPAddress.*?NASIPAddress\tNas IP Address\tno?g" /etc/freeradius-web/sql.attrs
759
	$SED "s?^NASPortId.*?NASPortId\tNas Port\tno?g" /etc/freeradius-web/sql.attrs
5 franck 760
	chown -R apache:apache /etc/freeradius-web
1 root 761
# Ajout de l'alias vers la page de "changement de mot de passe usager"
762
	cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
763
Alias /pass/ "$DIR_WEB/manager/pass/"
764
<Directory $DIR_WEB/manager/pass>
765
	SSLRequireSSL
766
	AllowOverride None
767
	Order deny,allow
768
	Deny from all
769
	Allow from 127.0.0.1
770
	Allow from $PRIVATE_NETWORK_MASK
771
	ErrorDocument 404 https://$PRIVATE_IP
772
</Directory>
773
EOF
774
	echo "- URL pour le changement du mot de passe usager : https://$PRIVATE_IP/pass/" >> $FIC_PARAM
775
} # End of param_web_radius ()
776
 
777
##########################################################################
778
##			Fonction param_chilli				##
779
## - Paramètrage du fichier de configuration de coova-chilli		##
780
## - Paramètrage de la page d'authentification (intercept.php)		##
781
##########################################################################
782
param_chilli ()
783
{
784
# modification du générateur du fichier de conf 
785
	[ -e /etc/chilli/functions.default ] || cp /etc/chilli/functions /etc/chilli/functions.default
142 richard 786
	# suppression du domaine "coova.org" dans la primitive uamallowed
14 richard 787
	$SED "s?www.coova.org,??g" /etc/chilli/functions
142 richard 788
	# suppression de la primitive "uamanydns"
1 root 789
	$SED "s?uamanydns??g" /etc/chilli/functions
142 richard 790
	# on fixe la socket de commande local (/var/run/chilli.sock)
112 richard 791
	$SED "s?^CMDSOCK=.*?CMDSOCK=\$RUN_D/chilli.sock?g" /etc/chilli/functions
142 richard 792
# modification du fichier d'initialisation
1 root 793
	[ -e /etc/init.d/chilli.default ] || cp /etc/init.d/chilli /etc/init.d/chilli.default
235 richard 794
	# configuration d'eth1 (utile pour dnsmasq))
142 richard 795
	$SED "s?ifconfig.*?ifconfig \$HS_LANIF $PRIVATE_IP?g" /etc/init.d/chilli
796
	# ajout de la fontion 'status' (utile pour la gestion du process)
797
	$SED "/^[\t ]*stop)/i\    status)\n        status chilli\n        RETVAL=$?\n        ;;\n" /etc/init.d/chilli
235 richard 798
	# insertion d'une tempo sur le 'restart' pour permettre à tun0 d'être libérée
799
	$SED "/^[\t ]*\$0 start/i\        sleep 2" /etc/init.d/chilli
1 root 800
# création du fichier de conf
801
	cp /etc/chilli/defaults /etc/chilli/config
802
	$SED "s?^# HS_WANIF=.*?HF_WANIF=$EXTIF?g" /etc/chilli/config
803
	$SED "s?^HS_LANIF=.*?HS_LANIF=$INTIF?g" /etc/chilli/config
804
	$SED "s?^HS_NETWORK=.*?HS_NETWORK=$PRIVATE_NETWORK?g" /etc/chilli/config
805
	$SED "s?^HS_NETMASK=.*?HS_NETMASK=$PRIVATE_MASK?g" /etc/chilli/config
806
	$SED "s?^HS_UAMLISTEN=.*?HS_UAMLISTEN=$PRIVATE_IP?g" /etc/chilli/config
807
	$SED "s?^HS_UAMPORT=.*?HS_UAMPORT=$UAMPORT?g" /etc/chilli/config
808
	$SED "s?^# HS_DYNIP=.*?HS_DYNIP=$PRIVATE_DYN_IP?g" /etc/chilli/config
809
	$SED "s?^# HS_DYNIP_MASK=.*?HS_DYNIP_MASK=$PRIVATE_DYN_MASK?g" /etc/chilli/config
810
	$SED "s?^# HS_STATIP=.*?HS_STATIP=$PRIVATE_STAT_IP?g" /etc/chilli/config
811
	$SED "s?^# HS_STATIP_MASK.*?HS_STATIP_MASK=$PRIVATE_STAT_MASK?g" /etc/chilli/config
812
	$SED "s?^# HS_DNS_DOMAIN=.*?HS_DNS_DOMAIN=$DOMAIN?g" /etc/chilli/config
5 franck 813
	$SED "s?^HS_DNS1=.*?HS_DNS1=$PRIVATE_IP?g" /etc/chilli/config
814
	$SED "s?^HS_DNS2=.*?HS_DNS2=$PRIVATE_IP?g" /etc/chilli/config
1 root 815
	$SED "s?^HS_UAMSECRET=.*?HS_UAMSECRET=$secretuam?g" /etc/chilli/config
816
	$SED "s?^HS_RADIUS=.*?HS_RADIUS=127.0.0.1?g" /etc/chilli/config
817
	$SED "s?^HS_RADIUS2=.*?HS_RADIUS2=127.0.0.1?g" /etc/chilli/config
818
	$SED "s?^HS_RADSECRET=.*?HS_RADSECRET=$secretradius?g" /etc/chilli/config
819
	$SED "s?^HS_UAMALLOW=.*?# HS_UAMALLOW?g" /etc/chilli/config
820
	$SED "s?^HS_UAMSERVER=.*?HS_UAMSERVER=$PRIVATE_IP?g" /etc/chilli/config
821
	$SED "s?^HS_UAMFORMAT=.*?HS_UAMFORMAT=https://\$HS_UAMSERVER/intercept.php?g" /etc/chilli/config
822
	$SED "s?^HS_UAMHOMEPAGE=.*?HS_UAMHOMEPAGE=?g" /etc/chilli/config
823
	$SED "s?^HS_UAMSERVICE=.*?# HS_UAMSERVICE?g" /etc/chilli/config
824
	$SED "s?^# HS_ANYIP=.*?HS_ANYIP=on?g" /etc/chilli/config
825
	$SED "s?^# HS_DNSPARANOIA=.*?HS_DNSPARANOIA=on?g" /etc/chilli/config
826
	$SED "s?^HS_LOC_NAME=.*?HS_LOC_NAME=\"$HOSTNAME\"?g" /etc/chilli/config
827
	$SED "s?^HS_WWWDIR.*?# HS_WWWDIR?g" /etc/chilli/config
828
	$SED "s?^HS_WWWBIN.*?# HS_WWWBIN?g" /etc/chilli/config
829
	$SED "s?^HS_PROVIDER_LINK.*?HS_PROVIDER_LINK=https://\$HS_UAMSERVER/?g" /etc/chilli/config
830
	echo "HS_COAPORT=3799" >> /etc/chilli/config
112 richard 831
	echo "HS_ADMINTERVAL=0" >> /etc/chilli/config
259 richard 832
#	cat <<EOF >> /etc/chilli/config 
833
## Usage d'un DHCPD externe a coova  (dhcpd local ou extérieur)
834
#HS_USE_DHCPD_EXT="on"
835
#HS_DHCP_GATEWAY_IP=127.0.0.1
836
#HS_DHCP_GATEWAY_PORT=67
837
#HS_DHCP_RELAY_AGENT_IP=127.0.0.1
838
#HS_USE_DHCP_RADIUS="no"
839
#EOF
1 root 840
# création des fichiers de sites, d'urls et d'adresses MAC de confiance
841
	echo -e "HS_UAMALLOW=\"\"" > /etc/chilli/alcasar-uamallowed
842
	echo -e "HS_UAMDOMAINS=\"\"" > /etc/chilli/alcasar-uamdomain
843
	$SED "s?^# HS_MACAUTHMODE=.*?HS_MACAUTHMODE=local?g" /etc/chilli/config
139 richard 844
	echo -e "HS_MACALLOW=\"\"" > /etc/chilli/alcasar-macallowed
1 root 845
	chown root:apache /etc/chilli/alcasar-*
846
	chmod 660 /etc/chilli/alcasar-*
847
	echo ". /etc/chilli/alcasar-uamallowed" >> /etc/chilli/config
848
	echo ". /etc/chilli/alcasar-uamdomain" >> /etc/chilli/config
849
	echo ". /etc/chilli/alcasar-macallowed" >> /etc/chilli/config
850
	echo "- URL de deconnexion du portail : http://$PRIVATE_IP:$UAMPORT/logoff" >> $FIC_PARAM
851
# Définition du secret partagé entre coova-chilli et la page d'authentification (intercept.php)
852
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
853
	$SED "s?^\$userpassword=1.*?\$userpassword=1;?g" $DIR_WEB/intercept.php
854
	$SED "s?^\$organisme = .*?\$organisme = \"$ORGANISME\";?g" $DIR_WEB/intercept.php
855
# Suppression des modifications "iptables" effectuées lors du lancement du daemon coova
856
	$SED "s?^    iptables \$opt \$\*?#   iptables \$opt \$\*?g" /etc/chilli/up.sh
857
}  # End of param_chilli ()
858
 
859
##########################################################
860
##			Fonction param_squid		##
861
## - Paramètrage du proxy 'squid' en mode 'cache'	##
862
## - Initialisation de la base de données  		##
863
##########################################################
864
param_squid ()
865
{
866
# paramètrage de Squid (connecté en série derrière Dansguardian)
867
	[ -e /etc/squid/squid.conf.default  ] || cp /etc/squid/squid.conf /etc/squid/squid.conf.default
868
# suppression des références 'localnet', 'icp', 'htcp' et 'always_direct'
869
	$SED "/^acl localnet/d" /etc/squid/squid.conf
870
	$SED "/^icp_access allow localnet/d" /etc/squid/squid.conf
871
	$SED "/^icp_port 3130/d" /etc/squid/squid.conf
872
	$SED "/^http_access allow localnet/d" /etc/squid/squid.conf
873
	$SED "/^htcp_access allow localnet/d" /etc/squid/squid.conf
874
	$SED "/^always_direct allow localnet/d" /etc/squid/squid.conf
875
# mode 'proxy transparent local'
876
	$SED "s?^http_port.*?http_port 127.0.0.1:$SQUID_PORT transparent?g" /etc/squid/squid.conf
877
# compatibilité des logs avec awstats
878
	$SED "s?^# emulate_httpd_log.*?emulate_httpd_log on?g" /etc/squid/squid.conf
879
	$SED "s?^access_log.*?access_log /var/log/squid/access.log?g" /etc/squid/squid.conf
880
# Initialisation du cache de Squid
881
	/usr/sbin/squid -z
882
}  # End of param_squid ()
883
 
884
##################################################################
885
##		Fonction param_dansguardian			##
886
## - Paramètrage du gestionnaire de contenu Dansguardian	##
887
## - Copie de la blacklist de toulouse  			##
888
##################################################################
889
param_dansguardian ()
890
{
891
# modification du fichier d'initialisation (correction de la procédure d'arret)
892
	[ -e /etc/init.d/dansguardian.default ] || cp /etc/init.d/dansguardian /etc/init.d/dansguardian.default
893
	cp -f $DIR_CONF/dansguardian-init /etc/init.d/dansguardian
894
	mkdir /var/dansguardian
895
	chown dansguardian /var/dansguardian
896
	[ -e /etc/dansguardian/dansguardian.conf.default ] || cp /etc/dansguardian/dansguardian.conf /etc/dansguardian/dansguardian.conf.default
897
# par défaut, le filtrage WEB est désactivé
898
	$SED "s/^reportinglevel =.*/reportinglevel = -1/g" /etc/dansguardian/dansguardian.conf
899
# la page d'interception est en français
900
	$SED "s?^language =.*?language = french?g" /etc/dansguardian/dansguardian.conf
901
# on limite l'écoute de Dansguardian côté LAN
902
	$SED "s?^filterip =.*?filterip = $PRIVATE_IP?g" /etc/dansguardian/dansguardian.conf
75 richard 903
# on chaîne Dansguardian au proxy antivirus HAVP
80 richard 904
	$SED "s?^proxyport.*?proxyport = 8090?g" /etc/dansguardian/dansguardian.conf
1 root 905
# on remplace la page d'interception (template)
906
	cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
907
	cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
908
# on ne loggue que les deny (pour le reste, on a squid)
909
	$SED "s?^loglevel =.*?loglevel = 1?g" /etc/dansguardian/dansguardian.conf
910
# on désactive par défaut le controle de contenu des pages html
911
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" /etc/dansguardian/dansguardian.conf
912
	cp /etc/dansguardian/lists/bannedphraselist /etc/dansguardian/lists/bannedphraselist.default
913
	$SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedphraselist # (on commente ce qui ne l'est pas)
914
# on désactive par défaut le contrôle d'URL par expressions régulières
915
	cp /etc/dansguardian/lists/bannedregexpurllist /etc/dansguardian/lists/bannedregexpurllist.default
916
	$SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
917
# on désactive par défaut le contrôle de téléchargement de fichiers
918
	[ -e /etc/dansguardian/dansguardianf1.conf.default ] || cp /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf1.conf.default
919
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" /etc/dansguardian/dansguardianf1.conf
920
	[ -e /etc/dansguardian/lists/bannedextensionlist.default ] || mv /etc/dansguardian/lists/bannedextensionlist /etc/dansguardian/lists/bannedextensionlist.default
921
	[ -e /etc/dansguardian/lists/bannedmimetypelist.default ] || mv /etc/dansguardian/lists/bannedmimetypelist /etc/dansguardian/lists/bannedmimetypelist.default
922
	touch /etc/dansguardian/lists/bannedextensionlist
923
	touch /etc/dansguardian/lists/bannedmimetypelist
924
# on vide la liste des @IP du Lan ne subissant pas le filtrage WEB
925
	[ -e /etc/dansguardian/lists/exceptioniplist.default ] || mv /etc/dansguardian/lists/exceptioniplist /etc/dansguardian/lists/exceptioniplist.default
926
	touch /etc/dansguardian/lists/exceptioniplist
927
# on copie les fichiers de la BL de toulouse
928
	[ -d /etc/dansguardian/lists/blacklists ] && mv /etc/dansguardian/lists/blacklists /etc/dansguardian/lists/blacklists.default
929
	tar zxvf $DIR_CONF/blacklists.tar.gz --directory=/etc/dansguardian/lists/ 2>&1 >/dev/null
930
	cp -f $DIR_CONF/VERSION-BL $DIR_WEB/
931
	chown apache:apache $DIR_WEB/VERSION-BL
932
# on crée la BL secondaire
933
	mkdir /etc/dansguardian/lists/blacklists/ossi
934
	touch /etc/dansguardian/lists/blacklists/ossi/domains
935
	touch /etc/dansguardian/lists/blacklists/ossi/urls
936
# On crée une WhiteList vide
937
	[ -e /etc/dansguardian/lists/exceptionsitelist.default ] || mv /etc/dansguardian/lists/exceptionsitelist  /etc/dansguardian/lists/exceptionsitelist.default
938
	[ -e /etc/dansguardian/lists/exceptionurllist.default ] || mv /etc/dansguardian/lists/exceptionurllist  /etc/dansguardian/lists/exceptionurllist.default
939
	touch /etc/dansguardian/lists/exceptionsitelist
940
	touch /etc/dansguardian/lists/exceptionurllist
941
# on configure le filtrage de site
942
	[ -e /etc/dansguardian/lists/bannedsitelist.default ] || cp /etc/dansguardian/lists/bannedsitelist /etc/dansguardian/lists/bannedsitelist.default
943
	$SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedsitelist # (on commente ce qui ne l'est pas)
944
# on bloque les sites ne possédant pas de nom de domaine (ex: http://12.13.14.15)
945
	$SED "s?^#\*ip?\*ip?g" /etc/dansguardian/lists/bannedsitelist
946
# on bloque le ssl sur port 80
947
	$SED "s?^#\*\*s?\*\*s?g" /etc/dansguardian/lists/bannedsitelist
948
# on configure la BL de toulouse
949
	cat $DIR_CONF/bannedsitelist >> /etc/dansguardian/lists/bannedsitelist
950
[ -e /etc/dansguardian/lists/bannedurllist.default ] || cp /etc/dansguardian/lists/bannedurllist /etc/dansguardian/lists/bannedurllist.default
951
	$SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedurllist # (on commente ce qui ne l'est pas)
952
	cat $DIR_CONF/bannedurllist >> /etc/dansguardian/lists/bannedurllist
5 franck 953
	chown -R dansguardian:apache /etc/dansguardian/
1 root 954
	chmod -R g+rw /etc/dansguardian
955
} # End of param_dansguardian ()
956
 
71 richard 957
##################################################################
958
##			Fonction antivirus			##
109 richard 959
## - configuration havp + clamav				##
71 richard 960
##################################################################
961
antivirus ()		
962
{
963
# création de la partition de stockage temporaire (100Mo)
109 richard 964
	dd if=/dev/zero of=/tmp/havp-disk bs=1024k count=30
965
	mkfs.ext4 -qF /tmp/havp-disk
966
	mkdir /var/tmp/havp
967
	echo "# Entry for havp tmp files scan partition" >> /etc/fstab
968
	echo "/tmp/havp-disk /var/tmp/havp ext4 loop,mand,noatime,async" >> /etc/fstab
969
	mount /var/tmp/havp
110 richard 970
	chown -R havp /var/tmp/havp /var/log/havp
109 richard 971
# configuration d'HAVP
972
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
973
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
974
	$SED "s?^# PARENTPROXY.*?PARENTPROXY 127.0.0.1?g" /etc/havp/havp.config
975
	$SED "s?^# PARENTPORT.*?PARENTPORT 3128?g" /etc/havp/havp.config
976
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config
977
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config
978
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config
979
# mise à jour de la base antivirale de clamav toutes les 2 heures
980
	$SED "s?^Checks.*?Checks 12?g" /etc/freshclam.conf
981
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
71 richard 982
}
983
 
1 root 984
##################################################################################
985
##				Fonction firewall				##
986
## - adaptation des scripts du parefeu						##
987
## - mise en place des règles et sauvegarde pour un lancement automatique	##
988
## - configuration Ulogd							##
989
##################################################################################
990
firewall ()
991
{
992
	$SED "s?^EXTIF=.*?EXTIF=\"$EXTIF\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
993
	$SED "s?^INTIF=.*?INTIF=\"$INTIF\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
994
	$SED "s?^PRIVATE_NETWORK_MASK=.*?PRIVATE_NETWORK_MASK=\"$PRIVATE_NETWORK_MASK\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
995
	$SED "s?^PRIVATE_IP=.*?PRIVATE_IP=\"$PRIVATE_IP\"?g" $DIR_DEST_BIN/alcasar-iptables.sh $DIR_DEST_BIN/alcasar-iptables-bypass.sh
996
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
997
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
998
	[ -e /var/log/firewall/firewall.log ] || touch /var/log/firewall/firewall.log
5 franck 999
	chown -R root:apache /var/log/firewall
1 root 1000
	chmod 750 /var/log/firewall
1001
	chmod 640 /var/log/firewall/firewall.log
1002
 	$SED "s?^file=\"/var/log/ulogd.syslogemu\"?file=\"/var/log/firewall/firewall.log\"?g" /etc/ulogd.conf
1003
	sh $DIR_DEST_BIN/alcasar-iptables.sh
1004
}  # End of firewall ()
1005
 
1006
##################################################################################
1007
##				Fonction param_awstats				##
1008
## - configuration de l'interface des logs de consultation WEB (AWSTAT)		##
1009
##################################################################################
1010
param_awstats()
1011
{
1012
	ln -s /var/www/awstats $DIR_WEB/awstats
1013
	cp /etc/awstats/awstats.conf /etc/awstats/awstats.conf.default
1014
	$SED "s?^LogFile=.*?LogFile=\"/var/log/squid/access.log\"?g" /etc/awstats/awstats.conf
1015
	$SED "s?^LogFormat=.*?LogFormat=4?g" /etc/awstats/awstats.conf
1016
	$SED "s?^SiteDomain=.*?SiteDomain=\"$HOSTNAME\"?g" /etc/awstats/awstats.conf
1017
	$SED "s?^HostAliases=.*?HostAliases=\"$PRIVATE_IP\"?g" /etc/awstats/awstats.conf
1018
	$SED "s?^DNSLookup=.*?DNSLookup=0?g" /etc/awstats/awstats.conf
1019
	$SED "s?^DirData=.*?DirData=\"/var/lib/awstats\"?g" /etc/awstats/awstats.conf	# corrige le fichier de config awstats natif ...
1020
	$SED "s?^StyleSheet=.*?StyleSheet=\"/css/style.css\"?g" /etc/awstats/awstats.conf
1021
	$SED "s?^BuildReportFormat=.*?BuildReportFormat=xhtml?g" /etc/awstats/awstats.conf
59 richard 1022
	$SED "s?^UseFramesWhenCGI=.*?UseFramesWhenCGI=0?g" /etc/awstats/awstats.conf
1 root 1023
	cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
1024
<Directory $DIR_WEB/awstats>
1025
	SSLRequireSSL
1026
	Options ExecCGI
1027
	AddHandler cgi-script .pl
1028
	DirectoryIndex awstats.pl
1029
	Order deny,allow
1030
	Deny from all
1031
	Allow from 127.0.0.1
1032
	Allow from $PRIVATE_NETWORK_MASK
1033
	require valid-user
1034
	AuthType digest
1035
	AuthName $HOSTNAME
1036
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
1037
	AuthUserFile $DIR_WEB/digest/key_admin
1038
	ErrorDocument 404 https://$PRIVATE_IP/
1039
</Directory>
1040
SetEnv PERL5LIB /usr/share/awstats/lib:/usr/share/awstats/plugins
1041
EOF
1042
} # End of param_awstats ()
1043
 
1044
##########################################################
235 richard 1045
##		Fonction param_dnsmasq			##
1 root 1046
##########################################################
219 jeremy 1047
param_dnsmasq ()
1048
{
1049
	[ -d /etc/dnsmasq.d ] || mkdir /etc/dnsmasq.d
1050
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1051
	[ -e /etc/dnsmasq.conf ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
259 richard 1052
	$SED "s?^[^#]?#&?g" /etc/dnsmasq.conf 					# (on commente ce qui ne l'est pas)
1053
	$SED "s?^#conf-dir=.*?conf-dir=/etc/dnsmasq.d?g" /etc/dnsmasq.conf	# les fichiers de config se trouvent dans /etc/dnsmasq.d/*
1054
	$SED "s?^DHCP_LEASE=.*?DHCP_LEASE=/var/log/dnsmasq/lease.log?g" /etc/sysconfig/dnsmasq # fichier contenant les baux
1055
# on crée le fichier de conf spécifique pour Alcasar
1056
	cat << EOF > /etc/dnsmasq.d/alcasar-dnsmasq.conf 
1057
# Inclusion de la blacklist <domains> de Toulouse dans la configuration
1058
conf-dir=/usr/local/etc/alcasar-dnsfilter-enabled
1059
 
1060
listen-address=$PRIVATE_IP
1061
listen-address=127.0.0.1
286 richard 1062
no-dhcp-interface=$INTIF
259 richard 1063
bind-interfaces
1064
 
1065
cache-size=256
1066
domain=$DOMAIN
1067
domain-needed
1068
expand-hosts
1069
bogus-priv
1070
filterwin2k
1071
server=$DNS1
1072
server=$DNS2
1073
 
1074
dhcp-range=$ORGANISME,$PRIVATE_DYN_FIRST_IP,$PRIVATE_DYN_LAST_IP,$PRIVATE_MASK,12h
1075
#dhcp-option=3,1.2.3.4
1076
#dhcp-option=option:router,1.2.3.4
1077
#dhcp-option=42,0.0.0.0
1078
#dhcp-option=option:ntp-server,192.168.0.4,10.10.0.5
1079
 
1080
# Exemple de configuration statique
1081
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.10.20,255.255.255.0,45m
1082
EOF
249 franck 1083
	mkdir /usr/local/etc/{alcasar-dnsfilter-available,alcasar-dnsfilter-enabled}
1084
	chown -R 770 /usr/local/etc/{alcasar-dnsfilter-available,alcasar-dnsfilter-enabled}
1085
	chown -R root:apache /usr/local/etc/{alcasar-dnsfilter-available,alcasar-dnsfilter-enabled}
1086
	/usr/local/bin/alcasar-dnsfilter-import.sh
1087
	/usr/local/bin/alcasar-dnsfilter-activate.sh
254 franck 1088
} # End dnsmasq
219 jeremy 1089
 
1 root 1090
##########################################################
1091
##		Fonction cron				##
1092
## - Mise en place des différents fichiers de cron	##
1093
##########################################################
1094
cron ()
1095
{
1096
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1097
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1098
	cat <<EOF > /etc/crontab
1099
SHELL=/bin/bash
1100
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1101
MAILTO=root
1102
HOME=/
1103
 
1104
# run-parts
1105
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1106
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1107
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1108
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1109
EOF
1110
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1111
	cat <<EOF >> /etc/anacrontab
1112
7       10      cron.logExport          nice /etc/cron.d/export_log
1113
7       15      cron.logClean           nice /etc/cron.d/clean_log
168 franck 1114
7	20	cron.importClean	nice /etc/cron.d/clean_import
1 root 1115
EOF
1116
# suppression des fichiers de logs de plus d'un an (tous les lundi à 4h30)
1117
	cat <<EOF > /etc/cron.d/clean_log
1118
30 4 * * 1 root $DIR_DEST_BIN/alcasar-log-clean.sh
1119
EOF
1120
# export de la base des usagers (tous les lundi à 4h45)
1121
	cat <<EOF > /etc/cron.d/mysql
1122
45 4 * * 1 root $DIR_DEST_SBIN/alcasar-mysql.sh -dump
1123
EOF
1124
# export des log squid, firewall et apache (tous les lundi à 5h00)
1125
	cat <<EOF > /etc/cron.d/export_log
1126
#!/bin/sh
1127
00 5 * * 1 root $DIR_DEST_BIN/alcasar-log-export.sh
1128
EOF
1129
# mise à jour des stats de consultation WEB toutes les 30'  ## existe en double pour le daily sans l'@IP
1130
# sans mèl ( > /dev/null 2>&1)
1131
	cat << EOF > /etc/cron.d/awstats
1132
*/30 * * * * root /var/www/awstats/awstats.pl -config=localhost -update >/dev/null 2>&1
1133
EOF
219 jeremy 1134
# suppression des fichiers de mots de passe lors d'imports massifs par fichier de plus de 24h
168 franck 1135
	cat << EOF > /etc/cron.d/clean_import
1136
30 * * * *  root /usr/local/bin/alcasar-import-clean.sh
1137
EOF
1 root 1138
# mise à jour des stats de connexion (accounting). Scripts provenant de "dialupadmin" (rpm freeradius-web) (cf. wiki.freeradius.org/Dialup_admin).
1139
# on écrase le crontab d'origine installé par le RPM "freeradius-web" (bug remonté à qa.mandriva.com : 46739).
1140
# 'tot_stats' (tout les jours à 01h01) : aggrégat des connexions journalières par usager (renseigne la table 'totacct') 
1141
# 'monthly_tot_stat' (tous les jours à 01h05) : aggrégat des connexions mensuelles par usager (renseigne la table 'mtotacct')
1142
# 'truncate_raddact' (tous les 1er du mois à 01h10) : supprime les entrées journalisées plus vieilles que '$back_days' jours (défini ci-après)
1143
# 'clean_radacct' (tous les 1er du mois à 01h15) : ferme les session ouvertes de plus de '$back_days' jours (défini ci-après)
1144
	$SED "s?^\$back_days.*?\$back_days = 365;?g" /usr/bin/truncate_radacct
1145
	$SED "s?^\$back_days.*?\$back_days = 30;?g" /usr/bin/clean_radacct
1146
	rm -f /etc/cron.daily/freeradius-web
1147
	rm -f /etc/cron.monthly/freeradius-web
1148
	cat << EOF > /etc/cron.d/freeradius-web
1149
1 1 * * * root /usr/bin/tot_stats > /dev/null 2>&1
1150
5 1 * * * root /usr/bin/monthly_tot_stats > /dev/null 2>&1
1151
10 1 1 * * root /usr/bin/truncate_radacct > /dev/null 2>&1
1152
15 1 1 * * root /usr/bin/clean_radacct > /dev/null 2>&1
1153
EOF
1154
# activation du "chien de garde" (watchdog) toutes les 3' afin de déconnecter les usagers authentifiés dont la station est usurpée ou ne répond plus
1155
	cat << EOF > /etc/cron.d/watchdog
1156
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1157
EOF
1158
} # End cron
1159
 
1160
##################################################################
1161
##			Fonction post_install			##
1162
## - Modification des bannières (locales et ssh) et des prompts ##
1163
## - Installation de la structure de chiffrement pour root	##
1164
## - Mise en place du sudoers et de la sécurité sur les fichiers##
1165
## - Mise en place du la rotation des logs			##
5 franck 1166
## - Configuration dans le cas d'une mise à jour		##
1 root 1167
##################################################################
1168
post_install()
1169
{
1170
# adaptation du script "chien de garde" (watchdog)
1171
	$SED "s?^PRIVATE_IP=.*?PRIVATE_IP=\"$PRIVATE_IP\"?g" $DIR_DEST_BIN/alcasar-watchdog.sh
1172
# création de la bannière locale
1173
	[ -e /etc/mandriva-release.default ]  || cp /etc/mandriva-release /etc/mandriva-release.default
1174
cat <<EOF > /etc/mandriva-release
1175
 Bienvenue sur $HOSTNAME
1176
 
1177
EOF
1178
# création de la bannière SSH
1179
	cp /etc/mandriva-release /etc/ssh/alcasar-banner-ssh
5 franck 1180
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1 root 1181
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1182
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1183
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1184
# sshd écoute côté LAN
1185
	$SED "s?^#ListenAddress 0\.0\.0\.0?ListenAddress $PRIVATE_IP?g" /etc/ssh/sshd_config
1186
# sshd n'est pas lancé automatiquement au démarrage
1187
	/sbin/chkconfig --del sshd
1188
# Coloration des prompts
1189
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
5 franck 1190
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
1 root 1191
# Droits d'exécution pour utilisateur apache et sysadmin
1192
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
5 franck 1193
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
1 root 1194
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK_MASK,localhost		#réseau de l'organisme?g" /etc/sudoers
132 franck 1195
# prise en compte de la rotation des logs sur 1 an (concerne mysql, httpd, dansguardian, squid, radiusd, ulogd)
1 root 1196
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1197
	chmod 644 /etc/logrotate.d/*
1198
# processus lancés par défaut au démarrage
110 richard 1199
	$SED "s?^# Default-Start.*?# Default-Start: 3 4 5?g" /etc/init.d/mysqld
132 franck 1200
	$SED "s?^# Default-Stop.*?# Default-Stop: 0 1 2?g" /etc/init.d/mysqld  	# pour éviter les alertes de dépendance de services (netfs)
219 jeremy 1201
	$SED "s?^# chkconfig:.*?# chkconfig: 23 61 40?g" /etc/init.d/dnsmasq  	# pour démarrer dnsmasq avec eth1 up avant chilli - utile ??
1202
#	for i in netfs ntpd iptables ulogd dhcpd squid named chilli httpd radiusd mysqld dansguardian havp freshclam
1203
	for i in netfs ntpd iptables ulogd dnsmasq squid chilli httpd radiusd mysqld dansguardian havp freshclam
1 root 1204
	do
1205
		/sbin/chkconfig --add $i
1206
	done
235 richard 1207
# On affecte le niveau de sécurité "fileserver" (c'est pas mal) ...
1208
	$SED "s?BASE_LEVEL=.*?BASE_LEVEL=fileserver?g" /etc/security/msec/security.conf
132 franck 1209
# On supprime la vérification périodique du mode promiscious des interfaces réseaux ( nombreuses alertes sur eth1 dû à Tun0 de coova-chilli )
235 richard 1210
	$SED "s?CHECK_PROMISC=.*?CHECK_PROMISC=no?g" /etc/security/msec/level.fileserver
1211
# On supprime les log_martians
1212
	$SED "s?^ENABLE_LOG_STRANGE_PACKETS=.*?ENABLE_LOG_STRANGE_PACKETS=no?g" /etc/security/msec/level.fileserver
1 root 1213
# On mets en place la sécurité sur les fichiers
1214
# des modif par rapport à radius update
1215
	cat <<EOF > /etc/security/msec/perm.local
1216
/var/log/firewall/			root.apache	750
1217
/var/log/firewall/*			root.apache	640
1218
/etc/security/msec/perm.local		root.root	640
1219
/etc/security/msec/level.local		root.root	640
1220
/etc/freeradius-web			root.apache	750
1221
/etc/freeradius-web/admin.conf		root.apache	640
1222
/etc/freeradius-web/config.php		root.apache	640
1223
/etc/raddb/dictionnary			root.radius	640
1224
/etc/raddb/ldap.attrmap			root.radius	640
1225
/etc/raddb/hints			root.radius	640
1226
/etc/raddb/huntgroups			root.radius	640
1227
/etc/raddb/attrs.access_reject		root.radius	640
1228
/etc/raddb/attrs.accounting_response	root.radius	640
1229
/etc/raddb/acct_users			root.radius	640
1230
/etc/raddb/preproxy_users		root.radius	640
1231
/etc/raddb/modules/ldap			radius.apache	660
1232
/etc/raddb/sites-available/alcasar	radius.apache	660
1233
/etc/pki/*				root.apache	750
1234
EOF
1235
	/usr/sbin/msec
59 richard 1236
# modification /etc/inittab
1237
	[ -e /etc/inittab.default ] || cp /etc/inittab /etc/inittab.default
60 richard 1238
# On ne garde que 3 terminaux
59 richard 1239
	$SED "s?^4.*?#&?g" /etc/inittab
1240
	$SED "s?^5.*?#&?g" /etc/inittab
1241
	$SED "s?^6.*?#&?g" /etc/inittab
139 richard 1242
# dans le cas d'une mise à jour, on charge la conf d'une version précédente
5 franck 1243
if [ "$mode" = "update" ]
1244
then
1245
	$DIR_DEST_BIN/alcasar-conf.sh -load
1246
fi
1 root 1247
	cd $DIR_INSTALL
5 franck 1248
	echo ""
1 root 1249
	echo "#############################################################################"
1250
	echo "#                        Fin d'installation d'ALCASAR                       #"
1251
	echo "#                                                                           #"
1252
	echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1253
	echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1254
	echo "#                                                                           #"
1255
	echo "#############################################################################"
1256
	echo
1257
	echo "- ALCASAR sera fonctionnel après redémarrage du système"
1258
	echo
1259
	echo "- Lisez attentivement la documentation d'exploitation"
1260
	echo
1261
	echo "- L'interface de gestion est consultable à partir de n'importe quel poste"
1262
	echo "	situé sur le réseau de consultation à l'URL https://$PRIVATE_IP "
235 richard 1263
	echo "					 ou à l'URL https://alcasar "
1 root 1264
	echo
1265
	echo "                   Appuyez sur 'Entrée' pour continuer"
1266
	read a
1267
	clear
1268
	reboot
1269
} # End post_install ()
1270
 
1271
#################################
1272
#  Boucle principale du script  #
1273
#################################
5 franck 1274
usage="Usage: alcasar.sh -install | -uninstall"
1 root 1275
nb_args=$#
1276
args=$1
1277
if [ $nb_args -eq 0 ]
1278
then
1279
	nb_args=1
1280
	args="-h"
1281
fi
1282
case $args in
1283
	-\? | -h* | --h*)
1284
		echo "$usage"
1285
		exit 0
1286
		;;
29 richard 1287
	-install)
5 franck 1288
		header_install
29 richard 1289
		testing
5 franck 1290
# On teste la présence d'une version déjà installée
29 richard 1291
		header_install
5 franck 1292
		if [ -e $DIR_WEB/VERSION ]
1 root 1293
		then
5 franck 1294
			echo -n "La version "; echo -n `cat $DIR_WEB/VERSION`; echo " d'ALCASAR est déjà installée";
1295
			response=0
1296
			PTN='^[oOnN]$'
1297
			until [[ $(expr $response : $PTN) -gt 0 ]]
1298
			do
1299
				echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
1300
				read response
1301
			done
1302
			if [ "$response" = "o" ] || [ "$response" = "O" ]
1303
			then
1304
# On crée le fichier de conf de la version actuelle
1305
				chmod u+x $DIR_SCRIPTS/alcasar-conf.sh
1306
				$DIR_SCRIPTS/alcasar-conf.sh -create
1307
			fi
1308
# On désinstalle la version actuelle
65 richard 1309
		$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1 root 1310
		fi
29 richard 1311
# On teste la version du système
1312
		fic=`cat /etc/product.id`
1313
		old="$IFS"
1314
		IFS=","
1315
		set $fic
1316
		for i in $*
1317
		do
1318
			if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
1319
			then 
1320
				version=`echo $i|cut -d"=" -f2`
1321
			fi
1322
		done
1323
		IFS="$old"
1324
		if [ ! "$version" = "$MDV_NEEDED" ]
1325
		then
131 richard 1326
			echo "Vous devez installer une des versions suivantes de Linux Mandriva ($MDV_NEEDED). Pour cela, vous pouvez suivre la procédure suivante :" 
132 franck 1327
			echo "- copiez sur clé USB le fichier de configuration de la version actuelle d'ALCASAR ('/tmp/alcasar-conf.tar.gz');"
131 richard 1328
			echo "- installez le nouveau système 'Linux Mandriva';"
1329
			echo "- copiez le fichier de configuration d'ALCASAR dans le répertoire '/tmp';"
1330
			echo "- installez la nouvelle version d'ALCASAR."
230 franck 1331
			echo " Souhaitez-vous migrer la version du système automatiquement via Internet ? [O/n]"
1332
			read response
1333
			if [ "$reponse" = "o" ] || [ "$reponse" = "O" ]
1334
			then
1335
			      $DIR_SCRIPT/sbin/alcasar-dist-upgrade.sh
234 richard 1336
			else
1337
			      exit 0
230 franck 1338
			fi
29 richard 1339
		fi
5 franck 1340
		if [ -e /tmp/alcasar-conf.tar.gz ]
1 root 1341
		then
14 richard 1342
		echo "#### Installation avec mise à jour ####"
5 franck 1343
# On récupère le nom d'organisme à partir de fichier de conf
1344
			tar -xvf /tmp/alcasar-conf.tar.gz conf/hostname 
1345
			ORGANISME=`cat $DIR_CONF/hostname|cut -b 9-`
1346
			hostname `cat $DIR_CONF/hostname`
1347
			mode="update"
1348
		else
1349
			mode="install"
1 root 1350
		fi
220 jeremy 1351
		for func in init network gestion AC init_db param_radius param_web_radius param_chilli param_squid param_dansguardian antivirus firewall param_awstats param_dnsmasq cron post_install
1352
 
5 franck 1353
		do
1354
			$func
93 richard 1355
# echo "*** 'debug' : end of function $func ***"; read a
14 richard 1356
		done
5 franck 1357
		;;
1358
	-uninstall)
1359
		if [ ! -e $DIR_DEST_SBIN/alcasar-uninstall.sh ]
1 root 1360
		then
5 franck 1361
			echo "Aucune version d'ALCASAR n'a été trouvée.";
1 root 1362
			exit 0
1363
		fi
5 franck 1364
		response=0
1365
		PTN='^[oOnN]$'
1366
		until [[ $(expr $response : $PTN) -gt 0 ]]
1367
		do
1368
			echo -n "Voulez-vous créer le fichier de conf de la version actuelle (0/n)? "
1369
			read response
1370
		done
1371
		if [ "$reponse" = "o" ] || [ "$reponse" = "O" ]
1 root 1372
		then
5 franck 1373
			$DIR_SCRIPT/alcasar-conf.sh -create
1 root 1374
		fi
5 franck 1375
# On désinstalle la version actuelle
65 richard 1376
		$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1 root 1377
		;;
1378
	*)
1379
		echo "Argument inconnu :$1";
1380
		echo "$usage"
1381
		exit 1
1382
		;;
1383
esac
10 franck 1384
# end of script