Subversion Repositories ALCASAR

Rev

Rev 1336 | Rev 1348 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
672 richard 1
#!/bin/bash
57 franck 2
#  $Id: alcasar.sh 1342 2014-05-06 10:10:39Z richard $ 
1 root 3
 
4
# alcasar.sh
959 franck 5
 
1157 stephane 6
# ALCASAR Install script -  CopyLeft ALCASAR Team [Rexy + 3abtux + Steweb + Crox + ...] 
7
# Ce programme est un logiciel libre ; This software is free and open source
959 franck 8
# elle que publiée par la Free Software Foundation ; soit la version 3 de la Licence. 
9
# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; 
10
# sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE. 
11
# Voir la Licence Publique Générale GNU pour plus de détails. 
12
 
967 franck 13
#  team@alcasar.net
959 franck 14
 
1 root 15
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
16
# This script is distributed under the Gnu General Public License (GPL)
17
 
672 richard 18
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
1007 richard 19
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
1 root 20
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
1007 richard 21
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares :
672 richard 22
#
1342 richard 23
# Coovachilli, freeradius, mariaDB, apache, netfilter, dansguardian, ntpd, openssl, dnsmasq, havp, libclamav, Ulog, fail2ban, NFsen and NFdump
1 root 24
 
25
# Options :
376 franck 26
#       -i or --install
27
#       -u or --uninstall
1 root 28
 
376 franck 29
# Functions :
1221 richard 30
#	testing			: connectivity tests and downloading before intall
31
#	init			: Installation of RPM and scripts
32
#	network			: Network parameters
33
#	ACC			: ALCASAR Control Center installation
34
#	CA			: Certification Authority initialization
35
#	init_db			: Initilization of radius database managed with MariaDB
36
#	param_radius		: FreeRadius initialisation
37
#	param_web_radius	: copy ans modifiy original "freeradius web" in ACC
38
#	param_chilli		: coovachilli initialisation (+authentication page)
39
#	param_dansguardian	: DansGuardian filtering HTTP proxy configuration
40
#	antivirus		: HAVP + libclamav configuration
41
#	param_nfsen		: Configuration du grapheur nfsen pour apache 
1253 richard 42
#	dnsmasq			: Name server configuration
43
#	BL			: BlackList of Toulouse configuration : split into 3 BL (for Dnsmasq, for dansguardian and for Netfilter)
1266 richard 44
#	cron			: Logs export + watchdog + connexion statistics
1253 richard 45
#	fail2ban		: Fail2ban installation and configuration
1266 richard 46
#	post_install		: Security, log rotation, etc.
1 root 47
 
48
DATE=`date '+%d %B %Y - %Hh%M'`
49
DATE_SHORT=`date '+%d/%m/%Y'`
595 richard 50
Lang=`echo $LANG|cut -c 1-2`
1 root 51
# ******* Files parameters - paramètres fichiers *********
1015 richard 52
DIR_INSTALL=`pwd`				# current directory 
53
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
54
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
55
DIR_SAVE="/var/Save"				# backup directory (system_backup, user_db_backup, logs)
56
DIR_WEB="/var/www/html"				# directory of APACHE
57
DIR_DG="/etc/dansguardian"			# directory of DansGuardian
58
DIR_ACC="$DIR_WEB/acc"				# directory of the 'ALCASAR Control Center'
59
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
60
DIR_DEST_SBIN="/usr/local/sbin"			# directory of ALCASAR admin scripts
61
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
62
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (dnsmasq for instance)
63
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"		# central ALCASAR conf file
64
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
1 root 65
# ******* DBMS parameters - paramètres SGBD ********
1243 richard 66
DB_RADIUS="radius"				# database name used by FreeRadius server
67
DB_USER="radius"				# user name allows to request the users database
1 root 68
# ******* Network parameters - paramètres réseau *******
1211 crox53 69
HOSTNAME="alcasar"				# 
1243 richard 70
DOMAIN="localdomain"				# default local domain
1336 richard 71
EXTIF=`/sbin/ip route|grep default|cut -d" " -f5`	# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
72
INTIF=`/sbin/ip	link|grep '^[[:digit:]]:'|grep -v "lo\|$EXTIF"|cut -d" " -f2|tr -d ":"`		# INTIF is connected to the consultation network
1148 crox53 73
MTU="1500"
1157 stephane 74
ETHTOOL_OPTS='"autoneg off speed 100 duplex full"'
1243 richard 75
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
1 root 76
# ****** Paths - chemin des commandes *******
77
SED="/bin/sed -i"
78
# ****************** End of global parameters *********************
79
 
959 franck 80
license ()
81
{
82
	if [ $Lang == "fr" ]
967 franck 83
	then cat $DIR_INSTALL/gpl-3.0.fr.txt | more
84
	else cat $DIR_INSTALL/gpl-3.0.txt | more
959 franck 85
	fi
975 franck 86
	echo "Taper sur Entrée pour continuer !"
87
	echo "Enter to continue."
959 franck 88
	read a
89
}
90
 
1 root 91
header_install ()
92
{
93
	clear
94
	echo "-----------------------------------------------------------------------------"
460 richard 95
	echo "                     ALCASAR V$VERSION Installation"
1 root 96
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
97
	echo "-----------------------------------------------------------------------------"
98
} # End of header_install ()
99
 
1174 crox53 100
 
1 root 101
##################################################################
1221 richard 102
##			Function "testing"			##
1342 richard 103
## - Test of free space on /var  (>10G)				##
1005 richard 104
## - Test of Internet access					##
29 richard 105
##################################################################
106
testing ()
107
{
1342 richard 108
	free_space=`df -BG --output=avail /var|tail -1|tr -d [:space:]G`
109
	if [ $free_space -lt 10 ]
110
		then
111
		if [ $Lang == "fr" ]
112
			then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
113
			else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
114
		fi
115
		exit 0
116
	fi
117
if [ $Lang == "fr" ]
784 richard 118
		then echo -n "Tests des paramètres réseau : "
595 richard 119
		else echo -n "Network parameters tests : "
120
	fi
1336 richard 121
# We test EXTIF config files
122
 
784 richard 123
	PUBLIC_IP=`grep IPADDR /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`
124
	PUBLIC_GATEWAY=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`
125
	if [ `echo $PUBLIC_IP|wc -c` -lt 7 ] || [ `echo $PUBLIC_GATEWAY|wc -c` -lt 7 ]
126
		then
127
		if [ $Lang == "fr" ]
128
		then 
129
			echo "Échec"
130
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
131
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
830 richard 132
			echo "Appliquez les changements : 'service network restart'"
784 richard 133
		else
134
			echo "Failed"
135
			echo "The Internet connected network card ($EXTIF) isn't well configured."
136
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
830 richard 137
			echo "Apply the new configuration 'service network restart'"
784 richard 138
		fi
830 richard 139
		echo "DEVICE=$EXTIF"
784 richard 140
		echo "IPADDR="
141
		echo "NETMASK="
142
		echo "GATEWAY="
143
		echo "DNS1="
144
		echo "DNS2="
830 richard 145
		echo "ONBOOT=yes"
784 richard 146
		exit 0
147
	fi
148
	echo -n "."
460 richard 149
# We test the Ethernet links state
29 richard 150
	for i in $EXTIF $INTIF
151
	do
294 richard 152
		/sbin/ip link set $i up
306 richard 153
		sleep 3
1031 richard 154
		CMD=`/usr/sbin/ethtool $i |egrep 'Link detected'| awk '{print $NF}'`
155
		CMD2=`/sbin/mii-tool $i | grep link | awk '{print $NF}'`
808 franck 156
		if [ $CMD != "yes" ] && [ $CMD2 != "ok" ]
29 richard 157
			then
595 richard 158
			if [ $Lang == "fr" ]
159
			then 
160
				echo "Échec"
161
				echo "Le lien réseau de la carte $i n'est pas actif."
162
				echo "Réglez ce problème puis relancez ce script."
163
			else
164
				echo "Failed"
165
				echo "The link state of $i interface id down."
166
				echo "Resolv this problem, then restart this script."
167
			fi
29 richard 168
			exit 0
169
		fi
308 richard 170
	echo -n "."
29 richard 171
	done
172
# On teste la présence d'un routeur par défaut (Box FAI)
784 richard 173
	if [ `ip route list|grep -c ^default` -ne "1" ] ; then
595 richard 174
		if [ $Lang == "fr" ]
175
		then 
176
			echo "Échec"
177
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
178
			echo "Réglez ce problème puis relancez ce script."
179
		else
180
			echo "Failed"
181
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
182
			echo "Resolv this problem, then restart this script."
183
		fi
29 richard 184
		exit 0
185
	fi
308 richard 186
	echo -n "."
978 franck 187
# On teste le lien vers le routeur par defaut
308 richard 188
	IP_GW=`ip route list|grep ^default|cut -d" " -f3`
189
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $IP_GW|grep response|cut -d" " -f2`
527 richard 190
	if [ $(expr $arp_reply) -eq 0 ]
308 richard 191
	       	then
595 richard 192
		if [ $Lang == "fr" ]
193
		then 
194
			echo "Échec"
195
			echo "Le routeur de site ou la Box Internet ($IP_GW) ne répond pas."
196
			echo "Réglez ce problème puis relancez ce script."
197
		else
198
			echo "Failed"
199
			echo "The Internet gateway doesn't answered"
200
			echo "Resolv this problem, then restart this script."
201
		fi
308 richard 202
		exit 0
203
	fi
204
	echo -n "."
421 franck 205
# On teste la connectivité Internet
29 richard 206
	rm -rf /tmp/con_ok.html
308 richard 207
	/usr/bin/curl www.google.fr -s -o /tmp/con_ok.html
29 richard 208
	if [ ! -e /tmp/con_ok.html ]
209
	then
595 richard 210
		if [ $Lang == "fr" ]
211
		then 
212
			echo "La tentative de connexion vers Internet a échoué (google.fr)."
213
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
214
			echo "Vérifiez la validité des adresses IP des DNS."
215
		else
216
			echo "The Internet connection try failed (google.fr)."
217
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
218
			echo "Verify the DNS IP addresses"
219
		fi
29 richard 220
		exit 0
221
	fi
222
	rm -rf /tmp/con_ok.html
308 richard 223
	echo ". : ok"
302 richard 224
} # end of testing
225
 
226
##################################################################
1221 richard 227
##			Function "init"				##
302 richard 228
## - Création du fichier "/root/ALCASAR_parametres.txt"		##
229
## - Installation et modification des scripts du portail	##
230
##################################################################
231
init ()
232
{
527 richard 233
	if [ "$mode" != "update" ]
302 richard 234
	then
235
# On affecte le nom d'organisme
597 richard 236
		header_install
302 richard 237
		ORGANISME=!
238
		PTN='^[a-zA-Z0-9-]*$'
580 richard 239
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
302 richard 240
                do
595 richard 241
			if [ $Lang == "fr" ]
597 richard 242
			       	then echo -n "Entrez le nom de votre organisme : "
243
				else echo -n "Enter the name of your organism : "
595 richard 244
			fi
330 franck 245
			read ORGANISME
613 richard 246
			if [ "$ORGANISME" == "" ]
330 franck 247
				then
248
				ORGANISME=!
249
			fi
250
		done
302 richard 251
	fi
1 root 252
# On crée aléatoirement les mots de passe et les secrets partagés
628 richard 253
	rm -f $PASSWD_FILE
59 richard 254
	grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# mot de passe de protection du menu Grub
628 richard 255
	echo -n "Password to protect the boot menu (GRUB) : " > $PASSWD_FILE
256
	echo "$grubpwd" >> $PASSWD_FILE
59 richard 257
	md5_grubpwd=`/usr/bin/md5pass $grubpwd`
384 richard 258
	$SED "/^password.*/d" /boot/grub/menu.lst
259
	$SED "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
1 root 260
	mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# mot de passe de l'administrateur Mysqld
1003 richard 261
	echo -n "Name and password of Mysql/mariadb administrator : " >> $PASSWD_FILE
628 richard 262
	echo "root / $mysqlpwd" >> $PASSWD_FILE
1 root 263
	radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# mot de passe de l'utilisateur Mysqld (utilisé par freeradius)
1003 richard 264
	echo -n "Name and password of Mysql/mariadb user : " >> $PASSWD_FILE
628 richard 265
	echo "$DB_USER / $radiuspwd" >> $PASSWD_FILE
1 root 266
	secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# secret partagé entre intercept.php et coova-chilli
628 richard 267
	echo -n "Shared secret between the script 'intercept.php' and coova-chilli : " >> $PASSWD_FILE
268
	echo "$secretuam" >> $PASSWD_FILE
1 root 269
	secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`	# secret partagé entre coova-chilli et FreeRadius
628 richard 270
	echo -n "Shared secret between coova-chilli and FreeRadius : " >> $PASSWD_FILE
271
	echo "$secretradius" >> $PASSWD_FILE
272
	chmod 640 $PASSWD_FILE
977 richard 273
# Scripts and conf files copy 
274
#  - in /usr/local/bin :  alcasar-{CA.sh,conf.sh,import-clean.sh,iptables-bypass.sh,iptables.sh,log.sh,watchdog.sh}
5 franck 275
	cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
977 richard 276
#  - in /usr/local/sbin :  alcasar-{bl.sh,bypass.sh,dateLog.sh,havp.sh,logout.sh,mysql.sh,nf.sh,profil.sh,uninstall.sh,version-list.sh,load-balancing.sh}
5 franck 277
	cp -f $DIR_SCRIPTS/sbin/alcasar* $DIR_DEST_SBIN/. ; chown root:root $DIR_DEST_SBIN/alcasar* ; chmod 740 $DIR_DEST_SBIN/alcasar*
977 richard 278
#  - in /usr/local/etc : alcasar-{bl-categories-enabled,dns-name,iptables-local.sh,services}
648 richard 279
	cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown root:apache $DIR_DEST_ETC/alcasar* ; chmod 660 $DIR_DEST_ETC/alcasar*
1 root 280
	$SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_SBIN/alcasar-logout.sh
281
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh
5 franck 282
	$SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
283
	$SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
628 richard 284
# generate central conf file
285
	cat <<EOF > $CONF_FILE
612 richard 286
##########################################
287
##                                      ##
288
##          ALCASAR Parameters          ##
289
##                                      ##
290
##########################################
1 root 291
 
612 richard 292
INSTALL_DATE=$DATE
293
VERSION=$VERSION
294
ORGANISM=$ORGANISME
923 franck 295
DOMAIN=$DOMAIN
612 richard 296
EOF
628 richard 297
	chmod o-rwx $CONF_FILE
1 root 298
} # End of init ()
299
 
300
##################################################################
1221 richard 301
##			Function "network"			##
1 root 302
## - Définition du plan d'adressage du réseau de consultation	##
595 richard 303
## - Nommage DNS du système 					##
1336 richard 304
## - Configuration de l'interface INTIF (réseau de consultation)##
1 root 305
## - Modification du fichier /etc/hosts				##
306
## - Configuration du serveur de temps (NTP)			##
307
## - Renseignement des fichiers hosts.allow et hosts.deny	##
308
##################################################################
309
network ()
310
{
311
	header_install
636 richard 312
	if [ "$mode" != "update" ]
313
		then
314
		if [ $Lang == "fr" ]
315
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
316
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
317
		fi
318
		response=0
319
		PTN='^[oOyYnN]$'
320
		until [[ $(expr $response : $PTN) -gt 0 ]]
1 root 321
		do
595 richard 322
			if [ $Lang == "fr" ]
659 richard 323
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
618 richard 324
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
595 richard 325
			fi
1 root 326
			read response
327
		done
636 richard 328
		if [ "$response" = "n" ] || [ "$response" = "N" ]
329
		then
330
			PRIVATE_IP_MASK="0"
331
			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:]]$'
332
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
1 root 333
			do
595 richard 334
				if [ $Lang == "fr" ]
597 richard 335
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
336
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
595 richard 337
				fi
597 richard 338
				read PRIVATE_IP_MASK
1 root 339
			done
636 richard 340
		else
341
       			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
342
		fi
595 richard 343
	else
637 richard 344
		PRIVATE_IP_MASK=`grep PRIVATE_IP conf/etc/alcasar.conf|cut -d"=" -f2` 
345
		rm -rf conf/etc/alcasar.conf
1 root 346
	fi
861 richard 347
# Define LAN side global parameters
1243 richard 348
	hostname $HOSTNAME.$DOMAIN
349
	echo $HOSTNAME.$DOMAIN > /etc/hostname
977 richard 350
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
351
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
352
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
353
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
354
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
355
	classe=$((PRIVATE_PREFIX/8)); classe_sup=`expr $classe + 1`; classe_sup_sup=`expr $classe + 2`	# ie.: 2=classe B, 3=classe C
356
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
357
	PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`			# private network broadcast (ie.: 192.168.182.255)
358
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup`			# last octet of LAN address
359
	private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f$classe_sup`			# last octet of LAN broadcast
837 richard 360
	PRIVATE_FIRST_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`		# First network address (ex.: 192.168.182.1)
977 richard 361
	PRIVATE_SECOND_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 2`	# second network address (ex.: 192.168.182.2)
837 richard 362
	PRIVATE_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_ending - 1`	# last network address (ex.: 192.168.182.254)
1336 richard 363
	PRIVATE_MAC=`/sbin/ip link show $INTIF | grep ether | cut -d" " -f6`				# MAC address of INTIF
841 richard 364
# Define Internet parameters
14 richard 365
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
366
	DNS1=`grep DNS1 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 1er DNS
367
	DNS2=`grep DNS2 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 2ème DNS
70 franck 368
	DNS1=${DNS1:=208.67.220.220}
369
	DNS2=${DNS2:=208.67.222.222}
597 richard 370
	PUBLIC_NETMASK=`grep NETMASK /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
1052 richard 371
	DEFAULT_PUBLIC_NETMASK=`ipcalc -m $PUBLIC_IP | cut -d"=" -f2`
784 richard 372
	PUBLIC_NETMASK=${PUBLIC_NETMASK:=$DEFAULT_PUBLIC_NETMASK}
1052 richard 373
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
1069 richard 374
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
765 stephane 375
	echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
994 franck 376
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
628 richard 377
	echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE 
378
	echo "DNS1=$DNS1" >> $CONF_FILE
379
	echo "DNS2=$DNS2" >> $CONF_FILE
380
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
941 richard 381
	echo "DHCP=full" >> $CONF_FILE
914 franck 382
	echo "EXT_DHCP_IP=none" >> $CONF_FILE
383
	echo "RELAY_DHCP_IP=none" >> $CONF_FILE
384
	echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
597 richard 385
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
841 richard 386
# config network
1 root 387
	cat <<EOF > /etc/sysconfig/network
388
NETWORKING=yes
1243 richard 389
HOSTNAME="$HOSTNAME.$DOMAIN"
1 root 390
FORWARD_IPV4=true
391
EOF
841 richard 392
# config /etc/hosts
1 root 393
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
394
	cat <<EOF > /etc/hosts
503 richard 395
127.0.0.1	localhost
1250 richard 396
$PRIVATE_IP	$HOSTNAME.$DOMAIN
1 root 397
EOF
1336 richard 398
# Config EXTIF (Internet)
14 richard 399
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
400
DEVICE=$EXTIF
401
BOOTPROTO=static
597 richard 402
IPADDR=$PUBLIC_IP
403
NETMASK=$PUBLIC_NETMASK
404
GATEWAY=$PUBLIC_GATEWAY
14 richard 405
DNS1=127.0.0.1
406
ONBOOT=yes
407
METRIC=10
408
NOZEROCONF=yes
409
MII_NOT_SUPPORTED=yes
410
IPV6INIT=no
411
IPV6TO4INIT=no
412
ACCOUNTING=no
413
USERCTL=no
994 franck 414
MTU=$MTU
14 richard 415
EOF
1336 richard 416
# Config INTIF (consultation LAN) in normal mode
841 richard 417
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
418
DEVICE=$INTIF
419
BOOTPROTO=static
420
ONBOOT=yes
421
NOZEROCONF=yes
422
MII_NOT_SUPPORTED=yes
423
IPV6INIT=no
424
IPV6TO4INIT=no
425
ACCOUNTING=no
426
USERCTL=no
1157 stephane 427
ETHTOOL_OPTS=$ETHTOOL_OPTS
841 richard 428
EOF
1336 richard 429
# Config of INTIF in bypass mode (see "alcasar-bypass.sh")
793 richard 430
	cat <<EOF > /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
1 root 431
DEVICE=$INTIF
432
BOOTPROTO=static
433
IPADDR=$PRIVATE_IP
604 richard 434
NETMASK=$PRIVATE_NETMASK
1 root 435
ONBOOT=yes
436
METRIC=10
437
NOZEROCONF=yes
438
MII_NOT_SUPPORTED=yes
14 richard 439
IPV6INIT=no
440
IPV6TO4INIT=no
441
ACCOUNTING=no
442
USERCTL=no
1 root 443
EOF
440 franck 444
# Mise à l'heure du serveur
445
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
446
	cat <<EOF > /etc/ntp/step-tickers
455 franck 447
0.fr.pool.ntp.org	# adapt to your country
448
1.fr.pool.ntp.org
449
2.fr.pool.ntp.org
440 franck 450
EOF
451
# Configuration du serveur de temps (sur lui même)
1 root 452
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
453
	cat <<EOF > /etc/ntp.conf
456 franck 454
server 0.fr.pool.ntp.org	# adapt to your country
447 franck 455
server 1.fr.pool.ntp.org
456
server 2.fr.pool.ntp.org
457
server 127.127.1.0   		# local clock si NTP internet indisponible ...
411 richard 458
fudge 127.127.1.0 stratum 10
604 richard 459
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
1 root 460
restrict 127.0.0.1
310 richard 461
driftfile /var/lib/ntp/drift
1 root 462
logfile /var/log/ntp.log
463
EOF
440 franck 464
 
310 richard 465
	chown -R ntp:ntp /var/lib/ntp
1 root 466
# Renseignement des fichiers hosts.allow et hosts.deny
467
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
468
	cat <<EOF > /etc/hosts.allow
469
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
604 richard 470
sshd: ALL
1 root 471
ntpd: $PRIVATE_NETWORK_SHORT
472
EOF
473
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
474
	cat <<EOF > /etc/hosts.deny
475
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
476
EOF
604 richard 477
# Firewall config
790 richard 478
	$SED "s?^EXTIF=.*?EXTIF=\"$EXTIF\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
479
	$SED "s?^INTIF=.*?INTIF=\"$INTIF\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
480
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
860 richard 481
# create the filter exception file and ip_bloqued file
790 richard 482
	touch $DIR_DEST_ETC/alcasar-filter-exceptions
860 richard 483
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
1069 richard 484
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
790 richard 485
# load conntrack ftp module
486
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
487
	echo "ip_conntrack_ftp" >>  /etc/modprobe.preload
1159 crox53 488
# load ipt_NETFLOW module
489
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
1157 stephane 490
# 
860 richard 491
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
1 root 492
} # End of network ()
493
 
494
##################################################################
1221 richard 495
##			Function "ACC"				##
496
## - installation du centre de gestion (ALCASAR Control Center)	##
1 root 497
## - configuration du serveur web (Apache)			##
498
## - définition du 1er comptes de gestion 			##
499
## - sécurisation des accès					##
500
##################################################################
1221 richard 501
ACC ()
1 root 502
{
503
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
504
	mkdir $DIR_WEB
505
# Copie et configuration des fichiers du centre de gestion
316 richard 506
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
972 richard 507
	echo "$VERSION" > $DIR_WEB/VERSION
316 richard 508
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
509
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
510
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
511
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
512
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
5 franck 513
	chown -R apache:apache $DIR_WEB/*
1342 richard 514
	for i in system_backup base logs/firewall logs/httpd logs/security;
1 root 515
	do
516
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
517
	done
5 franck 518
	chown -R root:apache $DIR_SAVE
71 richard 519
# Configuration et sécurisation php
520
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
534 richard 521
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
522
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
411 richard 523
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
524
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
71 richard 525
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
526
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
527
# Configuration et sécurisation Apache
790 richard 528
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
1 root 529
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
1243 richard 530
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
303 richard 531
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
1 root 532
	$SED "s?^ServerTokens.*?ServerTokens Prod?g" /etc/httpd/conf/httpd.conf
533
	$SED "s?^ServerSignature.*?ServerSignature Off?g" /etc/httpd/conf/httpd.conf
534
	$SED "s?^#ErrorDocument 404 /missing.html.*?ErrorDocument 404 /index.html?g" /etc/httpd/conf/httpd.conf
790 richard 535
	$SED "s?^LoadModule authn_anon_module.*?#LoadModule authn_anon_module modules/mod_authn_anon.so?g" /etc/httpd/conf/httpd.conf
536
	$SED "s?^LoadModule status_module.*?#LoadModule status_module modules/mod_status.so?g" /etc/httpd/conf/httpd.conf
537
	$SED "s?^LoadModule autoindex_module.*?#LoadModule autoindex_module modules/mod_autoindex.so?g" /etc/httpd/conf/httpd.conf
538
	$SED "s?^LoadModule info_module.*?#LoadModule info_module modules/mod_info.so?g" /etc/httpd/conf/httpd.conf
539
	$SED "s?^LoadModule imagemap_module.*?#LoadModule imagemap_module modules/mod_imagemap.so?g" /etc/httpd/conf/httpd.conf
540
	$SED "s?^LoadModule rewrite_module.*?#LoadModule rewrite_module modules/mod_rewrite.so?g" /etc/httpd/conf/httpd.conf
990 franck 541
	$SED "s?LoadModule speling_module.*?LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/httpd.conf
1 root 542
	FIC_MOD_SSL=`find /etc/httpd/modules.d/ -type f -name *mod_ssl.conf`
543
	$SED "s?^Listen.*?Listen $PRIVATE_IP:443?g" $FIC_MOD_SSL # On écoute en SSL que sur INTIF
544
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /var/www/error/include/top.html
545
	[ -e /var/www/error/include/bottom.html.default ] || mv /var/www/error/include/bottom.html /var/www/error/include/bottom.html.default
546
	cat <<EOF > /var/www/error/include/bottom.html
547
</body>
548
</html>
549
EOF
550
# Définition du premier compte lié au profil 'admin'
509 richard 551
	header_install
510 richard 552
	if [ "$mode" = "install" ]
553
	then
613 richard 554
		admin_portal=!
555
		PTN='^[a-zA-Z0-9-]*$'
556
		until [[ $(expr $admin_portal : $PTN) -gt 0 ]]
557
                	do
558
			header_install
559
			if [ $Lang == "fr" ]
560
			then 
561
				echo ""
562
				echo "Définissez un premier compte d'administration du portail :"
563
				echo
564
				echo -n "Nom : "
565
			else
566
				echo ""
567
				echo "Define the first account allow to administrate the portal :"
568
				echo
569
				echo -n "Account : "
570
			fi
571
			read admin_portal
572
			if [ "$admin_portal" == "" ]
573
				then
574
				admin_portal=!
575
			fi
576
			done
1268 richard 577
# Creation of keys file for the admin account ("admin")
510 richard 578
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
579
		mkdir -p $DIR_DEST_ETC/digest
580
		chmod 755 $DIR_DEST_ETC/digest
581
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
582
			do
1243 richard 583
				/usr/sbin/htdigest -c $DIR_DEST_ETC/digest/key_admin $HOSTNAME.$DOMAIN $admin_portal
510 richard 584
			done
585
		$DIR_DEST_SBIN/alcasar-profil.sh --list
586
	fi
434 richard 587
# synchronisation horaire
588
	ntpd -q -g &
1 root 589
# Sécurisation du centre
988 franck 590
	rm -f /etc/httpd/conf/webapps.d/alcasar*
1 root 591
	cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
316 richard 592
<Directory $DIR_ACC>
1 root 593
	SSLRequireSSL
594
	AllowOverride None
595
	Order deny,allow
596
	Deny from all
597
	Allow from 127.0.0.1
598
	Allow from $PRIVATE_NETWORK_MASK
990 franck 599
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
1 root 600
	require valid-user
601
	AuthType digest
1243 richard 602
	AuthName $HOSTNAME.$DOMAIN
1 root 603
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
434 richard 604
	AuthUserFile $DIR_DEST_ETC/digest/key_all
1243 richard 605
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1 root 606
</Directory>
316 richard 607
<Directory $DIR_ACC/admin>
1 root 608
	SSLRequireSSL
609
	AllowOverride None
610
	Order deny,allow
611
	Deny from all
612
	Allow from 127.0.0.1
613
	Allow from $PRIVATE_NETWORK_MASK
990 franck 614
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
1 root 615
	require valid-user
616
	AuthType digest
1243 richard 617
	AuthName $HOSTNAME.$DOMAIN
1 root 618
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
434 richard 619
	AuthUserFile $DIR_DEST_ETC/digest/key_admin
1243 richard 620
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1 root 621
</Directory>
344 richard 622
<Directory $DIR_ACC/manager>
1 root 623
	SSLRequireSSL
624
	AllowOverride None
625
	Order deny,allow
626
	Deny from all
627
	Allow from 127.0.0.1
628
	Allow from $PRIVATE_NETWORK_MASK
990 franck 629
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
1 root 630
	require valid-user
631
	AuthType digest
1243 richard 632
	AuthName $HOSTNAME.$DOMAIN
1 root 633
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
434 richard 634
	AuthUserFile $DIR_DEST_ETC/digest/key_manager
1243 richard 635
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1 root 636
</Directory>
316 richard 637
<Directory $DIR_ACC/backup>
638
	SSLRequireSSL
639
	AllowOverride None
640
	Order deny,allow
641
	Deny from all
642
	Allow from 127.0.0.1
643
	Allow from $PRIVATE_NETWORK_MASK
990 franck 644
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
316 richard 645
	require valid-user
646
	AuthType digest
1243 richard 647
	AuthName $HOSTNAME.$DOMAIN
316 richard 648
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
434 richard 649
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
1243 richard 650
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
316 richard 651
</Directory>
811 richard 652
Alias /save/ "$DIR_SAVE/"
653
<Directory $DIR_SAVE>
654
	SSLRequireSSL
655
	Options Indexes
656
	Order deny,allow
657
	Deny from all
658
	Allow from 127.0.0.1
659
	Allow from $PRIVATE_NETWORK_MASK
990 franck 660
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
811 richard 661
	require valid-user
662
	AuthType digest
1243 richard 663
	AuthName $HOSTNAME.$DOMAIN
811 richard 664
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
1243 richard 665
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
811 richard 666
</Directory>
1 root 667
EOF
1221 richard 668
} # End of ACC()
1 root 669
 
670
##########################################################################################
1221 richard 671
##				Fonction "CA"						##
1 root 672
## - Création d'une Autorité de Certification et du certificat serveur pour apache 	##
673
##########################################################################################
1221 richard 674
CA ()
1 root 675
{
676
	$SED "s?ifcfg-eth.?ifcfg-$INTIF?g" $DIR_DEST_BIN/alcasar-CA.sh
510 richard 677
	$DIR_DEST_BIN/alcasar-CA.sh
800 richard 678
	FIC_VIRTUAL_SSL=`find /etc/httpd/conf -type f -name *default_ssl_vhost.conf`
303 richard 679
	[ -e /etc/httpd/conf/vhosts-ssl.default ]  || cp $FIC_VIRTUAL_SSL /etc/httpd/conf/vhosts-ssl.default
680
	$SED "s?localhost.crt?alcasar.crt?g" $FIC_VIRTUAL_SSL
681
	$SED "s?localhost.key?alcasar.key?g" $FIC_VIRTUAL_SSL
679 richard 682
	$SED "s?^#SSLCertificateChainFile.*?SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt?" $FIC_VIRTUAL_SSL
5 franck 683
	chown -R root:apache /etc/pki
1 root 684
	chmod -R 750 /etc/pki
1221 richard 685
} # End CA ()
1 root 686
 
687
##########################################################################################
1221 richard 688
##			Fonction "init_db"						##
1 root 689
## - Initialisation de la base Mysql							##
690
## - Affectation du mot de passe de l'administrateur (root)				##
691
## - Suppression des bases et des utilisateurs superflus				##
692
## - Création de la base 'radius'							##
693
## - Installation du schéma de cette base						##
694
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)	##
695
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)		##
696
##########################################################################################
697
init_db ()
698
{
699
	mkdir -p /var/lib/mysql/.tmp
1008 richard 700
	chown -R mysql:mysql /var/lib/mysql/
227 franck 701
	[ -e /etc/my.cnf.rpmnew ] && mv /etc/my.cnf.rpmnew /etc/my.cnf		# prend en compte les migrations de MySQL
1 root 702
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
703
	$SED "s?^#bind-address.*?bind-address=127.0.0.1?g" /etc/my.cnf
704
	/etc/init.d/mysqld start
705
	sleep 4
706
	mysqladmin -u root password $mysqlpwd
707
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
615 richard 708
# Delete exemple databases if exist
1 root 709
	$MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;CONNECT mysql;DELETE from user where user='';FLUSH PRIVILEGES;" 
615 richard 710
# Create 'radius' database
1317 richard 711
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
615 richard 712
# Add an empty radius database structure
364 franck 713
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/radiusd-db-vierge.sql
615 richard 714
# modify the start script in order to close accounting connexion when the system is comming down or up
715
	[ -e /etc/init.d/mysqld.default ] || cp /etc/init.d/mysqld /etc/init.d/mysqld.default
716
	$SED "/wait_for_pid created/a echo \"Flush ALCASAR open accounting sessions\"; /usr/local/sbin/alcasar-mysql.sh -acct_stop" /etc/init.d/mysqld
717
	$SED "/'stop')/a echo \"Flush ALCASAR open accounting sessions\"; /usr/local/sbin/alcasar-mysql.sh -acct_stop" /etc/init.d/mysqld
1 root 718
} # End init_db ()
719
 
720
##########################################################################
1221 richard 721
##			Fonction "param_radius"				##
1 root 722
## - Paramètrage des fichiers de configuration FreeRadius		##
723
## - Affectation du secret partagé entre coova-chilli et freeradius	##
724
## - Modification de fichier de conf pour l'accès à Mysql		##
725
##########################################################################
726
param_radius ()
727
{
728
	cp -f $DIR_CONF/radiusd-db-vierge.sql /etc/raddb/
729
	chown -R radius:radius /etc/raddb
730
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
1278 richard 731
# Set radius.conf parameters
1 root 732
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
733
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
734
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
1278 richard 735
# remove the proxy function
1 root 736
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
737
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
1278 richard 738
# remove EAP module
654 richard 739
	$SED "s?^[\t ]*\$INCLUDE eap.conf.*?#\$INCLUDE eap.conf?g" /etc/raddb/radiusd.conf
1278 richard 740
# listen on loopback (should be modified later if EAP enabled)
1 root 741
	$SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
1278 richard 742
# enable the  SQL module (and SQL counter)
1 root 743
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
744
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
745
	$SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
1278 richard 746
# remvove virtual server and copy our conf file
1 root 747
	rm -f /etc/raddb/sites-enabled/*
1278 richard 748
       	cp $DIR_CONF/radius/alcasar-radius /etc/raddb/sites-available/alcasar
1 root 749
	chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
750
	chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
751
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
752
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
384 richard 753
# Inutile dans notre fonctionnement mais les liens sont recréés par un update de radius ... donc forcé en tant que fichier à 'vide'
1 root 754
	touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
1278 richard 755
# client.conf configuration (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
1 root 756
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
757
	cat << EOF > /etc/raddb/clients.conf
758
client 127.0.0.1 {
759
	secret = $secretradius
760
	shortname = localhost
761
}
762
EOF
1278 richard 763
# sql.conf modification
1 root 764
	[ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
765
	$SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
766
	$SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
767
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
768
	$SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
1278 richard 769
# dialup.conf modification (case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.) 
1 root 770
	[ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
1278 richard 771
	cp -f $DIR_CONF/radius/dialup.conf /etc/raddb/sql/mysql/dialup.conf
772
# counter.conf modification (change the Max-All-Session-Time counter)
773
	[ -e /etc/raddb/sql/mysql/counter.conf.default ] || cp /etc/raddb/sql/mysql/counter.conf /etc/raddb/sql/mysql/counter.conf.default
774
	cp -f $DIR_CONF/radius/counter.conf /etc/raddb/sql/mysql/counter.conf
775
	chown -R radius:radius /etc/raddb/sql/mysql/*
1114 richard 776
# insures that mysql is up before radius start
1184 crox53 777
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1157 stephane 778
 
1 root 779
} # End param_radius ()
780
 
781
##########################################################################
1221 richard 782
##			Function "param_web_radius"			##
1 root 783
## - Import, modification et paramètrage de l'interface "dialupadmin"	##
784
## - Création du lien vers la page de changement de mot de passe        ##
785
##########################################################################
786
param_web_radius ()
787
{
788
# copie de l'interface d'origine dans la structure Alcasar
316 richard 789
	[ -d /usr/share/freeradius-web ] && cp -rf /usr/share/freeradius-web/* $DIR_ACC/manager/
790
	rm -f $DIR_ACC/manager/index.html $DIR_ACC/manager/readme 
791
	rm -f $DIR_ACC/manager/htdocs/about.html $DIR_ACC/manager/htdocs/index.html $DIR_ACC/manager/htdocs/content.html
344 richard 792
# copie des fichiers modifiés
793
	cp -rf $DIR_INSTALL/web/acc/manager/* $DIR_ACC/manager/
316 richard 794
	chown -R apache:apache $DIR_ACC/manager/
344 richard 795
# Modification des fichiers de configuration
1 root 796
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
503 richard 797
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
1 root 798
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
799
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
800
	$SED "s?^sql_debug:.*?sql_debug: false?g" /etc/freeradius-web/admin.conf
801
	$SED "s?^sql_usergroup_table: .*?sql_usergroup_table: radusergroup?g" /etc/freeradius-web/admin.conf
802
	$SED "s?^sql_password_attribute:.*?sql_password_attribute: Crypt-Password?g" /etc/freeradius-web/admin.conf
803
	$SED "s?^general_finger_type.*?# general_finger_type: snmp?g" /etc/freeradius-web/admin.conf
804
	$SED "s?^general_stats_use_totacct.*?general_stats_use_totacct: yes?g" /etc/freeradius-web/admin.conf
946 richard 805
	$SED "s?^general_charset.*?general_charset: utf-8?g" /etc/freeradius-web/admin.conf
344 richard 806
	[ -e /etc/freeradius-web/config.php.default ] || cp /etc/freeradius-web/config.php /etc/freeradius-web/config.php.default
1278 richard 807
	cp -f $DIR_CONF/radius/freeradiusweb-config.php /etc/freeradius-web/config.php
131 richard 808
	cat <<EOF > /etc/freeradius-web/naslist.conf
632 richard 809
nas1_name: alcasar-$ORGANISME
1 root 810
nas1_model: Portail captif
811
nas1_ip: $PRIVATE_IP
812
nas1_port_num: 0
813
nas1_community: public
814
EOF
815
# Modification des attributs visibles lors de la création d'un usager ou d'un groupe
816
	[ -e /etc/freeradius-web/user_edit.attrs.default ] || mv /etc/freeradius-web/user_edit.attrs /etc/freeradius-web/user_edit.attrs.default
1278 richard 817
	cp -f $DIR_CONF/radius/user_edit.attrs /etc/freeradius-web/user_edit.attrs
114 richard 818
# Ajout du mappage des attributs chillispot
819
	[ -e /etc/freeradius-web/sql.attrmap.default ] || mv /etc/freeradius-web/sql.attrmap /etc/freeradius-web/sql.attrmap.default
1278 richard 820
	cp -f $DIR_CONF/radius/sql.attrmap /etc/freeradius-web/sql.attrmap
1 root 821
# Modification des attributs visibles sur les pages des statistiques (suppression NAS_IP et NAS_port)
1278 richard 822
	[ -e /etc/freeradius-web/sql.attrs.default ] || cp /etc/freeradius-web/sql.attrs /etc/freeradius-web/sql.attrs.default
1 root 823
	$SED "s?^NASIPAddress.*?NASIPAddress\tNas IP Address\tno?g" /etc/freeradius-web/sql.attrs
824
	$SED "s?^NASPortId.*?NASPortId\tNas Port\tno?g" /etc/freeradius-web/sql.attrs
5 franck 825
	chown -R apache:apache /etc/freeradius-web
1 root 826
# Ajout de l'alias vers la page de "changement de mot de passe usager"
827
	cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
344 richard 828
<Directory $DIR_WEB/pass>
1 root 829
	SSLRequireSSL
830
	AllowOverride None
831
	Order deny,allow
832
	Deny from all
833
	Allow from 127.0.0.1
834
	Allow from $PRIVATE_NETWORK_MASK
1243 richard 835
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN
1 root 836
</Directory>
837
EOF
838
} # End of param_web_radius ()
839
 
799 richard 840
##################################################################################
1221 richard 841
##			Fonction "param_chilli"					##
799 richard 842
## - Création du fichier d'initialisation et de configuration de coova-chilli	##
843
## - Paramètrage de la page d'authentification (intercept.php)			##
844
##################################################################################
1 root 845
param_chilli ()
846
{
799 richard 847
# init file creation
461 richard 848
	[ -e /etc/init.d/chilli.default ] || cp /etc/init.d/chilli /etc/init.d/chilli.default
799 richard 849
	cat <<EOF > /etc/init.d/chilli
850
#!/bin/sh
851
#
852
# chilli CoovaChilli init
853
#
854
# chkconfig: 2345 65 35
855
# description: CoovaChilli
856
### BEGIN INIT INFO
857
# Provides:       chilli
858
# Required-Start: network 
859
# Should-Start: 
860
# Required-Stop:  network
861
# Should-Stop: 
862
# Default-Start:  2 3 5
863
# Default-Stop:
864
# Description:    CoovaChilli access controller
865
### END INIT INFO
866
 
867
[ -f /usr/sbin/chilli ] || exit 0
868
. /etc/init.d/functions
869
CONFIG=/etc/chilli.conf
870
pidfile=/var/run/chilli.pid
871
[ -f \$CONFIG ] || {
872
    echo "\$CONFIG Not found"
873
    exit 0
874
}
875
RETVAL=0
876
prog="chilli"
877
case \$1 in
878
    start)
879
	if [ -f \$pidfile ] ; then 
880
		gprintf "chilli is already running"
881
	else
882
        	gprintf "Starting \$prog: "
883
		rm -f /var/run/chilli* # cleaning
884
        	/sbin/modprobe tun >/dev/null 2>&1
885
        	echo 1 > /proc/sys/net/ipv4/ip_forward
886
		[ -e /dev/net/tun ] || {
887
	    	(cd /dev; 
888
			mkdir net; 
889
			cd net; 
890
			mknod tun c 10 200)
891
		}
1336 richard 892
		ifconfig $INTIF 0.0.0.0
799 richard 893
		daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
894
        	RETVAL=$?
895
	fi
896
	;;
897
 
898
    reload)
899
	killall -HUP chilli
900
	;;
901
 
902
    restart)
903
	\$0 stop
904
        sleep 2
905
	\$0 start
906
	;;
907
 
908
    status)
909
        status chilli
910
        RETVAL=0
911
        ;;
912
 
913
    stop)
914
	if [ -f \$pidfile ] ; then  
915
        	gprintf "Shutting down \$prog: "
916
		killproc /usr/sbin/chilli
917
		RETVAL=\$?
918
		[ \$RETVAL = 0 ] && rm -f $pidfile
919
	else	
920
        	gprintf "chilli is not running"
921
	fi
922
	;;
923
 
924
    *)
925
        echo "Usage: \$0 {start|stop|restart|reload|status}"
926
        exit 1
927
esac
928
echo
929
EOF
930
 
931
# conf file creation
346 richard 932
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
933
	cat <<EOF > /etc/chilli.conf
934
# coova config for ALCASAR
935
cmdsocket	/var/run/chilli.sock
1336 richard 936
unixipc		chilli.$INTIF.ipc
937
pidfile		/var/run/chilli.$INTIF.pid
346 richard 938
net		$PRIVATE_NETWORK_MASK
595 richard 939
dhcpif		$INTIF
841 richard 940
ethers		$DIR_DEST_ETC/alcasar-ethers
861 richard 941
#nodynip
865 richard 942
#statip
943
dynip		$PRIVATE_NETWORK_MASK
1249 richard 944
domain		$DOMAIN
355 richard 945
dns1		$PRIVATE_IP
946
dns2		$PRIVATE_IP
346 richard 947
uamlisten	$PRIVATE_IP
503 richard 948
uamport		3990
837 richard 949
macauth
950
macpasswd	password
1243 richard 951
locationname	$HOSTNAME.$DOMAIN
346 richard 952
radiusserver1	127.0.0.1
953
radiusserver2	127.0.0.1
954
radiussecret	$secretradius
955
radiusauthport	1812
956
radiusacctport	1813
1243 richard 957
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
958
radiusnasid	$HOSTNAME.$DOMAIN
346 richard 959
uamsecret	$secretuam
1249 richard 960
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
346 richard 961
coaport		3799
1299 richard 962
#conup		$DIR_DEST_BIN/alcasar-conup.sh
963
#condown	$DIR_DEST_BIN/alcasar-condown.sh
503 richard 964
include		$DIR_DEST_ETC/alcasar-uamallowed
965
include		$DIR_DEST_ETC/alcasar-uamdomain
1294 richard 966
#dhcpgateway
1157 stephane 967
#dhcprelayagent
968
#dhcpgatewayport
346 richard 969
EOF
1336 richard 970
# create file for DHCP static ip. Reserve the second IP address for INTIF (the first one is for tun0)
977 richard 971
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
840 richard 972
# create files for trusted domains and urls
1148 crox53 973
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
503 richard 974
	chown root:apache $DIR_DEST_ETC/alcasar-*
975
	chmod 660 $DIR_DEST_ETC/alcasar-*
847 richard 976
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
526 stephane 977
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
978
	$SED "s?^\$userpassword=1.*?\$userpassword=1;?g" $DIR_WEB/intercept.php
796 richard 979
# user 'chilli' creation (in order to run conup/off and up/down scripts
980
	chilli_exist=`grep chilli /etc/passwd|wc -l`
981
	if [ "$chilli_exist" == "1" ]
982
	then
983
	      userdel -r chilli 2>/dev/null
984
	fi
985
	groupadd -f chilli
986
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1 root 987
}  # End of param_chilli ()
988
 
989
##################################################################
1221 richard 990
##		Fonction "param_dansguardian"			##
1 root 991
## - Paramètrage du gestionnaire de contenu Dansguardian	##
992
##################################################################
993
param_dansguardian ()
994
{
995
	mkdir /var/dansguardian
996
	chown dansguardian /var/dansguardian
497 richard 997
	[ -e $DIR_DG/dansguardian.conf.default ] || cp $DIR_DG/dansguardian.conf $DIR_DG/dansguardian.conf.default
1293 richard 998
# By default the filter is off 
497 richard 999
	$SED "s/^reportinglevel =.*/reportinglevel = -1/g" $DIR_DG/dansguardian.conf
1293 richard 1000
# French deny HTML page
497 richard 1001
	$SED "s?^language =.*?language = french?g" $DIR_DG/dansguardian.conf
1293 richard 1002
# Listen only on LAN side
497 richard 1003
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/dansguardian.conf
1342 richard 1004
# DG send its flow to HAVP
1005
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/dansguardian.conf
1293 richard 1006
# replace the default deny HTML page
1 root 1007
	cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
1008
	cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
1293 richard 1009
# Don't log
1010
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/dansguardian.conf
1011
# Run 10 daemons (20 in largest server)
659 richard 1012
	$SED "s?^minchildren =.*?minchildren = 10?g" $DIR_DG/dansguardian.conf
1 root 1013
# on désactive par défaut le controle de contenu des pages html
497 richard 1014
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/dansguardian.conf
1015
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1016
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1 root 1017
# on désactive par défaut le contrôle d'URL par expressions régulières
497 richard 1018
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1019
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1 root 1020
# on désactive par défaut le contrôle de téléchargement de fichiers
497 richard 1021
	[ -e $DIR_DG/dansguardianf1.conf.default ] || cp $DIR_DG/dansguardianf1.conf $DIR_DG/dansguardianf1.conf.default
1022
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/dansguardianf1.conf
1023
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1024
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1025
	touch $DIR_DG/lists/bannedextensionlist
1026
	touch $DIR_DG/lists/bannedmimetypelist
1027
# 'Safesearch' regex actualisation
498 richard 1028
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
497 richard 1029
# empty LAN IP list that won't be WEB filtered
1030
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1031
	touch $DIR_DG/lists/exceptioniplist
1032
# Keep a copy of URL & domain filter configuration files
1033
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1034
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1 root 1035
} # End of param_dansguardian ()
1036
 
71 richard 1037
##################################################################
1221 richard 1038
##			Fonction "antivirus"			##
479 richard 1039
## - configuration havp + libclamav				##
71 richard 1040
##################################################################
1041
antivirus ()		
1042
{
288 richard 1043
# création de l'usager 'havp'
1044
	havp_exist=`grep havp /etc/passwd|wc -l`
307 richard 1045
	if [ "$havp_exist" == "1" ]
288 richard 1046
	then
478 richard 1047
	      userdel -r havp 2>/dev/null
894 richard 1048
	      groupdel havp 2>/dev/null
288 richard 1049
	fi
307 richard 1050
	groupadd -f havp
796 richard 1051
	useradd -r -g havp -s /bin/false -c "system user for havp" havp
476 richard 1052
	mkdir -p /var/tmp/havp /var/log/havp
1053
	chown -R havp /var/tmp/havp /var/log/havp /var/run/havp
109 richard 1054
# configuration d'HAVP
1055
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1056
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
631 richard 1057
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on 8090			
1058
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
990 franck 1059
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
631 richard 1060
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1061
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
659 richard 1062
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
835 richard 1063
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1064
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1007 richard 1065
# skip checking of youtube flow (too heavy load / risk too low)
1066
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1067
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1068
	echo "*.youtube.com/*" >> /etc/havp/whitelist
481 franck 1069
# remplacement du fichier d'initialisation
335 richard 1070
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1005 richard 1071
# if keep old init file : $SED "/$HAVP_BIN -c $HAVP_CONFIG/i chown -R havp:havp \/var\/tmp\/havp" /etc/init.d/havp
481 franck 1072
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
340 richard 1073
# on remplace la page d'interception (template)
1074
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1075
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
489 richard 1076
# automatisation de la mise à jour de la base antivirale (toutes les 2 heures)
1077
	$SED "s?^Checks.*?Checks 12?g" /etc/freshclam.conf
1078
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
734 richard 1079
# Virus database update
1080
	rm -f /var/lib/clamav/*.cld # in case of old database scheme
1005 richard 1081
	cp -f $DIR_CONF/clamav-main.cvd /var/lib/clamav/main.cvd
1082
	/usr/bin/freshclam
71 richard 1083
}
1084
 
1 root 1085
##################################################################################
1221 richard 1086
##			function "param_ulogd"					##
476 richard 1087
## - Ulog config for multi-log files 						##
1088
##################################################################################
1089
param_ulogd ()
1090
{
1091
# Three instances of ulogd (three different logfiles)
1092
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
478 richard 1093
	nl=1
1244 richard 1094
	for log_type in tracability ssh ext-access
478 richard 1095
	do
1096
		[ -e /var/log/firewall/$log_type.log ] || touch /var/log/firewall/$log_type.log
1097
		cp -f /etc/ulogd.conf /etc/ulogd-$log_type.conf
1098
		$SED "s?^nlgroup=.*?nlgroup=$nl?g" /etc/ulogd-$log_type.conf 
1099
		$SED '/OPRINT/,$d' /etc/ulogd-$log_type.conf
1100
		cat << EOF >> /etc/ulogd-$log_type.conf
1101
[LOGEMU]
1102
file="/var/log/firewall/$log_type.log"
1103
sync=1
1104
EOF
1105
		nl=`expr $nl + 1`
1106
	done
476 richard 1107
	chown -R root:apache /var/log/firewall
1108
	chmod 750 /var/log/firewall
1109
	chmod 640 /var/log/firewall/*
1110
	[ -e /etc/init.d/ulogd.default ] || cp /etc/init.d/ulogd /etc/init.d/ulogd.default
1111
	cp -f $DIR_CONF/ulogd-init /etc/init.d/ulogd
1112
}  # End of param_ulogd ()
1113
 
1159 crox53 1114
 
1115
##########################################################
1221 richard 1116
##              Function "param_nfsen"			##
1159 crox53 1117
##########################################################
1118
param_nfsen()
1 root 1119
{
1159 crox53 1120
#Decompression tarball
1221 richard 1121
	tar xvzf ./conf/nfsen/nfsen-1.3.6p1.tar.gz -C /tmp/
1159 crox53 1122
#Création groupe et utilisteur
1221 richard 1123
	if grep "^www-data:" /etc/group > /dev/null; then
1124
		echo "Group already exists !"
1125
	else
1126
		groupadd www-data
1127
		echo "Group 'www-data' created !"
1128
	fi
1129
	if grep "^nfsen:" /etc/passwd > /dev/null; then
1130
		echo "User already exists !"
1131
	else
1132
		useradd -m nfsen
1133
		echo "User 'nfsen' created !"
1134
	fi
1135
	usermod -G www-data nfsen
1159 crox53 1136
#Ajout du plugin nfsen : PortTracker
1221 richard 1137
	mkdir -p /var/www/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1138
	chown -R nfsen:www-data /var/www/nfsen
1139
	chown -R apache:apache /usr/share/nfsen /var/log/netflow/porttracker
1140
	cp -f $DIR_CONF/nfsen/PortTracker.pm /tmp/nfsen-1.3.6p1/contrib/PortTracker/
1159 crox53 1141
#Copie du fichier de conf modifié de nfsen
1221 richard 1142
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-1.3.6p1/etc/
1159 crox53 1143
#Copie du script d'initialisation de nfsen
1221 richard 1144
	cp $DIR_CONF/nfsen/nfsen.service /lib/systemd/system/
1159 crox53 1145
#Installation de nfsen via le scrip Perl
1221 richard 1146
	DirTmp=$(pwd)
1147
	cd /tmp/nfsen-1.3.6p1/
1148
	/usr/bin/perl5 install.pl etc/nfsen.conf #script lancé deux fois pour corriger,
1149
	/usr/bin/perl5 install.pl etc/nfsen.conf #un problème Perl : "Semaphore introuvable"
1159 crox53 1150
#Création de la DB pour rrdtool
1221 richard 1151
	cp /tmp/nfsen-1.3.6p1/contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1152
	cp /tmp/nfsen-1.3.6p1/contrib/PortTracker/PortTracker.php /var/www/nfsen/plugins/
1153
	sudo -u apache nftrack -I -d /var/log/netflow/porttracker
1154
	chown -R apache:www-data /var/log/netflow/porttracker/
1155
	chmod -R 775 /var/log/netflow/porttracker
1159 crox53 1156
#Configuration du fichier de conf d'apache
1221 richard 1157
	if [ -f /etc/httpd/conf.d/nfsen.conf ];then
1158
		rm -f /etc/httpd/conf.d/nfsen.conf
1159
	fi
1160
	cat <<EOF >> /etc/httpd/conf.d/nfsen.conf
1159 crox53 1161
Alias /nfsen /var/www/nfsen 
1162
<Directory /var/www/nfsen/> 
1163
DirectoryIndex nfsen.php 
1164
Options -Indexes 
1165
AllowOverride all 
1166
order allow,deny 
1167
allow from all 
1168
AddType application/x-httpd-php .php 
1169
php_flag magic_quotes_gpc on 
1170
php_flag track_vars on 
1 root 1171
</Directory>
1172
EOF
1223 crox53 1173
#Ajout du paramètre : IP d'écoute pour le collecteur (nfcapd)
1229 crox53 1174
$SED s?'\$ziparg $extensions.*?\$ziparg $extensions -b 127.0.0.1";'?g /usr/libexec/NfSenRC.pm 
1210 crox53 1175
#Configuration du délais d'expiration des captures du profile "live"
1250 richard 1176
	nfsen -m live -e 62d 2>/dev/null
1159 crox53 1177
#Suppression des sources de nfsen
1221 richard 1178
	cd $DirTmp
1179
	rm -rf /tmp/nfsen-1.3.6p1/
1159 crox53 1180
} # End of param_nfsen
1 root 1181
 
1182
##########################################################
1221 richard 1183
##		Function "param_dnsmasq"		##
1 root 1184
##########################################################
219 jeremy 1185
param_dnsmasq ()
1186
{
1187
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
259 richard 1188
	$SED "s?^DHCP_LEASE=.*?DHCP_LEASE=/var/log/dnsmasq/lease.log?g" /etc/sysconfig/dnsmasq # fichier contenant les baux
503 richard 1189
	[ -e /etc/dnsmasq.conf.default ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
520 richard 1190
# 1st dnsmasq listen on udp 53 ("dnsmasq - forward"). It's used as dhcp server only if bypass is on.
503 richard 1191
	cat << EOF > /etc/dnsmasq.conf 
520 richard 1192
# Configuration file for "dnsmasq in forward mode"
503 richard 1193
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# zone de definition de noms DNS locaux
259 richard 1194
listen-address=$PRIVATE_IP
1195
listen-address=127.0.0.1
286 richard 1196
no-dhcp-interface=$INTIF
259 richard 1197
bind-interfaces
1198
cache-size=256
1199
domain=$DOMAIN
1200
domain-needed
1201
expand-hosts
1202
bogus-priv
1203
filterwin2k
1204
server=$DNS1
1205
server=$DNS2
498 richard 1206
# le servive DHCP est configuré mais n'est exploité que pour le "bypass"
865 richard 1207
dhcp-range=$PRIVATE_FIRST_IP,$PRIVATE_LAST_IP,$PRIVATE_NETMASK,12h
632 richard 1208
dhcp-option=option:router,$PRIVATE_IP
259 richard 1209
#dhcp-option=option:ntp-server,192.168.0.4,10.10.0.5
1210
 
291 franck 1211
# Exemple de configuration statique : <@MAC>,<name>,<@IP>,<MASK>,<ttl bail>
420 franck 1212
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.182.20,255.255.255.0,45m
259 richard 1213
EOF
520 richard 1214
# 2nd dnsmasq listen on udp 54 ("dnsmasq with blackhole")
1215
	cat << EOF > /etc/dnsmasq-blackhole.conf 
1216
	# Configuration file for "dnsmasq with blackhole"
1217
# Inclusion de la blacklist <domains> de Toulouse dans la configuration
1015 richard 1218
conf-dir=$DIR_DEST_SHARE/dnsmasq-bl-enabled
503 richard 1219
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# zone de definition de noms DNS locaux
498 richard 1220
listen-address=$PRIVATE_IP
1221
port=54
1222
no-dhcp-interface=$INTIF
1223
bind-interfaces
1224
cache-size=256
1225
domain=$DOMAIN
1226
domain-needed
1227
expand-hosts
1228
bogus-priv
1229
filterwin2k
1230
server=$DNS1
1231
server=$DNS2
1232
EOF
718 franck 1233
 
800 richard 1234
# Init file modification
1221 richard 1235
	[ -e /etc/init.d/dnsmasq.default ] || cp /etc/init.d/dnsmasq /etc/init.d/dnsmasq.default
800 richard 1236
# Start and stop a 2nd process for the "DNS blackhole"
1221 richard 1237
	cp -f $DIR_CONF/dnsmasq /etc/init.d/dnsmasq			
800 richard 1238
# Start after chilli (65) which create tun0
1221 richard 1239
	$SED "s?^# chkconfig:.*?# chkconfig: 2345 99 40?g" /etc/init.d/dnsmasq
933 franck 1240
# Optionnellement on pré-active les logs DNS des clients
1221 richard 1241
	[ -e /etc/sysconfig/dnsmasq.default ] || cp /etc/sysconfig/dnsmasq /etc/sysconfig/dnsmasq.default
1242
	$SED "s?log-facility?#OPTIONS=\"-q --log-facility=/var/log/dnsmasq/queries.log\"?g"  /etc/sysconfig/dnsmasq
1157 stephane 1243
# Optionnellement, exemple de paramètre supplémentaire pour le cache memoire
1221 richard 1244
	echo '#OPTIONS="$OPTIONS --cache-size=250"' >> /etc/sysconfig/dnsmasq
933 franck 1245
# Optionnellement, exemple de configuration avec un A.D.
1221 richard 1246
	echo '#OPTIONS="$OPTIONS --server=/your.domain/192.168.182.3"' >> /etc/sysconfig/dnsmasq
308 richard 1247
} # End dnsmasq
1248
 
1249
##########################################################
1221 richard 1250
##		Fonction "BL"				##
308 richard 1251
##########################################################
1252
BL ()
1253
{
1254
# on copie par défaut la BL de toulouse embarqués dans l'archive d'ALCASAR
648 richard 1255
	rm -rf $DIR_DG/lists/blacklists
1256
	tar zxf $DIR_CONF/blacklists.tar.gz --directory=$DIR_DG/lists/ > /dev/null 2>&1
878 richard 1257
# on crée le répertoire ossi (noms de domaine et URLs ajoutés à la BL)
1258
	mkdir $DIR_DG/lists/blacklists/ossi
1041 richard 1259
	touch $DIR_DG/lists/blacklists/ossi/domains $DIR_DG/lists/blacklists/ossi/domains_wl
1260
	touch $DIR_DG/lists/blacklists/ossi/urls $DIR_DG/lists/blacklists/ossi/urls_wl
309 richard 1261
# On crée les fichiers vides de sites ou d'URL réhabilités
648 richard 1262
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
673 richard 1263
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
648 richard 1264
	touch $DIR_DG/lists/exceptionsitelist
1265
	touch $DIR_DG/lists/exceptionurllist
311 richard 1266
# On crée la configuration de base du filtrage de domaine et d'URL pour Dansguardian
648 richard 1267
	cat <<EOF > $DIR_DG/lists/bannedurllist
311 richard 1268
# Dansguardian filter config for ALCASAR
1269
EOF
648 richard 1270
	cat <<EOF > $DIR_DG/lists/bannedsitelist
311 richard 1271
# Dansguardian domain filter config for ALCASAR
1272
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1273
#**
1274
# block all SSL and CONNECT tunnels
1275
**s
1276
# block all SSL and CONNECT tunnels specified only as an IP
1277
*ips
1278
# block all sites specified only by an IP
1279
*ip
1280
EOF
1000 richard 1281
# Add Bing and Youtube to the safesearch url regext list (parental control)
878 richard 1282
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1283
# Bing - add 'adlt=strict'
1284
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1285
# Youtube - add 'edufilter=your_ID' 
885 richard 1286
#"(^http://[0-9a-z]+\.youtube\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&edufilter=ABCD1234567890abcdef"
878 richard 1287
EOF
1000 richard 1288
# change the the google safesearch ("safe=strict" instead of "safe=vss")
1003 richard 1289
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
648 richard 1290
	chown -R dansguardian:apache $DIR_DG
1291
	chmod -R g+rw $DIR_DG
786 richard 1292
# On adapte la BL de Toulouse à notre structure
654 richard 1293
	if [ "$mode" != "update" ]; then
1294
		$DIR_DEST_SBIN/alcasar-bl.sh --adapt
1295
	fi
308 richard 1296
}
219 jeremy 1297
 
1 root 1298
##########################################################
1221 richard 1299
##		Fonction "cron"				##
1 root 1300
## - Mise en place des différents fichiers de cron	##
1301
##########################################################
1302
cron ()
1303
{
1304
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1305
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1306
	cat <<EOF > /etc/crontab
1307
SHELL=/bin/bash
1308
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1309
MAILTO=root
1310
HOME=/
1311
 
1312
# run-parts
1313
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1314
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1315
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1316
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1317
EOF
1318
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1319
	cat <<EOF >> /etc/anacrontab
667 franck 1320
7       8       cron.MysqlDump          nice /etc/cron.d/alcasar-mysql
1321
7       10      cron.logExport          nice /etc/cron.d/alcasar-export_log
1322
7       15      cron.logClean           nice /etc/cron.d/alcasar-clean_log
1323
7	20	cron.importClean	nice /etc/cron.d/alcasar-clean_import
1 root 1324
EOF
1247 crox53 1325
 
811 richard 1326
	cat <<EOF > /etc/cron.d/alcasar-mysql
868 richard 1327
# Contrôle, réparation et export de la base des usagers (tous les lundi à 4h45)
955 richard 1328
45 4 * * 1 root $DIR_DEST_SBIN/alcasar-mysql.sh --dump
905 franck 1329
# Nettoyage des utilisateurs dont la date d'expiration du compte est supérieure à 7 jours
917 franck 1330
40 4 * * * root /usr/local/sbin/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1 root 1331
EOF
952 franck 1332
	cat <<EOF > /etc/cron.d/alcasar-archive
1333
# Archive des logs et de la base de données (tous les lundi à 5h35)
1334
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1335
EOF
667 franck 1336
	cat << EOF > /etc/cron.d/alcasar-clean_import
713 franck 1337
# suppression des fichiers de mots de passe lors d'imports massifs par fichier de plus de 24h
503 richard 1338
30 * * * *  root $DIR_DEST_BIN/alcasar-import-clean.sh
168 franck 1339
EOF
722 franck 1340
	cat << EOF > /etc/cron.d/alcasar-distrib-updates
1341
# mise à jour automatique de la distribution tous les jours 3h30
762 franck 1342
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
722 franck 1343
EOF
1247 crox53 1344
	#cat << EOF > /etc/cron.d/alcasar-netflow
1159 crox53 1345
# mise à jour automatique du délais d'expiration des log Nertflow (tous les vendredi à 0h05)
1247 crox53 1346
#15 0 * * 1  root $DIR_DEST_BIN/alcasar-netflow.sh
1347
#EOF
1159 crox53 1348
 
1 root 1349
# mise à jour des stats de connexion (accounting). Scripts provenant de "dialupadmin" (rpm freeradius-web) (cf. wiki.freeradius.org/Dialup_admin).
1350
# on écrase le crontab d'origine installé par le RPM "freeradius-web" (bug remonté à qa.mandriva.com : 46739).
1351
# 'tot_stats' (tout les jours à 01h01) : aggrégat des connexions journalières par usager (renseigne la table 'totacct') 
1352
# 'monthly_tot_stat' (tous les jours à 01h05) : aggrégat des connexions mensuelles par usager (renseigne la table 'mtotacct')
1353
# '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)
1354
# 'clean_radacct' (tous les 1er du mois à 01h15) : ferme les session ouvertes de plus de '$back_days' jours (défini ci-après)
1355
	$SED "s?^\$back_days.*?\$back_days = 365;?g" /usr/bin/truncate_radacct
1356
	$SED "s?^\$back_days.*?\$back_days = 30;?g" /usr/bin/clean_radacct
1357
	rm -f /etc/cron.daily/freeradius-web
1358
	rm -f /etc/cron.monthly/freeradius-web
1359
	cat << EOF > /etc/cron.d/freeradius-web
1360
1 1 * * * root /usr/bin/tot_stats > /dev/null 2>&1
1361
5 1 * * * root /usr/bin/monthly_tot_stats > /dev/null 2>&1
1362
10 1 1 * * root /usr/bin/truncate_radacct > /dev/null 2>&1
1363
15 1 1 * * root /usr/bin/clean_radacct > /dev/null 2>&1
1364
EOF
671 franck 1365
	cat << EOF > /etc/cron.d/alcasar-watchdog
713 franck 1366
# activation du "chien de garde" (watchdog) toutes les 3'
1 root 1367
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1368
EOF
808 franck 1369
# activation du "chien de garde des services" (watchdog) toutes les 18'
1370
	cat << EOF > /etc/cron.d/alcasar-daemon-watchdog
1371
# activation du "chien de garde" (daemon-watchdog) toutes les 18'
1372
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1373
EOF
522 richard 1374
# suppression des crons usagers
1375
	rm -f /var/spool/cron/*
1 root 1376
} # End cron
1377
 
1378
##################################################################
1221 richard 1379
## 			Fonction "Fail2Ban"			##
1163 crox53 1380
##- Modification de la configuration de fail2ban		##
1381
##- Sécurisation DDOS, SSH-Brute-Force, Intercept.php ...	##
1382
##################################################################
1383
fail2ban()
1384
{
1191 crox53 1385
	$DIR_CONF/fail2ban.sh
1192 crox53 1386
#Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1387
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1388
	[ -e /var/Save/logs/security/watchdog.log ] || touch /var/Save/logs/security/watchdog.log
1165 crox53 1389
	chmod 644 /var/log/fail2ban.log
1192 crox53 1390
	chmod 644 /var/Save/logs/security/watchdog.log
1163 crox53 1391
} #Fin de fail2ban_install()
1392
 
1393
##################################################################
1221 richard 1394
##			Fonction "post_install"			##
1 root 1395
## - Modification des bannières (locales et ssh) et des prompts ##
1396
## - Installation de la structure de chiffrement pour root	##
1397
## - Mise en place du sudoers et de la sécurité sur les fichiers##
1398
## - Mise en place du la rotation des logs			##
5 franck 1399
## - Configuration dans le cas d'une mise à jour		##
1 root 1400
##################################################################
1401
post_install()
1402
{
1403
# adaptation du script "chien de garde" (watchdog)
376 franck 1404
	$SED "s?^EXTIF=.*?EXTIF=\"$EXTIF\"?g" $DIR_DEST_BIN/alcasar-watchdog.sh
1405
	$SED "s?^INTIF=.*?INTIF=\"$INTIF\"?g" $DIR_DEST_BIN/alcasar-watchdog.sh
1 root 1406
# création de la bannière locale
1007 richard 1407
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
1408
	cp -f $DIR_CONF/banner /etc/mageia-release
1409
	echo " V$VERSION" >> /etc/mageia-release
1 root 1410
# création de la bannière SSH
1007 richard 1411
	cp /etc/mageia-release /etc/ssh/alcasar-banner-ssh
5 franck 1412
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1 root 1413
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1414
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1415
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
793 richard 1416
# postfix banner anonymisation
1417
	$SED "s?^smtpd_banner =.*?smtpd_banner = $myhostname ESMTP?g" /etc/postfix/main.cf
604 richard 1418
# sshd écoute côté LAN et WAN
1 root 1419
	$SED "s?^#ListenAddress 0\.0\.0\.0?ListenAddress $PRIVATE_IP?g" /etc/ssh/sshd_config
604 richard 1420
	$SED "/^ListenAddress $PRIVATE_IP/a\ListenAddress $PUBLIC_IP" /etc/ssh/sshd_config 
860 richard 1421
	# Put the default value in conf file (sshd, QOS and protocols/dns/ are off)(web antivirus is on)
628 richard 1422
	echo "SSH=off" >> $CONF_FILE
1063 richard 1423
	echo 'SSH_ADMIN_FROM=0.0.0.0/0.0.0.0' >> $CONF_FILE
628 richard 1424
	echo "QOS=off" >> $CONF_FILE
1425
	echo "LDAP=off" >> $CONF_FILE
786 richard 1426
	echo "LDAP_IP=0.0.0.0/0.0.0.0" >> $CONF_FILE
885 richard 1427
	echo "WEB_ANTIVIRUS=on" >> $CONF_FILE
628 richard 1428
	echo "PROTOCOLS_FILTERING=off" >> $CONF_FILE
1429
	echo "DNS_FILTERING=off" >> $CONF_FILE
885 richard 1430
	echo "YOUTUBE_ID=ABCD1234567890abcdef" >> $CONF_FILE
1078 franck 1431
	echo "MULTIWAN=off" >> $CONF_FILE
1432
	echo "FAILOVER=30" >> $CONF_FILE
1433
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
1336 richard 1434
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
1435
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
1 root 1436
# Coloration des prompts
1437
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
5 franck 1438
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
630 franck 1439
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
1 root 1440
# Droits d'exécution pour utilisateur apache et sysadmin
1441
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
5 franck 1442
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
629 richard 1443
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
1342 richard 1444
# prise en compte de la rotation des logs sur 1 an (concerne mysql, httpd, dansguardian, radiusd, ulogd)
1 root 1445
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1446
	chmod 644 /etc/logrotate.d/*
714 franck 1447
# rectification sur versions précédentes de la compression des logs
706 franck 1448
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
1449
# actualisation des fichiers logs compressés
1342 richard 1450
	for dir in firewall dansguardian httpd
706 franck 1451
	do
714 franck 1452
	      find /var/log/$dir -type f -name *.log-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] -exec gzip {} \;
706 franck 1453
	done
1221 richard 1454
# create the alcasar-load_balancing unit
1455
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
1184 crox53 1456
#  This file is part of systemd.
1457
#
1458
#  systemd is free software; you can redistribute it and/or modify it
1459
#  under the terms of the GNU General Public License as published by
1460
#  the Free Software Foundation; either version 2 of the License, or
1461
#  (at your option) any later version.
1462
 
1463
# This unit lauches alcasar-load-balancing.sh script.
1464
[Unit]
1465
Description=alcasar-load_balancing.sh execution
1466
After=network.target iptables.service
1467
 
1468
[Service]
1469
Type=oneshot
1470
RemainAfterExit=yes
1471
ExecStart=/usr/local/sbin/alcasar-load_balancing.sh start
1472
ExecStop=/usr/local/sbin/alcasar-load_balancing.sh stop
1473
TimeoutSec=0
1474
SysVStartPriority=99
1475
 
1476
[Install]
1477
WantedBy=multi-user.target
1157 stephane 1478
EOF
1221 richard 1479
# processes launched at boot time (SYSV)
1342 richard 1480
	for i in ntpd iptables ulogd dnsmasq chilli httpd radiusd netfs mysqld dansguardian havp freshclam
1221 richard 1481
	do
1482
		/sbin/chkconfig --add $i
1483
	done
1484
# processes launched at boot time (Systemctl)
1485
	for i in alcasar-load_balancing.service nfsen.service
953 franck 1486
 
1221 richard 1487
	do
1488
		systemctl enable $i
1489
	done
1490
# Apply French Security Agency (ANSSI) rules
568 richard 1491
# ignorer les broadcast ICMP. (attaque smurf) 
1221 richard 1492
	sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
568 richard 1493
# ignorer les erreurs ICMP bogus
1221 richard 1494
	sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
595 richard 1495
# désactiver l'envoi et la réponse aux ICMP redirects
1221 richard 1496
	sysctl -w net.ipv4.conf.all.accept_redirects=0
1497
	accept_redirect=`grep accept_redirect /etc/sysctl.conf|wc -l`
568 richard 1498
	if [ "$accept_redirect" == "0" ]
1499
	then
679 richard 1500
		echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf
1501
	else
1502
		$SED "s?accept_redirects.*?accept_redirects = 0?g" /etc/sysctl.conf
568 richard 1503
	fi
1221 richard 1504
	sysctl -w net.ipv4.conf.all.send_redirects=0
1505
	send_redirect=`grep send_redirect /etc/sysctl.conf|wc -l`
568 richard 1506
	if [ "$send_redirect" == "0" ]
1507
	then
679 richard 1508
		echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
1509
	else
1510
		$SED "s?send_redirects.*?send_redirects = 0?g" /etc/sysctl.conf
568 richard 1511
	fi
1512
# activer les SYN Cookies (attaque syn flood)
1221 richard 1513
	sysctl -w net.ipv4.tcp_syncookies=1
1514
	tcp_syncookies=`grep tcp_syncookies /etc/sysctl.conf|wc -l`
568 richard 1515
	if [ "$tcp_syncookies" == "0" ]
1516
	then
679 richard 1517
		echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
1518
	else
1519
		$SED "s?tcp_syncookies.*?tcp_syncookies = 1?g" /etc/sysctl.conf
568 richard 1520
	fi
595 richard 1521
# activer l'antispoofing niveau Noyau
1221 richard 1522
	sysctl -w net.ipv4.conf.all.rp_filter=1
568 richard 1523
# ignorer le source routing
1221 richard 1524
	sysctl -w net.ipv4.conf.all.accept_source_route=0
1525
	 accept_source_route=`grep accept_source_route /etc/sysctl.conf|wc -l`
568 richard 1526
	if [ "$accept_source_route" == "0" ]
1527
	then
679 richard 1528
		echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.conf
1529
	else
1530
		$SED "s?accept_source_route.*?accept_source_route = 0?g" /etc/sysctl.conf
568 richard 1531
	fi
679 richard 1532
# réglage du timer de maintien de suivi de session à 1h (3600s) au lieu de 5 semaines
1221 richard 1533
	sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=3600
1534
	timeout_established=`grep timeout_established /etc/sysctl.conf|wc -l`
679 richard 1535
	if [ "$timeout_established" == "0" ]
1536
	then
1537
		echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.conf
1538
	else
793 richard 1539
		$SED "s?timeout_established.*?timeout_established = 3600?g" /etc/sysctl.conf
679 richard 1540
	fi
1157 stephane 1541
# disable log_martians (ALCASAR is often installed between two private network addresses) 
1221 richard 1542
	sysctl -w net.ipv4.conf.all.log_martians=0
306 richard 1543
# On supprime la gestion du <CTRL>+<ALT>+<SUPPR> et des Magic SysReq Keys
1005 richard 1544
# ???	$SED "s?^ALLOW_REBOOT=.*?ALLOW_REBOOT=no?g" /etc/security/msec/level.fileserver
1003 richard 1545
# switch to multi-users runlevel (instead of x11)
1221 richard 1546
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
1005 richard 1547
#	GRUB modifications
1548
# limit wait time to 3s
1549
# create an alcasar entry instead of linux-nonfb
1550
# change display to 1024*768 (vga791)
1221 richard 1551
	$SED "s?^timeout.*?timeout 3?g" /boot/grub/menu.lst
1552
	$SED "s?^title linux?title ALCASAR?g" /boot/grub/menu.lst
1553
	$SED "/^kernel/s/splash quiet //" /boot/grub/menu.lst
1554
	$SED "/^kernel/s/vga=.*/vga=791 nomodeset/" /boot/grub/menu.lst
1555
	$SED "/^kernel/s/BOOT_IMAGE=linux /BOOT_IMAGE=linux-nonfb /" /boot/grub/menu.lst
1556
	$SED "/^gfxmenu/d" /boot/grub/menu.lst
1003 richard 1557
# Remove unused services and users
1221 richard 1558
	for old_svc in alsa sound dm
1559
	do
1560
		/sbin/chkconfig --del $old_svc
1561
	done
1562
	for svc in snmpd.service sshd.service
1563
	do
1564
		/bin/systemctl disable $svc
1565
	done
1566
	for rm_users in avahi-autoipd avahi icapd
1567
	do
1568
		user=`cat /etc/passwd|grep $rm_users|cut -d":" -f1`
1569
		if [ "$user" == "$rm_users" ]
1570
		then
1571
			/usr/sbin/userdel -f $rm_users
1572
		fi
1573
	done
1574
# Load and apply the previous conf file
1575
	if [ "$mode" = "update" ]
532 richard 1576
	then
1266 richard 1577
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/logs
1221 richard 1578
		$DIR_DEST_BIN/alcasar-conf.sh --load
1579
		PARENT_SCRIPT=`basename $0`
1580
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
1581
		$DIR_DEST_BIN/alcasar-conf.sh --apply
1582
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
1583
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
1269 richard 1584
		if [ $MAJ_PREVIOUS_VERSION -lt 2 ] || ([ $MAJ_PREVIOUS_VERSION -eq 2 ] && [ $MIN_PREVIOUS_VERSION -lt 8 ])
1585
		# update needed for versions previous then 2.8 due to the integration of the domainname ("localdomain" by default)
1586
		then
1587
			header_install
1588
			if [ $Lang == "fr" ]
1589
			then 
1590
				echo "Cette mise à jour nécessite de redéfinir le premier compte d'administration du portail"
1591
				echo
1592
				echo -n "Nom : "
1593
			else
1594
				echo "This update need to redefine the first admin account"
1595
				echo
1596
				echo -n "Account : "
1597
			fi
1598
			read admin_portal
1599
			[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
1600
			mkdir -p $DIR_DEST_ETC/digest
1601
			chmod 755 $DIR_DEST_ETC/digest
1602
			until [ -s $DIR_DEST_ETC/digest/key_admin ]
1603
			do
1604
				/usr/sbin/htdigest -c $DIR_DEST_ETC/digest/key_admin $HOSTNAME.$DOMAIN $admin_portal
1605
			done
1606
			$DIR_DEST_SBIN/alcasar-profil.sh --list
1607
		fi
532 richard 1608
	fi
1221 richard 1609
	rm -f /tmp/alcasar-conf*
1610
	chown -R root:apache $DIR_DEST_ETC/*
1611
	chmod -R 660 $DIR_DEST_ETC/*
1612
	chmod ug+x $DIR_DEST_ETC/digest
1045 franck 1613
# Apply and save the firewall rules
1614
 	sh $DIR_DEST_BIN/alcasar-iptables.sh
1615
	sleep 2
1 root 1616
	cd $DIR_INSTALL
5 franck 1617
	echo ""
1 root 1618
	echo "#############################################################################"
638 richard 1619
	if [ $Lang == "fr" ]
1620
		then
1621
		echo "#                        Fin d'installation d'ALCASAR                       #"
1622
		echo "#                                                                           #"
1623
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1624
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1625
		echo "#                                                                           #"
1626
		echo "#############################################################################"
1627
		echo
1628
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
1629
		echo
1630
		echo "- Lisez attentivement la documentation d'exploitation"
1631
		echo
1632
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://alcasar"
1633
		echo
1634
		echo "                   Appuyez sur 'Entrée' pour continuer"
1635
	else	
1636
		echo "#                        Enf of ALCASAR install process                     #"
1637
		echo "#                                                                           #"
1638
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1639
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1640
		echo "#                                                                           #"
1641
		echo "#############################################################################"
1642
		echo
1643
		echo "- The system will be rebooted in order to operate ALCASAR"
1644
		echo
1645
		echo "- Read the exploitation documentation"
1646
		echo
1647
		echo "- The ALCASAR Control Center (ACC) is at http://alcasar"
1648
		echo
1649
		echo "                   Hit 'Enter' to continue"
1650
	fi
815 richard 1651
	sleep 2
1652
	if [ "$mode" != "update" ]
820 richard 1653
	then
815 richard 1654
		read a
1655
	fi
774 richard 1656
	clear
1 root 1657
	reboot
1658
} # End post_install ()
1659
 
1660
#################################
1005 richard 1661
#  	Main Install loop  	#
1 root 1662
#################################
832 richard 1663
dir_exec=`dirname "$0"`
1664
if [ $dir_exec != "." ]
1665
then
1666
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
1667
	echo "Launch this program from the ALCASAR archive directory"
1668
	exit 0
1669
fi
1670
VERSION=`cat $DIR_INSTALL/VERSION`
291 franck 1671
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
1 root 1672
nb_args=$#
1673
args=$1
1674
if [ $nb_args -eq 0 ]
1675
then
1676
	nb_args=1
1677
	args="-h"
1678
fi
1062 richard 1679
chmod -R u+x $DIR_SCRIPTS/*
1 root 1680
case $args in
1681
	-\? | -h* | --h*)
1682
		echo "$usage"
1683
		exit 0
1684
		;;
291 franck 1685
	-i | --install)
959 franck 1686
		license
5 franck 1687
		header_install
29 richard 1688
		testing
1336 richard 1689
# Test if ALCASAR is already installed
1249 richard 1690
		if [ -e $CONF_FILE ]
1 root 1691
		then
1249 richard 1692
			current_version=`cat $CONF_FILE | grep VERSION | cut -d"=" -f2`
595 richard 1693
			if [ $Lang == "fr" ]
1249 richard 1694
				then echo -n "La version "; echo -n $current_version ; echo " d'ALCASAR est déjà installée";
1695
				else echo -n "ALCASAR Version "; echo -n $current_version ; echo " is already installed";
595 richard 1696
			fi
5 franck 1697
			response=0
460 richard 1698
			PTN='^[oOnNyY]$'
580 richard 1699
			until [[ $(expr $response : $PTN) -gt 0 ]]
5 franck 1700
			do
595 richard 1701
				if [ $Lang == "fr" ]
1702
					then echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
1703
					else echo -n "Do you want to update (Y/n)?";
1704
				 fi
5 franck 1705
				read response
1706
			done
597 richard 1707
			if [ "$response" = "n" ] || [ "$response" = "N" ] 
5 franck 1708
			then
597 richard 1709
				rm -f /tmp/alcasar-conf*
1710
			else
636 richard 1711
# Create a backup of running version importants files
389 franck 1712
				$DIR_SCRIPTS/alcasar-conf.sh --create
532 richard 1713
				mode="update"
5 franck 1714
			fi
1 root 1715
		fi
595 richard 1716
# RPMs install
1717
		$DIR_SCRIPTS/alcasar-urpmi.sh
1718
		if [ "$?" != "0" ]
1 root 1719
		then
595 richard 1720
			exit 0
1721
		fi
1342 richard 1722
echo "STOP" ; read a
1249 richard 1723
		if [ -e $CONF_FILE ]
595 richard 1724
		then
597 richard 1725
# Uninstall the running version
532 richard 1726
			$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
595 richard 1727
		fi
636 richard 1728
# Test if manual update	
1057 richard 1729
		if [ -e /tmp/alcasar-conf*.tar.gz ] && [ "$mode" != "update" ]
595 richard 1730
		then
636 richard 1731
			header_install
595 richard 1732
			if [ $Lang == "fr" ]
636 richard 1733
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
1734
				else echo "The configuration file of an old version has been found";
595 richard 1735
			fi
597 richard 1736
			response=0
1737
			PTN='^[oOnNyY]$'
1738
			until [[ $(expr $response : $PTN) -gt 0 ]]
1739
			do
1740
				if [ $Lang == "fr" ]
1741
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
1742
					else echo -n "Do you want to use it (Y/n)?";
1743
				 fi
1744
				read response
1745
				if [ "$response" = "n" ] || [ "$response" = "N" ] 
1746
				then rm -f /tmp/alcasar-conf*
1747
				fi
1748
			done
1749
		fi
636 richard 1750
# Test if update
1057 richard 1751
		if [ -e /tmp/alcasar-conf* ] 
597 richard 1752
		then
1753
			if [ $Lang == "fr" ]
1754
				then echo "#### Installation avec mise à jour ####";
1755
				else echo "#### Installation with update     ####";
1756
			fi
636 richard 1757
# Extract the central configuration file
1057 richard 1758
			tar -xf /tmp/alcasar-conf* conf/etc/alcasar.conf 
637 richard 1759
			ORGANISME=`grep ORGANISM conf/etc/alcasar.conf|cut -d"=" -f2`
1010 richard 1760
			PREVIOUS_VERSION=`grep VERSION conf/etc/alcasar.conf|cut -d"=" -f2`
1761
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
1762
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2|cut -c1`
1763
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3`
5 franck 1764
			mode="update"
1765
		else
1766
			mode="install"
1 root 1767
		fi
1342 richard 1768
		for func in init network ACC CA init_db param_radius param_web_radius param_chilli param_dansguardian antivirus param_ulogd param_nfsen param_dnsmasq BL cron fail2ban post_install
5 franck 1769
		do
1770
			$func
1221 richard 1771
# echo "*** 'debug' : end of function $func ***"; read a
14 richard 1772
		done
5 franck 1773
		;;
291 franck 1774
	-u | --uninstall)
5 franck 1775
		if [ ! -e $DIR_DEST_SBIN/alcasar-uninstall.sh ]
1 root 1776
		then
597 richard 1777
			if [ $Lang == "fr" ]
1778
				then echo "ALCASAR n'est pas installé!";
1779
				else echo "ALCASAR isn't installed!";
1780
			fi
1 root 1781
			exit 0
1782
		fi
5 franck 1783
		response=0
1784
		PTN='^[oOnN]$'
580 richard 1785
		until [[ $(expr $response : $PTN) -gt 0 ]]
5 franck 1786
		do
597 richard 1787
			if [ $Lang == "fr" ]
1788
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
854 richard 1789
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
597 richard 1790
			fi
5 franck 1791
			read response
1792
		done
1103 richard 1793
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
1 root 1794
		then
1103 richard 1795
			$DIR_SCRIPTS/alcasar-conf.sh --create
498 richard 1796
		else	
1797
			rm -f /tmp/alcasar-conf*
1 root 1798
		fi
597 richard 1799
# Uninstall the running version
65 richard 1800
		$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1 root 1801
		;;
1802
	*)
1803
		echo "Argument inconnu :$1";
460 richard 1804
		echo "Unknown argument :$1";
1 root 1805
		echo "$usage"
1806
		exit 1
1807
		;;
1808
esac
10 franck 1809
# end of script
366 franck 1810