Subversion Repositories ALCASAR

Rev

Rev 2267 | Rev 2272 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 2267 Rev 2269
1
#!/bin/bash
1
#!/bin/bash
2
#  $Id: alcasar.sh 2267 2017-06-04 09:28:36Z richard $ 
2
#  $Id: alcasar.sh 2269 2017-06-04 10:42:26Z richard $ 
3
 
3
 
4
# alcasar.sh
4
# alcasar.sh
5
 
5
 
6
# ALCASAR Install script -  CopyLeft ALCASAR Team [Rexy + 3abtux + Steweb + Crox + ...] 
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
7
# Ce programme est un logiciel libre ; This software is free and open source
8
# elle que publiée par la Free Software Foundation ; soit la version 3 de la Licence. 
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 ; 
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. 
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. 
11
# Voir la Licence Publique Générale GNU pour plus de détails. 
12
 
12
 
13
#  team@alcasar.net
13
#  team@alcasar.net
14
 
14
 
15
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
15
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
16
# This script is distributed under the Gnu General Public License (GPL)
16
# This script is distributed under the Gnu General Public License (GPL)
17
 
17
 
18
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
18
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
19
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
19
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
20
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
20
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
21
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares : 
21
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares : 
22
# Coovachilli, freeradius, mariaDB, apache, netfilter, dansguardian, ntpd, openssl, dnsmasq, gammu, havp, libclamav, Ulog, fail2ban, tinyproxy, NFsen and NFdump
22
# Coovachilli, freeradius, mariaDB, apache, netfilter, dansguardian, ntpd, openssl, dnsmasq, gammu, havp, libclamav, Ulog, fail2ban, tinyproxy, NFsen and NFdump
23
 
23
 
24
# Options :
24
# Options :
25
#       -i or --install
25
#       -i or --install
26
#       -u or --uninstall
26
#       -u or --uninstall
27
 
27
 
28
# Functions :
28
# Functions :
29
#	testing			: connectivity tests, free space test and mageia version test
29
#	testing			: connectivity tests, free space test and mageia version test
30
#	init			: Installation of RPM and scripts
30
#	init			: Installation of RPM and scripts
31
#	network			: Network parameters
31
#	network			: Network parameters
32
#	ACC			: ALCASAR Control Center installation
32
#	ACC			: ALCASAR Control Center installation
33
#	CA			: Certification Authority initialization
33
#	CA			: Certification Authority initialization
34
#	time_server		: NTPd configuration
34
#	time_server		: NTPd configuration
35
#	init_db			: Initilization of radius database managed with MariaDB
35
#	init_db			: Initilization of radius database managed with MariaDB
36
#	radius			: FreeRadius initialisation
36
#	radius			: FreeRadius initialisation
37
#	chilli			: coovachilli initialisation (+authentication page)
37
#	chilli			: coovachilli initialisation (+authentication page)
38
#	dansguardian		: DansGuardian filtering HTTP proxy configuration
38
#	dansguardian		: DansGuardian filtering HTTP proxy configuration
39
#	antivirus		: HAVP + libclamav configuration
39
#	antivirus		: HAVP + libclamav configuration
40
#	tinyproxy		: little proxy for user filtered with "WL + antivirus" and "antivirus"
40
#	tinyproxy		: little proxy for user filtered with "WL + antivirus" and "antivirus"
41
#	ulogd			: log system in userland (match NFLOG target of iptables)
41
#	ulogd			: log system in userland (match NFLOG target of iptables)
42
#	nfsen		:	: Configuration of Nfsen Netflow grapher 
42
#	nfsen		:	: Configuration of Nfsen Netflow grapher 
43
#	dnsmasq			: Name server configuration
43
#	dnsmasq			: Name server configuration
44
#	vnstat			: little network stat daemon
44
#	vnstat			: little network stat daemon
45
#	BL			: Adaptation of Toulouse University BlackList : split into 3 BL (for Dnsmasq, for dansguardian and for Netfilter)
45
#	BL			: Adaptation of Toulouse University BlackList : split into 3 BL (for Dnsmasq, for dansguardian and for Netfilter)
46
#	cron			: Logs export + watchdog + connexion statistics
46
#	cron			: Logs export + watchdog + connexion statistics
47
#	fail2ban		: Fail2ban IDS installation and configuration
47
#	fail2ban		: Fail2ban IDS installation and configuration
48
#	gammu_smsd		: Autoregister addon via SMS (gammu-smsd)
48
#	gammu_smsd		: Autoregister addon via SMS (gammu-smsd)
49
#	msec			: Mandriva security package configuration
49
#	msec			: Mandriva security package configuration
50
#	post_install		: Security, log rotation, etc.
50
#	post_install		: Security, log rotation, etc.
51
 
51
 
52
DATE=`date '+%d %B %Y - %Hh%M'`
52
DATE=`date '+%d %B %Y - %Hh%M'`
53
DATE_SHORT=`date '+%d/%m/%Y'`
53
DATE_SHORT=`date '+%d/%m/%Y'`
54
Lang=`echo $LANG|cut -c 1-2`
54
Lang=`echo $LANG|cut -c 1-2`
55
mode="install"
55
mode="install"
56
# ******* Files parameters - paramètres fichiers *********
56
# ******* Files parameters - paramètres fichiers *********
57
DIR_INSTALL=`pwd`				# current directory 
57
DIR_INSTALL=`pwd`				# current directory 
58
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
58
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
59
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
59
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
60
DIR_BLACKLIST="$DIR_INSTALL/blacklist"		# install directory (with blacklist files)
60
DIR_BLACKLIST="$DIR_INSTALL/blacklist"		# install directory (with blacklist files)
61
DIR_SAVE="/var/Save"				# backup directory (traceability_log, user_db, security_log)
61
DIR_SAVE="/var/Save"				# backup directory (traceability_log, user_db, security_log)
62
DIR_WEB="/var/www/html"				# directory of APACHE
62
DIR_WEB="/var/www/html"				# directory of APACHE
63
DIR_DG="/etc/dansguardian"			# directory of DansGuardian
63
DIR_DG="/etc/dansguardian"			# directory of DansGuardian
64
DIR_ACC="$DIR_WEB/acc"				# directory of the 'ALCASAR Control Center'
64
DIR_ACC="$DIR_WEB/acc"				# directory of the 'ALCASAR Control Center'
65
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
65
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
66
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
66
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
67
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (dnsmasq for instance)
67
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (dnsmasq for instance)
68
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"		# central ALCASAR conf file
68
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"		# central ALCASAR conf file
69
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
69
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
70
# ******* DBMS parameters - paramètres SGBD ********
70
# ******* DBMS parameters - paramètres SGBD ********
71
DB_RADIUS="radius"				# database name used by FreeRadius server
71
DB_RADIUS="radius"				# database name used by FreeRadius server
72
DB_USER="radius"				# user name allows to request the users database
72
DB_USER="radius"				# user name allows to request the users database
73
DB_GAMMU="gammu"				# database name used by Gammu-smsd
73
DB_GAMMU="gammu"				# database name used by Gammu-smsd
74
# ******* Network parameters - paramètres réseau *******
74
# ******* Network parameters - paramètres réseau *******
75
HOSTNAME="alcasar"				# default hostname
75
HOSTNAME="alcasar"				# default hostname
76
DOMAIN="localdomain"				# default local domain
76
DOMAIN="localdomain"				# default local domain
77
EXTIF=`/usr/sbin/ip route|grep default|head -n1|cut -d" " -f5`							# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
77
EXTIF=`/usr/sbin/ip route|grep default|head -n1|cut -d" " -f5`							# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
78
INTIF=`/usr/sbin/ip link|grep '^[[:digit:]]:'|grep -v "lo\|$EXTIF\|tun0"|head -n1|cut -d" " -f2|tr -d ":"`	# INTIF is connected to the consultation network
78
INTIF=`/usr/sbin/ip link|grep '^[[:digit:]]:'|grep -v "lo\|$EXTIF\|tun0"|head -n1|cut -d" " -f2|tr -d ":"`	# INTIF is connected to the consultation network
79
MTU="1500"
79
MTU="1500"
80
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
80
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
81
# ****** Paths - chemin des commandes *******
81
# ****** Paths - chemin des commandes *******
82
SED="/bin/sed -i"
82
SED="/bin/sed -i"
83
# ****************** End of global parameters *********************
83
# ****************** End of global parameters *********************
84
 
84
 
85
license ()
85
license ()
86
{
86
{
87
	if [ $Lang == "fr" ]
87
	if [ $Lang == "fr" ]
88
	then
88
	then
89
		cat $DIR_INSTALL/gpl-warning.fr.txt | more
89
		cat $DIR_INSTALL/gpl-warning.fr.txt | more
90
	else
90
	else
91
		cat $DIR_INSTALL/gpl-warning.txt | more
91
		cat $DIR_INSTALL/gpl-warning.txt | more
92
	fi
92
	fi
93
	response=0
93
	response=0
94
	PTN='^[oOyYnN]$'
94
	PTN='^[oOyYnN]$'
95
	until [[ $(expr $response : $PTN) -gt 0 ]]
95
	until [[ $(expr $response : $PTN) -gt 0 ]]
96
	do
96
	do
97
		if [ $Lang == "fr" ]
97
		if [ $Lang == "fr" ]
98
			then echo -n "Acceptez-vous les termes de cette licence (O/n)? : "
98
			then echo -n "Acceptez-vous les termes de cette licence (O/n)? : "
99
			else echo -n "Do you accept the terms of this license (Y/n)? : "
99
			else echo -n "Do you accept the terms of this license (Y/n)? : "
100
		fi
100
		fi
101
		read response
101
		read response
102
	done
102
	done
103
	if [ "$response" = "n" ] || [ "$response" = "N" ]
103
	if [ "$response" = "n" ] || [ "$response" = "N" ]
104
	then
104
	then
105
		exit 1
105
		exit 1
106
	fi
106
	fi
107
}
107
}
108
 
108
 
109
header_install ()
109
header_install ()
110
{
110
{
111
	clear
111
	clear
112
	echo "-----------------------------------------------------------------------------"
112
	echo "-----------------------------------------------------------------------------"
113
	echo "                     ALCASAR V$VERSION Installation"
113
	echo "                     ALCASAR V$VERSION Installation"
114
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
114
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
115
	echo "-----------------------------------------------------------------------------"
115
	echo "-----------------------------------------------------------------------------"
116
}
116
}
117
 
117
 
118
##################################################################
118
##################################################################
119
##			Function "testing"			##
119
##			Function "testing"			##
120
## - Test of Mageia version					##
120
## - Test of Mageia version					##
121
## - Test of ALCASAR version (if already installed)		##
121
## - Test of ALCASAR version (if already installed)		##
122
## - Test of free space on /var  (>10G)				##
122
## - Test of free space on /var  (>10G)				##
123
## - Test of Internet access					##
123
## - Test of Internet access					##
124
##################################################################
124
##################################################################
125
testing ()
125
testing ()
126
{
126
{
127
# Test of Mageia version
127
# Test of Mageia version
128
# extract the current Mageia version and hardware architecture (i586 ou X64)
128
# extract the current Mageia version and hardware architecture (i586 ou X64)
129
	fic=`cat /etc/product.id`
129
	fic=`cat /etc/product.id`
130
	unknown_os=0
130
	unknown_os=0
131
	old="$IFS"
131
	old="$IFS"
132
	IFS=","
132
	IFS=","
133
	set $fic
133
	set $fic
134
	for i in $*
134
	for i in $*
135
	do
135
	do
136
		if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
136
		if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
137
			then 
137
			then 
138
			DISTRIBUTION=`echo $i|cut -d"=" -f2`
138
			DISTRIBUTION=`echo $i|cut -d"=" -f2`
139
			unknown_os=`expr $unknown_os + 1`
139
			unknown_os=`expr $unknown_os + 1`
140
		fi
140
		fi
141
		if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
141
		if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
142
			then 
142
			then 
143
			CURRENT_VERSION=`echo $i|cut -d"=" -f2`
143
			CURRENT_VERSION=`echo $i|cut -d"=" -f2`
144
			unknown_os=`expr $unknown_os + 1`
144
			unknown_os=`expr $unknown_os + 1`
145
		fi
145
		fi
146
		if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
146
		if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
147
			then 
147
			then 
148
			ARCH=`echo $i|cut -d"=" -f2`
148
			ARCH=`echo $i|cut -d"=" -f2`
149
			unknown_os=`expr $unknown_os + 1`
149
			unknown_os=`expr $unknown_os + 1`
150
		fi
150
		fi
151
	done
151
	done
152
	if [ "$ARCH" == "i586" ]
152
	if [ "$ARCH" == "i586" ]
153
		then
153
		then
154
		if [ $Lang == "fr" ]
154
		if [ $Lang == "fr" ]
155
			then echo -n "Votre architecture matérielle doit être en 64bits"
155
			then echo -n "Votre architecture matérielle doit être en 64bits"
156
			else echo -n "You hardware architecture must be 64bits"
156
			else echo -n "You hardware architecture must be 64bits"
157
			exit 0
157
			exit 0
158
		fi
158
		fi
159
	fi
159
	fi
160
	IFS="$old"
160
	IFS="$old"
161
# Test if ALCASAR is already installed
161
# Test if ALCASAR is already installed
162
	if [ -e $CONF_FILE ]
162
	if [ -e $CONF_FILE ]
163
	then
163
	then
164
		current_version=`cat $CONF_FILE | grep VERSION | cut -d"=" -f2`
164
		current_version=`cat $CONF_FILE | grep VERSION | cut -d"=" -f2`
165
		if [ $Lang == "fr" ]
165
		if [ $Lang == "fr" ]
166
			then echo -n "La version "; echo -n $current_version ; echo " d'ALCASAR est déjà installée";
166
			then echo -n "La version "; echo -n $current_version ; echo " d'ALCASAR est déjà installée";
167
			else echo -n "ALCASAR Version "; echo -n $current_version ; echo " is already installed";
167
			else echo -n "ALCASAR Version "; echo -n $current_version ; echo " is already installed";
168
		fi
168
		fi
169
		response=0
169
		response=0
170
		PTN='^[oOnNyY]$'
170
		PTN='^[oOnNyY]$'
171
		until [[ $(expr $response : $PTN) -gt 0 ]]
171
		until [[ $(expr $response : $PTN) -gt 0 ]]
172
		do
172
		do
173
			if [ $Lang == "fr" ]
173
			if [ $Lang == "fr" ]
174
				then echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
174
				then echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
175
				else echo -n "Do you want to update (Y/n)?";
175
				else echo -n "Do you want to update (Y/n)?";
176
			 fi
176
			 fi
177
			read response
177
			read response
178
		done
178
		done
179
		if [ "$response" = "n" ] || [ "$response" = "N" ] 
179
		if [ "$response" = "n" ] || [ "$response" = "N" ] 
180
		then
180
		then
181
			rm -f /tmp/alcasar-conf*
181
			rm -f /tmp/alcasar-conf*
182
		else
182
		else
183
# Retrieve former NICname
183
# Retrieve former NICname
184
			EXTIF=`grep ^EXTIF= $CONF_FILE|cut -d"=" -f2`				# EXTernal InterFace
184
			EXTIF=`grep ^EXTIF= $CONF_FILE|cut -d"=" -f2`				# EXTernal InterFace
185
			INTIF=`grep ^INTIF= $CONF_FILE|cut -d"=" -f2`				# INTernal InterFace
185
			INTIF=`grep ^INTIF= $CONF_FILE|cut -d"=" -f2`				# INTernal InterFace
186
# Create the current conf file
186
# Create the current conf file
187
			$DIR_SCRIPTS/alcasar-conf.sh --create
187
			$DIR_SCRIPTS/alcasar-conf.sh --create
188
			mode="update"
188
			mode="update"
189
		fi
189
		fi
190
	fi
190
	fi
191
	if [[ ( $unknown_os != 3 ) || ("$DISTRIBUTION" != "Mageia" ) || ( "$CURRENT_VERSION" != "5" ) ]]
191
	if [[ ( $unknown_os != 3 ) || ("$DISTRIBUTION" != "Mageia" ) || ( "$CURRENT_VERSION" != "5" ) ]]
192
		then
192
		then
193
		if [ -e /tmp/alcasar-conf.tar.gz ] # update
193
		if [ -e /tmp/alcasar-conf.tar.gz ] # update
194
			then
194
			then
195
			echo
195
			echo
196
			if [ $Lang == "fr" ]
196
			if [ $Lang == "fr" ]
197
				then	
197
				then	
198
				echo "La mise à jour automatique d'ALCASAR ne peut pas être réalisée."
198
				echo "La mise à jour automatique d'ALCASAR ne peut pas être réalisée."
199
				echo "1 - Effectuez une sauvegarde des fichiers de traçabilité et de la base des usagers via l'ACC"
199
				echo "1 - Effectuez une sauvegarde des fichiers de traçabilité et de la base des usagers via l'ACC"
200
				echo "2 - Installez Linux-Mageia 5.1-64bits et ALCASAR (cf. doc d'installation)"
200
				echo "2 - Installez Linux-Mageia 5.1-64bits et ALCASAR (cf. doc d'installation)"
201
				echo "3 - Importez votre base des usagers"
201
				echo "3 - Importez votre base des usagers"
202
			else
202
			else
203
				echo "The automatic update of ALCASAR can't be performed."
203
				echo "The automatic update of ALCASAR can't be performed."
204
				echo "1 - Save your traceability files and the user database"
204
				echo "1 - Save your traceability files and the user database"
205
				echo "2 - Install Linux-Mageia 5.1-64bits & ALCASAR (cf. installation doc)"
205
				echo "2 - Install Linux-Mageia 5.1-64bits & ALCASAR (cf. installation doc)"
206
				echo "3 - Import your users database"
206
				echo "3 - Import your users database"
207
			fi
207
			fi
208
		else
208
		else
209
			if [ $Lang == "fr" ]
209
			if [ $Lang == "fr" ]
210
				then	
210
				then	
211
				echo "L'installation d'ALCASAR ne peut pas être réalisée."
211
				echo "L'installation d'ALCASAR ne peut pas être réalisée."
212
			else
212
			else
213
				echo "The installation of ALCASAR can't be performed."
213
				echo "The installation of ALCASAR can't be performed."
214
			fi
214
			fi
215
		fi
215
		fi
216
		echo
216
		echo
217
		if [ $Lang == "fr" ]
217
		if [ $Lang == "fr" ]
218
			then	
218
			then	
219
			echo "Le système d'exploitation doit être remplacé (Mageia5.1-64bits)"
219
			echo "Le système d'exploitation doit être remplacé (Mageia5.1-64bits)"
220
		else
220
		else
221
			echo "The OS must be replaced (Mageia5.1-64bits)"
221
			echo "The OS must be replaced (Mageia5.1-64bits)"
222
		fi
222
		fi
223
		exit 0
223
		exit 0
224
	fi
224
	fi
225
	if [ ! -d /var/log/netflow/porttracker ]
225
	if [ ! -d /var/log/netflow/porttracker ]
226
		then
226
		then
227
# Test of free space on /var
227
# Test of free space on /var
228
		free_space=`df -BG --output=avail /var|tail -1|tr -d [:space:]G`
228
		free_space=`df -BG --output=avail /var|tail -1|tr -d [:space:]G`
229
		if [ $free_space -lt 10 ]
229
		if [ $free_space -lt 10 ]
230
			then
230
			then
231
			if [ $Lang == "fr" ]
231
			if [ $Lang == "fr" ]
232
				then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
232
				then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
233
				else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
233
				else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
234
			fi
234
			fi
235
		exit 0
235
		exit 0
236
		fi
236
		fi
237
	fi
237
	fi
238
	if [ $Lang == "fr" ]
238
	if [ $Lang == "fr" ]
239
		then echo -n "Tests des paramètres réseau : "
239
		then echo -n "Tests des paramètres réseau : "
240
		else echo -n "Network parameters tests : "
240
		else echo -n "Network parameters tests : "
241
	fi
241
	fi
242
# Test of Ethernet links state
242
# Test of Ethernet links state
243
	DOWN_IF=`/usr/sbin/ip link|grep "NO-CARRIER"|cut -d":" -f2|tr -d " "`
243
	DOWN_IF=`/usr/sbin/ip link|grep "NO-CARRIER"|cut -d":" -f2|tr -d " "`
244
	for i in $DOWN_IF
244
	for i in $DOWN_IF
245
	do
245
	do
246
		if [ $Lang == "fr" ]
246
		if [ $Lang == "fr" ]
247
		then 
247
		then 
248
			echo "Échec"
248
			echo "Échec"
249
			echo "Le lien réseau de la carte $i n'est pas actif."
249
			echo "Le lien réseau de la carte $i n'est pas actif."
250
			echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
250
			echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
251
		else
251
		else
252
			echo "Failed"
252
			echo "Failed"
253
			echo "The link state of $i interface is down."
253
			echo "The link state of $i interface is down."
254
			echo "Make sure that this network card is connected to a switch or an A.P."
254
			echo "Make sure that this network card is connected to a switch or an A.P."
255
		fi
255
		fi
256
		exit 0
256
		exit 0
257
	done
257
	done
258
	echo -n "."
258
	echo -n "."
259
 
259
 
260
# Test EXTIF config files
260
# Test EXTIF config files
261
	PUBLIC_IP_MASK=`ip addr show $EXTIF|grep "inet "|cut -d" " -f6`
261
	PUBLIC_IP_MASK=`ip addr show $EXTIF|grep "inet "|cut -d" " -f6`
262
	PUBLIC_IP=`echo $PUBLIC_IP_MASK | cut -d"/" -f1`
262
	PUBLIC_IP=`echo $PUBLIC_IP_MASK | cut -d"/" -f1`
263
	PUBLIC_GATEWAY=`ip route list|grep $EXTIF|grep ^default|cut -d" " -f3`
263
	PUBLIC_GATEWAY=`ip route list|grep $EXTIF|grep ^default|cut -d" " -f3`
264
	if [ `echo $PUBLIC_IP|wc -c` -lt 7 ] || [ `echo $PUBLIC_GATEWAY|wc -c` -lt 7 ]
264
	if [ `echo $PUBLIC_IP|wc -c` -lt 7 ] || [ `echo $PUBLIC_GATEWAY|wc -c` -lt 7 ]
265
	then
265
	then
266
		if [ $Lang == "fr" ]
266
		if [ $Lang == "fr" ]
267
		then 
267
		then 
268
			echo "Échec"
268
			echo "Échec"
269
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
269
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
270
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
270
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
271
			echo "Appliquez les changements : 'systemctl restart network'"
271
			echo "Appliquez les changements : 'systemctl restart network'"
272
		else
272
		else
273
			echo "Failed"
273
			echo "Failed"
274
			echo "The Internet connected network card ($EXTIF) isn't well configured."
274
			echo "The Internet connected network card ($EXTIF) isn't well configured."
275
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
275
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
276
			echo "Apply the new configuration 'systemctl restart network'"
276
			echo "Apply the new configuration 'systemctl restart network'"
277
		fi
277
		fi
278
		echo "DEVICE=$EXTIF"
278
		echo "DEVICE=$EXTIF"
279
		echo "IPADDR="
279
		echo "IPADDR="
280
		echo "NETMASK="
280
		echo "NETMASK="
281
		echo "GATEWAY="
281
		echo "GATEWAY="
282
		echo "DNS1="
282
		echo "DNS1="
283
		echo "DNS2="
283
		echo "DNS2="
284
		echo "ONBOOT=yes"
284
		echo "ONBOOT=yes"
285
		exit 0
285
		exit 0
286
	fi
286
	fi
287
	echo -n "."
287
	echo -n "."
288
 
288
 
289
# Test if router is alive (Box FAI)
289
# Test if router is alive (Box FAI)
290
	if [ `ip route list|grep $EXTIF|grep -c ^default` -ne "1" ] ; then
290
	if [ `ip route list|grep $EXTIF|grep -c ^default` -ne "1" ] ; then
291
		if [ $Lang == "fr" ]
291
		if [ $Lang == "fr" ]
292
		then 
292
		then 
293
			echo "Échec"
293
			echo "Échec"
294
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
294
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
295
			echo "Réglez ce problème puis relancez ce script."
295
			echo "Réglez ce problème puis relancez ce script."
296
		else
296
		else
297
			echo "Failed"
297
			echo "Failed"
298
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
298
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
299
			echo "Resolv this problem, then restart this script."
299
			echo "Resolv this problem, then restart this script."
300
		fi
300
		fi
301
		exit 0
301
		exit 0
302
	fi
302
	fi
303
	echo -n "."
303
	echo -n "."
304
# On teste le lien vers le routeur par defaut
304
# On teste le lien vers le routeur par defaut
305
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $PUBLIC_GATEWAY|grep response|cut -d" " -f2`
305
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $PUBLIC_GATEWAY|grep response|cut -d" " -f2`
306
	if [ $(expr $arp_reply) -eq 0 ]
306
	if [ $(expr $arp_reply) -eq 0 ]
307
	       	then
307
	       	then
308
		if [ $Lang == "fr" ]
308
		if [ $Lang == "fr" ]
309
		then 
309
		then 
310
			echo "Échec"
310
			echo "Échec"
311
			echo "Le routeur de site ou la Box Internet ($PUBLIC_GATEWAY) ne répond pas."
311
			echo "Le routeur de site ou la Box Internet ($PUBLIC_GATEWAY) ne répond pas."
312
			echo "Réglez ce problème puis relancez ce script."
312
			echo "Réglez ce problème puis relancez ce script."
313
		else
313
		else
314
			echo "Failed"
314
			echo "Failed"
315
			echo "The Internet gateway doesn't answered"
315
			echo "The Internet gateway doesn't answered"
316
			echo "Resolv this problem, then restart this script."
316
			echo "Resolv this problem, then restart this script."
317
		fi
317
		fi
318
		exit 0
318
		exit 0
319
	fi
319
	fi
320
	echo -n "."
320
	echo -n "."
321
# On teste la connectivité Internet
321
# On teste la connectivité Internet
322
	rm -rf /tmp/con_ok.html
322
	rm -rf /tmp/con_ok.html
323
	/usr/bin/curl www.google.fr -s -o /tmp/con_ok.html
323
	/usr/bin/curl www.google.fr -s -o /tmp/con_ok.html
324
	if [ ! -e /tmp/con_ok.html ]
324
	if [ ! -e /tmp/con_ok.html ]
325
	then
325
	then
326
		if [ $Lang == "fr" ]
326
		if [ $Lang == "fr" ]
327
		then 
327
		then 
328
			echo "La tentative de connexion vers Internet a échoué (google.fr)."
328
			echo "La tentative de connexion vers Internet a échoué (google.fr)."
329
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
329
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
330
			echo "Vérifiez la validité des adresses IP des DNS."
330
			echo "Vérifiez la validité des adresses IP des DNS."
331
		else
331
		else
332
			echo "The Internet connection try failed (google.fr)."
332
			echo "The Internet connection try failed (google.fr)."
333
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
333
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
334
			echo "Verify the DNS IP addresses"
334
			echo "Verify the DNS IP addresses"
335
		fi
335
		fi
336
		exit 0
336
		exit 0
337
	fi
337
	fi
338
	rm -rf /tmp/con_ok.html
338
	rm -rf /tmp/con_ok.html
339
	echo ". : ok"
339
	echo ". : ok"
340
} # end of testing ()
340
} # end of testing ()
341
 
341
 
342
##################################################################
342
##################################################################
343
##			Function "init"				##
343
##			Function "init"				##
344
## - Création du fichier "/root/ALCASAR_parametres.txt"		##
344
## - Création du fichier "/root/ALCASAR_parametres.txt"		##
345
## - Installation et modification des scripts du portail	##
345
## - Installation et modification des scripts du portail	##
346
##################################################################
346
##################################################################
347
init ()
347
init ()
348
{
348
{
349
	if [ "$mode" != "update" ]
349
	if [ "$mode" != "update" ]
350
	then
350
	then
351
# On affecte le nom d'organisme
351
# On affecte le nom d'organisme
352
		header_install
352
		header_install
353
		ORGANISME=!
353
		ORGANISME=!
354
		PTN='^[a-zA-Z0-9-]*$'
354
		PTN='^[a-zA-Z0-9-]*$'
355
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
355
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
356
                do
356
                do
357
			if [ $Lang == "fr" ]
357
			if [ $Lang == "fr" ]
358
			       	then echo -n "Entrez le nom de votre organisme : "
358
			       	then echo -n "Entrez le nom de votre organisme : "
359
				else echo -n "Enter the name of your organism : "
359
				else echo -n "Enter the name of your organism : "
360
			fi
360
			fi
361
			read ORGANISME
361
			read ORGANISME
362
			if [ "$ORGANISME" == "" ]
362
			if [ "$ORGANISME" == "" ]
363
				then
363
				then
364
				ORGANISME=!
364
				ORGANISME=!
365
			fi
365
			fi
366
		done
366
		done
367
	fi
367
	fi
368
# On crée aléatoirement les mots de passe et les secrets partagés
368
# On crée aléatoirement les mots de passe et les secrets partagés
369
	rm -f $PASSWD_FILE
369
	rm -f $PASSWD_FILE
370
	grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
370
	grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
371
	echo -n "Password to protect the GRUB boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
371
	echo -n "Password to protect the GRUB boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
372
	echo "$grubpwd" >> $PASSWD_FILE
372
	echo "$grubpwd" >> $PASSWD_FILE
373
	md5_grubpwd=`/usr/bin/openssl passwd -1 $grubpwd`
373
	md5_grubpwd=`/usr/bin/openssl passwd -1 $grubpwd`
374
	$SED "/^password.*/d" /boot/grub/menu.lst
374
	$SED "/^password.*/d" /boot/grub/menu.lst
375
	$SED "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
375
	$SED "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
376
	mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
376
	mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
377
	echo -n "Name and password of Mysql/mariadb administrator : " >> $PASSWD_FILE
377
	echo -n "Name and password of Mysql/mariadb administrator : " >> $PASSWD_FILE
378
	echo "root / $mysqlpwd" >> $PASSWD_FILE
378
	echo "root / $mysqlpwd" >> $PASSWD_FILE
379
	radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
379
	radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
380
	echo -n "Name and password of Mysql/mariadb user : " >> $PASSWD_FILE
380
	echo -n "Name and password of Mysql/mariadb user : " >> $PASSWD_FILE
381
	echo "$DB_USER / $radiuspwd" >> $PASSWD_FILE
381
	echo "$DB_USER / $radiuspwd" >> $PASSWD_FILE
382
	secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
382
	secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
383
	echo -n "Shared secret between the script 'intercept.php' and coova-chilli : " >> $PASSWD_FILE
383
	echo -n "Shared secret between the script 'intercept.php' and coova-chilli : " >> $PASSWD_FILE
384
	echo "$secretuam" >> $PASSWD_FILE
384
	echo "$secretuam" >> $PASSWD_FILE
385
	secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
385
	secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
386
	echo -n "Shared secret between coova-chilli and FreeRadius : " >> $PASSWD_FILE
386
	echo -n "Shared secret between coova-chilli and FreeRadius : " >> $PASSWD_FILE
387
	echo "$secretradius" >> $PASSWD_FILE
387
	echo "$secretradius" >> $PASSWD_FILE
388
	chmod 640 $PASSWD_FILE
388
	chmod 640 $PASSWD_FILE
389
#  copy scripts in in /usr/local/bin
389
#  copy scripts in in /usr/local/bin
390
	cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
390
	cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
391
#  copy conf files in /usr/local/etc
391
#  copy conf files in /usr/local/etc
392
	cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown -R root:apache $DIR_DEST_ETC ; chmod 770 $DIR_DEST_ETC ; chmod 660 $DIR_DEST_ETC/alcasar*
392
	cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown -R root:apache $DIR_DEST_ETC ; chmod 770 $DIR_DEST_ETC ; chmod 660 $DIR_DEST_ETC/alcasar*
393
	$SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_BIN/alcasar-logout.sh
393
	$SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_BIN/alcasar-logout.sh
394
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_BIN/alcasar-mysql.sh
394
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_BIN/alcasar-mysql.sh
395
	$SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_BIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
395
	$SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_BIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
396
	$SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_BIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
396
	$SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_BIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
397
# generate central conf file
397
# generate central conf file
398
	cat <<EOF > $CONF_FILE
398
	cat <<EOF > $CONF_FILE
399
##########################################
399
##########################################
400
##                                      ##
400
##                                      ##
401
##          ALCASAR Parameters          ##
401
##          ALCASAR Parameters          ##
402
##                                      ##
402
##                                      ##
403
##########################################
403
##########################################
404
 
404
 
405
INSTALL_DATE=$DATE
405
INSTALL_DATE=$DATE
406
VERSION=$VERSION
406
VERSION=$VERSION
407
ORGANISM=$ORGANISME
407
ORGANISM=$ORGANISME
408
HOSTNAME=$HOSTNAME
408
HOSTNAME=$HOSTNAME
409
DOMAIN=$DOMAIN
409
DOMAIN=$DOMAIN
410
EOF
410
EOF
411
	chmod o-rwx $CONF_FILE
411
	chmod o-rwx $CONF_FILE
412
} # End of init ()
412
} # End of init ()
413
 
413
 
414
##################################################################
414
##################################################################
415
##			Function "network"			##
415
##			Function "network"			##
416
## - Définition du plan d'adressage du réseau de consultation	##
416
## - Définition du plan d'adressage du réseau de consultation	##
417
## - Nommage DNS du système 					##
417
## - Nommage DNS du système 					##
418
## - Configuration de l'interface INTIF (réseau de consultation)##
418
## - Configuration de l'interface INTIF (réseau de consultation)##
419
## - Modification du fichier /etc/hosts				##
419
## - Modification du fichier /etc/hosts				##
420
## - Renseignement des fichiers hosts.allow et hosts.deny	##
420
## - Renseignement des fichiers hosts.allow et hosts.deny	##
421
##################################################################
421
##################################################################
422
network ()
422
network ()
423
{
423
{
424
	header_install
424
	header_install
425
	if [ "$mode" != "update" ]
425
	if [ "$mode" != "update" ]
426
		then
426
		then
427
		if [ $Lang == "fr" ]
427
		if [ $Lang == "fr" ]
428
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
428
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
429
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
429
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
430
		fi
430
		fi
431
		response=0
431
		response=0
432
		PTN='^[oOyYnN]$'
432
		PTN='^[oOyYnN]$'
433
		until [[ $(expr $response : $PTN) -gt 0 ]]
433
		until [[ $(expr $response : $PTN) -gt 0 ]]
434
		do
434
		do
435
			if [ $Lang == "fr" ]
435
			if [ $Lang == "fr" ]
436
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
436
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
437
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
437
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
438
			fi
438
			fi
439
			read response
439
			read response
440
		done
440
		done
441
		if [ "$response" = "n" ] || [ "$response" = "N" ]
441
		if [ "$response" = "n" ] || [ "$response" = "N" ]
442
		then
442
		then
443
			PRIVATE_IP_MASK="0"
443
			PRIVATE_IP_MASK="0"
444
			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:]]$'
444
			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:]]$'
445
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
445
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
446
			do
446
			do
447
				if [ $Lang == "fr" ]
447
				if [ $Lang == "fr" ]
448
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
448
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
449
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
449
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
450
				fi
450
				fi
451
				read PRIVATE_IP_MASK
451
				read PRIVATE_IP_MASK
452
			done
452
			done
453
		else
453
		else
454
       			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
454
       			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
455
		fi
455
		fi
456
	else
456
	else
457
		PRIVATE_IP_MASK=`grep PRIVATE_IP conf/etc/alcasar.conf|cut -d"=" -f2` 
457
		PRIVATE_IP_MASK=`grep PRIVATE_IP conf/etc/alcasar.conf|cut -d"=" -f2` 
458
		rm -rf conf/etc/alcasar.conf
458
		rm -rf conf/etc/alcasar.conf
459
	fi
459
	fi
460
# Define LAN side global parameters
460
# Define LAN side global parameters
461
	hostnamectl set-hostname $HOSTNAME.$DOMAIN
461
	hostnamectl set-hostname $HOSTNAME.$DOMAIN
462
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
462
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
463
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f4`					# last octet of LAN address
463
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f4`					# last octet of LAN address
464
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
464
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
465
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
465
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
466
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
466
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
467
	if [ $PRIVATE_IP == $PRIVATE_NETWORK ]								# when entering network address instead of ip address
467
	if [ $PRIVATE_IP == $PRIVATE_NETWORK ]								# when entering network address instead of ip address
468
		then
468
		then
469
		PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`	
469
		PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`	
470
		PRIVATE_IP_MASK=`echo $PRIVATE_IP/$PRIVATE_PREFIX`
470
		PRIVATE_IP_MASK=`echo $PRIVATE_IP/$PRIVATE_PREFIX`
471
	fi	
471
	fi	
472
	private_ip_ending=`echo $PRIVATE_IP | cut -d"." -f4`						# last octet of LAN address
472
	private_ip_ending=`echo $PRIVATE_IP | cut -d"." -f4`						# last octet of LAN address
473
	PRIVATE_SECOND_IP=`echo $PRIVATE_IP | cut -d"." -f1-3`"."`expr $private_ip_ending + 1`		# second network address (ex.: 192.168.182.2)
473
	PRIVATE_SECOND_IP=`echo $PRIVATE_IP | cut -d"." -f1-3`"."`expr $private_ip_ending + 1`		# second network address (ex.: 192.168.182.2)
474
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
474
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
475
	classe=$((PRIVATE_PREFIX/8))									# ie.: 2=classe B, 3=classe C
475
	classe=$((PRIVATE_PREFIX/8))									# ie.: 2=classe B, 3=classe C
476
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
476
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
477
	PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`			# private network broadcast (ie.: 192.168.182.255)
477
	PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`			# private network broadcast (ie.: 192.168.182.255)
478
	private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f4`				# last octet of LAN broadcast
478
	private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f4`				# last octet of LAN broadcast
479
	PRIVATE_FIRST_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`	# First network address (ex.: 192.168.182.1)
479
	PRIVATE_FIRST_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`	# First network address (ex.: 192.168.182.1)
480
	PRIVATE_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_ending - 1`	# last network address (ex.: 192.168.182.254)
480
	PRIVATE_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_ending - 1`	# last network address (ex.: 192.168.182.254)
481
	PRIVATE_MAC=`/usr/sbin/ip link show $INTIF | grep ether | cut -d" " -f6| sed 's/:/-/g'| awk '{print toupper($0)}'` 	# MAC address of INTIF
481
	PRIVATE_MAC=`/usr/sbin/ip link show $INTIF | grep ether | cut -d" " -f6| sed 's/:/-/g'| awk '{print toupper($0)}'` 	# MAC address of INTIF
482
# Define Internet parameters
482
# Define Internet parameters
483
	DNS1=`grep ^nameserver /etc/resolv.conf|awk -F" " '{print $2}'|head -n 1`				# 1st DNS server
483
	DNS1=`grep ^nameserver /etc/resolv.conf|awk -F" " '{print $2}'|head -n 1`				# 1st DNS server
484
	nb_dns=`grep ^nameserver /etc/resolv.conf|wc -l`
484
	nb_dns=`grep ^nameserver /etc/resolv.conf|wc -l`
485
	if [ $nb_dns == 2 ]
485
	if [ $nb_dns == 2 ]
486
		then
486
		then
487
		DNS2=`grep ^nameserver /etc/resolv.conf|cut -d" " -f2|tail -n 1`			# 2nd DNS server (if exist)
487
		DNS2=`grep ^nameserver /etc/resolv.conf|cut -d" " -f2|tail -n 1`			# 2nd DNS server (if exist)
488
	fi
488
	fi
489
	DNS1=${DNS1:=208.67.220.220}
489
	DNS1=${DNS1:=208.67.220.220}
490
	DNS2=${DNS2:=208.67.222.222}
490
	DNS2=${DNS2:=208.67.222.222}
491
	PUBLIC_NETMASK=`/bin/ipcalc -m $PUBLIC_IP_MASK | cut -d"=" -f2`
491
	PUBLIC_NETMASK=`/bin/ipcalc -m $PUBLIC_IP_MASK | cut -d"=" -f2`
492
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
492
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
493
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
493
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
494
# Wrtie the conf file
494
# Wrtie the conf file
495
	echo "EXTIF=$EXTIF" >> $CONF_FILE
495
	echo "EXTIF=$EXTIF" >> $CONF_FILE
496
	echo "INTIF=$INTIF" >> $CONF_FILE
496
	echo "INTIF=$INTIF" >> $CONF_FILE
497
	IP_SETTING=`grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`		# IP setting (static or dynamic)
497
	IP_SETTING=`grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`		# IP setting (static or dynamic)
498
	if [ $IP_SETTING == "dhcp" ]
498
	if [ $IP_SETTING == "dhcp" ]
499
		then
499
		then
500
		echo "PUBLIC_IP=dhcp" >> $CONF_FILE
500
		echo "PUBLIC_IP=dhcp" >> $CONF_FILE
501
		echo "GW=dhcp" >> $CONF_FILE
501
		echo "GW=dhcp" >> $CONF_FILE
502
	else
502
	else
503
		echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
503
		echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
504
		echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE
504
		echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE
505
	fi
505
	fi
506
	echo "DNS1=$DNS1" >> $CONF_FILE
506
	echo "DNS1=$DNS1" >> $CONF_FILE
507
	echo "DNS2=$DNS2" >> $CONF_FILE
507
	echo "DNS2=$DNS2" >> $CONF_FILE
508
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
508
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
509
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
509
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
510
	echo "DHCP=on" >> $CONF_FILE
510
	echo "DHCP=on" >> $CONF_FILE
511
	echo "EXT_DHCP_IP=none" >> $CONF_FILE
511
	echo "EXT_DHCP_IP=none" >> $CONF_FILE
512
	echo "RELAY_DHCP_IP=none" >> $CONF_FILE
512
	echo "RELAY_DHCP_IP=none" >> $CONF_FILE
513
	echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
513
	echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
514
	echo "INT_DNS_DOMAIN=none" >> $CONF_FILE
514
	echo "INT_DNS_DOMAIN=none" >> $CONF_FILE
515
	echo "INT_DNS_IP=none" >> $CONF_FILE
515
	echo "INT_DNS_IP=none" >> $CONF_FILE
516
	echo "INT_DNS_ACTIVE=off" >> $CONF_FILE
516
	echo "INT_DNS_ACTIVE=off" >> $CONF_FILE
517
# network default
517
# network default
518
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
518
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
519
	cat <<EOF > /etc/sysconfig/network
519
	cat <<EOF > /etc/sysconfig/network
520
NETWORKING=yes
520
NETWORKING=yes
521
FORWARD_IPV4=true
521
FORWARD_IPV4=true
522
EOF
522
EOF
523
# /etc/hosts config
523
# /etc/hosts config
524
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
524
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
525
	cat <<EOF > /etc/hosts
525
	cat <<EOF > /etc/hosts
526
127.0.0.1	localhost
526
127.0.0.1	localhost
527
$PRIVATE_IP	$HOSTNAME.$DOMAIN $HOSTNAME
527
$PRIVATE_IP	$HOSTNAME.$DOMAIN $HOSTNAME
528
EOF
528
EOF
529
# EXTIF (Internet) config
529
# EXTIF (Internet) config
530
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
530
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
531
	if [ $IP_SETTING == "dhcp" ]
531
	if [ $IP_SETTING == "dhcp" ]
532
		then
532
		then
533
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
533
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
534
DEVICE=$EXTIF
534
DEVICE=$EXTIF
535
BOOTPROTO=dhcp
535
BOOTPROTO=dhcp
536
DNS1=127.0.0.1
536
DNS1=127.0.0.1
537
PEERDNS=no
537
PEERDNS=no
538
RESOLV_MODS=yes
538
RESOLV_MODS=yes
539
ONBOOT=yes
539
ONBOOT=yes
540
NOZEROCONF=yes
540
NOZEROCONF=yes
541
METRIC=10
541
METRIC=10
542
MII_NOT_SUPPORTED=yes
542
MII_NOT_SUPPORTED=yes
543
IPV6INIT=no
543
IPV6INIT=no
544
IPV6TO4INIT=no
544
IPV6TO4INIT=no
545
ACCOUNTING=no
545
ACCOUNTING=no
546
USERCTL=no
546
USERCTL=no
547
MTU=$MTU
547
MTU=$MTU
548
EOF
548
EOF
549
		else	
549
		else	
550
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
550
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
551
DEVICE=$EXTIF
551
DEVICE=$EXTIF
552
BOOTPROTO=static
552
BOOTPROTO=static
553
IPADDR=$PUBLIC_IP
553
IPADDR=$PUBLIC_IP
554
NETMASK=$PUBLIC_NETMASK
554
NETMASK=$PUBLIC_NETMASK
555
GATEWAY=$PUBLIC_GATEWAY
555
GATEWAY=$PUBLIC_GATEWAY
556
DNS1=127.0.0.1
556
DNS1=127.0.0.1
557
RESOLV_MODS=yes
557
RESOLV_MODS=yes
558
ONBOOT=yes
558
ONBOOT=yes
559
METRIC=10
559
METRIC=10
560
NOZEROCONF=yes
560
NOZEROCONF=yes
561
MII_NOT_SUPPORTED=yes
561
MII_NOT_SUPPORTED=yes
562
IPV6INIT=no
562
IPV6INIT=no
563
IPV6TO4INIT=no
563
IPV6TO4INIT=no
564
ACCOUNTING=no
564
ACCOUNTING=no
565
USERCTL=no
565
USERCTL=no
566
MTU=$MTU
566
MTU=$MTU
567
EOF
567
EOF
568
	fi
568
	fi
569
# Config INTIF (consultation LAN) in normal mode
569
# Config INTIF (consultation LAN) in normal mode
570
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
570
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
571
DEVICE=$INTIF
571
DEVICE=$INTIF
572
BOOTPROTO=static
572
BOOTPROTO=static
573
ONBOOT=yes
573
ONBOOT=yes
574
NOZEROCONF=yes
574
NOZEROCONF=yes
575
MII_NOT_SUPPORTED=yes
575
MII_NOT_SUPPORTED=yes
576
IPV6INIT=no
576
IPV6INIT=no
577
IPV6TO4INIT=no
577
IPV6TO4INIT=no
578
ACCOUNTING=no
578
ACCOUNTING=no
579
USERCTL=no
579
USERCTL=no
580
EOF
580
EOF
581
	cp -f /etc/sysconfig/network-scripts/ifcfg-$INTIF /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
581
	cp -f /etc/sysconfig/network-scripts/ifcfg-$INTIF /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
582
# Config of INTIF in bypass mode (see "alcasar-bypass.sh")
582
# Config of INTIF in bypass mode (see "alcasar-bypass.sh")
583
	cat <<EOF > /etc/sysconfig/network-scripts/bypass-ifcfg-$INTIF
583
	cat <<EOF > /etc/sysconfig/network-scripts/bypass-ifcfg-$INTIF
584
DEVICE=$INTIF
584
DEVICE=$INTIF
585
BOOTPROTO=static
585
BOOTPROTO=static
586
IPADDR=$PRIVATE_IP
586
IPADDR=$PRIVATE_IP
587
NETMASK=$PRIVATE_NETMASK
587
NETMASK=$PRIVATE_NETMASK
588
ONBOOT=yes
588
ONBOOT=yes
589
METRIC=10
589
METRIC=10
590
NOZEROCONF=yes
590
NOZEROCONF=yes
591
MII_NOT_SUPPORTED=yes
591
MII_NOT_SUPPORTED=yes
592
IPV6INIT=no
592
IPV6INIT=no
593
IPV6TO4INIT=no
593
IPV6TO4INIT=no
594
ACCOUNTING=no
594
ACCOUNTING=no
595
USERCTL=no
595
USERCTL=no
596
EOF
596
EOF
597
# Renseignement des fichiers hosts.allow et hosts.deny
597
# Renseignement des fichiers hosts.allow et hosts.deny
598
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
598
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
599
	cat <<EOF > /etc/hosts.allow
599
	cat <<EOF > /etc/hosts.allow
600
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
600
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
601
sshd: ALL
601
sshd: ALL
602
ntpd: $PRIVATE_NETWORK_SHORT
602
ntpd: $PRIVATE_NETWORK_SHORT
603
EOF
603
EOF
604
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
604
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
605
	cat <<EOF > /etc/hosts.deny
605
	cat <<EOF > /etc/hosts.deny
606
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
606
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
607
EOF
607
EOF
608
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
608
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
609
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
609
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
610
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
610
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
611
# load conntrack ftp module
611
# load conntrack ftp module
612
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
612
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
613
	echo "nf_conntrack_ftp" >>  /etc/modprobe.preload
613
	echo "nf_conntrack_ftp" >>  /etc/modprobe.preload
614
# load ipt_NETFLOW module
614
# load ipt_NETFLOW module
615
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
615
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
616
# modify iptables service files (start with "alcasar-iptables.sh" and stop with flush)
616
# modify iptables service files (start with "alcasar-iptables.sh" and stop with flush)
617
[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
617
[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
618
$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
618
$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
619
[ -e /usr/libexec/iptables.init.default ] || cp /usr/libexec/iptables.init /usr/libexec/iptables.init.default
619
[ -e /usr/libexec/iptables.init.default ] || cp /usr/libexec/iptables.init /usr/libexec/iptables.init.default
620
$SED "s?\[ -f \$IPTABLES_CONFIG \] .*?#&?" /usr/libexec/iptables.init # comment the test (flush all rules & policies)
620
$SED "s?\[ -f \$IPTABLES_CONFIG \] .*?#&?" /usr/libexec/iptables.init # comment the test (flush all rules & policies)
621
# 
621
# 
622
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
622
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
623
} # End of network ()
623
} # End of network ()
624
 
624
 
625
##################################################################
625
##################################################################
626
##			Function "ACC"				##
626
##			Function "ACC"				##
627
## - installation of then ALCASAR Control Center (ACC)	)	##
627
## - installation of then ALCASAR Control Center (ACC)	)	##
628
## - configuration of the web server (Apache)			##
628
## - configuration of the web server (Apache)			##
629
## - creation of the first ACC admin account 			##
629
## - creation of the first ACC admin account 			##
630
## - secure the access						##
630
## - secure the access						##
631
##################################################################
631
##################################################################
632
ACC ()
632
ACC ()
633
{
633
{
634
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
634
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
635
	mkdir $DIR_WEB
635
	mkdir $DIR_WEB
636
# Copy & adapt ACC files
636
# Copy & adapt ACC files
637
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
637
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
638
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
638
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
639
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
639
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
640
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
640
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
641
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
641
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
642
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
642
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
643
	chown -R apache:apache $DIR_WEB/*
643
	chown -R apache:apache $DIR_WEB/*
644
# copy & adapt "freeradius-web" files
644
# copy & adapt "freeradius-web" files
645
	cp -rf $DIR_CONF/freeradius-web/ /etc/
645
	cp -rf $DIR_CONF/freeradius-web/ /etc/
646
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
646
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
647
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
647
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
648
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
648
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
649
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
649
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
650
	cat <<EOF > /etc/freeradius-web/naslist.conf
650
	cat <<EOF > /etc/freeradius-web/naslist.conf
651
nas1_name: alcasar-$ORGANISME
651
nas1_name: alcasar-$ORGANISME
652
nas1_model: Network Access Controler
652
nas1_model: Network Access Controler
653
nas1_ip: $PRIVATE_IP
653
nas1_ip: $PRIVATE_IP
654
nas1_port_num: 0
654
nas1_port_num: 0
655
nas1_community: public
655
nas1_community: public
656
EOF
656
EOF
657
	chown -R apache:apache /etc/freeradius-web/
657
	chown -R apache:apache /etc/freeradius-web/
658
# create the log & backup structure :
658
# create the log & backup structure :
659
# - base = users database
659
# - base = users database
660
# - archive = tarball of "base + http firewall + netflow"
660
# - archive = tarball of "base + http firewall + netflow"
661
# - security = watchdog log
661
# - security = watchdog log
662
	for i in base archive security activity_report;
662
	for i in base archive security activity_report;
663
	do
663
	do
664
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
664
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
665
	done
665
	done
666
	chown -R root:apache $DIR_SAVE
666
	chown -R root:apache $DIR_SAVE
667
# Configuring & securing php
667
# Configuring & securing php
668
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
668
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
669
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
669
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
670
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
670
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
671
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
671
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
672
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
672
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
673
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
673
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
674
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
674
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
675
# Configuring & sécuring Apache
675
# Configuring & sécuring Apache
676
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
676
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
677
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
677
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
678
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
678
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
679
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
679
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
680
	$SED "s?Options Indexes.*?Options -Indexes?g" /etc/httpd/conf/httpd.conf
680
	$SED "s?Options Indexes.*?Options -Indexes?g" /etc/httpd/conf/httpd.conf
681
	echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
681
	echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
682
	echo "ServerSignature Off" >> /etc/httpd/conf/httpd.conf
682
	echo "ServerSignature Off" >> /etc/httpd/conf/httpd.conf
683
	[ -e /etc/httpd/conf/modules.d/00_base.conf.default ] || cp /etc/httpd/conf/modules.d/00_base.conf /etc/httpd/conf/modules.d/00_base.conf.default
683
	[ -e /etc/httpd/conf/modules.d/00_base.conf.default ] || cp /etc/httpd/conf/modules.d/00_base.conf /etc/httpd/conf/modules.d/00_base.conf.default
684
	$SED "s?^LoadModule authn_anon_module.*?#LoadModule authn_anon_module modules/mod_authn_anon.so?g" /etc/httpd/conf/modules.d/00_base.conf
684
	$SED "s?^LoadModule authn_anon_module.*?#LoadModule authn_anon_module modules/mod_authn_anon.so?g" /etc/httpd/conf/modules.d/00_base.conf
685
	$SED "s?^LoadModule status_module.*?#LoadModule status_module modules/mod_status.so?g" /etc/httpd/conf/modules.d/00_base.conf
685
	$SED "s?^LoadModule status_module.*?#LoadModule status_module modules/mod_status.so?g" /etc/httpd/conf/modules.d/00_base.conf
686
	$SED "s?^LoadModule info_module.*?#LoadModule info_module modules/mod_info.so?g" /etc/httpd/conf/modules.d/00_base.conf
686
	$SED "s?^LoadModule info_module.*?#LoadModule info_module modules/mod_info.so?g" /etc/httpd/conf/modules.d/00_base.conf
687
	$SED "s?^LoadModule imagemap_module.*?#LoadModule imagemap_module modules/mod_imagemap.so?g" /etc/httpd/conf/modules.d/00_base.conf
687
	$SED "s?^LoadModule imagemap_module.*?#LoadModule imagemap_module modules/mod_imagemap.so?g" /etc/httpd/conf/modules.d/00_base.conf
688
	$SED "s?^LoadModule rewrite_module.*?#LoadModule rewrite_module modules/mod_rewrite.so?g" /etc/httpd/conf/modules.d/00_base.conf
688
	$SED "s?^LoadModule rewrite_module.*?#LoadModule rewrite_module modules/mod_rewrite.so?g" /etc/httpd/conf/modules.d/00_base.conf
689
	$SED "s?^LoadModule speling_module.*?#LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/modules.d/00_base.conf
689
	$SED "s?^LoadModule speling_module.*?#LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/modules.d/00_base.conf
690
	[ -e /etc/httpd/conf/conf.d/ssl.conf.default ] || cp /etc/httpd/conf/conf.d/ssl.conf /etc/httpd/conf/conf.d/ssl.conf.default
690
	[ -e /etc/httpd/conf/conf.d/ssl.conf.default ] || cp /etc/httpd/conf/conf.d/ssl.conf /etc/httpd/conf/conf.d/ssl.conf.default
691
	echo "Listen $PRIVATE_IP:443" > /etc/httpd/conf/conf.d/ssl.conf # Listen only on INTIF
691
	echo "Listen $PRIVATE_IP:443" > /etc/httpd/conf/conf.d/ssl.conf # Listen only on INTIF
692
	echo "SSLProtocol all -SSLv2 -SSLv3" >> /etc/httpd/conf/conf.d/ssl.conf  # exclude vulnerable protocols
692
	echo "SSLProtocol all -SSLv2 -SSLv3" >> /etc/httpd/conf/conf.d/ssl.conf  # exclude vulnerable protocols
693
	echo "SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS" >> /etc/httpd/conf/conf.d/ssl.conf # Define the cipher suite
693
	echo "SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS" >> /etc/httpd/conf/conf.d/ssl.conf # Define the cipher suite
694
	echo "SSLHonorCipherOrder on" >> /etc/httpd/conf/conf.d/ssl.conf # The Browser must respect the order of the cipher suite
694
	echo "SSLHonorCipherOrder on" >> /etc/httpd/conf/conf.d/ssl.conf # The Browser must respect the order of the cipher suite
695
	echo "SSLPassPhraseDialog  builtin" >> /etc/httpd/conf/conf.d/ssl.conf # in case of passphrase the dialog will be perform on stdin
695
	echo "SSLPassPhraseDialog  builtin" >> /etc/httpd/conf/conf.d/ssl.conf # in case of passphrase the dialog will be perform on stdin
696
	echo "SSLSessionCache \"shmcb:/run/httpd/ssl_scache(512000)\"" >> /etc/httpd/conf/conf.d/ssl.conf # default cache size
696
	echo "SSLSessionCache \"shmcb:/run/httpd/ssl_scache(512000)\"" >> /etc/httpd/conf/conf.d/ssl.conf # default cache size
697
	echo "SSLSessionCacheTimeout 300" >> /etc/httpd/conf/conf.d/ssl.conf # default cache time in seconds
697
	echo "SSLSessionCacheTimeout 300" >> /etc/httpd/conf/conf.d/ssl.conf # default cache time in seconds
698
# Error page management
698
# Error page management
699
[ -e /etc/httpd/conf/conf.d/multilang-errordoc.conf.default ] || cp /etc/httpd/conf/conf.d/multilang-errordoc.conf /etc/httpd/conf/conf.d/multilang-errordoc.conf.default
699
[ -e /etc/httpd/conf/conf.d/multilang-errordoc.conf.default ] || cp /etc/httpd/conf/conf.d/multilang-errordoc.conf /etc/httpd/conf/conf.d/multilang-errordoc.conf.default
700
cat <<EOF > /etc/httpd/conf/conf.d/multilang-errordoc.conf
700
cat <<EOF > /etc/httpd/conf/conf.d/multilang-errordoc.conf
701
Alias /error/ "/var/www/html/"
701
Alias /error/ "/var/www/html/"
702
<Directory "/usr/share/httpd/error">
702
<Directory "/usr/share/httpd/error">
703
    AllowOverride None
703
    AllowOverride None
704
    Options IncludesNoExec
704
    Options IncludesNoExec
705
    AddOutputFilter Includes html
705
    AddOutputFilter Includes html
706
    AddHandler type-map var
706
    AddHandler type-map var
707
    Require all granted
707
    Require all granted
708
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
708
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
709
    ForceLanguagePriority Prefer Fallback
709
    ForceLanguagePriority Prefer Fallback
710
</Directory>
710
</Directory>
711
ErrorDocument 400 /error/error.php?error=400
711
ErrorDocument 400 /error/error.php?error=400
712
ErrorDocument 401 /error/error.php?error=401
712
ErrorDocument 401 /error/error.php?error=401
713
ErrorDocument 403 /error/error.php?error=403
713
ErrorDocument 403 /error/error.php?error=403
714
ErrorDocument 404 /error/index.php
714
ErrorDocument 404 /error/index.php
715
ErrorDocument 405 /error/error.php?error=405
715
ErrorDocument 405 /error/error.php?error=405
716
ErrorDocument 408 /error/error.php?error=408
716
ErrorDocument 408 /error/error.php?error=408
717
ErrorDocument 410 /error/error.php?error=410
717
ErrorDocument 410 /error/error.php?error=410
718
ErrorDocument 411 /error/error.php?error=411
718
ErrorDocument 411 /error/error.php?error=411
719
ErrorDocument 412 /error/error.php?error=412
719
ErrorDocument 412 /error/error.php?error=412
720
ErrorDocument 413 /error/error.php?error=413
720
ErrorDocument 413 /error/error.php?error=413
721
ErrorDocument 414 /error/error.php?error=414
721
ErrorDocument 414 /error/error.php?error=414
722
ErrorDocument 415 /error/error.php?error=415
722
ErrorDocument 415 /error/error.php?error=415
723
ErrorDocument 500 /error/error.php?error=500
723
ErrorDocument 500 /error/error.php?error=500
724
ErrorDocument 501 /error/error.php?error=501
724
ErrorDocument 501 /error/error.php?error=501
725
ErrorDocument 502 /error/error.php?error=502
725
ErrorDocument 502 /error/error.php?error=502
726
ErrorDocument 503 /error/error.php?error=503
726
ErrorDocument 503 /error/error.php?error=503
727
ErrorDocument 506 /error/error.php?error=506
727
ErrorDocument 506 /error/error.php?error=506
728
EOF
728
EOF
729
	[ -e /usr/share/httpd/error/include/top.html.default ] || cp /usr/share/httpd/error/include/top.html /usr/share/httpd/error/include/top.html.default
729
	[ -e /usr/share/httpd/error/include/top.html.default ] || cp /usr/share/httpd/error/include/top.html /usr/share/httpd/error/include/top.html.default
730
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /usr/share/httpd/error/include/top.html
730
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /usr/share/httpd/error/include/top.html
731
	[ -e /usr/share/httpd/error/include/bottom.html.default ] || cp /usr/share/httpd/error/include/bottom.html /usr/share/httpd/error/include/bottom.html.default
731
	[ -e /usr/share/httpd/error/include/bottom.html.default ] || cp /usr/share/httpd/error/include/bottom.html /usr/share/httpd/error/include/bottom.html.default
732
	cat <<EOF > /usr/share/httpd/error/include/bottom.html
732
	cat <<EOF > /usr/share/httpd/error/include/bottom.html
733
</body>
733
</body>
734
</html>
734
</html>
735
EOF
735
EOF
736
# Définition du premier compte lié au profil 'admin'
736
# Définition du premier compte lié au profil 'admin'
737
if [ "$mode" = "install" ]
737
if [ "$mode" = "install" ]
738
	then
738
	then
739
		header_install
739
		header_install
740
		admin_portal=!
740
		admin_portal=!
741
		PTN='^[a-zA-Z0-9-]*$'
741
		PTN='^[a-zA-Z0-9-]*$'
742
		until [[ $(expr $admin_portal : $PTN) -gt 0 ]]
742
		until [[ $(expr $admin_portal : $PTN) -gt 0 ]]
743
                	do
743
                	do
744
			header_install
744
			header_install
745
			if [ $Lang == "fr" ]
745
			if [ $Lang == "fr" ]
746
			then 
746
			then 
747
				echo ""
747
				echo ""
748
				echo "Définissez un premier compte d'administration d'ALCASAR :"
748
				echo "Définissez un premier compte d'administration d'ALCASAR :"
749
				echo
749
				echo
750
				echo -n "Nom : "
750
				echo -n "Nom : "
751
			else
751
			else
752
				echo ""
752
				echo ""
753
				echo "Define the first account allow to administrate ALCASAR :"
753
				echo "Define the first account allow to administrate ALCASAR :"
754
				echo
754
				echo
755
				echo -n "Account : "
755
				echo -n "Account : "
756
			fi
756
			fi
757
			read admin_portal
757
			read admin_portal
758
			if [ "$admin_portal" == "" ]
758
			if [ "$admin_portal" == "" ]
759
				then
759
				then
760
				admin_portal=!
760
				admin_portal=!
761
			fi
761
			fi
762
			done
762
			done
763
# Creation of keys file for the admin account ("admin")
763
# Creation of keys file for the admin account ("admin")
764
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
764
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
765
		mkdir -p $DIR_DEST_ETC/digest
765
		mkdir -p $DIR_DEST_ETC/digest
766
		chmod 755 $DIR_DEST_ETC/digest
766
		chmod 755 $DIR_DEST_ETC/digest
767
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
767
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
768
			do
768
			do
769
				/usr/bin/htdigest -c $DIR_DEST_ETC/digest/key_admin "ALCASAR Control Center (ACC)" $admin_portal
769
				/usr/bin/htdigest -c $DIR_DEST_ETC/digest/key_admin "ALCASAR Control Center (ACC)" $admin_portal
770
			done
770
			done
771
		$DIR_DEST_BIN/alcasar-profil.sh --list
771
		$DIR_DEST_BIN/alcasar-profil.sh --list
772
fi
772
fi
773
# ACC partitioning
773
# ACC partitioning
774
	rm -f /etc/httpd/conf/webapps.d/alcasar*
774
	rm -f /etc/httpd/conf/webapps.d/alcasar*
775
	cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
775
	cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
776
<Directory $DIR_ACC>
776
<Directory $DIR_ACC>
777
	SSLRequireSSL
777
	SSLRequireSSL
778
	AllowOverride None
778
	AllowOverride None
779
	Order deny,allow
779
	Order deny,allow
780
	Deny from all
780
	Deny from all
781
	Allow from 127.0.0.1
781
	Allow from 127.0.0.1
782
	Allow from $PRIVATE_NETWORK_MASK
782
	Allow from $PRIVATE_NETWORK_MASK
783
	require valid-user
783
	require valid-user
784
	AuthType digest
784
	AuthType digest
785
	AuthName "ALCASAR Control Center (ACC)" 
785
	AuthName "ALCASAR Control Center (ACC)" 
786
	AuthDigestDomain $HOSTNAME.$DOMAIN
786
	AuthDigestDomain $HOSTNAME.$DOMAIN
787
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
787
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
788
	AuthUserFile $DIR_DEST_ETC/digest/key_all
788
	AuthUserFile $DIR_DEST_ETC/digest/key_all
789
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
789
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
790
</Directory>
790
</Directory>
791
<Directory $DIR_ACC/admin>
791
<Directory $DIR_ACC/admin>
792
	SSLRequireSSL
792
	SSLRequireSSL
793
	AllowOverride None
793
	AllowOverride None
794
	Order deny,allow
794
	Order deny,allow
795
	Deny from all
795
	Deny from all
796
	Allow from 127.0.0.1
796
	Allow from 127.0.0.1
797
	Allow from $PRIVATE_NETWORK_MASK
797
	Allow from $PRIVATE_NETWORK_MASK
798
	require valid-user
798
	require valid-user
799
	AuthType digest
799
	AuthType digest
800
	AuthName "ALCASAR Control Center (ACC)" 
800
	AuthName "ALCASAR Control Center (ACC)" 
801
	AuthDigestDomain $HOSTNAME.$DOMAIN
801
	AuthDigestDomain $HOSTNAME.$DOMAIN
802
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
802
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
803
	AuthUserFile $DIR_DEST_ETC/digest/key_admin
803
	AuthUserFile $DIR_DEST_ETC/digest/key_admin
804
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
804
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
805
</Directory>
805
</Directory>
806
<Directory $DIR_ACC/manager>
806
<Directory $DIR_ACC/manager>
807
	SSLRequireSSL
807
	SSLRequireSSL
808
	AllowOverride None
808
	AllowOverride None
809
	Order deny,allow
809
	Order deny,allow
810
	Deny from all
810
	Deny from all
811
	Allow from 127.0.0.1
811
	Allow from 127.0.0.1
812
	Allow from $PRIVATE_NETWORK_MASK
812
	Allow from $PRIVATE_NETWORK_MASK
813
	require valid-user
813
	require valid-user
814
	AuthType digest
814
	AuthType digest
815
	AuthName "ALCASAR Control Center (ACC)" 
815
	AuthName "ALCASAR Control Center (ACC)" 
816
	AuthDigestDomain $HOSTNAME.$DOMAIN
816
	AuthDigestDomain $HOSTNAME.$DOMAIN
817
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
817
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
818
	AuthUserFile $DIR_DEST_ETC/digest/key_manager
818
	AuthUserFile $DIR_DEST_ETC/digest/key_manager
819
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
819
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
820
</Directory>
820
</Directory>
821
<Directory $DIR_ACC/backup>
821
<Directory $DIR_ACC/backup>
822
	SSLRequireSSL
822
	SSLRequireSSL
823
	AllowOverride None
823
	AllowOverride None
824
	Order deny,allow
824
	Order deny,allow
825
	Deny from all
825
	Deny from all
826
	Allow from 127.0.0.1
826
	Allow from 127.0.0.1
827
	Allow from $PRIVATE_NETWORK_MASK
827
	Allow from $PRIVATE_NETWORK_MASK
828
	require valid-user
828
	require valid-user
829
	AuthType digest
829
	AuthType digest
830
	AuthName "ALCASAR Control Center (ACC)" 
830
	AuthName "ALCASAR Control Center (ACC)" 
831
	AuthDigestDomain $HOSTNAME.$DOMAIN
831
	AuthDigestDomain $HOSTNAME.$DOMAIN
832
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
832
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
833
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
833
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
834
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
834
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
835
</Directory>
835
</Directory>
836
Alias /save/ "$DIR_SAVE/"
836
Alias /save/ "$DIR_SAVE/"
837
<Directory $DIR_SAVE>
837
<Directory $DIR_SAVE>
838
	SSLRequireSSL
838
	SSLRequireSSL
839
	Options Indexes
839
	Options Indexes
840
	Order deny,allow
840
	Order deny,allow
841
	Deny from all
841
	Deny from all
842
	Allow from 127.0.0.1
842
	Allow from 127.0.0.1
843
	Allow from $PRIVATE_NETWORK_MASK
843
	Allow from $PRIVATE_NETWORK_MASK
844
	require valid-user
844
	require valid-user
845
	AuthType digest
845
	AuthType digest
846
	AuthName "ALCASAR Control Center (ACC)" 
846
	AuthName "ALCASAR Control Center (ACC)" 
847
	AuthDigestDomain $HOSTNAME.$DOMAIN
847
	AuthDigestDomain $HOSTNAME.$DOMAIN
848
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
848
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
849
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
849
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
850
</Directory>
850
</Directory>
851
<Directory $DIR_WEB/pass>
851
<Directory $DIR_WEB/pass>
852
	SSLRequireSSL
852
	SSLRequireSSL
853
	AllowOverride None
853
	AllowOverride None
854
	Order deny,allow
854
	Order deny,allow
855
	Deny from all
855
	Deny from all
856
	Allow from 127.0.0.1
856
	Allow from 127.0.0.1
857
	Allow from $PRIVATE_NETWORK_MASK
857
	Allow from $PRIVATE_NETWORK_MASK
858
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN
858
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN
859
</Directory>
859
</Directory>
860
EOF
860
EOF
861
# Replacement of the extension .cer by .der in MIME type
861
# Replacement of the extension .cer by .der in MIME type
862
$SED "s?^application/pkix-cert.*?application/pkix-cert		der?g" /etc/mime.types
862
$SED "s?^application/pkix-cert.*?application/pkix-cert		der?g" /etc/mime.types
863
# Launch after coova (in order to wait tun0 to be up)
863
# Launch after coova (in order to wait tun0 to be up)
864
$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/httpd.service
864
$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/httpd.service
865
# Log file for ACC access imputability
865
# Log file for ACC access imputability
866
[ -e /var/Save/security/acc_access.log ] || touch /var/Save/security/acc_access.log
866
[ -e /var/Save/security/acc_access.log ] || touch /var/Save/security/acc_access.log
-
 
867
chown root:apache /var/Save/security/acc_access.log
867
chmod 644 /var/Save/security/acc_access.log
868
chmod 664 /var/Save/security/acc_access.log
868
} # End of ACC ()
869
} # End of ACC ()
869
 
870
 
870
##########################################################################
871
##########################################################################
871
##				Fonction "CA"				##
872
##				Fonction "CA"				##
872
## - Creating the CA and the server certificate (apache)	 	##
873
## - Creating the CA and the server certificate (apache)	 	##
873
##########################################################################
874
##########################################################################
874
CA ()
875
CA ()
875
{
876
{
876
	$DIR_DEST_BIN/alcasar-CA.sh
877
	$DIR_DEST_BIN/alcasar-CA.sh
877
	FIC_VIRTUAL_SSL=`find /etc/httpd/conf -type f -name *default_ssl_vhost.conf`
878
	FIC_VIRTUAL_SSL=`find /etc/httpd/conf -type f -name *default_ssl_vhost.conf`
878
	[ -e /etc/httpd/conf/vhosts-ssl.default ]  || cp $FIC_VIRTUAL_SSL /etc/httpd/conf/vhosts-ssl.default
879
	[ -e /etc/httpd/conf/vhosts-ssl.default ]  || cp $FIC_VIRTUAL_SSL /etc/httpd/conf/vhosts-ssl.default
879
	cat <<EOF > $FIC_VIRTUAL_SSL
880
	cat <<EOF > $FIC_VIRTUAL_SSL
880
# default SSL virtual host, used for all HTTPS requests that do not
881
# default SSL virtual host, used for all HTTPS requests that do not
881
# match a ServerName or ServerAlias in any <VirtualHost> block.
882
# match a ServerName or ServerAlias in any <VirtualHost> block.
882
 
883
 
883
<VirtualHost _default_:443>
884
<VirtualHost _default_:443>
884
# general configuration
885
# general configuration
885
    ServerAdmin root@localhost
886
    ServerAdmin root@localhost
886
    ServerName $HOSTNAME.$DOMAIN
887
    ServerName $HOSTNAME.$DOMAIN
887
 
888
 
888
# SSL configuration
889
# SSL configuration
889
    SSLEngine on
890
    SSLEngine on
890
    SSLCertificateFile /etc/pki/tls/certs/alcasar.crt
891
    SSLCertificateFile /etc/pki/tls/certs/alcasar.crt
891
    SSLCertificateKeyFile /etc/pki/tls/private/alcasar.key
892
    SSLCertificateKeyFile /etc/pki/tls/private/alcasar.key
892
    SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
893
    SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
893
    CustomLog logs/ssl_request_log \
894
    CustomLog logs/ssl_request_log \
894
	"%t %{SSL_PROTOCOL}x %{SSL_CIPHER}x [%h] \"%r\" %b"
895
	"%t %{SSL_PROTOCOL}x %{SSL_CIPHER}x [%h] \"%r\" %b"
895
    ErrorLog logs/ssl_error_log
896
    ErrorLog logs/ssl_error_log
896
    ErrorLogFormat "[%t] [%m:%l] [client %a] %M"
897
    ErrorLogFormat "[%t] [%m:%l] [client %a] %M"
897
</VirtualHost>
898
</VirtualHost>
898
EOF
899
EOF
899
	chown -R root:apache /etc/pki
900
	chown -R root:apache /etc/pki
900
	chmod -R 750 /etc/pki
901
	chmod -R 750 /etc/pki
901
} # End of CA ()
902
} # End of CA ()
902
 
903
 
903
##################################################################
904
##################################################################
904
##			Function "time_server"			##
905
##			Function "time_server"			##
905
## - Configuring NTP server					##
906
## - Configuring NTP server					##
906
##################################################################
907
##################################################################
907
time_server ()
908
time_server ()
908
{
909
{
909
# Set the Internet time server
910
# Set the Internet time server
910
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
911
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
911
	cat <<EOF > /etc/ntp/step-tickers
912
	cat <<EOF > /etc/ntp/step-tickers
912
0.fr.pool.ntp.org	# adapt to your country
913
0.fr.pool.ntp.org	# adapt to your country
913
1.fr.pool.ntp.org
914
1.fr.pool.ntp.org
914
2.fr.pool.ntp.org
915
2.fr.pool.ntp.org
915
EOF
916
EOF
916
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
917
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
917
	cat <<EOF > /etc/ntp.conf
918
	cat <<EOF > /etc/ntp.conf
918
server 0.fr.pool.ntp.org	# adapt to your country
919
server 0.fr.pool.ntp.org	# adapt to your country
919
server 1.fr.pool.ntp.org
920
server 1.fr.pool.ntp.org
920
server 2.fr.pool.ntp.org
921
server 2.fr.pool.ntp.org
921
server 127.127.1.0   		# local clock si NTP internet indisponible ...
922
server 127.127.1.0   		# local clock si NTP internet indisponible ...
922
fudge 127.127.1.0 stratum 10
923
fudge 127.127.1.0 stratum 10
923
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
924
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
924
restrict 127.0.0.1
925
restrict 127.0.0.1
925
driftfile /var/lib/ntp/drift
926
driftfile /var/lib/ntp/drift
926
logfile /var/log/ntp.log
927
logfile /var/log/ntp.log
927
disable monitor
928
disable monitor
928
EOF
929
EOF
929
	chown -R ntp:ntp /var/lib/ntp
930
	chown -R ntp:ntp /var/lib/ntp
930
# Synchronize now
931
# Synchronize now
931
	ntpd -q -g &
932
	ntpd -q -g &
932
} # End of time_server ()
933
} # End of time_server ()
933
 
934
 
934
##########################################################################################
935
##########################################################################################
935
##			Fonction "init_db"						##
936
##			Fonction "init_db"						##
936
## - Initialisation de la base Mysql							##
937
## - Initialisation de la base Mysql							##
937
## - Affectation du mot de passe de l'administrateur (root)				##
938
## - Affectation du mot de passe de l'administrateur (root)				##
938
## - Suppression des bases et des utilisateurs superflus				##
939
## - Suppression des bases et des utilisateurs superflus				##
939
## - Création de la base 'radius'							##
940
## - Création de la base 'radius'							##
940
## - Installation du schéma de cette base						##
941
## - Installation du schéma de cette base						##
941
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)	##
942
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)	##
942
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)		##
943
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)		##
943
##########################################################################################
944
##########################################################################################
944
init_db ()
945
init_db ()
945
{
946
{
946
	if [ `systemctl is-active mysqld` == "active" ]
947
	if [ `systemctl is-active mysqld` == "active" ]
947
	then
948
	then
948
		systemctl stop mysqld
949
		systemctl stop mysqld
949
	fi
950
	fi
950
	rm -rf /var/lib/mysql # to be sure that there is no former installation
951
	rm -rf /var/lib/mysql # to be sure that there is no former installation
951
	/usr/sbin/mysqld-prepare-db-dir > /dev/null 2>&1
952
	/usr/sbin/mysqld-prepare-db-dir > /dev/null 2>&1
952
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
953
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
953
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
954
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
954
	$SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
955
	$SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
955
	$SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf
956
	$SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf
956
	$SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf  # accentuated user names are allowed
957
	$SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf  # accentuated user names are allowed
957
	$SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/feedback.cnf # remove the feedback plugin (ALCASAR doesn't report anything !)
958
	$SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/feedback.cnf # remove the feedback plugin (ALCASAR doesn't report anything !)
958
	/usr/bin/systemctl start mysqld.service
959
	/usr/bin/systemctl start mysqld.service
959
	nb_round=1
960
	nb_round=1
960
	while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
961
	while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
961
	do
962
	do
962
		nb_round=`expr $nb_round + 1`
963
		nb_round=`expr $nb_round + 1`
963
		sleep 2
964
		sleep 2
964
	done
965
	done
965
	if [ ! -S /var/lib/mysql/mysql.sock ]
966
	if [ ! -S /var/lib/mysql/mysql.sock ]
966
	then
967
	then
967
		echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
968
		echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
968
		exit
969
		exit
969
	fi
970
	fi
970
	mysqladmin -u root password $mysqlpwd
971
	mysqladmin -u root password $mysqlpwd
971
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
972
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
972
# Secure the server
973
# Secure the server
973
	$MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
974
	$MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
974
	$MYSQL="CONNECT mysql;DELETE from user where User='';DELETE FROM user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');FLUSH PRIVILEGES;" 
975
	$MYSQL="CONNECT mysql;DELETE from user where User='';DELETE FROM user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');FLUSH PRIVILEGES;" 
975
# Create 'radius' database
976
# Create 'radius' database
976
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
977
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
977
# Add an empty radius database structure
978
# Add an empty radius database structure
978
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
979
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
979
# modify the start script in order to close accounting connexion when the system is comming down or up
980
# modify the start script in order to close accounting connexion when the system is comming down or up
980
	[ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
981
	[ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
981
	$SED "/ExecStartPost=/a ExecStop=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
982
	$SED "/ExecStartPost=/a ExecStop=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
982
	$SED "/ExecStartPost=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
983
	$SED "/ExecStartPost=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
983
	/usr/bin/systemctl daemon-reload
984
	/usr/bin/systemctl daemon-reload
984
} # End of init_db ()
985
} # End of init_db ()
985
 
986
 
986
##########################################################################
987
##########################################################################
987
##			Fonction "radius"				##
988
##			Fonction "radius"				##
988
## - Paramètrage des fichiers de configuration FreeRadius		##
989
## - Paramètrage des fichiers de configuration FreeRadius		##
989
## - Affectation du secret partagé entre coova-chilli et freeradius	##
990
## - Affectation du secret partagé entre coova-chilli et freeradius	##
990
## - Modification de fichier de conf pour l'accès à Mysql		##
991
## - Modification de fichier de conf pour l'accès à Mysql		##
991
##########################################################################
992
##########################################################################
992
radius ()
993
radius ()
993
{
994
{
994
	cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
995
	cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
995
	chown -R radius:radius /etc/raddb
996
	chown -R radius:radius /etc/raddb
996
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
997
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
997
# Set radius.conf parameters
998
# Set radius.conf parameters
998
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
999
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
999
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
1000
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
1000
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
1001
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
1001
# remove the proxy function
1002
# remove the proxy function
1002
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
1003
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
1003
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
1004
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
1004
# remove EAP module
1005
# remove EAP module
1005
	$SED "s?^[\t ]*\$INCLUDE eap.conf.*?#\$INCLUDE eap.conf?g" /etc/raddb/radiusd.conf
1006
	$SED "s?^[\t ]*\$INCLUDE eap.conf.*?#\$INCLUDE eap.conf?g" /etc/raddb/radiusd.conf
1006
# listen on loopback (should be modified later if EAP enabled)
1007
# listen on loopback (should be modified later if EAP enabled)
1007
	$SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
1008
	$SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
1008
# enable the  SQL module (and SQL counter)
1009
# enable the  SQL module (and SQL counter)
1009
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
1010
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
1010
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
1011
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
1011
	$SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
1012
	$SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
1012
# only include modules for ALCASAR needs
1013
# only include modules for ALCASAR needs
1013
	$SED "s?^[\t ]*\$INCLUDE \${confdir}/modules/.*?\t#\$INCLUDE \${confdir}/modules/\n\t# we only include modules for ALCASAR needs\n\t\$INCLUDE \${confdir}/modules/attr_filter\n\t\$INCLUDE \${confdir}/modules/expiration\n\t\$INCLUDE \${confdir}/modules/logintime\n\t\$INCLUDE \${confdir}/modules/ldap\n\t\$INCLUDE \${confdir}/modules/pap?g" /etc/raddb/radiusd.conf
1014
	$SED "s?^[\t ]*\$INCLUDE \${confdir}/modules/.*?\t#\$INCLUDE \${confdir}/modules/\n\t# we only include modules for ALCASAR needs\n\t\$INCLUDE \${confdir}/modules/attr_filter\n\t\$INCLUDE \${confdir}/modules/expiration\n\t\$INCLUDE \${confdir}/modules/logintime\n\t\$INCLUDE \${confdir}/modules/ldap\n\t\$INCLUDE \${confdir}/modules/pap?g" /etc/raddb/radiusd.conf
1014
	$SED "s/^[\t ]exec$/\#\texec/g" /etc/raddb/radiusd.conf
1015
	$SED "s/^[\t ]exec$/\#\texec/g" /etc/raddb/radiusd.conf
1015
	$SED "s?^[\t ]*expr.*?\#\texpr?g" /etc/raddb/radiusd.conf
1016
	$SED "s?^[\t ]*expr.*?\#\texpr?g" /etc/raddb/radiusd.conf
1016
	$SED "s?^[\t ]*\#	daily.*?\#\tdaily\n\tsql?g" /etc/raddb/radiusd.conf
1017
	$SED "s?^[\t ]*\#	daily.*?\#\tdaily\n\tsql?g" /etc/raddb/radiusd.conf
1017
	$SED "s?^[\t ]*logintime.*?\tlogintime\n\tnoresetcounter\n\tdailycounter\n\tmonthlycounter\n\tattr_filter.access_reject\n\tattr_filter.accounting_response\n\tpap?g" /etc/raddb/radiusd.conf
1018
	$SED "s?^[\t ]*logintime.*?\tlogintime\n\tnoresetcounter\n\tdailycounter\n\tmonthlycounter\n\tattr_filter.access_reject\n\tattr_filter.accounting_response\n\tpap?g" /etc/raddb/radiusd.conf
1018
	$SED "s?^[\t ]*\$INCLUDE sites-enabled/.*?\#\$INCLUDE sites-enabled/\n\#\tenable only alcasar virtual server\n\$INCLUDE sites-enabled/alcasar?g" /etc/raddb/radiusd.conf
1019
	$SED "s?^[\t ]*\$INCLUDE sites-enabled/.*?\#\$INCLUDE sites-enabled/\n\#\tenable only alcasar virtual server\n\$INCLUDE sites-enabled/alcasar?g" /etc/raddb/radiusd.conf
1019
# remvove virtual server and copy our conf file
1020
# remvove virtual server and copy our conf file
1020
	rm -f /etc/raddb/sites-enabled/*
1021
	rm -f /etc/raddb/sites-enabled/*
1021
       	cp $DIR_CONF/radius/alcasar-radius /etc/raddb/sites-available/alcasar
1022
       	cp $DIR_CONF/radius/alcasar-radius /etc/raddb/sites-available/alcasar
1022
	chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
1023
	chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
1023
	chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
1024
	chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
1024
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
1025
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
1025
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1026
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1026
# Inutile dans notre fonctionnement mais les liens sont recréés par un update de radius ... donc forcé en tant que fichier à 'vide'
1027
# Inutile dans notre fonctionnement mais les liens sont recréés par un update de radius ... donc forcé en tant que fichier à 'vide'
1027
	touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
1028
	touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
1028
# client.conf configuration (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
1029
# client.conf configuration (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
1029
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1030
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1030
	cat << EOF > /etc/raddb/clients.conf
1031
	cat << EOF > /etc/raddb/clients.conf
1031
client 127.0.0.1 {
1032
client 127.0.0.1 {
1032
	secret = $secretradius
1033
	secret = $secretradius
1033
	shortname = localhost
1034
	shortname = localhost
1034
}
1035
}
1035
EOF
1036
EOF
1036
# sql.conf modification
1037
# sql.conf modification
1037
	[ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
1038
	[ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
1038
	$SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
1039
	$SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
1039
	$SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
1040
	$SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
1040
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
1041
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
1041
	$SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
1042
	$SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
1042
# dialup.conf modification (case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.) 
1043
# dialup.conf modification (case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.) 
1043
	[ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
1044
	[ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
1044
	cp -f $DIR_CONF/radius/dialup.conf /etc/raddb/sql/mysql/dialup.conf
1045
	cp -f $DIR_CONF/radius/dialup.conf /etc/raddb/sql/mysql/dialup.conf
1045
# counter.conf modification (change the Max-All-Session-Time counter)
1046
# counter.conf modification (change the Max-All-Session-Time counter)
1046
	[ -e /etc/raddb/sql/mysql/counter.conf.default ] || cp /etc/raddb/sql/mysql/counter.conf /etc/raddb/sql/mysql/counter.conf.default
1047
	[ -e /etc/raddb/sql/mysql/counter.conf.default ] || cp /etc/raddb/sql/mysql/counter.conf /etc/raddb/sql/mysql/counter.conf.default
1047
	cp -f $DIR_CONF/radius/counter.conf /etc/raddb/sql/mysql/counter.conf
1048
	cp -f $DIR_CONF/radius/counter.conf /etc/raddb/sql/mysql/counter.conf
1048
	chown -R radius:radius /etc/raddb/sql/mysql/*
1049
	chown -R radius:radius /etc/raddb/sql/mysql/*
1049
# make certain that mysql is up before radius start
1050
# make certain that mysql is up before radius start
1050
	[ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
1051
	[ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
1051
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1052
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1052
	/usr/bin/systemctl daemon-reload
1053
	/usr/bin/systemctl daemon-reload
1053
} # End radius ()
1054
} # End radius ()
1054
 
1055
 
1055
##################################################################################
1056
##################################################################################
1056
##			Fonction "chilli"					##
1057
##			Fonction "chilli"					##
1057
## - Création du fichier d'initialisation et de configuration de coova-chilli	##
1058
## - Création du fichier d'initialisation et de configuration de coova-chilli	##
1058
## - Paramètrage de la page d'authentification (intercept.php)			##
1059
## - Paramètrage de la page d'authentification (intercept.php)			##
1059
##################################################################################
1060
##################################################################################
1060
chilli ()
1061
chilli ()
1061
{
1062
{
1062
# chilli unit for systemd
1063
# chilli unit for systemd
1063
cat << EOF > /lib/systemd/system/chilli.service
1064
cat << EOF > /lib/systemd/system/chilli.service
1064
#  This file is part of systemd.
1065
#  This file is part of systemd.
1065
#
1066
#
1066
#  systemd is free software; you can redistribute it and/or modify it
1067
#  systemd is free software; you can redistribute it and/or modify it
1067
#  under the terms of the GNU General Public License as published by
1068
#  under the terms of the GNU General Public License as published by
1068
#  the Free Software Foundation; either version 2 of the License, or
1069
#  the Free Software Foundation; either version 2 of the License, or
1069
#  (at your option) any later version.
1070
#  (at your option) any later version.
1070
[Unit]
1071
[Unit]
1071
Description=chilli is a captive portal daemon
1072
Description=chilli is a captive portal daemon
1072
After=network.target
1073
After=network.target
1073
 
1074
 
1074
[Service]
1075
[Service]
1075
Type=forking
1076
Type=forking
1076
ExecStart=/usr/libexec/chilli start
1077
ExecStart=/usr/libexec/chilli start
1077
ExecStop=/usr/libexec/chilli stop
1078
ExecStop=/usr/libexec/chilli stop
1078
ExecReload=/usr/libexec/chilli reload
1079
ExecReload=/usr/libexec/chilli reload
1079
PIDFile=/var/run/chilli.pid
1080
PIDFile=/var/run/chilli.pid
1080
 
1081
 
1081
[Install]
1082
[Install]
1082
WantedBy=multi-user.target
1083
WantedBy=multi-user.target
1083
EOF
1084
EOF
1084
# init file creation
1085
# init file creation
1085
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1086
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1086
	cat <<EOF > /etc/init.d/chilli
1087
	cat <<EOF > /etc/init.d/chilli
1087
#!/bin/sh
1088
#!/bin/sh
1088
#
1089
#
1089
# chilli CoovaChilli init
1090
# chilli CoovaChilli init
1090
#
1091
#
1091
# chkconfig: 2345 65 35
1092
# chkconfig: 2345 65 35
1092
# description: CoovaChilli
1093
# description: CoovaChilli
1093
### BEGIN INIT INFO
1094
### BEGIN INIT INFO
1094
# Provides:       chilli
1095
# Provides:       chilli
1095
# Required-Start: network 
1096
# Required-Start: network 
1096
# Should-Start: 
1097
# Should-Start: 
1097
# Required-Stop:  network
1098
# Required-Stop:  network
1098
# Should-Stop: 
1099
# Should-Stop: 
1099
# Default-Start:  2 3 5
1100
# Default-Start:  2 3 5
1100
# Default-Stop:
1101
# Default-Stop:
1101
# Description:    CoovaChilli access controller
1102
# Description:    CoovaChilli access controller
1102
### END INIT INFO
1103
### END INIT INFO
1103
 
1104
 
1104
[ -f /usr/sbin/chilli ] || exit 0
1105
[ -f /usr/sbin/chilli ] || exit 0
1105
. /etc/init.d/functions
1106
. /etc/init.d/functions
1106
CONFIG=/etc/chilli.conf
1107
CONFIG=/etc/chilli.conf
1107
pidfile=/var/run/chilli.pid
1108
pidfile=/var/run/chilli.pid
1108
[ -f \$CONFIG ] || {
1109
[ -f \$CONFIG ] || {
1109
    echo "\$CONFIG Not found"
1110
    echo "\$CONFIG Not found"
1110
    exit 0
1111
    exit 0
1111
}
1112
}
1112
RETVAL=0
1113
RETVAL=0
1113
prog="chilli"
1114
prog="chilli"
1114
case \$1 in
1115
case \$1 in
1115
    start)
1116
    start)
1116
	if [ -f \$pidfile ] ; then 
1117
	if [ -f \$pidfile ] ; then 
1117
		gprintf "chilli is already running"
1118
		gprintf "chilli is already running"
1118
	else
1119
	else
1119
        	gprintf "Starting \$prog: "
1120
        	gprintf "Starting \$prog: "
1120
		rm -f /var/run/chilli* # cleaning
1121
		rm -f /var/run/chilli* # cleaning
1121
        	/usr/sbin/modprobe tun >/dev/null 2>&1
1122
        	/usr/sbin/modprobe tun >/dev/null 2>&1
1122
        	echo 1 > /proc/sys/net/ipv4/ip_forward
1123
        	echo 1 > /proc/sys/net/ipv4/ip_forward
1123
		[ -e /dev/net/tun ] || {
1124
		[ -e /dev/net/tun ] || {
1124
	    	(cd /dev; 
1125
	    	(cd /dev; 
1125
			mkdir net; 
1126
			mkdir net; 
1126
			cd net; 
1127
			cd net; 
1127
			mknod tun c 10 200)
1128
			mknod tun c 10 200)
1128
		}
1129
		}
1129
		ifconfig $INTIF 0.0.0.0
1130
		ifconfig $INTIF 0.0.0.0
1130
		/usr/sbin/ethtool -K $INTIF gro off
1131
		/usr/sbin/ethtool -K $INTIF gro off
1131
		daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1132
		daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1132
        	RETVAL=$?
1133
        	RETVAL=$?
1133
	fi
1134
	fi
1134
	;;
1135
	;;
1135
 
1136
 
1136
    reload)
1137
    reload)
1137
	killall -HUP chilli
1138
	killall -HUP chilli
1138
	;;
1139
	;;
1139
 
1140
 
1140
    restart)
1141
    restart)
1141
	\$0 stop
1142
	\$0 stop
1142
        sleep 2
1143
        sleep 2
1143
	\$0 start
1144
	\$0 start
1144
	;;
1145
	;;
1145
    
1146
    
1146
    status)
1147
    status)
1147
        status chilli
1148
        status chilli
1148
        RETVAL=0
1149
        RETVAL=0
1149
        ;;
1150
        ;;
1150
 
1151
 
1151
    stop)
1152
    stop)
1152
	if [ -f \$pidfile ] ; then  
1153
	if [ -f \$pidfile ] ; then  
1153
        	gprintf "Shutting down \$prog: "
1154
        	gprintf "Shutting down \$prog: "
1154
		killproc /usr/sbin/chilli
1155
		killproc /usr/sbin/chilli
1155
		RETVAL=\$?
1156
		RETVAL=\$?
1156
		[ \$RETVAL = 0 ] && rm -f $pidfile
1157
		[ \$RETVAL = 0 ] && rm -f $pidfile
1157
	else	
1158
	else	
1158
        	gprintf "chilli is not running"
1159
        	gprintf "chilli is not running"
1159
	fi
1160
	fi
1160
	;;
1161
	;;
1161
    
1162
    
1162
    *)
1163
    *)
1163
        echo "Usage: \$0 {start|stop|restart|reload|status}"
1164
        echo "Usage: \$0 {start|stop|restart|reload|status}"
1164
        exit 1
1165
        exit 1
1165
esac
1166
esac
1166
echo
1167
echo
1167
EOF
1168
EOF
1168
chmod a+x /etc/init.d/chilli
1169
chmod a+x /etc/init.d/chilli
1169
ln -s /etc/init.d/chilli /usr/libexec/chilli
1170
ln -s /etc/init.d/chilli /usr/libexec/chilli
1170
# conf file creation
1171
# conf file creation
1171
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1172
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1172
	#NTP Option configuration for DHCP
1173
	#NTP Option configuration for DHCP
1173
	#DHCP Options : rfc2132
1174
	#DHCP Options : rfc2132
1174
		#dhcp option value will be convert in hexa.
1175
		#dhcp option value will be convert in hexa.
1175
		#NTP option (or 'option 42') is like :
1176
		#NTP option (or 'option 42') is like :
1176
		#			
1177
		#			
1177
		#    Code   Len         Address 1               Address 2
1178
		#    Code   Len         Address 1               Address 2
1178
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1179
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1179
		#   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1180
		#   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1180
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1181
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1181
		#
1182
		#
1182
		#Code : 42 => 2a
1183
		#Code : 42 => 2a
1183
		#Len : 4 => 04
1184
		#Len : 4 => 04
1184
	PRIVATE_IP_HEXA=$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f1))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f2))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f3))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f4))
1185
	PRIVATE_IP_HEXA=$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f1))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f2))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f3))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f4))
1185
	cat <<EOF > /etc/chilli.conf
1186
	cat <<EOF > /etc/chilli.conf
1186
# coova config for ALCASAR
1187
# coova config for ALCASAR
1187
cmdsocket	/var/run/chilli.sock
1188
cmdsocket	/var/run/chilli.sock
1188
unixipc		chilli.$INTIF.ipc
1189
unixipc		chilli.$INTIF.ipc
1189
pidfile		/var/run/chilli.pid
1190
pidfile		/var/run/chilli.pid
1190
net		$PRIVATE_NETWORK_MASK
1191
net		$PRIVATE_NETWORK_MASK
1191
dhcpif		$INTIF
1192
dhcpif		$INTIF
1192
ethers		$DIR_DEST_ETC/alcasar-ethers
1193
ethers		$DIR_DEST_ETC/alcasar-ethers
1193
#nodynip
1194
#nodynip
1194
#statip
1195
#statip
1195
dynip		$PRIVATE_NETWORK_MASK
1196
dynip		$PRIVATE_NETWORK_MASK
1196
domain		$DOMAIN
1197
domain		$DOMAIN
1197
dns1		$PRIVATE_IP
1198
dns1		$PRIVATE_IP
1198
dns2		$PRIVATE_IP
1199
dns2		$PRIVATE_IP
1199
uamlisten	$PRIVATE_IP
1200
uamlisten	$PRIVATE_IP
1200
uamport		3990
1201
uamport		3990
1201
macauth
1202
macauth
1202
macpasswd	password
1203
macpasswd	password
1203
strictmacauth
1204
strictmacauth
1204
locationname	$HOSTNAME.$DOMAIN
1205
locationname	$HOSTNAME.$DOMAIN
1205
radiusserver1	127.0.0.1
1206
radiusserver1	127.0.0.1
1206
radiusserver2	127.0.0.1
1207
radiusserver2	127.0.0.1
1207
radiussecret	$secretradius
1208
radiussecret	$secretradius
1208
radiusauthport	1812
1209
radiusauthport	1812
1209
radiusacctport	1813
1210
radiusacctport	1813
1210
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
1211
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
1211
radiusnasid	$HOSTNAME.$DOMAIN
1212
radiusnasid	$HOSTNAME.$DOMAIN
1212
uamsecret	$secretuam
1213
uamsecret	$secretuam
1213
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1214
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1214
coaport		3799
1215
coaport		3799
1215
conup		$DIR_DEST_BIN/alcasar-conup.sh
1216
conup		$DIR_DEST_BIN/alcasar-conup.sh
1216
condown		$DIR_DEST_BIN/alcasar-condown.sh
1217
condown		$DIR_DEST_BIN/alcasar-condown.sh
1217
include		$DIR_DEST_ETC/alcasar-uamallowed
1218
include		$DIR_DEST_ETC/alcasar-uamallowed
1218
include		$DIR_DEST_ETC/alcasar-uamdomain
1219
include		$DIR_DEST_ETC/alcasar-uamdomain
1219
dhcpopt		2a04$PRIVATE_IP_HEXA
1220
dhcpopt		2a04$PRIVATE_IP_HEXA
1220
macup		$DIR_DEST_BIN/alcasar-macup.sh
1221
macup		$DIR_DEST_BIN/alcasar-macup.sh
1221
macdown		$DIR_DEST_BIN/alcasar-macdown.sh
1222
macdown		$DIR_DEST_BIN/alcasar-macdown.sh
1222
#dhcpgateway		none
1223
#dhcpgateway		none
1223
#dhcprelayagent		none
1224
#dhcprelayagent		none
1224
#dhcpgatewayport	none
1225
#dhcpgatewayport	none
1225
sslkeyfile	/etc/pki/tls/private/alcasar.key
1226
sslkeyfile	/etc/pki/tls/private/alcasar.key
1226
sslcertfile	/etc/pki/tls/certs/alcasar.crt
1227
sslcertfile	/etc/pki/tls/certs/alcasar.crt
1227
redirssl
1228
redirssl
1228
EOF
1229
EOF
1229
# create file for DHCP static ip. Reserve the second IP address for INTIF (the first one is for tun0)
1230
# create file for DHCP static ip. Reserve the second IP address for INTIF (the first one is for tun0)
1230
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1231
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1231
# create files for trusted domains and urls
1232
# create files for trusted domains and urls
1232
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1233
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1233
	chown root:apache $DIR_DEST_ETC/alcasar-*
1234
	chown root:apache $DIR_DEST_ETC/alcasar-*
1234
	chmod 660 $DIR_DEST_ETC/alcasar-*
1235
	chmod 660 $DIR_DEST_ETC/alcasar-*
1235
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1236
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1236
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1237
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1237
# user 'chilli' creation (in order to run conup/off and up/down scripts
1238
# user 'chilli' creation (in order to run conup/off and up/down scripts
1238
	chilli_exist=`grep chilli /etc/passwd|wc -l`
1239
	chilli_exist=`grep chilli /etc/passwd|wc -l`
1239
	if [ "$chilli_exist" == "1" ]
1240
	if [ "$chilli_exist" == "1" ]
1240
	then
1241
	then
1241
	      userdel -r chilli 2>/dev/null
1242
	      userdel -r chilli 2>/dev/null
1242
	fi
1243
	fi
1243
	groupadd -f chilli
1244
	groupadd -f chilli
1244
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1245
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1245
}  # End of chilli ()
1246
}  # End of chilli ()
1246
 
1247
 
1247
##################################################################
1248
##################################################################
1248
##		Fonction "dansguardian"				##
1249
##		Fonction "dansguardian"				##
1249
## - Paramètrage du gestionnaire de contenu Dansguardian	##
1250
## - Paramètrage du gestionnaire de contenu Dansguardian	##
1250
##################################################################
1251
##################################################################
1251
dansguardian ()
1252
dansguardian ()
1252
{
1253
{
1253
	mkdir -p /var/dansguardian /var/log/dansguardian
1254
	mkdir -p /var/dansguardian /var/log/dansguardian
1254
	chown -R dansguardian /var/dansguardian /var/log/dansguardian
1255
	chown -R dansguardian /var/dansguardian /var/log/dansguardian
1255
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dansguardian -c /etc/dansguardian/dansguardian.conf?g" /lib/systemd/system/dansguardian.service
1256
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dansguardian -c /etc/dansguardian/dansguardian.conf?g" /lib/systemd/system/dansguardian.service
1256
	$SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/dansguardian.service
1257
	$SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/dansguardian.service
1257
	[ -e $DIR_DG/dansguardian.conf.default ] || cp $DIR_DG/dansguardian.conf $DIR_DG/dansguardian.conf.default
1258
	[ -e $DIR_DG/dansguardian.conf.default ] || cp $DIR_DG/dansguardian.conf $DIR_DG/dansguardian.conf.default
1258
# By default the filter is off 
1259
# By default the filter is off 
1259
	$SED "s/^reportinglevel =.*/reportinglevel = 3/g" $DIR_DG/dansguardian.conf
1260
	$SED "s/^reportinglevel =.*/reportinglevel = 3/g" $DIR_DG/dansguardian.conf
1260
# French deny HTML page
1261
# French deny HTML page
1261
	$SED "s?^language =.*?language = french?g" $DIR_DG/dansguardian.conf
1262
	$SED "s?^language =.*?language = french?g" $DIR_DG/dansguardian.conf
1262
# Listen only on LAN side
1263
# Listen only on LAN side
1263
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/dansguardian.conf
1264
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/dansguardian.conf
1264
# DG send its flow to HAVP
1265
# DG send its flow to HAVP
1265
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/dansguardian.conf
1266
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/dansguardian.conf
1266
# replace the default deny HTML page
1267
# replace the default deny HTML page
1267
	cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
1268
	cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
1268
	cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
1269
	cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
1269
# Don't log
1270
# Don't log
1270
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/dansguardian.conf
1271
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/dansguardian.conf
1271
# on désactive par défaut le controle de contenu des pages html
1272
# on désactive par défaut le controle de contenu des pages html
1272
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/dansguardian.conf
1273
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/dansguardian.conf
1273
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1274
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1274
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1275
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1275
# on désactive par défaut le contrôle d'URL par expressions régulières
1276
# on désactive par défaut le contrôle d'URL par expressions régulières
1276
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1277
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1277
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1278
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1278
 
1279
 
1279
# Configure Dansguardian for large site
1280
# Configure Dansguardian for large site
1280
# Minimum number of processus to handle connections
1281
# Minimum number of processus to handle connections
1281
	$SED "s?^minchildren =.*?minchildren = 15?g" $DIR_DG/dansguardian.conf
1282
	$SED "s?^minchildren =.*?minchildren = 15?g" $DIR_DG/dansguardian.conf
1282
# Maximum number of processus to handle connections
1283
# Maximum number of processus to handle connections
1283
	$SED "s?^maxchildren =.*?maxchildren = 200?g" $DIR_DG/dansguardian.conf
1284
	$SED "s?^maxchildren =.*?maxchildren = 200?g" $DIR_DG/dansguardian.conf
1284
# Run at least 8 daemons
1285
# Run at least 8 daemons
1285
	$SED "s?^minsparechildren =.*?minsparechildren = 8?g" $DIR_DG/dansguardian.conf
1286
	$SED "s?^minsparechildren =.*?minsparechildren = 8?g" $DIR_DG/dansguardian.conf
1286
# minimum number of processes to spawn
1287
# minimum number of processes to spawn
1287
	$SED "s?^preforkchildren =.*?preforkchildren = 10?g" $DIR_DG/dansguardian.conf
1288
	$SED "s?^preforkchildren =.*?preforkchildren = 10?g" $DIR_DG/dansguardian.conf
1288
# maximum age of a child process before it croaks it
1289
# maximum age of a child process before it croaks it
1289
	$SED "s?^maxagechildren =.*?maxagechildren = 1000?g" $DIR_DG/dansguardian.conf
1290
	$SED "s?^maxagechildren =.*?maxagechildren = 1000?g" $DIR_DG/dansguardian.conf
1290
	
1291
	
1291
# on désactive par défaut le contrôle de téléchargement de fichiers
1292
# on désactive par défaut le contrôle de téléchargement de fichiers
1292
	[ -e $DIR_DG/dansguardianf1.conf.default ] || cp $DIR_DG/dansguardianf1.conf $DIR_DG/dansguardianf1.conf.default
1293
	[ -e $DIR_DG/dansguardianf1.conf.default ] || cp $DIR_DG/dansguardianf1.conf $DIR_DG/dansguardianf1.conf.default
1293
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/dansguardianf1.conf
1294
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/dansguardianf1.conf
1294
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1295
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1295
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1296
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1296
	touch $DIR_DG/lists/bannedextensionlist
1297
	touch $DIR_DG/lists/bannedextensionlist
1297
	touch $DIR_DG/lists/bannedmimetypelist
1298
	touch $DIR_DG/lists/bannedmimetypelist
1298
# 'Safesearch' regex actualisation
1299
# 'Safesearch' regex actualisation
1299
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1300
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1300
# empty LAN IP list that won't be WEB filtered
1301
# empty LAN IP list that won't be WEB filtered
1301
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1302
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1302
	touch $DIR_DG/lists/exceptioniplist
1303
	touch $DIR_DG/lists/exceptioniplist
1303
# Keep a copy of URL & domain filter configuration files
1304
# Keep a copy of URL & domain filter configuration files
1304
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1305
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1305
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1306
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1306
} # End of dansguardian ()
1307
} # End of dansguardian ()
1307
 
1308
 
1308
##################################################################
1309
##################################################################
1309
##			Fonction "antivirus"			##
1310
##			Fonction "antivirus"			##
1310
## - configuration of havp, libclamav and freshclam		##
1311
## - configuration of havp, libclamav and freshclam		##
1311
##################################################################
1312
##################################################################
1312
antivirus ()		
1313
antivirus ()		
1313
{
1314
{
1314
# create 'havp' user
1315
# create 'havp' user
1315
	havp_exist=`grep havp /etc/passwd|wc -l`
1316
	havp_exist=`grep havp /etc/passwd|wc -l`
1316
	if [ "$havp_exist" == "1" ]
1317
	if [ "$havp_exist" == "1" ]
1317
	then
1318
	then
1318
	      userdel -r havp 2>/dev/null
1319
	      userdel -r havp 2>/dev/null
1319
	      groupdel havp 2>/dev/null
1320
	      groupdel havp 2>/dev/null
1320
	fi
1321
	fi
1321
	groupadd -f havp
1322
	groupadd -f havp
1322
	useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1323
	useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1323
	mkdir -p /var/tmp/havp /var/log/havp /var/run/havp /var/log/clamav /var/lib/clamav
1324
	mkdir -p /var/tmp/havp /var/log/havp /var/run/havp /var/log/clamav /var/lib/clamav
1324
	chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1325
	chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1325
	chown -R clamav:clamav /var/log/clamav /var/lib/clamav
1326
	chown -R clamav:clamav /var/log/clamav /var/lib/clamav
1326
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1327
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1327
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1328
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1328
	$SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config	# pidfile
1329
	$SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config	# pidfile
1329
	$SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config		# transparent mode
1330
	$SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config		# transparent mode
1330
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
1331
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
1331
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on port 8090 (on loopback)
1332
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on port 8090 (on loopback)
1332
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
1333
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
1333
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1334
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1334
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
1335
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
1335
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
1336
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
1336
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1337
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1337
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1338
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1338
# skip checking of youtube flow (too heavy load / risk too low)
1339
# skip checking of youtube flow (too heavy load / risk too low)
1339
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1340
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1340
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1341
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1341
	echo "*.youtube.com/*" >> /etc/havp/whitelist
1342
	echo "*.youtube.com/*" >> /etc/havp/whitelist
1342
# adapt init script and systemd unit
1343
# adapt init script and systemd unit
1343
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1344
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1344
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
1345
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
1345
	[ -e /lib/systemd/system/havp.service.default ] || cp /lib/systemd/system/havp.service /lib/systemd/system/havp.service.default
1346
	[ -e /lib/systemd/system/havp.service.default ] || cp /lib/systemd/system/havp.service /lib/systemd/system/havp.service.default
1346
	$SED "/^PIDFile/i ExecStartPre=/bin/mkdir -p /var/run/havp" /lib/systemd/system/havp.service
1347
	$SED "/^PIDFile/i ExecStartPre=/bin/mkdir -p /var/run/havp" /lib/systemd/system/havp.service
1347
	$SED "/^PIDFile/i ExecStartPre=/bin/chown -R havp:havp /var/run/havp /var/log/havp" /lib/systemd/system/havp.service
1348
	$SED "/^PIDFile/i ExecStartPre=/bin/chown -R havp:havp /var/run/havp /var/log/havp" /lib/systemd/system/havp.service
1348
# replace of the intercept page (template)
1349
# replace of the intercept page (template)
1349
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1350
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1350
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1351
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1351
# update virus database every 4 hours (24h/6)
1352
# update virus database every 4 hours (24h/6)
1352
	[ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1353
	[ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1353
	$SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1354
	$SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1354
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1355
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1355
	$SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1356
	$SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1356
	$SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1357
	$SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1357
	$SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1358
	$SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1358
# update now
1359
# update now
1359
	/usr/bin/freshclam --no-warnings
1360
	/usr/bin/freshclam --no-warnings
1360
} # End of antivirus ()
1361
} # End of antivirus ()
1361
 
1362
 
1362
##########################################################################
1363
##########################################################################
1363
##			Fonction "tinyproxy"				##
1364
##			Fonction "tinyproxy"				##
1364
## - configuration of tinyproxy (proxy between filterde users and havp)	##
1365
## - configuration of tinyproxy (proxy between filterde users and havp)	##
1365
##########################################################################
1366
##########################################################################
1366
tinyproxy ()		
1367
tinyproxy ()		
1367
{
1368
{
1368
	tinyproxy_exist=`grep tinyproxy /etc/passwd|wc -l`
1369
	tinyproxy_exist=`grep tinyproxy /etc/passwd|wc -l`
1369
	if [ "$tinyproxy_exist" == "1" ]
1370
	if [ "$tinyproxy_exist" == "1" ]
1370
	then
1371
	then
1371
	      userdel -r tinyproxy 2>/dev/null
1372
	      userdel -r tinyproxy 2>/dev/null
1372
	      groupdel tinyproxy 2>/dev/null
1373
	      groupdel tinyproxy 2>/dev/null
1373
	fi
1374
	fi
1374
	groupadd -f tinyproxy
1375
	groupadd -f tinyproxy
1375
	useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" tinyproxy
1376
	useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" tinyproxy
1376
	mkdir -p /var/run/tinyproxy /var/log/tinyproxy
1377
	mkdir -p /var/run/tinyproxy /var/log/tinyproxy
1377
	chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1378
	chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1378
	[ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
1379
	[ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
1379
	$SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1380
	$SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1380
	$SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1381
	$SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1381
	$SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf			# Listen Port
1382
	$SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf			# Listen Port
1382
	$SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf		# Listen NIC (only intif)
1383
	$SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf		# Listen NIC (only intif)
1383
	$SED "s?^#LogFile.*?LogFile \"/var/log/tinyproxy/tinyproxy.log\"?g" /etc/tinyproxy/tinyproxy.conf
1384
	$SED "s?^#LogFile.*?LogFile \"/var/log/tinyproxy/tinyproxy.log\"?g" /etc/tinyproxy/tinyproxy.conf
1384
	$SED "s?^#PidFile.*?PidFile \"/var/run/tinyproxy/tinyproxy.pid\"?g" /etc/tinyproxy/tinyproxy.conf
1385
	$SED "s?^#PidFile.*?PidFile \"/var/run/tinyproxy/tinyproxy.pid\"?g" /etc/tinyproxy/tinyproxy.conf
1385
	$SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf		# Only errors are logged
1386
	$SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf		# Only errors are logged
1386
	$SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf	# forward to HAVP
1387
	$SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf	# forward to HAVP
1387
	$SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf	# Stealth mode
1388
	$SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf	# Stealth mode
1388
	$SED "s?^Allow.*?Allow $PRIVATE_NETWORK_MASK?g" /etc/tinyproxy/tinyproxy.conf	# Allow from LAN
1389
	$SED "s?^Allow.*?Allow $PRIVATE_NETWORK_MASK?g" /etc/tinyproxy/tinyproxy.conf	# Allow from LAN
1389
# Create the systemd unit
1390
# Create the systemd unit
1390
cat << EOF > /lib/systemd/system/tinyproxy.service
1391
cat << EOF > /lib/systemd/system/tinyproxy.service
1391
#  This file is part of systemd.
1392
#  This file is part of systemd.
1392
#
1393
#
1393
#  systemd is free software; you can redistribute it and/or modify it
1394
#  systemd is free software; you can redistribute it and/or modify it
1394
#  under the terms of the GNU General Public License as published by
1395
#  under the terms of the GNU General Public License as published by
1395
#  the Free Software Foundation; either version 2 of the License, or
1396
#  the Free Software Foundation; either version 2 of the License, or
1396
#  (at your option) any later version.
1397
#  (at your option) any later version.
1397
 
1398
 
1398
# This unit launches tinyproxy (a very light proxy).
1399
# This unit launches tinyproxy (a very light proxy).
1399
# The "sleep 2" is needed because the pid file isn't ready for systemd
1400
# The "sleep 2" is needed because the pid file isn't ready for systemd
1400
[Unit]
1401
[Unit]
1401
Description=Tinyproxy Web Proxy Server
1402
Description=Tinyproxy Web Proxy Server
1402
After=network.target iptables.service
1403
After=network.target iptables.service
1403
 
1404
 
1404
[Service]
1405
[Service]
1405
Type=forking
1406
Type=forking
1406
ExecStartPre=/bin/chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1407
ExecStartPre=/bin/chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1407
ExecStartPre=/bin/sleep 2
1408
ExecStartPre=/bin/sleep 2
1408
PIDFile=/var/run/tinyproxy/tinyproxy.pid
1409
PIDFile=/var/run/tinyproxy/tinyproxy.pid
1409
ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf
1410
ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf
1410
 
1411
 
1411
[Install]
1412
[Install]
1412
WantedBy=multi-user.target
1413
WantedBy=multi-user.target
1413
EOF
1414
EOF
1414
 
1415
 
1415
} # end of tinyproxy
1416
} # end of tinyproxy
1416
##################################################################################
1417
##################################################################################
1417
##			function "ulogd"					##
1418
##			function "ulogd"					##
1418
## - Ulog config for multi-log files 						##
1419
## - Ulog config for multi-log files 						##
1419
##################################################################################
1420
##################################################################################
1420
ulogd ()
1421
ulogd ()
1421
{
1422
{
1422
# Three instances of ulogd (three different logfiles)
1423
# Three instances of ulogd (three different logfiles)
1423
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1424
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1424
	nl=1
1425
	nl=1
1425
	for log_type in traceability ssh ext-access
1426
	for log_type in traceability ssh ext-access
1426
	do
1427
	do
1427
		[ -e /lib/systemd/system/ulogd-$log_type.service ] || cp -f /lib/systemd/system/ulogd.service /lib/systemd/system/ulogd-$log_type.service
1428
		[ -e /lib/systemd/system/ulogd-$log_type.service ] || cp -f /lib/systemd/system/ulogd.service /lib/systemd/system/ulogd-$log_type.service
1428
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1429
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1429
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1430
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1430
		$SED "s?^group=.*?group=$nl?g" /etc/ulogd-$log_type.conf
1431
		$SED "s?^group=.*?group=$nl?g" /etc/ulogd-$log_type.conf
1431
		cat << EOF >> /etc/ulogd-$log_type.conf
1432
		cat << EOF >> /etc/ulogd-$log_type.conf
1432
[emu1]
1433
[emu1]
1433
file="/var/log/firewall/$log_type.log"
1434
file="/var/log/firewall/$log_type.log"
1434
sync=1
1435
sync=1
1435
EOF
1436
EOF
1436
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/ulogd -u ulogd -c /etc/ulogd-$log_type.conf $ULOGD_OPTIONS?g" /lib/systemd/system/ulogd-$log_type.service
1437
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/ulogd -u ulogd -c /etc/ulogd-$log_type.conf $ULOGD_OPTIONS?g" /lib/systemd/system/ulogd-$log_type.service
1437
		nl=`expr $nl + 1`
1438
		nl=`expr $nl + 1`
1438
	done
1439
	done
1439
	chown -R root:apache /var/log/firewall
1440
	chown -R root:apache /var/log/firewall
1440
	chmod 750 /var/log/firewall
1441
	chmod 750 /var/log/firewall
1441
	chmod 640 /var/log/firewall/*
1442
	chmod 640 /var/log/firewall/*
1442
}  # End of ulogd ()
1443
}  # End of ulogd ()
1443
 
1444
 
1444
 
1445
 
1445
##########################################################
1446
##########################################################
1446
##              Function "nfsen"			##
1447
##              Function "nfsen"			##
1447
## - install the nfsen grapher				##
1448
## - install the nfsen grapher				##
1448
## - install the two plugins porttracker & surfmap	##
1449
## - install the two plugins porttracker & surfmap	##
1449
##########################################################
1450
##########################################################
1450
nfsen()
1451
nfsen()
1451
{
1452
{
1452
	tar xzf ./conf/nfsen/nfsen-1.3.7.tar.gz -C /tmp/
1453
	tar xzf ./conf/nfsen/nfsen-1.3.7.tar.gz -C /tmp/
1453
# Add PortTracker plugin
1454
# Add PortTracker plugin
1454
	for i in /var/www/html/acc/manager/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1455
	for i in /var/www/html/acc/manager/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1455
	do
1456
	do
1456
	[ ! -d $i ] && mkdir -p $i && chown -R apache:apache $i
1457
	[ ! -d $i ] && mkdir -p $i && chown -R apache:apache $i
1457
	done
1458
	done
1458
	$SED "s?^my \$PORTSDBDIR =.*?my \$PORTSDBDIR = \"/var/log/netflow/porttracker\";?g" /tmp/nfsen-1.3.7/contrib/PortTracker/PortTracker.pm
1459
	$SED "s?^my \$PORTSDBDIR =.*?my \$PORTSDBDIR = \"/var/log/netflow/porttracker\";?g" /tmp/nfsen-1.3.7/contrib/PortTracker/PortTracker.pm
1459
# use of our conf file and init unit
1460
# use of our conf file and init unit
1460
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-1.3.7/etc/
1461
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-1.3.7/etc/
1461
# Installation of nfsen (we change a little 'install.pl in order not to ask the user for the perl version)
1462
# Installation of nfsen (we change a little 'install.pl in order not to ask the user for the perl version)
1462
	DirTmp=$(pwd)
1463
	DirTmp=$(pwd)
1463
	cd /tmp/nfsen-1.3.7/
1464
	cd /tmp/nfsen-1.3.7/
1464
	/usr/bin/perl install.pl etc/nfsen.conf
1465
	/usr/bin/perl install.pl etc/nfsen.conf
1465
	/usr/bin/perl install.pl etc/nfsen.conf # to avoid a Perl mistake "Semaphore introuvable"
1466
	/usr/bin/perl install.pl etc/nfsen.conf # to avoid a Perl mistake "Semaphore introuvable"
1466
# Create RRD DB for porttracker (only in it still doesn't exist)
1467
# Create RRD DB for porttracker (only in it still doesn't exist)
1467
	cp contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1468
	cp contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1468
	cp contrib/PortTracker/PortTracker.php /var/www/html/acc/manager/nfsen/plugins/
1469
	cp contrib/PortTracker/PortTracker.php /var/www/html/acc/manager/nfsen/plugins/
1469
	if [ "$(ls -A "/var/log/netflow/porttracker" 2>&1)" = "" ]; then sudo -u apache nftrack -I -d /var/log/netflow/porttracker; else echo "RRD DB already exists"; fi
1470
	if [ "$(ls -A "/var/log/netflow/porttracker" 2>&1)" = "" ]; then sudo -u apache nftrack -I -d /var/log/netflow/porttracker; else echo "RRD DB already exists"; fi
1470
	chmod -R 770 /var/log/netflow/porttracker
1471
	chmod -R 770 /var/log/netflow/porttracker
1471
# nfsen unit for systemd
1472
# nfsen unit for systemd
1472
cat << EOF > /lib/systemd/system/nfsen.service
1473
cat << EOF > /lib/systemd/system/nfsen.service
1473
#  This file is part of systemd.
1474
#  This file is part of systemd.
1474
#
1475
#
1475
#  systemd is free software; you can redistribute it and/or modify it
1476
#  systemd is free software; you can redistribute it and/or modify it
1476
#  under the terms of the GNU General Public License as published by
1477
#  under the terms of the GNU General Public License as published by
1477
#  the Free Software Foundation; either version 2 of the License, or
1478
#  the Free Software Foundation; either version 2 of the License, or
1478
#  (at your option) any later version.
1479
#  (at your option) any later version.
1479
 
1480
 
1480
# This unit launches nfsen (a Netflow grapher).
1481
# This unit launches nfsen (a Netflow grapher).
1481
[Unit]
1482
[Unit]
1482
Description= NfSen init script
1483
Description= NfSen init script
1483
After=network.target iptables.service
1484
After=network.target iptables.service
1484
 
1485
 
1485
[Service]
1486
[Service]
1486
Type=oneshot
1487
Type=oneshot
1487
RemainAfterExit=yes
1488
RemainAfterExit=yes
1488
PIDFile=/var/run/nfsen/nfsen.pid
1489
PIDFile=/var/run/nfsen/nfsen.pid
1489
ExecStartPre=/bin/mkdir -p /var/run/nfsen
1490
ExecStartPre=/bin/mkdir -p /var/run/nfsen
1490
ExecStartPre=/bin/chown apache:apache /var/run/nfsen
1491
ExecStartPre=/bin/chown apache:apache /var/run/nfsen
1491
ExecStart=/usr/bin/nfsen start 
1492
ExecStart=/usr/bin/nfsen start 
1492
ExecStop=/usr/bin/nfsen stop
1493
ExecStop=/usr/bin/nfsen stop
1493
ExecReload=/usr/bin/nfsen restart
1494
ExecReload=/usr/bin/nfsen restart
1494
TimeoutSec=0
1495
TimeoutSec=0
1495
 
1496
 
1496
[Install]
1497
[Install]
1497
WantedBy=multi-user.target
1498
WantedBy=multi-user.target
1498
EOF
1499
EOF
1499
# Add the listen port to collect netflow packet (nfcapd)
1500
# Add the listen port to collect netflow packet (nfcapd)
1500
$SED "s?'\$ziparg $extensions.*?\$ziparg $extensions -b 127.0.0.1;'?g" /usr/libexec/NfSenRC.pm 
1501
$SED "s?'\$ziparg $extensions.*?\$ziparg $extensions -b 127.0.0.1;'?g" /usr/libexec/NfSenRC.pm 
1501
# expire delay for the profile "live"
1502
# expire delay for the profile "live"
1502
	/usr/bin/systemctl start nfsen
1503
	/usr/bin/systemctl start nfsen
1503
	/bin/nfsen -m live -e 62d 2>/dev/null
1504
	/bin/nfsen -m live -e 62d 2>/dev/null
1504
# add SURFmap plugin
1505
# add SURFmap plugin
1505
	cp $DIR_CONF/nfsen/SURFmap_v3.3.1.tar.gz /tmp/
1506
	cp $DIR_CONF/nfsen/SURFmap_v3.3.1.tar.gz /tmp/
1506
	cp $DIR_CONF/nfsen/GeoLiteCity* /tmp/
1507
	cp $DIR_CONF/nfsen/GeoLiteCity* /tmp/
1507
	tar xzf /tmp/SURFmap_v3.3.1.tar.gz -C /tmp/
1508
	tar xzf /tmp/SURFmap_v3.3.1.tar.gz -C /tmp/
1508
	cd /tmp/
1509
	cd /tmp/
1509
	/usr/bin/sh SURFmap/install.sh
1510
	/usr/bin/sh SURFmap/install.sh
1510
chown -R apache:apache /var/www/html/acc/manager/nfsen /usr/share/nfsen
1511
chown -R apache:apache /var/www/html/acc/manager/nfsen /usr/share/nfsen
1511
# clear the installation
1512
# clear the installation
1512
	cd $DirTmp
1513
	cd $DirTmp
1513
	rm -rf /tmp/nfsen*
1514
	rm -rf /tmp/nfsen*
1514
	rm -rf /tmp/SURFmap*
1515
	rm -rf /tmp/SURFmap*
1515
} # End of nfsen ()
1516
} # End of nfsen ()
1516
 
1517
 
1517
##################################################
1518
##################################################
1518
##		Function "vnstat"		##
1519
##		Function "vnstat"		##
1519
## Initialization of Vnstat and vnstat phpFE    ##
1520
## Initialization of Vnstat and vnstat phpFE    ##
1520
##################################################
1521
##################################################
1521
vnstat ()
1522
vnstat ()
1522
{
1523
{
1523
	 [ -e /etc/vnstat.conf.default ] || cp /etc/vnstat.conf /etc/vnstat.conf.default
1524
	 [ -e /etc/vnstat.conf.default ] || cp /etc/vnstat.conf /etc/vnstat.conf.default
1524
	 $SED "s?Interface.*?Interface \"$EXTIF\"?g" /etc/vnstat.conf
1525
	 $SED "s?Interface.*?Interface \"$EXTIF\"?g" /etc/vnstat.conf
1525
	 [ -e $DIR_ACC/manager/stats/config.php.default ] || cp $DIR_ACC/manager/stats/config.php $DIR_ACC/manager/stats/config.php.default
1526
	 [ -e $DIR_ACC/manager/stats/config.php.default ] || cp $DIR_ACC/manager/stats/config.php $DIR_ACC/manager/stats/config.php.default
1526
	 $SED "s?\$iface_list =.*?\$iface_list = array('$EXTIF');?g" $DIR_ACC/manager/stats/config.php
1527
	 $SED "s?\$iface_list =.*?\$iface_list = array('$EXTIF');?g" $DIR_ACC/manager/stats/config.php
1527
	/usr/bin/vnstat -u -i $EXTIF
1528
	/usr/bin/vnstat -u -i $EXTIF
1528
} # End of vnstat	
1529
} # End of vnstat	
1529
##################################################
1530
##################################################
1530
##		Function "dnsmasq"		##
1531
##		Function "dnsmasq"		##
1531
##################################################
1532
##################################################
1532
dnsmasq ()
1533
dnsmasq ()
1533
{
1534
{
1534
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1535
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1535
	[ -e /etc/sysconfig/dnsmasq.default ] || cp /etc/sysconfig/dnsmasq /etc/sysconfig/dnsmasq.default
1536
	[ -e /etc/sysconfig/dnsmasq.default ] || cp /etc/sysconfig/dnsmasq /etc/sysconfig/dnsmasq.default
1536
#	$SED "s?^OPTION=.*?OPTION=-C /etc/dnsmasq.conf?g" /etc/sysconfig/dnsmasq # default conf file for the first dnsmasq instance
1537
#	$SED "s?^OPTION=.*?OPTION=-C /etc/dnsmasq.conf?g" /etc/sysconfig/dnsmasq # default conf file for the first dnsmasq instance
1537
	$SED "s?^.*OPTIONS=.*?#OPTIONS=\"--log-async=250 --log-queries --log-facility=/var/log/dnsmasq/queries.log\"?g" /etc/sysconfig/dnsmasq # General Options for dnslog or debugging
1538
	$SED "s?^.*OPTIONS=.*?#OPTIONS=\"--log-async=250 --log-queries --log-facility=/var/log/dnsmasq/queries.log\"?g" /etc/sysconfig/dnsmasq # General Options for dnslog or debugging
1538
	$SED "s?^local=.*?local=/$DOMAIN/?g" $DIR_DEST_ETC/alcasar-dns-name # default domain name for all dnsmasq daemons
1539
	$SED "s?^local=.*?local=/$DOMAIN/?g" $DIR_DEST_ETC/alcasar-dns-name # default domain name for all dnsmasq daemons
1539
	[ -e /etc/dnsmasq.conf.default ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
1540
	[ -e /etc/dnsmasq.conf.default ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
1540
# 1st dnsmasq listen on udp 53 ("dnsmasq - forward"). It's used as dhcp server only if "alcasar-bypass" is on.
1541
# 1st dnsmasq listen on udp 53 ("dnsmasq - forward"). It's used as dhcp server only if "alcasar-bypass" is on.
1541
	cat << EOF > /etc/dnsmasq.conf
1542
	cat << EOF > /etc/dnsmasq.conf
1542
# Configuration file for "dnsmasq in forward mode"
1543
# Configuration file for "dnsmasq in forward mode"
1543
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1544
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1544
listen-address=$PRIVATE_IP
1545
listen-address=$PRIVATE_IP
1545
pid-file=/var/run/dnsmasq.pid
1546
pid-file=/var/run/dnsmasq.pid
1546
listen-address=127.0.0.1
1547
listen-address=127.0.0.1
1547
no-dhcp-interface=$INTIF
1548
no-dhcp-interface=$INTIF
1548
no-dhcp-interface=tun0
1549
no-dhcp-interface=tun0
1549
no-dhcp-interface=lo
1550
no-dhcp-interface=lo
1550
bind-interfaces
1551
bind-interfaces
1551
cache-size=2048
1552
cache-size=2048
1552
domain-needed
1553
domain-needed
1553
expand-hosts
1554
expand-hosts
1554
bogus-priv
1555
bogus-priv
1555
filterwin2k
1556
filterwin2k
1556
server=$DNS1
1557
server=$DNS1
1557
server=$DNS2
1558
server=$DNS2
1558
# DHCP service is configured. It will be enabled in "bypass" mode
1559
# DHCP service is configured. It will be enabled in "bypass" mode
1559
#dhcp-range=$PRIVATE_FIRST_IP,$PRIVATE_LAST_IP,$PRIVATE_NETMASK,12h
1560
#dhcp-range=$PRIVATE_FIRST_IP,$PRIVATE_LAST_IP,$PRIVATE_NETMASK,12h
1560
#dhcp-option=option:router,$PRIVATE_IP
1561
#dhcp-option=option:router,$PRIVATE_IP
1561
#dhcp-option=option:ntp-server,$PRIVATE_IP
1562
#dhcp-option=option:ntp-server,$PRIVATE_IP
1562
#domain=$DOMAIN
1563
#domain=$DOMAIN
1563
 
1564
 
1564
# Exemple of static dhcp assignation : <@MAC>,<name>,<@IP>,<MASK>,<ttl bail>
1565
# Exemple of static dhcp assignation : <@MAC>,<name>,<@IP>,<MASK>,<ttl bail>
1565
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.182.20,255.255.255.0,45m
1566
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.182.20,255.255.255.0,45m
1566
EOF
1567
EOF
1567
# 2nd dnsmasq listen on udp 54 ("dnsmasq with blacklist")
1568
# 2nd dnsmasq listen on udp 54 ("dnsmasq with blacklist")
1568
	cat << EOF > /etc/dnsmasq-blacklist.conf
1569
	cat << EOF > /etc/dnsmasq-blacklist.conf
1569
# Configuration file for "dnsmasq with blacklist"
1570
# Configuration file for "dnsmasq with blacklist"
1570
# Add Toulouse University blacklist domains
1571
# Add Toulouse University blacklist domains
1571
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1572
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1572
conf-dir=$DIR_DEST_SHARE/dnsmasq-bl-enabled
1573
conf-dir=$DIR_DEST_SHARE/dnsmasq-bl-enabled
1573
pid-file=/var/run/dnsmasq-blacklist.pid
1574
pid-file=/var/run/dnsmasq-blacklist.pid
1574
listen-address=$PRIVATE_IP
1575
listen-address=$PRIVATE_IP
1575
port=54
1576
port=54
1576
no-dhcp-interface=$INTIF
1577
no-dhcp-interface=$INTIF
1577
no-dhcp-interface=tun0
1578
no-dhcp-interface=tun0
1578
no-dhcp-interface=lo
1579
no-dhcp-interface=lo
1579
bind-interfaces
1580
bind-interfaces
1580
cache-size=2048
1581
cache-size=2048
1581
domain-needed
1582
domain-needed
1582
expand-hosts
1583
expand-hosts
1583
bogus-priv
1584
bogus-priv
1584
filterwin2k
1585
filterwin2k
1585
log-queries
1586
log-queries
1586
log-facility=/var/log/dnsmasq/dnsmasq-blacklist.log
1587
log-facility=/var/log/dnsmasq/dnsmasq-blacklist.log
1587
server=$DNS1
1588
server=$DNS1
1588
server=$DNS2
1589
server=$DNS2
1589
EOF
1590
EOF
1590
# 3rd dnsmasq listen on udp 55 ("dnsmasq with whitelist")
1591
# 3rd dnsmasq listen on udp 55 ("dnsmasq with whitelist")
1591
	cat << EOF > /etc/dnsmasq-whitelist.conf
1592
	cat << EOF > /etc/dnsmasq-whitelist.conf
1592
# Configuration file for "dnsmasq with whitelist"
1593
# Configuration file for "dnsmasq with whitelist"
1593
# ADD Toulouse university whitelist domains
1594
# ADD Toulouse university whitelist domains
1594
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1595
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1595
conf-dir=$DIR_DEST_SHARE/dnsmasq-wl-enabled
1596
conf-dir=$DIR_DEST_SHARE/dnsmasq-wl-enabled
1596
pid-file=/var/run/dnsmasq-whitelist.pid
1597
pid-file=/var/run/dnsmasq-whitelist.pid
1597
listen-address=$PRIVATE_IP
1598
listen-address=$PRIVATE_IP
1598
port=55
1599
port=55
1599
no-dhcp-interface=$INTIF
1600
no-dhcp-interface=$INTIF
1600
no-dhcp-interface=tun0
1601
no-dhcp-interface=tun0
1601
no-dhcp-interface=lo
1602
no-dhcp-interface=lo
1602
bind-interfaces
1603
bind-interfaces
1603
cache-size=1024
1604
cache-size=1024
1604
domain-needed
1605
domain-needed
1605
expand-hosts
1606
expand-hosts
1606
bogus-priv
1607
bogus-priv
1607
filterwin2k
1608
filterwin2k
1608
ipset=/#/wl_ip_allowed			# dynamicly add the resolv IP address in the Firewall rules
1609
ipset=/#/wl_ip_allowed			# dynamicly add the resolv IP address in the Firewall rules
1609
address=/#/$PRIVATE_IP				# for Domain name without local resolution (WL)  
1610
address=/#/$PRIVATE_IP				# for Domain name without local resolution (WL)  
1610
EOF
1611
EOF
1611
# 4th dnsmasq listen on udp 56 ("blackhole")
1612
# 4th dnsmasq listen on udp 56 ("blackhole")
1612
	cat << EOF > /etc/dnsmasq-blackhole.conf
1613
	cat << EOF > /etc/dnsmasq-blackhole.conf
1613
# Configuration file for "dnsmasq as a blackhole"
1614
# Configuration file for "dnsmasq as a blackhole"
1614
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1615
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1615
address=/#/$PRIVATE_IP				# redirect all on ALCASAR IP address
1616
address=/#/$PRIVATE_IP				# redirect all on ALCASAR IP address
1616
pid-file=/var/run/dnsmasq-blackhole.pid
1617
pid-file=/var/run/dnsmasq-blackhole.pid
1617
listen-address=$PRIVATE_IP
1618
listen-address=$PRIVATE_IP
1618
port=56
1619
port=56
1619
no-dhcp-interface=$INTIF
1620
no-dhcp-interface=$INTIF
1620
no-dhcp-interface=tun0
1621
no-dhcp-interface=tun0
1621
no-dhcp-interface=lo
1622
no-dhcp-interface=lo
1622
bind-interfaces
1623
bind-interfaces
1623
cache-size=256
1624
cache-size=256
1624
domain-needed
1625
domain-needed
1625
expand-hosts
1626
expand-hosts
1626
bogus-priv
1627
bogus-priv
1627
filterwin2k
1628
filterwin2k
1628
EOF
1629
EOF
1629
 
1630
 
1630
# the main instance should start after network and chilli (which create tun0)
1631
# the main instance should start after network and chilli (which create tun0)
1631
	[ -e /lib/systemd/system/dnsmasq.service.default ] || cp -f /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq.service.default
1632
	[ -e /lib/systemd/system/dnsmasq.service.default ] || cp -f /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq.service.default
1632
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service?g" /lib/systemd/system/dnsmasq.service
1633
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service?g" /lib/systemd/system/dnsmasq.service
1633
# Create dnsmasq-blacklist, dnsmasq-whitelist and dnsmasq-blackhole unit
1634
# Create dnsmasq-blacklist, dnsmasq-whitelist and dnsmasq-blackhole unit
1634
	for list in blacklist whitelist blackhole
1635
	for list in blacklist whitelist blackhole
1635
	do
1636
	do
1636
		cp -f /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq-$list.service
1637
		cp -f /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq-$list.service
1637
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq-$list.conf?g" /lib/systemd/system/dnsmasq-$list.service
1638
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq-$list.conf?g" /lib/systemd/system/dnsmasq-$list.service
1638
		$SED "s?^PIDFile=.*?PIDFile=/var/run/dnsmasq-$list.pid?g" /lib/systemd/system/dnsmasq-$list.service
1639
		$SED "s?^PIDFile=.*?PIDFile=/var/run/dnsmasq-$list.pid?g" /lib/systemd/system/dnsmasq-$list.service
1639
	done
1640
	done
1640
} # End dnsmasq
1641
} # End dnsmasq
1641
 
1642
 
1642
##########################################################
1643
##########################################################
1643
##		Fonction "BL"				##
1644
##		Fonction "BL"				##
1644
##########################################################
1645
##########################################################
1645
BL ()
1646
BL ()
1646
{
1647
{
1647
	# copy the Toulouse university BL in order to be adapted to ALCASAR architecture (alcasar-bl.sh -adapt)
1648
	# copy the Toulouse university BL in order to be adapted to ALCASAR architecture (alcasar-bl.sh -adapt)
1648
	rm -rf $DIR_DG/lists/blacklists
1649
	rm -rf $DIR_DG/lists/blacklists
1649
	mkdir -p /tmp/blacklists
1650
	mkdir -p /tmp/blacklists
1650
	cp $DIR_BLACKLIST/blacklists.tar.gz /tmp/blacklists/
1651
	cp $DIR_BLACKLIST/blacklists.tar.gz /tmp/blacklists/
1651
# creation of file for the rehabilited domains and urls
1652
# creation of file for the rehabilited domains and urls
1652
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
1653
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
1653
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
1654
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
1654
	touch $DIR_DG/lists/exceptionsitelist
1655
	touch $DIR_DG/lists/exceptionsitelist
1655
	touch $DIR_DG/lists/exceptionurllist
1656
	touch $DIR_DG/lists/exceptionurllist
1656
# On crée la configuration de base du filtrage de domaine et d'URL pour Dansguardian
1657
# On crée la configuration de base du filtrage de domaine et d'URL pour Dansguardian
1657
	cat <<EOF > $DIR_DG/lists/bannedurllist
1658
	cat <<EOF > $DIR_DG/lists/bannedurllist
1658
# Dansguardian filter config for ALCASAR
1659
# Dansguardian filter config for ALCASAR
1659
EOF
1660
EOF
1660
	cat <<EOF > $DIR_DG/lists/bannedsitelist
1661
	cat <<EOF > $DIR_DG/lists/bannedsitelist
1661
# Dansguardian domain filter config for ALCASAR
1662
# Dansguardian domain filter config for ALCASAR
1662
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1663
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1663
#**
1664
#**
1664
# block all SSL and CONNECT tunnels
1665
# block all SSL and CONNECT tunnels
1665
**s
1666
**s
1666
# block all SSL and CONNECT tunnels specified only as an IP
1667
# block all SSL and CONNECT tunnels specified only as an IP
1667
*ips
1668
*ips
1668
# block all sites specified only by an IP
1669
# block all sites specified only by an IP
1669
*ip
1670
*ip
1670
EOF
1671
EOF
1671
# Add Bing to the safesearch url regext list (parental control)
1672
# Add Bing to the safesearch url regext list (parental control)
1672
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1673
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1673
# Bing - add 'adlt=strict'
1674
# Bing - add 'adlt=strict'
1674
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1675
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1675
EOF
1676
EOF
1676
# change the google safesearch ("safe=strict" instead of "safe=vss")
1677
# change the google safesearch ("safe=strict" instead of "safe=vss")
1677
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
1678
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
1678
# creation of the custom BL and WL categorie named "ossi" (for domain names & ip only)
1679
# creation of the custom BL and WL categorie named "ossi" (for domain names & ip only)
1679
	mkdir -p $DIR_DG/lists/blacklists/ossi-bl
1680
	mkdir -p $DIR_DG/lists/blacklists/ossi-bl
1680
	touch $DIR_DG/lists/blacklists/ossi-bl/domains
1681
	touch $DIR_DG/lists/blacklists/ossi-bl/domains
1681
	echo "ossi-bl" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1682
	echo "ossi-bl" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1682
	mkdir -p $DIR_DG/lists/blacklists/ossi-wl
1683
	mkdir -p $DIR_DG/lists/blacklists/ossi-wl
1683
	touch $DIR_DG/lists/blacklists/ossi-wl/domains
1684
	touch $DIR_DG/lists/blacklists/ossi-wl/domains
1684
	echo "ossi-wl" >> $DIR_DEST_ETC/alcasar-wl-categories-enabled
1685
	echo "ossi-wl" >> $DIR_DEST_ETC/alcasar-wl-categories-enabled
1685
# add custom ALCASAR BL files
1686
# add custom ALCASAR BL files
1686
	for x in $(ls $DIR_BLACKLIST | grep -v "^blacklist")
1687
	for x in $(ls $DIR_BLACKLIST | grep -v "^blacklist")
1687
	do
1688
	do
1688
		mkdir $DIR_DG/lists/blacklists/ossi-bl-$x
1689
		mkdir $DIR_DG/lists/blacklists/ossi-bl-$x
1689
		cp $DIR_BLACKLIST/$x  $DIR_DG/lists/blacklists/ossi-bl-$x/domains
1690
		cp $DIR_BLACKLIST/$x  $DIR_DG/lists/blacklists/ossi-bl-$x/domains
1690
		echo "ossi-bl-$x" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1691
		echo "ossi-bl-$x" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1691
	done
1692
	done
1692
	chown -R dansguardian:apache $DIR_DG
1693
	chown -R dansguardian:apache $DIR_DG
1693
	chown -R root:apache $DIR_DEST_SHARE
1694
	chown -R root:apache $DIR_DEST_SHARE
1694
	chmod -R g+rw $DIR_DG $DIR_DEST_SHARE
1695
	chmod -R g+rw $DIR_DG $DIR_DEST_SHARE
1695
# adapt the Toulouse BL to ALCASAR architecture
1696
# adapt the Toulouse BL to ALCASAR architecture
1696
	$DIR_DEST_BIN/alcasar-bl.sh --adapt
1697
	$DIR_DEST_BIN/alcasar-bl.sh --adapt
1697
# enable the default categories
1698
# enable the default categories
1698
	$DIR_DEST_BIN/alcasar-bl.sh --cat_choice
1699
	$DIR_DEST_BIN/alcasar-bl.sh --cat_choice
1699
}
1700
}
1700
 
1701
 
1701
##########################################################
1702
##########################################################
1702
##		Fonction "cron"				##
1703
##		Fonction "cron"				##
1703
## - Mise en place des différents fichiers de cron	##
1704
## - Mise en place des différents fichiers de cron	##
1704
##########################################################
1705
##########################################################
1705
cron ()
1706
cron ()
1706
{
1707
{
1707
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1708
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1708
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1709
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1709
	cat <<EOF > /etc/crontab
1710
	cat <<EOF > /etc/crontab
1710
SHELL=/usr/bin/bash
1711
SHELL=/usr/bin/bash
1711
PATH=/usr/sbin:/usr/bin
1712
PATH=/usr/sbin:/usr/bin
1712
MAILTO=root
1713
MAILTO=root
1713
HOME=/
1714
HOME=/
1714
 
1715
 
1715
# run-parts
1716
# run-parts
1716
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1717
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1717
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1718
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1718
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1719
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1719
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1720
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1720
EOF
1721
EOF
1721
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1722
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1722
	cat <<EOF >> /etc/anacrontab
1723
	cat <<EOF >> /etc/anacrontab
1723
7       8       cron.MysqlDump          nice /etc/cron.d/alcasar-mysql
1724
7       8       cron.MysqlDump          nice /etc/cron.d/alcasar-mysql
1724
7       10      cron.logExport          nice /etc/cron.d/alcasar-archive
1725
7       10      cron.logExport          nice /etc/cron.d/alcasar-archive
1725
7	20	cron.importClean	nice /etc/cron.d/alcasar-clean_import
1726
7	20	cron.importClean	nice /etc/cron.d/alcasar-clean_import
1726
EOF
1727
EOF
1727
 
1728
 
1728
	cat <<EOF > /etc/cron.d/alcasar-mysql
1729
	cat <<EOF > /etc/cron.d/alcasar-mysql
1729
# Contrôle, réparation et export de la base des usagers (tous les lundi à 4h45)
1730
# Contrôle, réparation et export de la base des usagers (tous les lundi à 4h45)
1730
45 4 * * 1 root $DIR_DEST_BIN/alcasar-mysql.sh --dump
1731
45 4 * * 1 root $DIR_DEST_BIN/alcasar-mysql.sh --dump
1731
# Nettoyage des utilisateurs dont la date d'expiration du compte est supérieure à 7 jours
1732
# Nettoyage des utilisateurs dont la date d'expiration du compte est supérieure à 7 jours
1732
40 4 * * * root $DIR_DEST_BIN/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1733
40 4 * * * root $DIR_DEST_BIN/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1733
EOF
1734
EOF
1734
	cat <<EOF > /etc/cron.d/alcasar-archive
1735
	cat <<EOF > /etc/cron.d/alcasar-archive
1735
# Archive des logs et de la base de données (tous les lundi à 5h35)
1736
# Archive des logs et de la base de données (tous les lundi à 5h35)
1736
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1737
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1737
EOF
1738
EOF
1738
	cat << EOF > /etc/cron.d/alcasar-ticket-clean
1739
	cat << EOF > /etc/cron.d/alcasar-ticket-clean
1739
# suppression des fichiers de mots de passe (imports massifs par fichier) et des ticket PDF d'utilisateur
1740
# suppression des fichiers de mots de passe (imports massifs par fichier) et des ticket PDF d'utilisateur
1740
30 * * * *  root $DIR_DEST_BIN/alcasar-ticket-clean.sh
1741
30 * * * *  root $DIR_DEST_BIN/alcasar-ticket-clean.sh
1741
EOF
1742
EOF
1742
	cat << EOF > /etc/cron.d/alcasar-distrib-updates
1743
	cat << EOF > /etc/cron.d/alcasar-distrib-updates
1743
# mise à jour automatique de la distribution tous les jours 3h30
1744
# mise à jour automatique de la distribution tous les jours 3h30
1744
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
1745
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
1745
EOF
1746
EOF
1746
 
1747
 
1747
	cat << EOF > /etc/cron.d/alcasar-connections-stats
1748
	cat << EOF > /etc/cron.d/alcasar-connections-stats
1748
# Connection stats update (accounting). These Perl scripts are from "dialup_admin" (cf. wiki.freeradius.org/Dialup_admin).
1749
# Connection stats update (accounting). These Perl scripts are from "dialup_admin" (cf. wiki.freeradius.org/Dialup_admin).
1749
# 'alcasar-tot_stats' (everyday at 01h01 pm) : aggregating the daily connections of users (write in the table 'totacct')
1750
# 'alcasar-tot_stats' (everyday at 01h01 pm) : aggregating the daily connections of users (write in the table 'totacct')
1750
# 'alcasar-monthly_tot_stat' (everyday at 01h05 pm) : aggregating the monthly connections of users (write in table 'mtotacct')
1751
# 'alcasar-monthly_tot_stat' (everyday at 01h05 pm) : aggregating the monthly connections of users (write in table 'mtotacct')
1751
# 'alcasar-truncate_raddact' (every month, the first at 01h10 pm) : removing the log sessions of users older than 365 days
1752
# 'alcasar-truncate_raddact' (every month, the first at 01h10 pm) : removing the log sessions of users older than 365 days
1752
# 'alcasar-clean_radacct' (every month, the first at 01h15 pm) : closing the sessions openned for more than 30 days
1753
# 'alcasar-clean_radacct' (every month, the first at 01h15 pm) : closing the sessions openned for more than 30 days
1753
# 'alcasar-activity_report.sh' (every sunday at 5h35 pm) : generate an activity report in PDF
1754
# 'alcasar-activity_report.sh' (every sunday at 5h35 pm) : generate an activity report in PDF
1754
1 1 * * * root $DIR_DEST_BIN/alcasar-tot_stats > /dev/null 2>&1
1755
1 1 * * * root $DIR_DEST_BIN/alcasar-tot_stats > /dev/null 2>&1
1755
5 1 * * * root $DIR_DEST_BIN/alcasar-monthly_tot_stats > /dev/null 2>&1
1756
5 1 * * * root $DIR_DEST_BIN/alcasar-monthly_tot_stats > /dev/null 2>&1
1756
10 1 1 * * root $DIR_DEST_BIN/alcasar-truncate_radacct > /dev/null 2>&1
1757
10 1 1 * * root $DIR_DEST_BIN/alcasar-truncate_radacct > /dev/null 2>&1
1757
15 1 1 * * root $DIR_DEST_BIN/alcasar-clean_radacct > /dev/null 2>&1
1758
15 1 1 * * root $DIR_DEST_BIN/alcasar-clean_radacct > /dev/null 2>&1
1758
35 5 * * 0 root $DIR_DEST_BIN/alcasar-activity_report.sh > /dev/null 2>&1
1759
35 5 * * 0 root $DIR_DEST_BIN/alcasar-activity_report.sh > /dev/null 2>&1
1759
EOF
1760
EOF
1760
	cat << EOF > /etc/cron.d/alcasar-watchdog
1761
	cat << EOF > /etc/cron.d/alcasar-watchdog
1761
# run the "watchdog" every 3'
1762
# run the "watchdog" every 3'
1762
# empty the IPSET of the whitelisted IP (loaded dynamically with dnsmasq-whitelist) when every whitelisted users are logged out (every sunday at 0h05
1763
# empty the IPSET of the whitelisted IP (loaded dynamically with dnsmasq-whitelist) when every whitelisted users are logged out (every sunday at 0h05
1763
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1764
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1764
0 5 * * 0 root $DIR_DEST_BIN/alcasar-flush_ipset_wl.sh > /dev/null 2>&1
1765
0 5 * * 0 root $DIR_DEST_BIN/alcasar-flush_ipset_wl.sh > /dev/null 2>&1
1765
#* * * * * root $DIR_DEST_BIN/alcasar-watchdog-hl.sh > /dev/null 2>&1
1766
#* * * * * root $DIR_DEST_BIN/alcasar-watchdog-hl.sh > /dev/null 2>&1
1766
EOF
1767
EOF
1767
# Enabling the watchdog every 18'
1768
# Enabling the watchdog every 18'
1768
	cat << EOF > /etc/cron.d/alcasar-daemon-watchdog
1769
	cat << EOF > /etc/cron.d/alcasar-daemon-watchdog
1769
# activate  the daemon-watchdog after boot process
1770
# activate  the daemon-watchdog after boot process
1770
@reboot root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1771
@reboot root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1771
# activate the daemon-watchdog every 18'
1772
# activate the daemon-watchdog every 18'
1772
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1773
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1773
EOF
1774
EOF
1774
 
1775
 
1775
# Enabling category update from rsync
1776
# Enabling category update from rsync
1776
	cat << EOF > /etc/cron.d/alcasar-rsync-bl
1777
	cat << EOF > /etc/cron.d/alcasar-rsync-bl
1777
# Automatic update of BL via rsync every 12 hours. The categories are listed in the file '/usr/local/etc/update_cat.conf' (no sync if empty). 
1778
# Automatic update of BL via rsync every 12 hours. The categories are listed in the file '/usr/local/etc/update_cat.conf' (no sync if empty). 
1778
0 */12 * * * root $DIR_DEST_BIN/alcasar-bl.sh --update_cat > /dev/null 2>&1
1779
0 */12 * * * root $DIR_DEST_BIN/alcasar-bl.sh --update_cat > /dev/null 2>&1
1779
EOF
1780
EOF
1780
 
1781
 
1781
# removing the users crons
1782
# removing the users crons
1782
	rm -f /var/spool/cron/*
1783
	rm -f /var/spool/cron/*
1783
} # End cron
1784
} # End cron
1784
 
1785
 
1785
##################################################################
1786
##################################################################
1786
## 			Fonction "Fail2Ban"			##
1787
## 			Fonction "Fail2Ban"			##
1787
##- Modification de la configuration de fail2ban		##
1788
##- Modification de la configuration de fail2ban		##
1788
##- Sécurisation DDOS, SSH-Brute-Force, Intercept.php ...	##
1789
##- Sécurisation DDOS, SSH-Brute-Force, Intercept.php ...	##
1789
##################################################################
1790
##################################################################
1790
fail2ban()
1791
fail2ban()
1791
{
1792
{
1792
	/usr/bin/sh $DIR_CONF/fail2ban.sh
1793
	/usr/bin/sh $DIR_CONF/fail2ban.sh
1793
# Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1794
# Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1794
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1795
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1795
	[ -e /var/Save/security/watchdog.log ] || touch /var/Save/security/watchdog.log
1796
	[ -e /var/Save/security/watchdog.log ] || touch /var/Save/security/watchdog.log
1796
	chmod 644 /var/log/fail2ban.log
1797
	chmod 644 /var/log/fail2ban.log
1797
	chmod 644 /var/Save/security/watchdog.log
1798
	chmod 644 /var/Save/security/watchdog.log
1798
	/usr/bin/touch /var/log/auth.log
1799
	/usr/bin/touch /var/log/auth.log
1799
# fail2ban unit
1800
# fail2ban unit
1800
[ -e /lib/systemd/system/fail2ban.service.default ] || cp /lib/systemd/system/fail2ban.service /lib/systemd/system/fail2ban.service.default
1801
[ -e /lib/systemd/system/fail2ban.service.default ] || cp /lib/systemd/system/fail2ban.service /lib/systemd/system/fail2ban.service.default
1801
$SED '/ExecStart=/a\ExecStop=/usr/bin/fail2ban-client stop' /usr/lib/systemd/system/fail2ban.service
1802
$SED '/ExecStart=/a\ExecStop=/usr/bin/fail2ban-client stop' /usr/lib/systemd/system/fail2ban.service
1802
$SED '/Type=/a\PIDFile=/var/run/fail2ban/fail2ban.pid' /usr/lib/systemd/system/fail2ban.service
1803
$SED '/Type=/a\PIDFile=/var/run/fail2ban/fail2ban.pid' /usr/lib/systemd/system/fail2ban.service
1803
$SED '/After=*/c After=syslog.target network.target httpd.service' /usr/lib/systemd/system/fail2ban.service
1804
$SED '/After=*/c After=syslog.target network.target httpd.service' /usr/lib/systemd/system/fail2ban.service
1804
} #Fin de fail2ban_install()
1805
} #Fin de fail2ban_install()
1805
 
1806
 
1806
##################################################################
1807
##################################################################
1807
## 			Fonction "gammu_smsd"			##
1808
## 			Fonction "gammu_smsd"			##
1808
## - Creation de la base de donnée Gammu			##
1809
## - Creation de la base de donnée Gammu			##
1809
## - Creation du fichier de config: gammu_smsd_conf		##
1810
## - Creation du fichier de config: gammu_smsd_conf		##
1810
##################################################################
1811
##################################################################
1811
gammu_smsd()
1812
gammu_smsd()
1812
{
1813
{
1813
# Create 'gammu' databse
1814
# Create 'gammu' databse
1814
MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
1815
MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
1815
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_GAMMU;GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES"
1816
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_GAMMU;GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES"
1816
# Add a gammu database structure
1817
# Add a gammu database structure
1817
	mysql -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/empty-gammu-smsd-db.sql
1818
	mysql -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/empty-gammu-smsd-db.sql
1818
 
1819
 
1819
# config file for the daemon
1820
# config file for the daemon
1820
cat << EOF > /etc/gammu_smsd_conf
1821
cat << EOF > /etc/gammu_smsd_conf
1821
[gammu]
1822
[gammu]
1822
port = /dev/ttyUSB0
1823
port = /dev/ttyUSB0
1823
connection = at115200
1824
connection = at115200
1824
 
1825
 
1825
;########################################################
1826
;########################################################
1826
 
1827
 
1827
[smsd]
1828
[smsd]
1828
 
1829
 
1829
PIN = 1234
1830
PIN = 1234
1830
 
1831
 
1831
logfile = /var/log/gammu-smsd/gammu-smsd.log
1832
logfile = /var/log/gammu-smsd/gammu-smsd.log
1832
logformat = textall
1833
logformat = textall
1833
debuglevel = 0
1834
debuglevel = 0
1834
 
1835
 
1835
service = sql
1836
service = sql
1836
driver = native_mysql
1837
driver = native_mysql
1837
user = $DB_USER
1838
user = $DB_USER
1838
password = $radiuspwd
1839
password = $radiuspwd
1839
pc = localhost
1840
pc = localhost
1840
database = $DB_GAMMU
1841
database = $DB_GAMMU
1841
 
1842
 
1842
RunOnReceive = $DIR_DEST_BIN/alcasar-sms.sh --new_sms
1843
RunOnReceive = $DIR_DEST_BIN/alcasar-sms.sh --new_sms
1843
 
1844
 
1844
StatusFrequency = 30
1845
StatusFrequency = 30
1845
;LoopSleep = 2
1846
;LoopSleep = 2
1846
 
1847
 
1847
;ResetFrequency = 300
1848
;ResetFrequency = 300
1848
;HardResetFrequency = 120
1849
;HardResetFrequency = 120
1849
 
1850
 
1850
CheckSecurity = 1 
1851
CheckSecurity = 1 
1851
CheckSignal = 1
1852
CheckSignal = 1
1852
CheckBattery = 0
1853
CheckBattery = 0
1853
EOF
1854
EOF
1854
 
1855
 
1855
chmod 755 /etc/gammu_smsd_conf
1856
chmod 755 /etc/gammu_smsd_conf
1856
 
1857
 
1857
#Creation dossier de log Gammu-smsd
1858
#Creation dossier de log Gammu-smsd
1858
[ -e /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
1859
[ -e /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
1859
chmod 755 /var/log/gammu-smsd
1860
chmod 755 /var/log/gammu-smsd
1860
 
1861
 
1861
#Edition du script sql gammu <-> radius
1862
#Edition du script sql gammu <-> radius
1862
$SED "s/^u_db=\".*/u_db=\"$DB_USER\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1863
$SED "s/^u_db=\".*/u_db=\"$DB_USER\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1863
$SED "s/^p_db=\".*/p_db=\"$radiuspwd\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1864
$SED "s/^p_db=\".*/p_db=\"$radiuspwd\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1864
 
1865
 
1865
#Création de la règle udev pour les Huawei // idVendor: 12d1
1866
#Création de la règle udev pour les Huawei // idVendor: 12d1
1866
cat << EOF > /etc/udev/rules.d/66-huawei.rules
1867
cat << EOF > /etc/udev/rules.d/66-huawei.rules
1867
KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="$DIR_DEST_BIN/alcasar-sms.sh --mode"
1868
KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="$DIR_DEST_BIN/alcasar-sms.sh --mode"
1868
EOF
1869
EOF
1869
 
1870
 
1870
} # END gammu_smsd()
1871
} # END gammu_smsd()
1871
 
1872
 
1872
 
1873
 
1873
##################################################################
1874
##################################################################
1874
##			Fonction "msec"				##
1875
##			Fonction "msec"				##
1875
## - Apply the "fileserver" security level			##
1876
## - Apply the "fileserver" security level			##
1876
## - remove the "system request" for rebboting			##
1877
## - remove the "system request" for rebboting			##
1877
## - Fix several file permissions				##
1878
## - Fix several file permissions				##
1878
##################################################################
1879
##################################################################
1879
msec()
1880
msec()
1880
{
1881
{
1881
 
1882
 
1882
# Apply fileserver security level
1883
# Apply fileserver security level
1883
[ -e /etc/security/msec/security.conf.default ] || cp /etc/security/msec/security.conf /etc/security/msec/security.conf.default
1884
[ -e /etc/security/msec/security.conf.default ] || cp /etc/security/msec/security.conf /etc/security/msec/security.conf.default
1884
echo "BASE_LEVEL=fileserver" > /etc/security/msec/security.conf
1885
echo "BASE_LEVEL=fileserver" > /etc/security/msec/security.conf
1885
 
1886
 
1886
# Set permissions monitoring and enforcement
1887
# Set permissions monitoring and enforcement
1887
cat <<EOF > /etc/security/msec/perm.local
1888
cat <<EOF > /etc/security/msec/perm.local
1888
/var/log/firefwall/                     root.apache     750
1889
/var/log/firefwall/                     root.apache     750
1889
/var/log/firewall/*                     root.apache     640
1890
/var/log/firewall/*                     root.apache     640
1890
/etc/security/msec/perm.local           root.root       640
1891
/etc/security/msec/perm.local           root.root       640
1891
/etc/security/msec/level.local          root.root       640
1892
/etc/security/msec/level.local          root.root       640
1892
/etc/freeradius-web                     root.apache     750
1893
/etc/freeradius-web                     root.apache     750
1893
/etc/freeradius-web/admin.conf          root.apache     640
1894
/etc/freeradius-web/admin.conf          root.apache     640
1894
/etc/raddb/dictionnary                  root.apache     640
1895
/etc/raddb/dictionnary                  root.apache     640
1895
/etc/raddb/ldap.attrmap                 root.radius     640
1896
/etc/raddb/ldap.attrmap                 root.radius     640
1896
/etc/raddb/hints                        root.radius     640
1897
/etc/raddb/hints                        root.radius     640
1897
/etc/raddb/huntgroups                   root.radius     640
1898
/etc/raddb/huntgroups                   root.radius     640
1898
/etc/raddb/attrs.access_reject          root.radius     640
1899
/etc/raddb/attrs.access_reject          root.radius     640
1899
/etc/raddb/attrs.accounting_response    root.radius     640
1900
/etc/raddb/attrs.accounting_response    root.radius     640
1900
/etc/raddb/acct_users                   root.radius     640
1901
/etc/raddb/acct_users                   root.radius     640
1901
/etc/raddb/preproxy_users               root.radius     640
1902
/etc/raddb/preproxy_users               root.radius     640
1902
/etc/raddb/modules/ldap                 radius.apache   660
1903
/etc/raddb/modules/ldap                 radius.apache   660
1903
/etc/raddb/sites-available/alcasar      radius.apache   660
1904
/etc/raddb/sites-available/alcasar      radius.apache   660
1904
/etc/pki/*                              root.apache     750
1905
/etc/pki/*                              root.apache     750
1905
/var/log/netflow/porttracker            root.apache     770
1906
/var/log/netflow/porttracker            root.apache     770
1906
/var/log/netflow/porttracker/*          root.apache     660
1907
/var/log/netflow/porttracker/*          root.apache     660
1907
EOF
1908
EOF
1908
# apply now hourly & daily checks 
1909
# apply now hourly & daily checks 
1909
/usr/sbin/msec
1910
/usr/sbin/msec
1910
/etc/cron.weekly/msec
1911
/etc/cron.weekly/msec
1911
 
1912
 
1912
} # END msec()
1913
} # END msec()
1913
 
1914
 
1914
##################################################################
1915
##################################################################
1915
##		Fonction "post_install"			##
1916
##		Fonction "post_install"			##
1916
## - Modifying banners (locals et ssh) & prompts	##
1917
## - Modifying banners (locals et ssh) & prompts	##
1917
## - SSH config						##
1918
## - SSH config						##
1918
## - sudoers config & files security			##
1919
## - sudoers config & files security			##
1919
## - log rotate & ANSSI security parameters		##
1920
## - log rotate & ANSSI security parameters		##
1920
## - Apply former conf in case of an update		##
1921
## - Apply former conf in case of an update		##
1921
##########################################################
1922
##########################################################
1922
post_install()
1923
post_install()
1923
{
1924
{
1924
# change the SSH banner
1925
# change the SSH banner
1925
	cp -f $DIR_CONF/banner /etc/ssh/alcasar-banner-ssh
1926
	cp -f $DIR_CONF/banner /etc/ssh/alcasar-banner-ssh
1926
	echo " V$VERSION" >> /etc/ssh/alcasar-banner-ssh
1927
	echo " V$VERSION" >> /etc/ssh/alcasar-banner-ssh
1927
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1928
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1928
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1929
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1929
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1930
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1930
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1931
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1931
# postfix banner anonymisation
1932
# postfix banner anonymisation
1932
	$SED "s?^smtpd_banner =.*?smtpd_banner = $myhostname ESMTP?g" /etc/postfix/main.cf
1933
	$SED "s?^smtpd_banner =.*?smtpd_banner = $myhostname ESMTP?g" /etc/postfix/main.cf
1933
	chown -R postfix:postfix /var/lib/postfix
1934
	chown -R postfix:postfix /var/lib/postfix
1934
# sshd liste on EXTIF & INTIF
1935
# sshd liste on EXTIF & INTIF
1935
	$SED "s?^#ListenAddress 0\.0\.0\.0.*?ListenAddress 0\.0\.0\.0?g" /etc/ssh/sshd_config
1936
	$SED "s?^#ListenAddress 0\.0\.0\.0.*?ListenAddress 0\.0\.0\.0?g" /etc/ssh/sshd_config
1936
# sshd authorized certificate for root login
1937
# sshd authorized certificate for root login
1937
	$SED "s?^PermitRootLogin.*?PermitRootLogin without-password?g" /etc/ssh/sshd_config
1938
	$SED "s?^PermitRootLogin.*?PermitRootLogin without-password?g" /etc/ssh/sshd_config
1938
# ALCASAR conf file
1939
# ALCASAR conf file
1939
	echo "SSH=on" >> $CONF_FILE
1940
	echo "SSH=on" >> $CONF_FILE
1940
	echo "SSH_ADMIN_FROM=0.0.0.0/0.0.0.0" >> $CONF_FILE
1941
	echo "SSH_ADMIN_FROM=0.0.0.0/0.0.0.0" >> $CONF_FILE
1941
	echo "LDAP=off" >> $CONF_FILE
1942
	echo "LDAP=off" >> $CONF_FILE
1942
	echo "LDAP_IP=0.0.0.0/0.0.0.0" >> $CONF_FILE
1943
	echo "LDAP_IP=0.0.0.0/0.0.0.0" >> $CONF_FILE
1943
	echo "MULTIWAN=off" >> $CONF_FILE
1944
	echo "MULTIWAN=off" >> $CONF_FILE
1944
	echo "FAILOVER=30" >> $CONF_FILE
1945
	echo "FAILOVER=30" >> $CONF_FILE
1945
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
1946
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
1946
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
1947
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
1947
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
1948
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
1948
# Prompt customisation (colors)
1949
# Prompt customisation (colors)
1949
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
1950
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
1950
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
1951
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
1951
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
1952
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
1952
# sudoers configuration for "apache" & "sysadmin"
1953
# sudoers configuration for "apache" & "sysadmin"
1953
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
1954
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
1954
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
1955
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
1955
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
1956
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
1956
# Modify some logrotate files (gammu, ulogd)
1957
# Modify some logrotate files (gammu, ulogd)
1957
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1958
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1958
	chmod 644 /etc/logrotate.d/*
1959
	chmod 644 /etc/logrotate.d/*
1959
# Log compression
1960
# Log compression
1960
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
1961
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
1961
# actualisation des fichiers logs compressés
1962
# actualisation des fichiers logs compressés
1962
	for dir in firewall dansguardian httpd
1963
	for dir in firewall dansguardian httpd
1963
	do
1964
	do
1964
	      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 {} \;
1965
	      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 {} \;
1965
	done
1966
	done
1966
# create the alcasar-load_balancing unit
1967
# create the alcasar-load_balancing unit
1967
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
1968
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
1968
#  This file is part of systemd.
1969
#  This file is part of systemd.
1969
#
1970
#
1970
#  systemd is free software; you can redistribute it and/or modify it
1971
#  systemd is free software; you can redistribute it and/or modify it
1971
#  under the terms of the GNU General Public License as published by
1972
#  under the terms of the GNU General Public License as published by
1972
#  the Free Software Foundation; either version 2 of the License, or
1973
#  the Free Software Foundation; either version 2 of the License, or
1973
#  (at your option) any later version.
1974
#  (at your option) any later version.
1974
 
1975
 
1975
# This unit lauches alcasar-load-balancing.sh script.
1976
# This unit lauches alcasar-load-balancing.sh script.
1976
[Unit]
1977
[Unit]
1977
Description=alcasar-load_balancing.sh execution
1978
Description=alcasar-load_balancing.sh execution
1978
After=network.target iptables.service
1979
After=network.target iptables.service
1979
 
1980
 
1980
[Service]
1981
[Service]
1981
Type=oneshot
1982
Type=oneshot
1982
RemainAfterExit=yes
1983
RemainAfterExit=yes
1983
ExecStart=$DIR_DEST_BIN/alcasar-load_balancing.sh start
1984
ExecStart=$DIR_DEST_BIN/alcasar-load_balancing.sh start
1984
ExecStop=$DIR_DEST_BIN/alcasar-load_balancing.sh stop
1985
ExecStop=$DIR_DEST_BIN/alcasar-load_balancing.sh stop
1985
TimeoutSec=0
1986
TimeoutSec=0
1986
SysVStartPriority=99
1987
SysVStartPriority=99
1987
 
1988
 
1988
[Install]
1989
[Install]
1989
WantedBy=multi-user.target
1990
WantedBy=multi-user.target
1990
EOF
1991
EOF
1991
# processes launched at boot time (Systemctl)
1992
# processes launched at boot time (Systemctl)
1992
	for i in alcasar-load_balancing mysqld httpd ntpd iptables dnsmasq dnsmasq-blacklist dnsmasq-whitelist dnsmasq-blackhole radiusd nfsen dansguardian freshclam ulogd-ssh ulogd-traceability ulogd-ext-access chilli fail2ban havp tinyproxy vnstat sshd
1993
	for i in alcasar-load_balancing mysqld httpd ntpd iptables dnsmasq dnsmasq-blacklist dnsmasq-whitelist dnsmasq-blackhole radiusd nfsen dansguardian freshclam ulogd-ssh ulogd-traceability ulogd-ext-access chilli fail2ban havp tinyproxy vnstat sshd
1993
	do
1994
	do
1994
		/usr/bin/systemctl -q enable $i.service
1995
		/usr/bin/systemctl -q enable $i.service
1995
	done
1996
	done
1996
	
1997
	
1997
# disable processes at boot time (Systemctl)
1998
# disable processes at boot time (Systemctl)
1998
	for i in ulogd
1999
	for i in ulogd
1999
	do
2000
	do
2000
		/usr/bin/systemctl -q disable $i.service
2001
		/usr/bin/systemctl -q disable $i.service
2001
	done
2002
	done
2002
	
2003
	
2003
# Apply French Security Agency (ANSSI) rules
2004
# Apply French Security Agency (ANSSI) rules
2004
# ignore ICMP broadcast (smurf attack)
2005
# ignore ICMP broadcast (smurf attack)
2005
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
2006
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
2006
# ignore ICMP errors bogus
2007
# ignore ICMP errors bogus
2007
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
2008
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
2008
# remove ICMP redirects responces
2009
# remove ICMP redirects responces
2009
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2010
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2010
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2011
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2011
# enable SYN Cookies (Syn flood attacks)
2012
# enable SYN Cookies (Syn flood attacks)
2012
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
2013
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
2013
# enable kernel antispoofing
2014
# enable kernel antispoofing
2014
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
2015
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
2015
# ignore source routing
2016
# ignore source routing
2016
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
2017
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
2017
# set conntrack timer to 1h (3600s) instead of 5 weeks
2018
# set conntrack timer to 1h (3600s) instead of 5 weeks
2018
	echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.d/alcasar.conf
2019
	echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.d/alcasar.conf
2019
# disable log_martians (ALCASAR is often installed between two private network addresses) 
2020
# disable log_martians (ALCASAR is often installed between two private network addresses) 
2020
	echo "net.ipv4.conf.all.log_martians = 0" >> /etc/sysctl.d/alcasar.conf
2021
	echo "net.ipv4.conf.all.log_martians = 0" >> /etc/sysctl.d/alcasar.conf
2021
# disable iptables_helpers
2022
# disable iptables_helpers
2022
	echo "net.netfilter.nf_conntrack_helper = 0" >> /etc/sysctl.d/alcasar.conf
2023
	echo "net.netfilter.nf_conntrack_helper = 0" >> /etc/sysctl.d/alcasar.conf
2023
# Switch to the router mode
2024
# Switch to the router mode
2024
	echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/alcasar.conf
2025
	echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/alcasar.conf
2025
# Remove unused service ipv6
2026
# Remove unused service ipv6
2026
	echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2027
	echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2027
	echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2028
	echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2028
	echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2029
	echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2029
	echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2030
	echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2030
# switch to multi-users runlevel (instead of x11)
2031
# switch to multi-users runlevel (instead of x11)
2031
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
2032
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
2032
#	GRUB modifications (only one time)
2033
#	GRUB modifications (only one time)
2033
# Limit wait time to 3s - Create an alcasar entry instead of linux-nonfb - Change the default banner
2034
# Limit wait time to 3s - Create an alcasar entry instead of linux-nonfb - Change the default banner
2034
	vm_vga=`lsmod | egrep "virtio|vmwgfx" | wc -l` # test if in VM
2035
	vm_vga=`lsmod | egrep "virtio|vmwgfx" | wc -l` # test if in VM
2035
	grub_already_modified=`grep ALCASAR /boot/grub/menu.lst|wc -l`
2036
	grub_already_modified=`grep ALCASAR /boot/grub/menu.lst|wc -l`
2036
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
2037
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
2037
	if [ $grub_already_modified == 0 ] 
2038
	if [ $grub_already_modified == 0 ] 
2038
		then
2039
		then
2039
		$SED "s?^timeout.*?timeout 3?g" /boot/grub/menu.lst
2040
		$SED "s?^timeout.*?timeout 3?g" /boot/grub/menu.lst
2040
		$SED "s?^title linux?title ALCASAR?g" /boot/grub/menu.lst
2041
		$SED "s?^title linux?title ALCASAR?g" /boot/grub/menu.lst
2041
		$SED "/^kernel/s/splash quiet //" /boot/grub/menu.lst
2042
		$SED "/^kernel/s/splash quiet //" /boot/grub/menu.lst
2042
		$SED "/^kernel/s/BOOT_IMAGE=linux /BOOT_IMAGE=linux-nonfb /" /boot/grub/menu.lst
2043
		$SED "/^kernel/s/BOOT_IMAGE=linux /BOOT_IMAGE=linux-nonfb /" /boot/grub/menu.lst
2043
		$SED "/^gfxmenu/d" /boot/grub/menu.lst
2044
		$SED "/^gfxmenu/d" /boot/grub/menu.lst
2044
		if [ $vm_vga == 0 ] # is not a VM 
2045
		if [ $vm_vga == 0 ] # is not a VM 
2045
		then
2046
		then
2046
			$SED "/BOOT_IMAGE=linux-nonfb/s/$/ vga=791/" /boot/grub/menu.lst  # change display to 1024*768 (vga791) only if not on VM and only on ALCASAR entry
2047
			$SED "/BOOT_IMAGE=linux-nonfb/s/$/ vga=791/" /boot/grub/menu.lst  # change display to 1024*768 (vga791) only if not on VM and only on ALCASAR entry
2047
		fi
2048
		fi
2048
	fi
2049
	fi
2049
	if [ $vm_vga == 0 ] # is not a VM 
2050
	if [ $vm_vga == 0 ] # is not a VM 
2050
	then
2051
	then
2051
		cp -f $DIR_CONF/banner /etc/mageia-release
2052
		cp -f $DIR_CONF/banner /etc/mageia-release
2052
		echo " V$VERSION" >> /etc/mageia-release
2053
		echo " V$VERSION" >> /etc/mageia-release
2053
	else
2054
	else
2054
		echo "ALCASAR V$VERSION" > /etc/mageia-release
2055
		echo "ALCASAR V$VERSION" > /etc/mageia-release
2055
	fi
2056
	fi
2056
# Load and apply the previous conf file
2057
# Load and apply the previous conf file
2057
	if [ "$mode" = "update" ]
2058
	if [ "$mode" = "update" ]
2058
	then
2059
	then
2059
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/archive
2060
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/archive
2060
		$DIR_DEST_BIN/alcasar-conf.sh --load
2061
		$DIR_DEST_BIN/alcasar-conf.sh --load
2061
		PARENT_SCRIPT=`basename $0`
2062
		PARENT_SCRIPT=`basename $0`
2062
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
2063
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
2063
		$DIR_DEST_BIN/alcasar-conf.sh --apply
2064
		$DIR_DEST_BIN/alcasar-conf.sh --apply
2064
		$DIR_DEST_BIN/alcasar-file-clean.sh # Clean & sort conf files. Add uamallowed domains to the dns-blackhole conf 
2065
		$DIR_DEST_BIN/alcasar-file-clean.sh # Clean & sort conf files. Add uamallowed domains to the dns-blackhole conf 
2065
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
2066
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
2066
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
2067
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
2067
	fi
2068
	fi
2068
	rm -f /tmp/alcasar-conf*
2069
	rm -f /tmp/alcasar-conf*
2069
	chown -R root:apache $DIR_DEST_ETC/*
2070
	chown -R root:apache $DIR_DEST_ETC/*
2070
	chmod -R 660 $DIR_DEST_ETC/*
2071
	chmod -R 660 $DIR_DEST_ETC/*
2071
	chmod ug+x $DIR_DEST_ETC/digest
2072
	chmod ug+x $DIR_DEST_ETC/digest
2072
	cd $DIR_INSTALL
2073
	cd $DIR_INSTALL
2073
	echo ""
2074
	echo ""
2074
	echo "#############################################################################"
2075
	echo "#############################################################################"
2075
	if [ $Lang == "fr" ]
2076
	if [ $Lang == "fr" ]
2076
		then
2077
		then
2077
		echo "#                        Fin d'installation d'ALCASAR                       #"
2078
		echo "#                        Fin d'installation d'ALCASAR                       #"
2078
		echo "#                                                                           #"
2079
		echo "#                                                                           #"
2079
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2080
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2080
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2081
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2081
		echo "#                                                                           #"
2082
		echo "#                                                                           #"
2082
		echo "#############################################################################"
2083
		echo "#############################################################################"
2083
		echo
2084
		echo
2084
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
2085
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
2085
		echo
2086
		echo
2086
		echo "- Lisez attentivement la documentation d'exploitation"
2087
		echo "- Lisez attentivement la documentation d'exploitation"
2087
		echo
2088
		echo
2088
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://alcasar.localdomain"
2089
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://alcasar.localdomain"
2089
		echo
2090
		echo
2090
		echo "                   Appuyez sur 'Entrée' pour continuer"
2091
		echo "                   Appuyez sur 'Entrée' pour continuer"
2091
	else	
2092
	else	
2092
		echo "#                        Enf of ALCASAR install process                     #"
2093
		echo "#                        Enf of ALCASAR install process                     #"
2093
		echo "#                                                                           #"
2094
		echo "#                                                                           #"
2094
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2095
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2095
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2096
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2096
		echo "#                                                                           #"
2097
		echo "#                                                                           #"
2097
		echo "#############################################################################"
2098
		echo "#############################################################################"
2098
		echo
2099
		echo
2099
		echo "- The system will be rebooted in order to operate ALCASAR"
2100
		echo "- The system will be rebooted in order to operate ALCASAR"
2100
		echo
2101
		echo
2101
		echo "- Read the exploitation documentation"
2102
		echo "- Read the exploitation documentation"
2102
		echo
2103
		echo
2103
		echo "- The ALCASAR Control Center (ACC) is at http://alcasar.localdomain"
2104
		echo "- The ALCASAR Control Center (ACC) is at http://alcasar.localdomain"
2104
		echo
2105
		echo
2105
		echo "                   Hit 'Enter' to continue"
2106
		echo "                   Hit 'Enter' to continue"
2106
	fi
2107
	fi
2107
	sleep 2
2108
	sleep 2
2108
	if [ "$mode" != "update" ]
2109
	if [ "$mode" != "update" ]
2109
	then
2110
	then
2110
		read a
2111
		read a
2111
	fi
2112
	fi
2112
	clear
2113
	clear
2113
	reboot
2114
	reboot
2114
} # End post_install ()
2115
} # End post_install ()
2115
 
2116
 
2116
#################################
2117
#################################
2117
#  	Main Install loop  	#
2118
#  	Main Install loop  	#
2118
#################################
2119
#################################
2119
dir_exec=`dirname "$0"`
2120
dir_exec=`dirname "$0"`
2120
if [ $dir_exec != "." ]
2121
if [ $dir_exec != "." ]
2121
then
2122
then
2122
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
2123
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
2123
	echo "Launch this program from the ALCASAR archive directory"
2124
	echo "Launch this program from the ALCASAR archive directory"
2124
	exit 0
2125
	exit 0
2125
fi
2126
fi
2126
if [[ $EUID > 0 ]]
2127
if [[ $EUID > 0 ]]
2127
then
2128
then
2128
	echo "Vous devez être "root" pour installer ALCASAR (commande 'su')"
2129
	echo "Vous devez être "root" pour installer ALCASAR (commande 'su')"
2129
	echo "You must be "root" to install ALCASAR ('su' command)"
2130
	echo "You must be "root" to install ALCASAR ('su' command)"
2130
	exit 0
2131
	exit 0
2131
fi
2132
fi
2132
VERSION=`cat $DIR_INSTALL/VERSION`
2133
VERSION=`cat $DIR_INSTALL/VERSION`
2133
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
2134
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
2134
nb_args=$#
2135
nb_args=$#
2135
args=$1
2136
args=$1
2136
if [ $nb_args -eq 0 ]
2137
if [ $nb_args -eq 0 ]
2137
then
2138
then
2138
	nb_args=1
2139
	nb_args=1
2139
	args="-h"
2140
	args="-h"
2140
fi
2141
fi
2141
chmod -R u+x $DIR_SCRIPTS/*
2142
chmod -R u+x $DIR_SCRIPTS/*
2142
case $args in
2143
case $args in
2143
	-\? | -h* | --h*)
2144
	-\? | -h* | --h*)
2144
		echo "$usage"
2145
		echo "$usage"
2145
		exit 0
2146
		exit 0
2146
		;;
2147
		;;
2147
	-i | --install)
2148
	-i | --install)
2148
		header_install
2149
		header_install
2149
		license
2150
		license
2150
		header_install
2151
		header_install
2151
		testing
2152
		testing
2152
# RPMs install
2153
# RPMs install
2153
		$DIR_SCRIPTS/alcasar-urpmi.sh
2154
		$DIR_SCRIPTS/alcasar-urpmi.sh
2154
		if [ "$?" != "0" ]
2155
		if [ "$?" != "0" ]
2155
		then
2156
		then
2156
			exit 0
2157
			exit 0
2157
		fi
2158
		fi
2158
		if [ -e $CONF_FILE ]
2159
		if [ -e $CONF_FILE ]
2159
		then
2160
		then
2160
# Uninstall the running version
2161
# Uninstall the running version
2161
			$DIR_SCRIPTS/alcasar-uninstall.sh -update
2162
			$DIR_SCRIPTS/alcasar-uninstall.sh -update
2162
		fi
2163
		fi
2163
# Test if manual update	
2164
# Test if manual update	
2164
		if [ -e /tmp/alcasar-conf*.tar.gz ] && [ "$mode" == "install" ]
2165
		if [ -e /tmp/alcasar-conf*.tar.gz ] && [ "$mode" == "install" ]
2165
		then
2166
		then
2166
			header_install
2167
			header_install
2167
			if [ $Lang == "fr" ]
2168
			if [ $Lang == "fr" ]
2168
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
2169
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
2169
				else echo "The configuration file of an old version has been found";
2170
				else echo "The configuration file of an old version has been found";
2170
			fi
2171
			fi
2171
			response=0
2172
			response=0
2172
			PTN='^[oOnNyY]$'
2173
			PTN='^[oOnNyY]$'
2173
			until [[ $(expr $response : $PTN) -gt 0 ]]
2174
			until [[ $(expr $response : $PTN) -gt 0 ]]
2174
			do
2175
			do
2175
				if [ $Lang == "fr" ]
2176
				if [ $Lang == "fr" ]
2176
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
2177
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
2177
					else echo -n "Do you want to use it (Y/n)?";
2178
					else echo -n "Do you want to use it (Y/n)?";
2178
				 fi
2179
				 fi
2179
				read response
2180
				read response
2180
				if [ "$response" = "n" ] || [ "$response" = "N" ] 
2181
				if [ "$response" = "n" ] || [ "$response" = "N" ] 
2181
				then rm -f /tmp/alcasar-conf*
2182
				then rm -f /tmp/alcasar-conf*
2182
				fi
2183
				fi
2183
			done
2184
			done
2184
		fi
2185
		fi
2185
# Test if update
2186
# Test if update
2186
		if [ -e /tmp/alcasar-conf* ] 
2187
		if [ -e /tmp/alcasar-conf* ] 
2187
		then
2188
		then
2188
			if [ $Lang == "fr" ]
2189
			if [ $Lang == "fr" ]
2189
				then echo "#### Installation avec mise à jour ####";
2190
				then echo "#### Installation avec mise à jour ####";
2190
				else echo "#### Installation with update     ####";
2191
				else echo "#### Installation with update     ####";
2191
			fi
2192
			fi
2192
# Extract the central configuration file
2193
# Extract the central configuration file
2193
			tar -xf /tmp/alcasar-conf* conf/etc/alcasar.conf 
2194
			tar -xf /tmp/alcasar-conf* conf/etc/alcasar.conf 
2194
			ORGANISME=`grep ORGANISM conf/etc/alcasar.conf|cut -d"=" -f2`
2195
			ORGANISME=`grep ORGANISM conf/etc/alcasar.conf|cut -d"=" -f2`
2195
			PREVIOUS_VERSION=`grep VERSION conf/etc/alcasar.conf|cut -d"=" -f2`
2196
			PREVIOUS_VERSION=`grep VERSION conf/etc/alcasar.conf|cut -d"=" -f2`
2196
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2197
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2197
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2|cut -c1`
2198
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2|cut -c1`
2198
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3`
2199
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3`
2199
			mode="update"
2200
			mode="update"
2200
		fi
2201
		fi
2201
		for func in init network ACC CA time_server init_db radius chilli dansguardian antivirus tinyproxy ulogd nfsen vnstat dnsmasq BL cron fail2ban gammu_smsd msec post_install
2202
		for func in init network ACC CA time_server init_db radius chilli dansguardian antivirus tinyproxy ulogd nfsen vnstat dnsmasq BL cron fail2ban gammu_smsd msec post_install
2202
		do
2203
		do
2203
			$func
2204
			$func
2204
# echo "*** 'debug' : end of function $func ***"; read a
2205
# echo "*** 'debug' : end of function $func ***"; read a
2205
		done
2206
		done
2206
		;;
2207
		;;
2207
	-u | --uninstall)
2208
	-u | --uninstall)
2208
		if [ ! -e $DIR_DEST_BIN/alcasar-uninstall.sh ]
2209
		if [ ! -e $DIR_DEST_BIN/alcasar-uninstall.sh ]
2209
		then
2210
		then
2210
			if [ $Lang == "fr" ]
2211
			if [ $Lang == "fr" ]
2211
				then echo "ALCASAR n'est pas installé!";
2212
				then echo "ALCASAR n'est pas installé!";
2212
				else echo "ALCASAR isn't installed!";
2213
				else echo "ALCASAR isn't installed!";
2213
			fi
2214
			fi
2214
			exit 0
2215
			exit 0
2215
		fi
2216
		fi
2216
		response=0
2217
		response=0
2217
		PTN='^[oOnN]$'
2218
		PTN='^[oOnN]$'
2218
		until [[ $(expr $response : $PTN) -gt 0 ]]
2219
		until [[ $(expr $response : $PTN) -gt 0 ]]
2219
		do
2220
		do
2220
			if [ $Lang == "fr" ]
2221
			if [ $Lang == "fr" ]
2221
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
2222
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
2222
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2223
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2223
			fi
2224
			fi
2224
			read response
2225
			read response
2225
		done
2226
		done
2226
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2227
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2227
		then
2228
		then
2228
			$DIR_SCRIPTS/alcasar-conf.sh --create
2229
			$DIR_SCRIPTS/alcasar-conf.sh --create
2229
		else	
2230
		else	
2230
			rm -f /tmp/alcasar-conf*
2231
			rm -f /tmp/alcasar-conf*
2231
		fi
2232
		fi
2232
# Uninstall the running version
2233
# Uninstall the running version
2233
		$DIR_SCRIPTS/alcasar-uninstall.sh -full
2234
		$DIR_SCRIPTS/alcasar-uninstall.sh -full
2234
		;;
2235
		;;
2235
	*)
2236
	*)
2236
		echo "Argument inconnu :$1";
2237
		echo "Argument inconnu :$1";
2237
		echo "Unknown argument :$1";
2238
		echo "Unknown argument :$1";
2238
		echo "$usage"
2239
		echo "$usage"
2239
		exit 1
2240
		exit 1
2240
		;;
2241
		;;
2241
esac
2242
esac
2242
# end of script
2243
# end of script
2243
 
2244
 
2244
 
2245