Subversion Repositories ALCASAR

Rev

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

Rev 2711 Rev 2724
1
#!/bin/bash
1
#!/bin/bash
2
#  $Id: alcasar.sh 2711 2019-03-10 23:23:31Z tom.houdayer $
2
#  $Id: alcasar.sh 2724 2019-05-05 19:05:53Z rexy $
3
 
3
 
4
# alcasar.sh
4
# alcasar.sh
5
# ALCASAR is a Free and open source NAC created by Franck BOUIJOUX (3abtux), Pascal LEVANT and Richard REY (Rexy)
5
# ALCASAR is a Free and open source NAC created by Franck BOUIJOUX (3abtux), Pascal LEVANT and Richard REY (Rexy)
6
# This script is distributed under the Gnu General Public License (GPL)
6
# This script is distributed under the Gnu General Public License (GPL)
7
#  team@alcasar.net
7
#  team@alcasar.net
8
 
8
 
9
# ALCASAR Install script -  CopyLeft ALCASAR Team [Rexy + 3abtux + Steweb + Crox + ...]
9
# ALCASAR Install script -  CopyLeft ALCASAR Team [Rexy + 3abtux + Steweb + Crox + ...]
10
# Ce programme est un logiciel libre ; This software is free and open source
10
# Ce programme est un logiciel libre ; This software is free and open source
11
# elle que publiée par la Free Software Foundation ; soit la version 3 de la Licence.
11
# elle que publiée par la Free Software Foundation ; soit la version 3 de la Licence.
12
# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ;
12
# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ;
13
# sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE.
13
# sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE.
14
# Voir la Licence Publique Générale GNU pour plus de détails.
14
# Voir la Licence Publique Générale GNU pour plus de détails.
15
 
15
 
16
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
16
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
17
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
17
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
18
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
18
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
19
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares :
19
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares :
20
 
20
 
21
# Coovachilli, freeradius, mariaDB, lighttpd, netfilter, e2guardian, ntpd, openssl, dnsmasq, unbound, gammu, havp, libclamav, Ulog, fail2ban, tinyproxy, NFsen and NFdump
21
# Coovachilli, freeradius, mariaDB, lighttpd, netfilter, e2guardian, ntpd, openssl, dnsmasq, unbound, gammu, havp, libclamav, Ulog, fail2ban, tinyproxy, NFsen and NFdump
22
 
22
 
23
# Options :
23
# Options :
24
#       -i or --install
24
#       -i or --install
25
#       -u or --uninstall
25
#       -u or --uninstall
26
 
26
 
27
# Functions :
27
# Functions :
28
#	testing			: connectivity tests, free space test and mageia version test
28
#	testing			: connectivity tests, free space test and mageia version test
29
#	init			: Installation of RPM and scripts
29
#	init			: Installation of RPM and scripts
30
#	network			: Network parameters
30
#	network			: Network parameters
31
#	ACC				: ALCASAR Control Center installation
31
#	ACC				: ALCASAR Control Center installation
32
#	CA				: Certification Authority initialization
32
#	CA				: Certification Authority initialization
33
#	time_server		: NTPd configuration
33
#	time_server		: NTPd configuration
34
#	init_db			: Initilization of radius database managed with MariaDB
34
#	init_db			: Initilization of radius database managed with MariaDB
35
#	freeradius		: FreeRadius initialisation
35
#	freeradius		: FreeRadius initialisation
36
#	chilli			: coovachilli initialisation (+authentication page)
36
#	chilli			: coovachilli initialisation (+authentication page)
37
#	e2guardian		: E2Guardian filtering HTTP proxy configuration
37
#	e2guardian		: E2Guardian filtering HTTP proxy configuration
38
#	antivirus		: HAVP + libclamav configuration
38
#	antivirus		: HAVP + libclamav configuration
39
#	tinyproxy		: little proxy for user filtered with "WL + antivirus" and "antivirus"
39
#	tinyproxy		: little proxy for user filtered with "WL + antivirus" and "antivirus"
40
#	ulogd			: log system in userland (match NFLOG target of iptables)
40
#	ulogd			: log system in userland (match NFLOG target of iptables)
41
#	nfsen			: Configuration of Nfsen Netflow grapher
41
#	nfsen			: Configuration of Nfsen Netflow grapher
42
#	unbound			: Name server configuration
42
#	unbound			: Name server configuration
43
#	dnsmasq			: Name server configuration (for whitelist ipset support)
43
#	dnsmasq			: Name server configuration (for whitelist ipset support)
44
#	vnstat			: little network stat daemon
44
#	vnstat			: little network stat daemon
45
#	BL				: Adaptation of Toulouse University BlackList : split into 3 BL (for unbound, for e2guardian and for Netfilter)
45
#	BL				: Adaptation of Toulouse University BlackList : split into 3 BL (for unbound, for e2guardian 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
#	letsencrypt		: Let's Encrypt client
50
#	letsencrypt		: Let's Encrypt client
51
#	post_install	: Security, log rotation, etc.
51
#	post_install	: Security, log rotation, etc.
52
 
52
 
53
DEBUG_ALCASAR='off'; export DEBUG_ALCASAR	# Debug mode = wait (hit key) after each function
53
DEBUG_ALCASAR='off'; export DEBUG_ALCASAR	# Debug mode = wait (hit key) after each function
54
DATE=`date '+%d %B %Y - %Hh%M'`
54
DATE=`date '+%d %B %Y - %Hh%M'`
55
DATE_SHORT=`date '+%d/%m/%Y'`
55
DATE_SHORT=`date '+%d/%m/%Y'`
56
Lang=`echo $LANG|cut -c 1-2`
56
Lang=`echo $LANG|cut -c 1-2`
57
mode="install"
57
mode="install"
58
# ******* Files parameters - paramètres fichiers *********
58
# ******* Files parameters - paramètres fichiers *********
59
DIR_INSTALL=`pwd`						# current directory
59
DIR_INSTALL=`pwd`						# current directory
60
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
60
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
61
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
61
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
62
DIR_BLACKLIST="$DIR_INSTALL/blacklist"	# install directory (with blacklist files)
62
DIR_BLACKLIST="$DIR_INSTALL/blacklist"	# install directory (with blacklist files)
63
DIR_SAVE="/var/Save"					# backup directory (traceability_log, user_db, security_log)
63
DIR_SAVE="/var/Save"					# backup directory (traceability_log, user_db, security_log)
64
DIR_WEB="/var/www/html"					# directory of Lighttpd
64
DIR_WEB="/var/www/html"					# directory of Lighttpd
65
DIR_DG="/etc/e2guardian"				# directory of E2Guardian
65
DIR_DG="/etc/e2guardian"				# directory of E2Guardian
66
DIR_ACC="$DIR_WEB/acc"					# directory of the 'ALCASAR Control Center'
66
DIR_ACC="$DIR_WEB/acc"					# directory of the 'ALCASAR Control Center'
67
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
67
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
68
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
68
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
69
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (unbound for instance)
69
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (unbound for instance)
70
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"	# central ALCASAR conf file
70
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"	# central ALCASAR conf file
71
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
71
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
72
# ******* DBMS parameters - paramètres SGBD ********
72
# ******* DBMS parameters - paramètres SGBD ********
73
DB_RADIUS="radius"						# database name used by FreeRadius server
73
DB_RADIUS="radius"						# database name used by FreeRadius server
74
DB_USER="radius"						# user name allows to request the users database
74
DB_USER="radius"						# user name allows to request the users database
75
DB_GAMMU="gammu"						# database name used by Gammu-smsd
75
DB_GAMMU="gammu"						# database name used by Gammu-smsd
76
# ******* Network parameters - paramètres réseau *******
76
# ******* Network parameters - paramètres réseau *******
77
HOSTNAME="alcasar"						# default hostname
77
HOSTNAME="alcasar"						# default hostname
78
DOMAIN="localdomain"					# default local domain
78
DOMAIN="localdomain"					# default local domain
79
EXTIF=''					# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
79
EXTIF=''					# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
80
INTIF=''					# INTIF is connected to the consultation network
80
INTIF=''					# INTIF is connected to the consultation network
81
MTU="1500"
81
MTU="1500"
82
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
82
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
83
# ****** Paths - chemin des commandes *******
83
# ****** Paths - chemin des commandes *******
84
SED="/bin/sed -i"
84
SED="/bin/sed -i"
85
# ****************** End of global parameters *********************
85
# ****************** End of global parameters *********************
86
 
86
 
87
license ()
87
license()
88
{
88
{
89
	if [ $Lang == "fr" ]
89
	if [ $Lang == "fr" ]
90
	then
90
	then
91
		cat $DIR_INSTALL/gpl-warning.fr.txt | more
91
		cat $DIR_INSTALL/gpl-warning.fr.txt | more
92
	else
92
	else
93
		cat $DIR_INSTALL/gpl-warning.txt | more
93
		cat $DIR_INSTALL/gpl-warning.txt | more
94
	fi
94
	fi
95
	response=0
95
	response=0
96
	PTN='^[oOyYnN]$'
96
	PTN='^[oOyYnN]$'
97
	until [[ $(expr $response : $PTN) -gt 0 ]]
97
	until [[ $(expr $response : $PTN) -gt 0 ]]
98
	do
98
	do
99
		if [ $Lang == "fr" ]
99
		if [ $Lang == "fr" ]
100
			then echo -n "Acceptez-vous les termes de cette licence (O/n)? : "
100
			then echo -n "Acceptez-vous les termes de cette licence (O/n)? : "
101
			else echo -n "Do you accept the terms of this license (Y/n)? : "
101
			else echo -n "Do you accept the terms of this license (Y/n)? : "
102
		fi
102
		fi
103
		read response
103
		read response
104
	done
104
	done
105
	if [ "$response" = "n" ] || [ "$response" = "N" ]
105
	if [ "$response" = "n" ] || [ "$response" = "N" ]
106
	then
106
	then
107
		exit 1
107
		exit 1
108
	fi
108
	fi
109
}
109
} # End of license()
110
 
110
 
111
header_install ()
111
header_install()
112
{
112
{
113
	clear
113
	clear
114
	echo "-----------------------------------------------------------------------------"
114
	echo "-----------------------------------------------------------------------------"
115
	echo "                     ALCASAR V$VERSION Installation"
115
	echo "                     ALCASAR V$VERSION Installation"
116
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
116
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
117
	echo "-----------------------------------------------------------------------------"
117
	echo "-----------------------------------------------------------------------------"
118
}
-
 
-
 
118
} # End of header_install()
119
 
119
 
120
########################################################
120
########################################################
121
##                  Function "testing"                ##
121
##                  Function "testing"                ##
122
## - Test Mageia version                              ##
122
## - Test Mageia version                              ##
123
## - Test ALCASAR version (if already installed)      ##
123
## - Test ALCASAR version (if already installed)      ##
124
## - Test free space on /var  (>10G)                  ##
124
## - Test free space on /var  (>10G)                  ##
125
## - Test Internet access                             ##
125
## - Test Internet access                             ##
126
########################################################
126
########################################################
127
testing ()
127
testing()
128
{
128
{
129
# Test of Mageia version
129
# Test of Mageia version
130
# extract the current Mageia version and hardware architecture (i586 ou X64)
130
# extract the current Mageia version and hardware architecture (i586 ou X64)
131
	fic=`cat /etc/product.id`
131
	fic=`cat /etc/product.id`
132
	unknown_os=0
132
	unknown_os=0
133
	old="$IFS"
133
	old="$IFS"
134
	IFS=","
134
	IFS=","
135
	set $fic
135
	set $fic
136
	for i in "$@"
136
	for i in "$@"
137
	do
137
	do
138
		if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
138
		if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
139
			then
139
			then
140
			DISTRIBUTION=`echo $i|cut -d"=" -f2`
140
			DISTRIBUTION=`echo $i|cut -d"=" -f2`
141
			unknown_os=`expr $unknown_os + 1`
141
			unknown_os=`expr $unknown_os + 1`
142
		fi
142
		fi
143
		if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
143
		if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
144
			then
144
			then
145
			CURRENT_VERSION=`echo $i|cut -d"=" -f2`
145
			CURRENT_VERSION=`echo $i|cut -d"=" -f2`
146
			unknown_os=`expr $unknown_os + 1`
146
			unknown_os=`expr $unknown_os + 1`
147
		fi
147
		fi
148
		if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
148
		if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
149
			then
149
			then
150
			ARCH=`echo $i|cut -d"=" -f2`
150
			ARCH=`echo $i|cut -d"=" -f2`
151
			unknown_os=`expr $unknown_os + 1`
151
			unknown_os=`expr $unknown_os + 1`
152
		fi
152
		fi
153
	done
153
	done
154
	if [ "$ARCH" != "x86_64" ]
154
	if [ "$ARCH" != "x86_64" ]
155
		then
155
		then
156
		if [ $Lang == "fr" ]
156
		if [ $Lang == "fr" ]
157
			then echo "Votre architecture matérielle doit être en 64bits"
157
			then echo "Votre architecture matérielle doit être en 64bits"
158
			else echo "You hardware architecture must be 64bits"
158
			else echo "You hardware architecture must be 64bits"
159
		fi
159
		fi
160
		exit 1
160
		exit 1
161
	fi
161
	fi
162
	IFS="$old"
162
	IFS="$old"
163
	if [[ ( $unknown_os != 3 ) || ("$DISTRIBUTION" != "Mageia" ) || ( "$CURRENT_VERSION" != "6" ) ]]
163
	if [[ ( $unknown_os != 3 ) || ("$DISTRIBUTION" != "Mageia" ) || ( "$CURRENT_VERSION" != "6" ) ]]
164
	then
164
	then
165
		if [ -e /var/tmp/alcasar-conf.tar.gz ] # update
165
		if [ -e /var/tmp/alcasar-conf.tar.gz ] # update
166
			then
166
			then
167
			echo
167
			echo
168
			if [ $Lang == "fr" ]
168
			if [ $Lang == "fr" ]
169
				then
169
				then
170
				echo "La mise à jour automatique d'ALCASAR ne peut pas être réalisée."
170
				echo "La mise à jour automatique d'ALCASAR ne peut pas être réalisée."
171
				echo "1 - Effectuez une sauvegarde des fichiers de traçabilité et de la base des usagers via l'ACC"
171
				echo "1 - Effectuez une sauvegarde des fichiers de traçabilité et de la base des usagers via l'ACC"
172
				echo "2 - Installez Linux-Mageia 6.0 (64bits) et ALCASAR (cf. doc d'installation)"
172
				echo "2 - Installez Linux-Mageia 6.0 (64bits) et ALCASAR (cf. doc d'installation)"
173
				echo "3 - Importez votre base des usagers"
173
				echo "3 - Importez votre base des usagers"
174
			else
174
			else
175
				echo "The automatic update of ALCASAR can't be performed."
175
				echo "The automatic update of ALCASAR can't be performed."
176
				echo "1 - Save your traceability files and the user database"
176
				echo "1 - Save your traceability files and the user database"
177
				echo "2 - Install Linux-Mageia 6 (64bits) & ALCASAR (cf. installation doc)"
177
				echo "2 - Install Linux-Mageia 6 (64bits) & ALCASAR (cf. installation doc)"
178
				echo "3 - Import your users database"
178
				echo "3 - Import your users database"
179
			fi
179
			fi
180
		else
180
		else
181
			if [ $Lang == "fr" ]
181
			if [ $Lang == "fr" ]
182
				then echo "L'installation d'ALCASAR ne peut pas être réalisée."
182
				then echo "L'installation d'ALCASAR ne peut pas être réalisée."
183
				else echo "The installation of ALCASAR can't be performed."
183
				else echo "The installation of ALCASAR can't be performed."
184
			fi
184
			fi
185
		fi
185
		fi
186
		echo
186
		echo
187
		if [ $Lang == "fr" ]
187
		if [ $Lang == "fr" ]
188
			then echo "Le système d'exploitation doit être remplacé (Mageia6-64bits)"
188
			then echo "Le système d'exploitation doit être remplacé (Mageia6-64bits)"
189
			else echo "The OS must be replaced (Mageia6-64bits)"
189
			else echo "The OS must be replaced (Mageia6-64bits)"
190
		fi
190
		fi
191
		exit 1
191
		exit 1
192
	fi
192
	fi
193
 
193
 
194
# Test if ALCASAR is already installed
194
# Test if ALCASAR is already installed
195
	if [ -e $CONF_FILE ]
195
	if [ -e $CONF_FILE ]
196
	then
196
	then
197
		current_version=`grep ^VERSION= $CONF_FILE | cut -d"=" -f2`
197
		current_version=`grep ^VERSION= $CONF_FILE | cut -d"=" -f2`
198
		if [ $Lang == "fr" ]
198
		if [ $Lang == "fr" ]
199
			then echo "La version $current_version d'ALCASAR est déjà installée"
199
			then echo "La version $current_version d'ALCASAR est déjà installée"
200
			else echo "ALCASAR version $current_version is already installed"
200
			else echo "ALCASAR version $current_version is already installed"
201
		fi
201
		fi
202
		response=0
202
		response=0
203
		PTN='^[12]$'
203
		PTN='^[12]$'
204
		until [[ $(expr $response : $PTN) -gt 0 ]]
204
		until [[ $(expr $response : $PTN) -gt 0 ]]
205
		do
205
		do
206
			if [ $Lang == "fr" ]
206
			if [ $Lang == "fr" ]
207
				then echo -n "Tapez '1' pour une mise à jour; Tapez '2' pour une réinstallation : "
207
				then echo -n "Tapez '1' pour une mise à jour; Tapez '2' pour une réinstallation : "
208
				else echo -n "Hit '1' for an update; Hit '2' for a reinstallation : "
208
				else echo -n "Hit '1' for an update; Hit '2' for a reinstallation : "
209
			fi
209
			fi
210
			read response
210
			read response
211
		done
211
		done
212
		if [ "$response" = "2" ]
212
		if [ "$response" = "2" ]
213
		then
213
		then
214
			rm -f /var/tmp/alcasar-conf*
214
			rm -f /var/tmp/alcasar-conf*
215
		else
215
		else
216
# Retrieve former NICname
216
# Retrieve former NICname
217
			EXTIF_saved=`grep ^EXTIF= $CONF_FILE | cut -d'=' -f2-`	# EXTernal InterFace
217
			EXTIF_saved=`grep ^EXTIF= $CONF_FILE | cut -d'=' -f2-`	# EXTernal InterFace
218
			INTIF_saved=`grep ^INTIF= $CONF_FILE | cut -d'=' -f2-`	# INTernal InterFace
218
			INTIF_saved=`grep ^INTIF= $CONF_FILE | cut -d'=' -f2-`	# INTernal InterFace
219
			[ "$(/usr/sbin/ip link | grep -c " $EXTIF_saved:")" -ne 0 ] && EXTIF=$EXTIF_saved || echo "Warning: Network card \"$EXTIF_saved\" is not connected, so \"$EXTIF\" will be used for external network."
219
			[ "$(/usr/sbin/ip link | grep -c " $EXTIF_saved:")" -ne 0 ] && EXTIF=$EXTIF_saved || echo "Warning: Network card \"$EXTIF_saved\" is not connected, so \"$EXTIF\" will be used for external network."
220
			[ "$(/usr/sbin/ip link | grep -c " $INTIF_saved:")" -ne 0 ] && INTIF=$INTIF_saved || echo "Warning: Network card \"$INTIF_saved\" is not connected, so \"$INTIF\" will be used for internal network."
220
			[ "$(/usr/sbin/ip link | grep -c " $INTIF_saved:")" -ne 0 ] && INTIF=$INTIF_saved || echo "Warning: Network card \"$INTIF_saved\" is not connected, so \"$INTIF\" will be used for internal network."
221
# Create the current conf file
221
# Create the current conf file
222
			$DIR_SCRIPTS/alcasar-conf.sh --create
222
			$DIR_SCRIPTS/alcasar-conf.sh --create
223
			mode="update"
223
			mode="update"
224
		fi
224
		fi
225
	fi
225
	fi
226
# Test free space on /var
226
# Test free space on /var
227
	if [ ! -d /var/log/netflow/porttracker ]
227
	if [ ! -d /var/log/netflow/porttracker ]
228
		then
228
		then
229
		free_space=`df -BG --output=avail /var|tail -1|tr -d '[:space:]G'`
229
		free_space=`df -BG --output=avail /var|tail -1|tr -d '[:space:]G'`
230
		if [ $free_space -lt 10 ]
230
		if [ $free_space -lt 10 ]
231
			then
231
			then
232
			if [ $Lang == "fr" ]
232
			if [ $Lang == "fr" ]
233
				then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
233
				then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
234
				else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
234
				else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
235
			fi
235
			fi
236
		exit 0
236
		exit 0
237
		fi
237
		fi
238
	fi
238
	fi
239
 
239
 
240
# Detect external/internal interfaces
240
# Detect external/internal interfaces
241
	if [ -z "$EXTIF" ]; then
241
	if [ -z "$EXTIF" ]; then
242
		EXTIF=$(/usr/sbin/ip route list | awk '/^default / {print $5}')
242
		EXTIF=$(/usr/sbin/ip route list | awk '/^default / {print $5}')
243
		if [ -z "$EXTIF" ]; then
243
		if [ -z "$EXTIF" ]; then
244
			if [ "$Lang" == 'fr' ]
244
			if [ "$Lang" == 'fr' ]
245
				then echo -n "Aucune passerelle par défaut configurée"
245
				then echo -n "Aucune passerelle par défaut configurée"
246
				else echo -n "No default gateway configured"
246
				else echo -n "No default gateway configured"
247
			fi
247
			fi
248
			exit 1
248
			exit 1
249
		fi
249
		fi
250
	fi
250
	fi
251
	if [ "$Lang" == 'fr' ]
251
	if [ "$Lang" == 'fr' ]
252
		then echo "Interface externe (Internet) utilisée : $EXTIF"
252
		then echo "Interface externe (Internet) utilisée : $EXTIF"
253
		else echo "External interface (Internet) used: $EXTIF"
253
		else echo "External interface (Internet) used: $EXTIF"
254
	fi
254
	fi
255
 
255
 
256
	if [ -z "$INTIF" ]; then
256
	if [ -z "$INTIF" ]; then
257
		interfacesList=$(/usr/sbin/ip -br link show | cut -d' ' -f1 | grep -v "^\(lo\|tun0\|$EXTIF\)\$")
257
		interfacesList=$(/usr/sbin/ip -br link show | cut -d' ' -f1 | grep -v "^\(lo\|tun0\|$EXTIF\)\$")
258
		interfacesCount=$(echo "$interfacesList" | wc -l)
258
		interfacesCount=$(echo "$interfacesList" | wc -w)
259
		if [ $interfacesCount -eq 0 ]; then
259
		if [ $interfacesCount -eq 0 ]; then
260
			if [ "$Lang" == 'fr' ]
260
			if [ "$Lang" == 'fr' ]
261
				then echo "Aucune interface de disponible pour le réseau interne"
261
				then echo "Aucune interface de disponible pour le réseau interne"
262
				else echo "No interface available for the internal network"
262
				else echo "No interface available for the internal network"
263
			fi
263
			fi
264
			exit 1
264
			exit 1
265
		elif [ $interfacesCount -eq 1 ]; then
265
		elif [ $interfacesCount -eq 1 ]; then
266
			INTIF="$interfacesList"
266
			INTIF="$interfacesList"
267
		else
267
		else
268
			interfacesSorted=$(/usr/sbin/ip -br addr | grep -v "^\(lo\|tun0\|$EXTIF\) " | sort -b -k3n -k2r -k1)
268
			interfacesSorted=$(/usr/sbin/ip -br addr | grep -v "^\(lo\|tun0\|$EXTIF\) " | sort -b -k3n -k2r -k1)
269
			interfacePreferred=$(echo "$interfacesSorted" | head -1 | cut -d' ' -f1)
269
			interfacePreferred=$(echo "$interfacesSorted" | head -1 | cut -d' ' -f1)
270
 
-
 
271
			if [ "$Lang" == 'fr' ]
270
			if [ "$Lang" == 'fr' ]
272
				then echo 'Liste des interfaces disponible :'
271
				then echo 'Liste des interfaces disponible :'
273
				else echo 'List of available interfaces:'
272
				else echo 'List of available interfaces:'
274
			fi
273
			fi
275
			echo "$interfacesSorted"
274
			echo "$interfacesSorted"
276
			response=''
275
			response=''
277
			while true; do
276
			while true; do
278
				if [ "$Lang" == 'fr' ]
277
				if [ "$Lang" == 'fr' ]
279
					then echo -n "Choix de l'interface interne ? [$interfacePreferred] "
278
					then echo -n "Choix de l'interface interne ? [$interfacePreferred] "
280
					else echo -n "Choice of internal interface ? [$interfacePreferred] "
279
					else echo -n "Choice of internal interface ? [$interfacePreferred] "
281
				fi
280
				fi
282
				read response
281
				read response
283
 
282
 
284
				[ -z "$response" ] && response="$interfacePreferred"
283
				[ -z "$response" ] && response="$interfacePreferred"
285
 
284
 
286
				# Check if interface exist
285
				# Check if interface exist
287
				if [ "$(echo "$interfacesList" | grep -c "^$response\$")" -eq 1 ]; then
286
				if [ "$(echo "$interfacesList" | grep -c "^$response\$")" -eq 1 ]; then
288
					INTIF="$response"
287
					INTIF="$response"
289
					break
288
					break
290
				else
289
				else
291
					if [ "$Lang" == 'fr' ]
290
					if [ "$Lang" == 'fr' ]
292
						then echo "Interface \"$response\" introuvable"
291
						then echo "Interface \"$response\" introuvable"
293
						else echo "Interface \"$response\" not found"
292
						else echo "Interface \"$response\" not found"
294
					fi
293
					fi
295
				fi
294
				fi
296
			done
295
			done
297
		fi
296
		fi
298
	fi
297
	fi
299
	if [ "$Lang" == 'fr' ]
298
	if [ "$Lang" == 'fr' ]
300
		then echo "Interface interne utilisée : $INTIF"
299
		then echo "Interface interne utilisée : $INTIF"
301
		else echo "Internal interface used: $INTIF"
300
		else echo "Internal interface used: $INTIF"
302
	fi
301
	fi
303
 
302
 
304
	if [ $Lang == "fr" ]
303
	if [ $Lang == "fr" ]
305
		then echo -n "Tests des paramètres réseau : "
304
		then echo -n "Tests des paramètres réseau : "
306
		else echo -n "Network parameters tests: "
305
		else echo -n "Network parameters tests: "
307
	fi
306
	fi
308
# Remove conf file if NIC is not plugged (ie : GSM/WIFI/Bt dongles)
307
# Remove conf file if NIC is not plugged (ie : GSM/WIFI/Bt dongles)
309
	cd /etc/sysconfig/network-scripts/ || { echo "Unable to find /etc/sysconfig/network-scripts directory"; exit 1; }
308
	cd /etc/sysconfig/network-scripts/ || { echo "Unable to find /etc/sysconfig/network-scripts directory"; exit 1; }
310
	IF_INTERFACES=`ls ifcfg-*|cut -d"-" -f2|grep -v "^lo"|cut -d"*" -f1`
309
	IF_INTERFACES=`ls ifcfg-*|cut -d"-" -f2|grep -v "^lo"|cut -d"*" -f1`
311
	for i in $IF_INTERFACES
310
	for i in $IF_INTERFACES
312
	do
311
	do
313
		if [ "$(/usr/sbin/ip link | grep -c " $i:")" -eq 0 ]; then
312
		if [ "$(/usr/sbin/ip link | grep -c " $i:")" -eq 0 ]; then
314
			rm -f ifcfg-$i
313
			rm -f ifcfg-$i
315
 
314
 
316
			if [ $Lang == "fr" ]
315
			if [ $Lang == "fr" ]
317
				then echo "Suppression : ifcfg-$i"
316
				then echo "Suppression : ifcfg-$i"
318
				else echo "Deleting: ifcfg-$i"
317
				else echo "Deleting: ifcfg-$i"
319
			fi
318
			fi
320
		fi
319
		fi
321
	done
320
	done
322
	cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
321
	cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
323
	echo -n "."
322
	echo -n "."
324
# Test Ethernet NIC links state
323
# Test Ethernet NIC links state
325
	interfacesDown=$(/usr/sbin/ip -br link | grep "^\($EXTIF\|$INTIF\) " | grep 'NO-CARRIER' | cut -d' ' -f1)
324
	interfacesDown=$(/usr/sbin/ip -br link | grep "^\($EXTIF\|$INTIF\) " | grep 'NO-CARRIER' | cut -d' ' -f1)
326
	if [ ! -z "$interfacesDown" ]; then
325
	if [ ! -z "$interfacesDown" ]; then
327
		for i in $interfacesDown; do
326
		for i in $interfacesDown; do
328
			if [ $Lang == "fr" ]
327
			if [ $Lang == "fr" ]
329
			then
328
			then
330
				echo -e "\nÉchec"
329
				echo -e "\nÉchec"
331
				echo "Le lien réseau de la carte $i n'est pas actif."
330
				echo "Le lien réseau de la carte $i n'est pas actif."
332
				echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
331
				echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
333
			else
332
			else
334
				echo -e "\nFailed"
333
				echo -e "\nFailed"
335
				echo "The link state of $i interface is down."
334
				echo "The link state of $i interface is down."
336
				echo "Make sure that this network card is connected to a switch or an A.P."
335
				echo "Make sure that this network card is connected to a switch or an A.P."
337
			fi
336
			fi
338
		done
337
		done
339
		exit 1
338
		exit 1
340
	fi
339
	fi
341
	echo -n "."
340
	echo -n "."
342
# Test EXTIF config files
341
# Test EXTIF config files
343
	PUBLIC_IP_MASK=`/usr/sbin/ip addr show $EXTIF | grep '^\s*inet\s' | awk '{ print $2 }'`
342
	PUBLIC_IP_MASK=`/usr/sbin/ip addr show $EXTIF | grep '^\s*inet\s' | awk '{ print $2 }'`
344
	PUBLIC_IP=`echo $PUBLIC_IP_MASK | cut -d'/' -f1`
343
	PUBLIC_IP=`echo $PUBLIC_IP_MASK | cut -d'/' -f1`
345
	PUBLIC_GATEWAY=`/usr/sbin/ip route list | awk -v EXTIF="$EXTIF" '(/^default / && $5 == EXTIF) {print $3}'`
344
	PUBLIC_GATEWAY=`/usr/sbin/ip route list | awk -v EXTIF="$EXTIF" '(/^default / && $5 == EXTIF) {print $3}'`
346
	if [ "$(echo $PUBLIC_IP|wc -c)" -lt 7 ] || [ "$(echo $PUBLIC_GATEWAY|wc -c)" -lt 7 ]
345
	if [ "$(echo $PUBLIC_IP|wc -c)" -lt 7 ] || [ "$(echo $PUBLIC_GATEWAY|wc -c)" -lt 7 ]
347
	then
346
	then
348
		if [ $Lang == "fr" ]
347
		if [ $Lang == "fr" ]
349
		then
348
		then
350
			echo -e "\nÉchec"
349
			echo -e "\nÉchec"
351
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
350
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
352
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
351
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
353
			echo "Appliquez les changements : 'systemctl restart network'"
352
			echo "Appliquez les changements : 'systemctl restart network'"
354
		else
353
		else
355
			echo -e "\nFailed"
354
			echo -e "\nFailed"
356
			echo "The Internet connected network card ($EXTIF) isn't well configured."
355
			echo "The Internet connected network card ($EXTIF) isn't well configured."
357
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
356
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
358
			echo "Apply the new configuration: 'systemctl restart network'"
357
			echo "Apply the new configuration: 'systemctl restart network'"
359
		fi
358
		fi
360
		echo "DEVICE=$EXTIF"
359
		echo "DEVICE=$EXTIF"
361
		echo "IPADDR="
360
		echo "IPADDR="
362
		echo "NETMASK="
361
		echo "NETMASK="
363
		echo "GATEWAY="
362
		echo "GATEWAY="
364
		echo "DNS1="
363
		echo "DNS1="
365
		echo "DNS2="
364
		echo "DNS2="
366
		echo "ONBOOT=yes"
365
		echo "ONBOOT=yes"
367
		exit 1
366
		exit 1
368
	fi
367
	fi
369
	echo -n "."
368
	echo -n "."
370
# Test if default GW is set on EXTIF (router or ISP provider equipment)
369
# Test if default GW is set on EXTIF (router or ISP provider equipment)
371
	if [ "$(/usr/sbin/ip route list|grep " $EXTIF "|grep -c '^default ')" -ne 1 ] ; then
370
	if [ "$(/usr/sbin/ip route list|grep " $EXTIF "|grep -c '^default ')" -ne 1 ] ; then
372
		if [ $Lang == "fr" ]
371
		if [ $Lang == "fr" ]
373
		then
372
		then
374
			echo -e "\nÉchec"
373
			echo -e "\nÉchec"
375
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
374
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
376
			echo "Réglez ce problème puis relancez ce script."
375
			echo "Réglez ce problème puis relancez ce script."
377
		else
376
		else
378
			echo -e "\nFailed"
377
			echo -e "\nFailed"
379
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
378
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
380
			echo "Resolv this problem, then restart this script."
379
			echo "Resolv this problem, then restart this script."
381
		fi
380
		fi
382
		exit 1
381
		exit 1
383
	fi
382
	fi
384
	echo -n "."
383
	echo -n "."
385
# Test if default GW is alive
384
# Test if default GW is alive
386
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $PUBLIC_GATEWAY|grep response|cut -d" " -f2`
385
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $PUBLIC_GATEWAY|grep response|cut -d" " -f2`
387
	if [ "$(expr $arp_reply)" -eq 0 ]
386
	if [ "$(expr $arp_reply)" -eq 0 ]
388
		then
387
		then
389
		if [ $Lang == "fr" ]
388
		if [ $Lang == "fr" ]
390
		then
389
		then
391
			echo -e "\nÉchec"
390
			echo -e "\nÉchec"
392
			echo "Le routeur de sortie ou la Box Internet ($PUBLIC_GATEWAY) ne répond pas."
391
			echo "Le routeur de sortie ou la Box Internet ($PUBLIC_GATEWAY) ne répond pas."
393
			echo "Réglez ce problème puis relancez ce script."
392
			echo "Réglez ce problème puis relancez ce script."
394
		else
393
		else
395
			echo -e "\nFailed"
394
			echo -e "\nFailed"
396
			echo "The Internet gateway or the ISP equipment ($PUBLIC_GATEWAY) doesn't answered."
395
			echo "The Internet gateway or the ISP equipment ($PUBLIC_GATEWAY) doesn't answered."
397
			echo "Resolv this problem, then restart this script."
396
			echo "Resolv this problem, then restart this script."
398
		fi
397
		fi
399
		exit 1
398
		exit 1
400
	fi
399
	fi
401
	echo -n "."
400
	echo -n "."
402
# Test Internet connectivity
401
# Test Internet connectivity
403
	domainTested='www.google.com'
402
	domainTested='www.google.com'
404
	/usr/bin/curl -s --head "$domainTested" &>/dev/null
403
	/usr/bin/curl -s --head "$domainTested" &>/dev/null
405
	if [ $? -ne 0 ]; then
404
	if [ $? -ne 0 ]; then
406
		if [ $Lang == "fr" ]
405
		if [ $Lang == "fr" ]
407
		then
406
		then
408
			echo -e "\nLa tentative de connexion vers Internet a échoué ($domainTested)."
407
			echo -e "\nLa tentative de connexion vers Internet a échoué ($domainTested)."
409
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
408
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
410
			echo "Vérifiez la validité des adresses IP des DNS."
409
			echo "Vérifiez la validité des adresses IP des DNS."
411
		else
410
		else
412
			echo -e "\nThe Internet connection try failed ($domainTested)."
411
			echo -e "\nThe Internet connection try failed ($domainTested)."
413
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
412
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
414
			echo "Verify the DNS IP addresses"
413
			echo "Verify the DNS IP addresses"
415
		fi
414
		fi
416
		exit 1
415
		exit 1
417
	fi
416
	fi
418
	echo ". : ok"
417
	echo ". : ok"
419
} # end of testing ()
418
} # End of testing()
420
 
419
 
421
#######################################################################
420
#######################################################################
422
##                    Function "init"                                ##
421
##                    Function "init"                                ##
423
## - Creation of ALCASAR conf file "/usr/local/etc/alcasar.conf      ##
422
## - Creation of ALCASAR conf file "/usr/local/etc/alcasar.conf      ##
424
## - Creation of random password for GRUB, mariadb (admin and user)  ##
423
## - Creation of random password for GRUB, mariadb (admin and user)  ##
425
#######################################################################
424
#######################################################################
426
init ()
425
init()
427
{
426
{
428
	if [ "$mode" != "update" ]
427
	if [ "$mode" != "update" ]
429
	then
428
	then
430
# On affecte le nom d'organisme
429
# On affecte le nom d'organisme
431
		header_install
430
		header_install
432
		ORGANISME=!
431
		ORGANISME=!
433
		PTN='^[a-zA-Z0-9-]*$'
432
		PTN='^[a-zA-Z0-9-]*$'
434
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
433
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
435
		do
434
		do
436
			if [ $Lang == "fr" ]
435
			if [ $Lang == "fr" ]
437
				then echo -n "Entrez le nom de votre organisme : "
436
				then echo -n "Entrez le nom de votre organisme : "
438
				else echo -n "Enter the name of your organism : "
437
				else echo -n "Enter the name of your organism : "
439
			fi
438
			fi
440
			read ORGANISME
439
			read ORGANISME
441
			if [ "$ORGANISME" == "" ]
440
			if [ "$ORGANISME" == "" ]
442
			then
441
			then
443
				ORGANISME=!
442
				ORGANISME=!
444
			fi
443
			fi
445
		done
444
		done
446
	fi
445
	fi
447
# On crée aléatoirement les mots de passe et les secrets partagés
446
# On crée aléatoirement les mots de passe et les secrets partagés
448
# We create random passwords and shared secrets
447
# We create random passwords and shared secrets
449
	rm -f $PASSWD_FILE
448
	rm -f $PASSWD_FILE
450
	echo "#####  ALCASAR ($ORGANISME) security passwords  #####" > $PASSWD_FILE
449
	echo "#####  ALCASAR ($ORGANISME) security passwords  #####" > $PASSWD_FILE
451
	grub2pwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c8`
450
	grub2pwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c8`
452
	pbkdf2=`( echo $grub2pwd ; echo $grub2pwd ) | \
451
	pbkdf2=`( echo $grub2pwd ; echo $grub2pwd ) | \
453
		LC_ALL=C /usr/bin/grub2-mkpasswd-pbkdf2 | \
452
		LC_ALL=C /usr/bin/grub2-mkpasswd-pbkdf2 | \
454
		grep -v '[eE]nter password:' | \
453
		grep -v '[eE]nter password:' | \
455
		sed -e "s/PBKDF2 hash of your password is //"`
454
		sed -e "s/PBKDF2 hash of your password is //"`
456
	echo "GRUB2_PASSWORD=$pbkdf2" > /boot/grub2/user.cfg
455
	echo "GRUB2_PASSWORD=$pbkdf2" > /boot/grub2/user.cfg
457
	[ -e /root/grub.default ] || cp /etc/grub.d/10_linux /root/grub.default
456
	[ -e /root/grub.default ] || cp /etc/grub.d/10_linux /root/grub.default
458
	cp -f $DIR_CONF/grub-10_linux /etc/grub.d/10_linux  # Request password only on menu editing attempts (not when selecting an entry)
457
	cp -f $DIR_CONF/grub-10_linux /etc/grub.d/10_linux  # Request password only on menu editing attempts (not when selecting an entry)
459
	chmod 0600 /boot/grub2/user.cfg
458
	chmod 0600 /boot/grub2/user.cfg
460
	echo "# Login name and password to protect GRUB2 boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
459
	echo "# Login name and password to protect GRUB2 boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
461
	echo "GRUB2_user=root" >> $PASSWD_FILE
460
	echo "GRUB2_user=root" >> $PASSWD_FILE
462
	echo "GRUB2_password=$grub2pwd" >> $PASSWD_FILE
461
	echo "GRUB2_password=$grub2pwd" >> $PASSWD_FILE
463
	mysqlpwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
462
	mysqlpwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
464
	echo "# Login name and Password of MariaDB administrator:" >> $PASSWD_FILE
463
	echo "# Login name and Password of MariaDB administrator:" >> $PASSWD_FILE
465
	echo "db_root=$mysqlpwd" >> $PASSWD_FILE
464
	echo "db_root=$mysqlpwd" >> $PASSWD_FILE
466
	radiuspwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
465
	radiuspwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
467
	echo "# Login name and password of MariaDB user:" >> $PASSWD_FILE
466
	echo "# Login name and password of MariaDB user:" >> $PASSWD_FILE
468
	echo "db_user=$DB_USER" >> $PASSWD_FILE
467
	echo "db_user=$DB_USER" >> $PASSWD_FILE
469
	echo "db_password=$radiuspwd" >> $PASSWD_FILE
468
	echo "db_password=$radiuspwd" >> $PASSWD_FILE
470
	secretuam=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
469
	secretuam=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
471
	echo "# Shared secret between the script 'intercept.php' and coova-chilli:" >> $PASSWD_FILE
470
	echo "# Shared secret between the script 'intercept.php' and coova-chilli:" >> $PASSWD_FILE
472
	echo "secret_uam=$secretuam" >> $PASSWD_FILE
471
	echo "secret_uam=$secretuam" >> $PASSWD_FILE
473
	secretradius=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
472
	secretradius=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
474
	echo "# Shared secret between coova-chilli and FreeRadius:" >> $PASSWD_FILE
473
	echo "# Shared secret between coova-chilli and FreeRadius:" >> $PASSWD_FILE
475
	echo "secret_radius=$secretradius" >> $PASSWD_FILE
474
	echo "secret_radius=$secretradius" >> $PASSWD_FILE
476
	chmod 640 $PASSWD_FILE
475
	chmod 640 $PASSWD_FILE
477
#  copy scripts in in /usr/local/bin
476
#  copy scripts in in /usr/local/bin
478
	cp -fr $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown -R root:root $DIR_DEST_BIN/alcasar* ; chmod -R 740 $DIR_DEST_BIN/alcasar*
477
	cp -fr $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown -R root:root $DIR_DEST_BIN/alcasar* ; chmod -R 740 $DIR_DEST_BIN/alcasar*
479
#  copy conf files in /usr/local/etc
478
#  copy conf files in /usr/local/etc
480
	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*
479
	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*
481
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_BIN/alcasar-mysql.sh
480
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_BIN/alcasar-mysql.sh
482
# generate central conf file
481
# generate central conf file
483
	cat <<EOF > $CONF_FILE
482
	cat <<EOF > $CONF_FILE
484
##########################################
483
##########################################
485
##                                      ##
484
##                                      ##
486
##          ALCASAR Parameters          ##
485
##          ALCASAR Parameters          ##
487
##                                      ##
486
##                                      ##
488
##########################################
487
##########################################
489
 
488
 
490
INSTALL_DATE=$DATE
489
INSTALL_DATE=$DATE
491
VERSION=$VERSION
490
VERSION=$VERSION
492
ORGANISM=$ORGANISME
491
ORGANISM=$ORGANISME
493
HOSTNAME=$HOSTNAME
492
HOSTNAME=$HOSTNAME
494
DOMAIN=$DOMAIN
493
DOMAIN=$DOMAIN
495
EOF
494
EOF
496
	chmod o-rwx $CONF_FILE
495
	chmod o-rwx $CONF_FILE
497
} # End of init ()
496
} # End of init()
498
 
497
 
499
#########################################################
498
#########################################################
500
##                    Function "network"               ##
499
##                    Function "network"               ##
501
## - Define the several network address                ##
500
## - Define the several network address                ##
502
## - Define the DNS naming                             ##
501
## - Define the DNS naming                             ##
503
## - INTIF parameters (consultation network)           ##
502
## - INTIF parameters (consultation network)           ##
504
## - Write "/etc/hosts" file                           ##
503
## - Write "/etc/hosts" file                           ##
505
## - write "hosts.allow" & "hosts.deny" files          ##
504
## - write "hosts.allow" & "hosts.deny" files          ##
506
#########################################################
505
#########################################################
507
network ()
506
network()
508
{
507
{
509
	header_install
508
	header_install
510
	if [ "$mode" != "update" ]
509
	if [ "$mode" != "update" ]
511
		then
510
		then
512
		if [ $Lang == "fr" ]
511
		if [ $Lang == "fr" ]
513
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
512
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
514
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
513
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
515
		fi
514
		fi
516
		response=0
515
		response=0
517
		PTN='^[oOyYnN]$'
516
		PTN='^[oOyYnN]$'
518
		until [[ $(expr $response : $PTN) -gt 0 ]]
517
		until [[ $(expr $response : $PTN) -gt 0 ]]
519
		do
518
		do
520
			if [ $Lang == "fr" ]
519
			if [ $Lang == "fr" ]
521
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
520
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
522
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
521
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
523
			fi
522
			fi
524
			read response
523
			read response
525
		done
524
		done
526
		if [ "$response" = "n" ] || [ "$response" = "N" ]
525
		if [ "$response" = "n" ] || [ "$response" = "N" ]
527
		then
526
		then
528
			PRIVATE_IP_MASK="0"
527
			PRIVATE_IP_MASK="0"
529
			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:]]$'
528
			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:]]$'
530
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
529
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
531
			do
530
			do
532
				if [ $Lang == "fr" ]
531
				if [ $Lang == "fr" ]
533
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
532
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
534
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
533
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
535
				fi
534
				fi
536
				read PRIVATE_IP_MASK
535
				read PRIVATE_IP_MASK
537
			done
536
			done
538
		else
537
		else
539
			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
538
			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
540
		fi
539
		fi
541
	else
540
	else
542
		PRIVATE_IP_MASK=`grep ^PRIVATE_IP= conf/etc/alcasar.conf|cut -d"=" -f2`
541
		PRIVATE_IP_MASK=`grep ^PRIVATE_IP= conf/etc/alcasar.conf|cut -d"=" -f2`
543
		rm -rf conf/etc/alcasar.conf
542
		rm -rf conf/etc/alcasar.conf
544
	fi
543
	fi
545
# Define LAN side global parameters
544
# Define LAN side global parameters
546
	hostnamectl set-hostname $HOSTNAME.$DOMAIN
545
	hostnamectl set-hostname $HOSTNAME.$DOMAIN
547
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
546
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
548
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f4`					# last octet of LAN address
547
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f4`					# last octet of LAN address
549
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
548
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
550
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
549
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
551
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
550
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
552
	if [ $PRIVATE_IP == $PRIVATE_NETWORK ]								# when entering network address instead of ip address
551
	if [ $PRIVATE_IP == $PRIVATE_NETWORK ]								# when entering network address instead of ip address
553
	then
552
	then
554
		PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`
553
		PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`
555
		PRIVATE_IP_MASK=`echo $PRIVATE_IP/$PRIVATE_PREFIX`
554
		PRIVATE_IP_MASK=`echo $PRIVATE_IP/$PRIVATE_PREFIX`
556
	fi
555
	fi
557
	private_ip_ending=`echo $PRIVATE_IP | cut -d"." -f4`						# last octet of LAN address
556
	private_ip_ending=`echo $PRIVATE_IP | cut -d"." -f4`						# last octet of LAN address
558
	PRIVATE_SECOND_IP=`echo $PRIVATE_IP | cut -d"." -f1-3`"."`expr $private_ip_ending + 1`		# second network address (ex.: 192.168.182.2)
557
	PRIVATE_SECOND_IP=`echo $PRIVATE_IP | cut -d"." -f1-3`"."`expr $private_ip_ending + 1`		# second network address (ex.: 192.168.182.2)
559
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
558
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
560
	classe=$((PRIVATE_PREFIX/8))									# ie.: 2=classe B, 3=classe C
559
	classe=$((PRIVATE_PREFIX/8))									# ie.: 2=classe B, 3=classe C
561
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
560
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
562
	PRIVATE_MAC=`/usr/sbin/ip link show $INTIF | grep ether | cut -d" " -f6| sed 's/:/-/g'| awk '{print toupper($0)}'` 	# MAC address of INTIF
561
	PRIVATE_MAC=`/usr/sbin/ip link show $INTIF | grep ether | cut -d" " -f6| sed 's/:/-/g'| awk '{print toupper($0)}'` 	# MAC address of INTIF
563
# Define Internet parameters
562
# Define Internet parameters
564
	if [ "$mode" != "update" ]
563
	if [ "$mode" != "update" ]
565
	then
564
	then
566
		DNS1=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS1='| cut -d"=" -f2`	# 1st DNS server
565
		DNS1=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS1='| cut -d"=" -f2`	# 1st DNS server
567
		DNS2=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`	# 2nd DNS server
566
		DNS2=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`	# 2nd DNS server
568
	else
567
	else
569
		DNS1=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS1=' | cut -d"=" -f2`	# 1st DNS server
568
		DNS1=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS1=' | cut -d"=" -f2`	# 1st DNS server
570
		DNS2=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`	# 2nd DNS server
569
		DNS2=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`	# 2nd DNS server
571
	fi
570
	fi
572
    DNS1=${DNS1:=208.67.220.220}
571
    DNS1=${DNS1:=208.67.220.220}
573
	DNS2=${DNS2:=208.67.222.222}
572
	DNS2=${DNS2:=208.67.222.222}
574
#	if [ "$DNS1" == "" ]
573
#	if [ "$DNS1" == "" ]
575
#	then
574
#	then
576
#		if [ $Lang == "fr" ]
575
#		if [ $Lang == "fr" ]
577
#		then
576
#		then
578
#			echo "L'adresse IP des serveurs DNS ne sont pas corrects"
577
#			echo "L'adresse IP des serveurs DNS ne sont pas corrects"
579
#			echo "Vérifiez la configuration de la carte réseau externe ($EXTIF)"
578
#			echo "Vérifiez la configuration de la carte réseau externe ($EXTIF)"
580
#		else
579
#		else
581
#			echo "The IP address of DNS servers are not set correctly"
580
#			echo "The IP address of DNS servers are not set correctly"
582
#			echo "Check the extern network card configuration ($EXTIF)"
581
#			echo "Check the extern network card configuration ($EXTIF)"
583
#		fi
582
#		fi
584
#		exit 0
583
#		exit 0
585
#	fi
584
#	fi
586
	PUBLIC_NETMASK=`/bin/ipcalc -m $PUBLIC_IP_MASK | cut -d"=" -f2`
585
	PUBLIC_NETMASK=`/bin/ipcalc -m $PUBLIC_IP_MASK | cut -d"=" -f2`
587
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
586
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
588
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
587
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
589
# Write network parameters in the conf file
588
# Write network parameters in the conf file
590
	echo "EXTIF=$EXTIF" >> $CONF_FILE
589
	echo "EXTIF=$EXTIF" >> $CONF_FILE
591
	echo "INTIF=$INTIF" >> $CONF_FILE
590
	echo "INTIF=$INTIF" >> $CONF_FILE
592
	######## Récupération des interfaces du ou des réseaux de consultation supplémentaires #################
591
	######## Récupération des interfaces du ou des réseaux de consultation supplémentaires #################
593
	INTERFACES=`/usr/sbin/ip link|grep '^[[:digit:]]:'|grep -v "^lo\|$EXTIF\|tun0"|cut -d " " -f2|tr -d ":"`
592
	INTERFACES=`/usr/sbin/ip link|grep '^[[:digit:]]:'|grep -v "^lo\|$EXTIF\|tun0"|cut -d " " -f2|tr -d ":"`
594
	for i in $INTERFACES
593
	for i in $INTERFACES
595
	do
594
	do
596
		SUB=`echo ${i:0:2}`
595
		SUB=`echo ${i:0:2}`
597
		if [ $SUB = "wl" ]
596
		if [ $SUB = "wl" ]
598
			then WIFIF=$i
597
			then WIFIF=$i
599
		elif [ "$i" != "$INTIF" ] && [ $SUB != "ww" ]
598
		elif [ "$i" != "$INTIF" ] && [ $SUB != "ww" ]
600
			then LANIF=$i
599
			then LANIF=$i
601
		fi
600
		fi
602
	done
601
	done
603
	if [ -n "$WIFIF" ]
602
	if [ -n "$WIFIF" ]
604
		then echo "WIFIF=$WIFIF" >> $CONF_FILE
603
		then echo "WIFIF=$WIFIF" >> $CONF_FILE
605
	elif [ -n "$LANIF" ]
604
	elif [ -n "$LANIF" ]
606
		then echo "LANIF=$LANIF" >> $CONF_FILE
605
		then echo "LANIF=$LANIF" >> $CONF_FILE
607
	fi
606
	fi
608
	#########################################################################################################
607
	#########################################################################################################
609
	IP_SETTING=`grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2` # test static or dynamic
608
	IP_SETTING=`grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2` # test static or dynamic
610
	if [ $IP_SETTING == "dhcp" ]
609
	if [ $IP_SETTING == "dhcp" ]
611
	then
610
	then
612
		echo "PUBLIC_IP=dhcp" >> $CONF_FILE
611
		echo "PUBLIC_IP=dhcp" >> $CONF_FILE
613
		echo "GW=dhcp" >> $CONF_FILE
612
		echo "GW=dhcp" >> $CONF_FILE
614
	else
613
	else
615
		echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
614
		echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
616
		echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE
615
		echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE
617
	fi
616
	fi
618
	echo "DNS1=$DNS1" >> $CONF_FILE
617
	echo "DNS1=$DNS1" >> $CONF_FILE
619
	echo "DNS2=$DNS2" >> $CONF_FILE
618
	echo "DNS2=$DNS2" >> $CONF_FILE
620
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
619
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
621
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
620
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
622
	echo "DHCP=on" >> $CONF_FILE
621
	echo "DHCP=on" >> $CONF_FILE
623
	echo "EXT_DHCP_IP=" >> $CONF_FILE
622
	echo "EXT_DHCP_IP=" >> $CONF_FILE
624
	echo "RELAY_DHCP_IP=" >> $CONF_FILE
623
	echo "RELAY_DHCP_IP=" >> $CONF_FILE
625
	echo "RELAY_DHCP_PORT=" >> $CONF_FILE
624
	echo "RELAY_DHCP_PORT=" >> $CONF_FILE
626
	echo "INT_DNS_DOMAIN=" >> $CONF_FILE
625
	echo "INT_DNS_DOMAIN=" >> $CONF_FILE
627
	echo "INT_DNS_IP=" >> $CONF_FILE
626
	echo "INT_DNS_IP=" >> $CONF_FILE
628
	echo "INT_DNS_ACTIVE=off" >> $CONF_FILE
627
	echo "INT_DNS_ACTIVE=off" >> $CONF_FILE
629
# network default
628
# network default
630
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
629
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
631
	cat <<EOF > /etc/sysconfig/network
630
	cat <<EOF > /etc/sysconfig/network
632
NETWORKING=yes
631
NETWORKING=yes
633
FORWARD_IPV4=true
632
FORWARD_IPV4=true
634
EOF
633
EOF
635
# write "/etc/hosts"
634
# write "/etc/hosts"
636
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
635
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
637
	cat <<EOF > /etc/hosts
636
	cat <<EOF > /etc/hosts
638
127.0.0.1	localhost
637
127.0.0.1	localhost
639
$PRIVATE_IP	$HOSTNAME
638
$PRIVATE_IP	$HOSTNAME
640
EOF
639
EOF
641
# write EXTIF (Internet) config
640
# write EXTIF (Internet) config
642
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
641
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
643
	if [ $IP_SETTING == "dhcp" ]
642
	if [ $IP_SETTING == "dhcp" ]
644
	then
643
	then
645
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
644
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
646
DEVICE=$EXTIF
645
DEVICE=$EXTIF
647
BOOTPROTO=dhcp
646
BOOTPROTO=dhcp
648
DNS1=127.0.0.1
647
DNS1=127.0.0.1
649
PEERDNS=no
648
PEERDNS=no
650
RESOLV_MODS=yes
649
RESOLV_MODS=yes
651
ONBOOT=yes
650
ONBOOT=yes
652
NOZEROCONF=yes
651
NOZEROCONF=yes
653
METRIC=10
652
METRIC=10
654
MII_NOT_SUPPORTED=yes
653
MII_NOT_SUPPORTED=yes
655
IPV6INIT=no
654
IPV6INIT=no
656
IPV6TO4INIT=no
655
IPV6TO4INIT=no
657
ACCOUNTING=no
656
ACCOUNTING=no
658
USERCTL=no
657
USERCTL=no
659
MTU=$MTU
658
MTU=$MTU
660
EOF
659
EOF
661
	else
660
	else
662
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
661
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
663
DEVICE=$EXTIF
662
DEVICE=$EXTIF
664
BOOTPROTO=static
663
BOOTPROTO=static
665
IPADDR=$PUBLIC_IP
664
IPADDR=$PUBLIC_IP
666
NETMASK=$PUBLIC_NETMASK
665
NETMASK=$PUBLIC_NETMASK
667
GATEWAY=$PUBLIC_GATEWAY
666
GATEWAY=$PUBLIC_GATEWAY
668
DNS1=127.0.0.1
667
DNS1=127.0.0.1
669
RESOLV_MODS=yes
668
RESOLV_MODS=yes
670
ONBOOT=yes
669
ONBOOT=yes
671
METRIC=10
670
METRIC=10
672
NOZEROCONF=yes
671
NOZEROCONF=yes
673
MII_NOT_SUPPORTED=yes
672
MII_NOT_SUPPORTED=yes
674
IPV6INIT=no
673
IPV6INIT=no
675
IPV6TO4INIT=no
674
IPV6TO4INIT=no
676
ACCOUNTING=no
675
ACCOUNTING=no
677
USERCTL=no
676
USERCTL=no
678
MTU=$MTU
677
MTU=$MTU
679
EOF
678
EOF
680
	fi
679
	fi
681
# write INTIF (consultation LAN) in normal mode
680
# write INTIF (consultation LAN) in normal mode
682
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
681
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
683
DEVICE=$INTIF
682
DEVICE=$INTIF
684
BOOTPROTO=static
683
BOOTPROTO=static
685
ONBOOT=yes
684
ONBOOT=yes
686
NOZEROCONF=yes
685
NOZEROCONF=yes
687
MII_NOT_SUPPORTED=yes
686
MII_NOT_SUPPORTED=yes
688
IPV6INIT=no
687
IPV6INIT=no
689
IPV6TO4INIT=no
688
IPV6TO4INIT=no
690
ACCOUNTING=no
689
ACCOUNTING=no
691
USERCTL=no
690
USERCTL=no
692
EOF
691
EOF
693
	cp -f /etc/sysconfig/network-scripts/ifcfg-$INTIF /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
692
	cp -f /etc/sysconfig/network-scripts/ifcfg-$INTIF /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
694
# write INTIF in bypass mode (see "alcasar-bypass.sh")
693
# write INTIF in bypass mode (see "alcasar-bypass.sh")
695
	cat <<EOF > /etc/sysconfig/network-scripts/bypass-ifcfg-$INTIF
694
	cat <<EOF > /etc/sysconfig/network-scripts/bypass-ifcfg-$INTIF
696
DEVICE=$INTIF
695
DEVICE=$INTIF
697
BOOTPROTO=static
696
BOOTPROTO=static
698
IPADDR=$PRIVATE_IP
697
IPADDR=$PRIVATE_IP
699
NETMASK=$PRIVATE_NETMASK
698
NETMASK=$PRIVATE_NETMASK
700
ONBOOT=yes
699
ONBOOT=yes
701
METRIC=10
700
METRIC=10
702
NOZEROCONF=yes
701
NOZEROCONF=yes
703
MII_NOT_SUPPORTED=yes
702
MII_NOT_SUPPORTED=yes
704
IPV6INIT=no
703
IPV6INIT=no
705
IPV6TO4INIT=no
704
IPV6TO4INIT=no
706
ACCOUNTING=no
705
ACCOUNTING=no
707
USERCTL=no
706
USERCTL=no
708
EOF
707
EOF
709
######### Config WIFIF (consultation WIFI) ou LANIF (consultation LAN) in normal mode #################
708
######### Config WIFIF (consultation WIFI) ou LANIF (consultation LAN) in normal mode #################
710
	if [ -n "$WIFIF" ] && [ "$WIFIF" != "$INTIF" ]
709
	if [ -n "$WIFIF" ] && [ "$WIFIF" != "$INTIF" ]
711
	then
710
	then
712
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$WIFIF
711
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$WIFIF
713
DEVICE=$WIFIF
712
DEVICE=$WIFIF
714
BOOTPROTO=static
713
BOOTPROTO=static
715
ONBOOT=yes
714
ONBOOT=yes
716
NOZEROCONF=yes
715
NOZEROCONF=yes
717
MII_NOT_SUPPORTED=yes
716
MII_NOT_SUPPORTED=yes
718
IPV6INIT=no
717
IPV6INIT=no
719
IPV6TO4INIT=no
718
IPV6TO4INIT=no
720
ACCOUNTING=no
719
ACCOUNTING=no
721
USERCTL=no
720
USERCTL=no
722
EOF
721
EOF
723
	elif [ -n "$LANIF" ]
722
	elif [ -n "$LANIF" ]
724
	then
723
	then
725
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$LANIF
724
		cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$LANIF
726
DEVICE=$LANIF
725
DEVICE=$LANIF
727
BOOTPROTO=static
726
BOOTPROTO=static
728
ONBOOT=yes
727
ONBOOT=yes
729
NOZEROCONF=yes
728
NOZEROCONF=yes
730
MII_NOT_SUPPORTED=yes
729
MII_NOT_SUPPORTED=yes
731
IPV6INIT=no
730
IPV6INIT=no
732
IPV6TO4INIT=no
731
IPV6TO4INIT=no
733
ACCOUNTING=no
732
ACCOUNTING=no
734
USERCTL=no
733
USERCTL=no
735
EOF
734
EOF
736
	fi
735
	fi
737
	#########################################################################################################
736
	#########################################################################################################
738
# write hosts.allow & hosts.deny
737
# write hosts.allow & hosts.deny
739
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
738
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
740
	cat <<EOF > /etc/hosts.allow
739
	cat <<EOF > /etc/hosts.allow
741
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
740
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
742
sshd: ALL
741
sshd: ALL
743
ntpd: $PRIVATE_NETWORK_SHORT
742
ntpd: $PRIVATE_NETWORK_SHORT
744
EOF
743
EOF
745
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
744
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
746
	cat <<EOF > /etc/hosts.deny
745
	cat <<EOF > /etc/hosts.deny
747
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
746
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
748
EOF
747
EOF
749
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
748
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
750
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
749
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
751
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
750
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
752
# load conntrack ftp module
751
# load conntrack ftp module
753
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
752
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
754
	echo "nf_conntrack_ftp" >>  /etc/modprobe.preload
753
	echo "nf_conntrack_ftp" >>  /etc/modprobe.preload
755
# load ipt_NETFLOW module
754
# load ipt_NETFLOW module
756
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
755
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
757
# modify iptables service files (start with "alcasar-iptables.sh" and stop with flush)
756
# modify iptables service files (start with "alcasar-iptables.sh" and stop with flush)
758
	[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
757
	[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
759
	$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
758
	$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
760
	[ -e /usr/libexec/iptables.init.default ] || cp /usr/libexec/iptables.init /usr/libexec/iptables.init.default
759
	[ -e /usr/libexec/iptables.init.default ] || cp /usr/libexec/iptables.init /usr/libexec/iptables.init.default
761
	$SED "s?\[ -f \$IPTABLES_CONFIG \] .*?#&?" /usr/libexec/iptables.init # comment the test (flush all rules & policies)
760
	$SED "s?\[ -f \$IPTABLES_CONFIG \] .*?#&?" /usr/libexec/iptables.init # comment the test (flush all rules & policies)
762
#
761
#
763
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
762
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
764
} # End of network ()
763
} # End of network()
765
 
764
 
766
###################################################
765
###################################################
767
##                  Function "ACC"               ##
766
##                  Function "ACC"               ##
768
## - copy ALCASAR Control Center (ACC) files     ##
767
## - copy ALCASAR Control Center (ACC) files     ##
769
## - configuration of the web server (Lighttpd)  ##
768
## - configuration of the web server (Lighttpd)  ##
770
## - creation of the first ACC admin account     ##
769
## - creation of the first ACC admin account     ##
771
## - secure the ACC access                       ##
770
## - secure the ACC access                       ##
772
###################################################
771
###################################################
773
ACC ()
772
ACC()
774
{
773
{
775
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
774
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
776
	mkdir $DIR_WEB
775
	mkdir $DIR_WEB
777
# Copy & adapt ACC files
776
# Copy & adapt ACC files
778
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
777
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
779
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
778
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
780
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
779
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
781
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
780
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
782
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
781
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
783
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
782
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
784
	chown -R apache:apache $DIR_WEB/*
783
	chown -R apache:apache $DIR_WEB/*
785
# copy & adapt "freeradius-web" files
784
# copy & adapt "freeradius-web" files
786
	cp -rf $DIR_CONF/freeradius-web/ /etc/
785
	cp -rf $DIR_CONF/freeradius-web/ /etc/
787
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
786
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
788
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
787
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
789
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
788
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
790
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
789
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
791
	cat <<EOF > /etc/freeradius-web/naslist.conf
790
	cat <<EOF > /etc/freeradius-web/naslist.conf
792
nas1_name: alcasar-$ORGANISME
791
nas1_name: alcasar-$ORGANISME
793
nas1_model: Network Access Controler
792
nas1_model: Network Access Controler
794
nas1_ip: $PRIVATE_IP
793
nas1_ip: $PRIVATE_IP
795
nas1_port_num: 0
794
nas1_port_num: 0
796
nas1_community: public
795
nas1_community: public
797
EOF
796
EOF
798
	chown -R apache:apache /etc/freeradius-web/
797
	chown -R apache:apache /etc/freeradius-web/
799
# create the log & backup structure :
798
# create the log & backup structure :
800
# - base = users database
799
# - base = users database
801
# - archive = tarball of "base + http firewall + netflow"
800
# - archive = tarball of "base + http firewall + netflow"
802
# - security = watchdog log
801
# - security = watchdog log
803
	for i in base archive security activity_report;
802
	for i in base archive security activity_report;
804
	do
803
	do
805
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
804
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
806
	done
805
	done
807
	chown -R root:apache $DIR_SAVE
806
	chown -R root:apache $DIR_SAVE
808
# Configuring & securing php
807
# Configuring & securing php
809
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
808
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
810
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
809
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
811
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
810
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
812
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
811
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
813
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
812
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
814
	$SED "s?^display_errors.*?display_errors = Off?" /etc/php.ini
813
	$SED "s?^display_errors.*?display_errors = Off?" /etc/php.ini
815
	$SED "s?^display_startup_errors.*?display_startup_errors = Off?" /etc/php.ini
814
	$SED "s?^display_startup_errors.*?display_startup_errors = Off?" /etc/php.ini
816
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
815
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
817
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
816
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
818
	$SED "s?^allow_url_fopen.*?allow_url_fopen = Off?" /etc/php.ini
817
	$SED "s?^allow_url_fopen.*?allow_url_fopen = Off?" /etc/php.ini
819
# Configuring & securing Lighttpd
818
# Configuring & securing Lighttpd
820
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
819
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
821
	[ -e /etc/lighttpd/lighttpd.conf.default ] || cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.default
820
	[ -e /etc/lighttpd/lighttpd.conf.default ] || cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.default
822
	$SED "s?^server\.use-ipv6.*?server\.use-ipv6 = \"disable\"?g" /etc/lighttpd/lighttpd.conf
821
	$SED "s?^server\.use-ipv6.*?server\.use-ipv6 = \"disable\"?g" /etc/lighttpd/lighttpd.conf
823
	$SED "s?^#server\.bind.*?server\.bind = \"$PRIVATE_IP\"?g" /etc/lighttpd/lighttpd.conf
822
	$SED "s?^#server\.bind.*?server\.bind = \"$PRIVATE_IP\"?g" /etc/lighttpd/lighttpd.conf
824
	$SED "s?^server\.bind.*?server\.bind = \"$PRIVATE_IP\"?g" /etc/lighttpd/lighttpd.conf
823
	$SED "s?^server\.bind.*?server\.bind = \"$PRIVATE_IP\"?g" /etc/lighttpd/lighttpd.conf
825
	$SED "s?^#server\.tag.*?server\.tag = \"\"?g" /etc/lighttpd/lighttpd.conf
824
	$SED "s?^#server\.tag.*?server\.tag = \"\"?g" /etc/lighttpd/lighttpd.conf
826
	echo "include \"vhosts.d/alcasar.conf\"" >> /etc/lighttpd/lighttpd.conf
825
	echo "include \"vhosts.d/alcasar.conf\"" >> /etc/lighttpd/lighttpd.conf
827
 
826
 
828
	[ -e /etc/lighttpd/modules.conf.default ] || cp /etc/lighttpd/modules.conf /etc/lighttpd/modules.conf.default
827
	[ -e /etc/lighttpd/modules.conf.default ] || cp /etc/lighttpd/modules.conf /etc/lighttpd/modules.conf.default
829
	$SED "s?^#[ ]*\"mod_auth\",.*? \"mod_auth\",?g" /etc/lighttpd/modules.conf
828
	$SED "s?^#[ ]*\"mod_auth\",.*? \"mod_auth\",?g" /etc/lighttpd/modules.conf
830
	$SED "s?^#[ ]*\"mod_alias\",.*? \"mod_alias\",?g" /etc/lighttpd/modules.conf
829
	$SED "s?^#[ ]*\"mod_alias\",.*? \"mod_alias\",?g" /etc/lighttpd/modules.conf
831
	$SED "s?^#[ ]*\"mod_redirect\",.*? \"mod_redirect\",?g" /etc/lighttpd/modules.conf
830
	$SED "s?^#[ ]*\"mod_redirect\",.*? \"mod_redirect\",?g" /etc/lighttpd/modules.conf
832
	$SED "s?^#include \"conf.d/fastcgi.conf\".*?include \"conf.d/fastcgi.conf\"?g" /etc/lighttpd/modules.conf
831
	$SED "s?^#include \"conf.d/fastcgi.conf\".*?include \"conf.d/fastcgi.conf\"?g" /etc/lighttpd/modules.conf
833
 
832
 
834
	[ -e /etc/lighttpd/conf.d/fastcgi.conf.default ] || cp /etc/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf.default
833
	[ -e /etc/lighttpd/conf.d/fastcgi.conf.default ] || cp /etc/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf.default
835
 
834
 
836
	[ -e /etc/php-fpm.conf.default ] || cp /etc/php-fpm.conf /etc/php-fpm.conf.default
835
	[ -e /etc/php-fpm.conf.default ] || cp /etc/php-fpm.conf /etc/php-fpm.conf.default
837
	$SED "s?^;listen\.owner.*?listen\.owner = apache?g" /etc/php-fpm.conf
836
	$SED "s?^;listen\.owner.*?listen\.owner = apache?g" /etc/php-fpm.conf
838
	$SED "s?^;listen\.group.*?listen\.group = apache?g" /etc/php-fpm.conf
837
	$SED "s?^;listen\.group.*?listen\.group = apache?g" /etc/php-fpm.conf
839
	$SED "s?^;listen\.mode.*?listen\.mode = 0660?g" /etc/php-fpm.conf
838
	$SED "s?^;listen\.mode.*?listen\.mode = 0660?g" /etc/php-fpm.conf
840
 
839
 
841
	cp $DIR_CONF/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf
840
	cp $DIR_CONF/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf
842
 
841
 
843
	[ -d /etc/lighttpd/vhosts.d ] || mkdir /etc/lighttpd/vhosts.d
842
	[ -d /etc/lighttpd/vhosts.d ] || mkdir /etc/lighttpd/vhosts.d
844
	cp $DIR_CONF/lighttpd/vhosts.d/* /etc/lighttpd/vhosts.d/
843
	cp $DIR_CONF/lighttpd/vhosts.d/* /etc/lighttpd/vhosts.d/
845
	$SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$PRIVATE_IP"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
844
	$SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$PRIVATE_IP"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
846
	$SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$PRIVATE_IP"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
845
	$SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$PRIVATE_IP"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
847
	$SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$PRIVATE_IP\"/g" /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
846
	$SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$PRIVATE_IP\"/g" /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
848
	$SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$PRIVATE_IP\"/g" /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
847
	$SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$PRIVATE_IP\"/g" /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
849
	ln -s /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf /etc/lighttpd/vhosts.d/alcasar.conf
848
	ln -s /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf /etc/lighttpd/vhosts.d/alcasar.conf
850
 
849
 
851
	[ -d /var/log/lighttpd ] || mkdir /var/log/lighttpd
850
	[ -d /var/log/lighttpd ] || mkdir /var/log/lighttpd
852
	[ -e /var/log/lighttpd/access.log ] || touch /var/log/lighttpd/access.log
851
	[ -e /var/log/lighttpd/access.log ] || touch /var/log/lighttpd/access.log
853
	[ -e /var/log/lighttpd/error.log ] || touch /var/log/lighttpd/error.log
852
	[ -e /var/log/lighttpd/error.log ] || touch /var/log/lighttpd/error.log
854
 
853
 
855
	chown -R apache:apache /var/log/lighttpd
854
	chown -R apache:apache /var/log/lighttpd
856
	/usr/bin/systemctl start lighttpd
855
	/usr/bin/systemctl start lighttpd
857
	/usr/bin/systemctl start php-fpm
856
	/usr/bin/systemctl start php-fpm
858
 
857
 
859
# Creation of the first account (in 'admin' profile)
858
# Creation of the first account (in 'admin' profile)
860
	if [ "$mode" = "install" ]
859
	if [ "$mode" = "install" ]
861
	then
860
	then
862
		header_install
861
		header_install
863
# Creation of keys file for the admin account ("admin")
862
# Creation of keys file for the admin account ("admin")
864
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
863
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
865
		mkdir -p $DIR_DEST_ETC/digest
864
		mkdir -p $DIR_DEST_ETC/digest
866
		chmod 755 $DIR_DEST_ETC/digest
865
		chmod 755 $DIR_DEST_ETC/digest
867
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
866
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
868
		do
867
		do
869
			$DIR_DEST_BIN/alcasar-profil.sh --add admin
868
			$DIR_DEST_BIN/alcasar-profil.sh --add admin
870
		done
869
		done
871
	fi
870
	fi
872
 
871
 
873
	# Run after coova (in order to wait tun0 to be up)
872
	# Run after coova (in order to wait tun0 to be up)
874
	$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/lighttpd.service
873
	$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/lighttpd.service
875
	# Log file for ACC access imputability
874
	# Log file for ACC access imputability
876
	[ -e /var/Save/security/acc_access.log ] || touch /var/Save/security/acc_access.log
875
	[ -e /var/Save/security/acc_access.log ] || touch /var/Save/security/acc_access.log
877
	chown root:apache /var/Save/security/acc_access.log
876
	chown root:apache /var/Save/security/acc_access.log
878
	chmod 664 /var/Save/security/acc_access.log
877
	chmod 664 /var/Save/security/acc_access.log
879
} # End of ACC ()
878
} # End of ACC()
880
 
879
 
881
##################################################################
880
##################################################################
882
##                               Fonction "CA"                  ##
881
##                               Fonction "CA"                  ##
883
## - Creating the CA and the server certificate (lighttpd)      ##
882
## - Creating the CA and the server certificate (lighttpd)      ##
884
##################################################################
883
##################################################################
885
CA ()
884
CA()
886
{
885
{
887
	$DIR_DEST_BIN/alcasar-CA.sh
886
	$DIR_DEST_BIN/alcasar-CA.sh
888
	chown -R root:apache /etc/pki
887
	chown -R root:apache /etc/pki
889
	chmod -R 750 /etc/pki
888
	chmod -R 750 /etc/pki
890
} # End of CA ()
889
} # End of CA()
891
 
890
 
892
#############################################################
891
#############################################################
893
##               Function "time_server"                    ##
892
##               Function "time_server"                    ##
894
## - Configuring NTP server                                ##
893
## - Configuring NTP server                                ##
895
#############################################################
894
#############################################################
896
time_server ()
895
time_server()
897
{
896
{
898
# Set the Internet time server
897
# Set the Internet time server
899
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
898
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
900
	cat <<EOF > /etc/ntp/step-tickers
899
	cat <<EOF > /etc/ntp/step-tickers
901
0.fr.pool.ntp.org	# adapt to your country
900
0.fr.pool.ntp.org	# adapt to your country
902
1.fr.pool.ntp.org
901
1.fr.pool.ntp.org
903
2.fr.pool.ntp.org
902
2.fr.pool.ntp.org
904
EOF
903
EOF
905
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
904
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
906
	cat <<EOF > /etc/ntp.conf
905
	cat <<EOF > /etc/ntp.conf
907
server 0.fr.pool.ntp.org	# adapt to your country
906
server 0.fr.pool.ntp.org	# adapt to your country
908
server 1.fr.pool.ntp.org
907
server 1.fr.pool.ntp.org
909
server 2.fr.pool.ntp.org
908
server 2.fr.pool.ntp.org
910
server 127.127.1.0   		# local clock si NTP internet indisponible ...
909
server 127.127.1.0   		# local clock si NTP internet indisponible ...
911
fudge 127.127.1.0 stratum 10
910
fudge 127.127.1.0 stratum 10
912
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
911
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
913
restrict 127.0.0.1
912
restrict 127.0.0.1
914
driftfile /var/lib/ntp/drift
913
driftfile /var/lib/ntp/drift
915
logfile /var/log/ntp.log
914
logfile /var/log/ntp.log
916
disable monitor
915
disable monitor
917
EOF
916
EOF
918
	chown -R ntp:ntp /var/lib/ntp
917
	chown -R ntp:ntp /var/lib/ntp
919
# Synchronize now
918
# Synchronize now
920
	ntpd -4 -q -g &
919
	ntpd -4 -q -g &
921
} # End of time_server ()
920
} # End of time_server()
922
 
921
 
923
#####################################################################
922
#####################################################################
924
##                     Function "init_db"                          ##
923
##                     Function "init_db"                          ##
925
## - Mysql initialization                                          ##
924
## - Mysql initialization                                          ##
926
## - Set admin (root) password                                     ##
925
## - Set admin (root) password                                     ##
927
## - Remove unused users & databases                               ##
926
## - Remove unused users & databases                               ##
928
## - Radius database creation                                      ##
927
## - Radius database creation                                      ##
929
## - Copy of accounting tables (mtotacct, totacct) & userinfo      ##
928
## - Copy of accounting tables (mtotacct, totacct) & userinfo      ##
930
#####################################################################
929
#####################################################################
931
init_db ()
930
init_db()
932
{
931
{
933
	if [ "`systemctl is-active mysqld`" == "active" ]
932
	if [ "`systemctl is-active mysqld`" == "active" ]
934
	then
933
	then
935
		systemctl stop mysqld
934
		systemctl stop mysqld
936
	fi
935
	fi
937
	rm -rf /var/lib/mysql # to be sure that there is no former installation
936
	rm -rf /var/lib/mysql # to be sure that there is no former installation
938
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
937
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
939
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
938
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
940
	$SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
939
	$SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
941
	$SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf
940
	$SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf
942
	$SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf  # accentuated user names are allowed
941
	$SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf  # accentuated user names are allowed
943
	[ -e /etc/my.cnf.d/feedback.cnf ] && $SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/feedback.cnf # remove the feedback plugin (ALCASAR doesn't report anything !)
942
	[ -e /etc/my.cnf.d/feedback.cnf ] && $SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/feedback.cnf # remove the feedback plugin (ALCASAR doesn't report anything !)
-
 
943
	[ -e /etc/my.cnf.d/auth_gssapi.cnf ] && $SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/auth_gssapi.cnf # remove GSS plugin (ALCASAR doesn't use Kerberos)
944
	/usr/sbin/mysqld-prepare-db-dir > /dev/null 2>&1
944
	/usr/sbin/mysqld-prepare-db-dir > /dev/null 2>&1
945
	/usr/bin/systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
945
	/usr/bin/systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
946
	/usr/bin/systemctl start mysqld
946
	/usr/bin/systemctl start mysqld
947
	nb_round=1
947
	nb_round=1
948
	while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
948
	while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
949
	do
949
	do
950
		nb_round=`expr $nb_round + 1`
950
		nb_round=`expr $nb_round + 1`
951
		sleep 2
951
		sleep 2
952
	done
952
	done
953
	if [ ! -S /var/lib/mysql/mysql.sock ]
953
	if [ ! -S /var/lib/mysql/mysql.sock ]
954
	then
954
	then
955
		echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
955
		echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
956
		exit
956
		exit
957
	fi
957
	fi
958
# Secure the server
958
# Secure the server
959
	/usr/bin/mysql --execute "GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '$mysqlpwd';"
959
	/usr/bin/mysql --execute "GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '$mysqlpwd';"
960
 
-
 
961
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --execute"
960
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --execute"
962
	$MYSQL "DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
961
	$MYSQL "DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
963
	$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;"
962
	$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;"
964
# Create 'radius' database
963
# Create 'radius' database
965
	$MYSQL "CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
964
	$MYSQL "CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
966
# Add an empty radius database structure
965
# Add an empty radius database structure
967
	/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
966
	/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
968
# modify the start script in order to close accounting connexion when the system is comming down or up
967
# modify the start script in order to close accounting connexion when the system is comming down or up
969
	[ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
968
	[ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
970
	$SED "/^ExecStart=/a ExecStop=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
969
	$SED "/^ExecStart=/a ExecStop=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
971
	$SED "/^ExecStop=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
970
	$SED "/^ExecStop=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
972
	/usr/bin/systemctl unset-environment MYSQLD_OPTS
971
	/usr/bin/systemctl unset-environment MYSQLD_OPTS
973
	/usr/bin/systemctl daemon-reload
972
	/usr/bin/systemctl daemon-reload
974
} # End of init_db ()
973
} # End of init_db()
975
 
974
 
976
###################################################################
975
###################################################################
977
##                       Function "freeradius"                   ##
976
##                       Function "freeradius"                   ##
978
## - Set the configuration files                                 ##
977
## - Set the configuration files                                 ##
979
## - Set the shared secret between coova-chilli and freeradius   ##
978
## - Set the shared secret between coova-chilli and freeradius   ##
980
## - Adapt the Mysql conf file and counters                      ##
979
## - Adapt the Mysql conf file and counters                      ##
981
###################################################################
980
###################################################################
982
freeradius ()
981
freeradius()
983
{
982
{
984
	cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
983
	cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
985
	chown -R radius:radius /etc/raddb
984
	chown -R radius:radius /etc/raddb
986
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
985
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
987
# Set radius global parameters (radius.conf)
986
# Set radius global parameters (radius.conf)
988
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
987
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
989
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
988
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
990
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
989
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
991
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf # remove the proxy function
990
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf # remove the proxy function
992
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf # remove the proxy function
991
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf # remove the proxy function
993
 
992
 
994
# Add ALCASAR dictionary
993
# Add ALCASAR dictionary
995
	cp $DIR_CONF/radius/dictionary.alcasar /usr/share/freeradius/dictionary.alcasar
994
	cp $DIR_CONF/radius/dictionary.alcasar /usr/share/freeradius/dictionary.alcasar
996
	echo -e '\n$INCLUDE dictionary.alcasar' >> /usr/share/freeradius/dictionary
995
	echo -e '\n$INCLUDE dictionary.alcasar' >> /usr/share/freeradius/dictionary
997
# Add CoovaChilli dictionary
996
# Add CoovaChilli dictionary
998
	cp /usr/share/doc/coova-chilli/dictionary.coovachilli /usr/share/freeradius/dictionary.coovachilli
997
	cp /usr/share/doc/coova-chilli/dictionary.coovachilli /usr/share/freeradius/dictionary.coovachilli
999
	echo -e '\n$INCLUDE dictionary.coovachilli' >> /usr/share/freeradius/dictionary
998
	echo -e '\n$INCLUDE dictionary.coovachilli' >> /usr/share/freeradius/dictionary
1000
# Set "client.conf" to describe radius clients (coova on 127.0.0.1)
999
# Set "client.conf" to describe radius clients (coova on 127.0.0.1)
1001
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1000
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1002
	cat << EOF > /etc/raddb/clients.conf
1001
	cat << EOF > /etc/raddb/clients.conf
1003
client localhost {
1002
client localhost {
1004
	ipaddr = 127.0.0.1
1003
	ipaddr = 127.0.0.1
1005
	secret = $secretradius
1004
	secret = $secretradius
1006
	shortname = chilli
1005
	shortname = chilli
1007
	nas_type = other
1006
	nas_type = other
1008
}
1007
}
1009
EOF
1008
EOF
1010
# Set Virtual server (remvove all except "alcasar virtual site")
1009
# Set Virtual server (remvove all except "alcasar virtual site")
1011
	rm -f /etc/raddb/sites-enabled/*
1010
	rm -f /etc/raddb/sites-enabled/*
1012
	cp $DIR_CONF/radius/alcasar /etc/raddb/sites-available/alcasar
1011
	cp $DIR_CONF/radius/alcasar /etc/raddb/sites-available/alcasar
1013
	cp $DIR_CONF/radius/alcasar-with-ldap /etc/raddb/sites-available/alcasar-with-ldap
1012
	cp $DIR_CONF/radius/alcasar-with-ldap /etc/raddb/sites-available/alcasar-with-ldap
1014
	chown radius:apache /etc/raddb/sites-available/alcasar*
1013
	chown radius:apache /etc/raddb/sites-available/alcasar*
1015
	chmod 660 /etc/raddb/sites-available/alcasar*
1014
	chmod 660 /etc/raddb/sites-available/alcasar*
1016
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1015
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1017
# INFO : To connect from outside (EAP), add the EAP virtual server (link in sites-enabled) and inner-tunnel modules (link in mods-enabled)
1016
# INFO : To connect from outside (EAP), add the EAP virtual server (link in sites-enabled) and inner-tunnel modules (link in mods-enabled)
1018
 
1017
 
1019
# Set modules
1018
# Set modules
1020
# Add custom LDAP "available module"
1019
# Add custom LDAP "available module"
1021
	cp -f $DIR_CONF/radius/ldap-alcasar /etc/raddb/mods-available/
1020
	cp -f $DIR_CONF/radius/ldap-alcasar /etc/raddb/mods-available/
1022
	chown -R radius:radius /etc/raddb/mods-available/ldap-alcasar
1021
	chown -R radius:radius /etc/raddb/mods-available/ldap-alcasar
1023
# Set only usefull modules for ALCASAR (ldap is enabled only via ACC)
1022
# Set only usefull modules for ALCASAR (ldap is enabled only via ACC)
1024
	rm -rf  /etc/raddb/mods-enabled/*
1023
	rm -rf  /etc/raddb/mods-enabled/*
1025
	for mods in sql sqlcounter attr_filter expiration logintime pap expr always
1024
	for mods in sql sqlcounter attr_filter expiration logintime pap expr always
1026
	do
1025
	do
1027
		ln -s /etc/raddb/mods-available/$mods /etc/raddb/mods-enabled/$mods
1026
		ln -s /etc/raddb/mods-available/$mods /etc/raddb/mods-enabled/$mods
1028
	done
1027
	done
1029
# Configure SQL mod
1028
# Configure SQL mod
1030
	[ -e /etc/raddb/mods-available/sql.default ] || cp /etc/raddb/mods-available/sql /etc/raddb/mods-available/sql.default
1029
	[ -e /etc/raddb/mods-available/sql.default ] || cp /etc/raddb/mods-available/sql /etc/raddb/mods-available/sql.default
1031
	$SED "s?^[\t ]*driver =.*?driver = \"rlm_sql_mysql\"?g" /etc/raddb/mods-available/sql
1030
	$SED "s?^[\t ]*driver =.*?driver = \"rlm_sql_mysql\"?g" /etc/raddb/mods-available/sql
1032
	$SED "s?^[\t ]*dialect =.*?dialect = \"mysql\"?g" /etc/raddb/mods-available/sql
1031
	$SED "s?^[\t ]*dialect =.*?dialect = \"mysql\"?g" /etc/raddb/mods-available/sql
1033
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/mods-available/sql
1032
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/mods-available/sql
1034
	$SED "s?^#[\t ]*server =.*?server = \"localhost\"?g" /etc/raddb/mods-available/sql
1033
	$SED "s?^#[\t ]*server =.*?server = \"localhost\"?g" /etc/raddb/mods-available/sql
1035
	$SED "s?^#[\t ]*port =.*?port = \"3306\"?g" /etc/raddb/mods-available/sql
1034
	$SED "s?^#[\t ]*port =.*?port = \"3306\"?g" /etc/raddb/mods-available/sql
1036
	$SED "s?^#[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/mods-available/sql
1035
	$SED "s?^#[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/mods-available/sql
1037
	$SED "s?^#[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/mods-available/sql
1036
	$SED "s?^#[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/mods-available/sql
1038
# queries.conf modifications : case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.
1037
# queries.conf modifications : case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.
1039
	[ -e /etc/raddb/mods-config/sql/main/mysql/queries.conf.default ] || cp /etc/raddb/mods-config/sql/main/mysql/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf.default
1038
	[ -e /etc/raddb/mods-config/sql/main/mysql/queries.conf.default ] || cp /etc/raddb/mods-config/sql/main/mysql/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf.default
1040
	cp -f $DIR_CONF/radius/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf
1039
	cp -f $DIR_CONF/radius/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf
1041
	chown -R radius:radius /etc/raddb/mods-config/sql/main/mysql/queries.conf
1040
	chown -R radius:radius /etc/raddb/mods-config/sql/main/mysql/queries.conf
1042
# sqlcounter modifications
1041
# sqlcounter modifications
1043
	[ -e /etc/raddb/mods-available/sqlcounter.default ] || cp /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-available/sqlcounter.default
1042
	[ -e /etc/raddb/mods-available/sqlcounter.default ] || cp /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-available/sqlcounter.default
1044
	cp -f $DIR_CONF/radius/sqlcounter /etc/raddb/mods-available/sqlcounter
1043
	cp -f $DIR_CONF/radius/sqlcounter /etc/raddb/mods-available/sqlcounter
1045
	chown -R radius:radius /etc/raddb/mods-available/sqlcounter
1044
	chown -R radius:radius /etc/raddb/mods-available/sqlcounter
1046
# make certain that mysql is up before freeradius start
1045
# make certain that mysql is up before freeradius start
1047
	[ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
1046
	[ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
1048
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1047
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1049
	/usr/bin/systemctl daemon-reload
1048
	/usr/bin/systemctl daemon-reload
1050
# Allow apache to change some conf files (ie : ldap on/off)
1049
# Allow apache to change some conf files (ie : ldap on/off)
1051
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1050
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1052
} # End freeradius ()
1051
} # End of freeradius()
1053
 
1052
 
1054
#############################################################################
1053
#############################################################################
1055
##                           Function "chilli"                             ##
1054
##                           Function "chilli"                             ##
1056
## - Creation of the conf file and init file (systemd) for coova-chilli    ##
1055
## - Creation of the conf file and init file (systemd) for coova-chilli    ##
1057
## - Adapt the authentication web page (intercept.php)                     ##
1056
## - Adapt the authentication web page (intercept.php)                     ##
1058
#############################################################################
1057
#############################################################################
1059
chilli ()
1058
chilli()
1060
{
1059
{
1061
# chilli unit for systemd
1060
# chilli unit for systemd
1062
	cat << EOF > /lib/systemd/system/chilli.service
1061
	cat << EOF > /lib/systemd/system/chilli.service
1063
#  This file is part of systemd.
1062
#  This file is part of systemd.
1064
#
1063
#
1065
#  systemd is free software; you can redistribute it and/or modify it
1064
#  systemd is free software; you can redistribute it and/or modify it
1066
#  under the terms of the GNU General Public License as published by
1065
#  under the terms of the GNU General Public License as published by
1067
#  the Free Software Foundation; either version 2 of the License, or
1066
#  the Free Software Foundation; either version 2 of the License, or
1068
#  (at your option) any later version.
1067
#  (at your option) any later version.
1069
[Unit]
1068
[Unit]
1070
Description=chilli is a captive portal daemon
1069
Description=chilli is a captive portal daemon
1071
After=network.target
1070
After=network.target
1072
 
1071
 
1073
[Service]
1072
[Service]
1074
Type=forking
1073
Type=forking
1075
ExecStart=/usr/libexec/chilli start
1074
ExecStart=/usr/libexec/chilli start
1076
ExecStop=/usr/libexec/chilli stop
1075
ExecStop=/usr/libexec/chilli stop
1077
ExecReload=/usr/libexec/chilli reload
1076
ExecReload=/usr/libexec/chilli reload
1078
PIDFile=/var/run/chilli.pid
1077
PIDFile=/var/run/chilli.pid
1079
 
1078
 
1080
[Install]
1079
[Install]
1081
WantedBy=multi-user.target
1080
WantedBy=multi-user.target
1082
EOF
1081
EOF
1083
# init file creation
1082
# init file creation
1084
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1083
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1085
	cat <<EOF > /etc/init.d/chilli
1084
	cat <<EOF > /etc/init.d/chilli
1086
#!/bin/sh
1085
#!/bin/sh
1087
#
1086
#
1088
# chilli CoovaChilli init
1087
# chilli CoovaChilli init
1089
#
1088
#
1090
# chkconfig: 2345 65 35
1089
# chkconfig: 2345 65 35
1091
# description: CoovaChilli
1090
# description: CoovaChilli
1092
### BEGIN INIT INFO
1091
### BEGIN INIT INFO
1093
# Provides:       chilli
1092
# Provides:       chilli
1094
# Required-Start: network
1093
# Required-Start: network
1095
# Should-Start:
1094
# Should-Start:
1096
# Required-Stop:  network
1095
# Required-Stop:  network
1097
# Should-Stop:
1096
# Should-Stop:
1098
# Default-Start:  2 3 5
1097
# Default-Start:  2 3 5
1099
# Default-Stop:
1098
# Default-Stop:
1100
# Description:    CoovaChilli access controller
1099
# Description:    CoovaChilli access controller
1101
### END INIT INFO
1100
### END INIT INFO
1102
 
1101
 
1103
[ -f /usr/sbin/chilli ] || exit 0
1102
[ -f /usr/sbin/chilli ] || exit 0
1104
. /etc/init.d/functions
1103
. /etc/init.d/functions
1105
CONFIG=/etc/chilli.conf
1104
CONFIG=/etc/chilli.conf
1106
pidfile=/var/run/chilli.pid
1105
pidfile=/var/run/chilli.pid
1107
[ -f \$CONFIG ] || {
1106
[ -f \$CONFIG ] || {
1108
	echo "\$CONFIG Not found"
1107
	echo "\$CONFIG Not found"
1109
	exit 0
1108
	exit 0
1110
}
1109
}
1111
current_users_file="/var/tmp/havp/current_users.txt"	# file containing active users
1110
current_users_file="/var/tmp/havp/current_users.txt"	# file containing active users
1112
RETVAL=0
1111
RETVAL=0
1113
prog="chilli"
1112
prog="chilli"
1114
case \$1 in
1113
case \$1 in
1115
	start)
1114
	start)
1116
		if [ -f \$pidfile ] ; then
1115
		if [ -f \$pidfile ] ; then
1117
			gprintf "chilli is already running"
1116
			gprintf "chilli is already running"
1118
		else
1117
		else
1119
			gprintf "Starting \$prog: "
1118
			gprintf "Starting \$prog: "
1120
			echo '' > \$current_users_file && chown apache:apache \$current_users_file
1119
			echo '' > \$current_users_file && chown apache:apache \$current_users_file
1121
			rm -f /var/run/chilli* # cleaning
1120
			rm -f /var/run/chilli* # cleaning
1122
			/usr/sbin/modprobe tun >/dev/null 2>&1
1121
			/usr/sbin/modprobe tun >/dev/null 2>&1
1123
			echo 1 > /proc/sys/net/ipv4/ip_forward
1122
			echo 1 > /proc/sys/net/ipv4/ip_forward
1124
			[ -e /dev/net/tun ] || {
1123
			[ -e /dev/net/tun ] || {
1125
				(cd /dev;
1124
				(cd /dev;
1126
				mkdir net;
1125
				mkdir net;
1127
				cd net;
1126
				cd net;
1128
				mknod tun c 10 200)
1127
				mknod tun c 10 200)
1129
			}
1128
			}
1130
			ifconfig $INTIF 0.0.0.0
1129
			ifconfig $INTIF 0.0.0.0
1131
			/usr/sbin/ethtool -K $INTIF gro off
1130
			/usr/sbin/ethtool -K $INTIF gro off
1132
			daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1131
			daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1133
			RETVAL=\$?
1132
			RETVAL=\$?
1134
		fi
1133
		fi
1135
		;;
1134
		;;
1136
 
1135
 
1137
	reload)
1136
	reload)
1138
		killall -HUP chilli
1137
		killall -HUP chilli
1139
		;;
1138
		;;
1140
 
1139
 
1141
	restart)
1140
	restart)
1142
		\$0 stop
1141
		\$0 stop
1143
		sleep 2
1142
		sleep 2
1144
		\$0 start
1143
		\$0 start
1145
		;;
1144
		;;
1146
 
1145
 
1147
	status)
1146
	status)
1148
		status chilli
1147
		status chilli
1149
		RETVAL=0
1148
		RETVAL=0
1150
		;;
1149
		;;
1151
 
1150
 
1152
	stop)
1151
	stop)
1153
		if [ -f \$pidfile ] ; then
1152
		if [ -f \$pidfile ] ; then
1154
			gprintf "Shutting down \$prog: "
1153
			gprintf "Shutting down \$prog: "
1155
			killproc /usr/sbin/chilli
1154
			killproc /usr/sbin/chilli
1156
			RETVAL=\$?
1155
			RETVAL=\$?
1157
			[ \$RETVAL = 0 ] && rm -f \$pidfile
1156
			[ \$RETVAL = 0 ] && rm -f \$pidfile
1158
			[ -e \$current_users_file ] && rm -f \$current_users_file
1157
			[ -e \$current_users_file ] && rm -f \$current_users_file
1159
		else
1158
		else
1160
			gprintf "chilli is not running"
1159
			gprintf "chilli is not running"
1161
		fi
1160
		fi
1162
		;;
1161
		;;
1163
 
1162
 
1164
	*)
1163
	*)
1165
		echo "Usage: \$0 {start|stop|restart|reload|status}"
1164
		echo "Usage: \$0 {start|stop|restart|reload|status}"
1166
		exit 1
1165
		exit 1
1167
esac
1166
esac
1168
echo
1167
echo
1169
EOF
1168
EOF
1170
	chmod a+x /etc/init.d/chilli
1169
	chmod a+x /etc/init.d/chilli
1171
	ln -s /etc/init.d/chilli /usr/libexec/chilli
1170
	ln -s /etc/init.d/chilli /usr/libexec/chilli
1172
# conf file creation
1171
# conf file creation
1173
	[ -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
1174
	#NTP Option configuration for DHCP
1173
	#NTP Option configuration for DHCP
1175
	#DHCP Options : rfc2132
1174
	#DHCP Options : rfc2132
1176
		#dhcp option value will be convert in hexa.
1175
		#dhcp option value will be convert in hexa.
1177
		#NTP option (or 'option 42') is like :
1176
		#NTP option (or 'option 42') is like :
1178
		#
1177
		#
1179
		#    Code   Len         Address 1               Address 2
1178
		#    Code   Len         Address 1               Address 2
1180
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1179
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1181
		#   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1180
		#   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1182
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1181
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1183
		#
1182
		#
1184
		#Code : 42 => 2a
1183
		#Code : 42 => 2a
1185
		#Len : 4 => 04
1184
		#Len : 4 => 04
1186
	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)")
1187
	cat <<EOF > /etc/chilli.conf
1186
	cat <<EOF > /etc/chilli.conf
1188
# coova config for ALCASAR
1187
# coova config for ALCASAR
1189
cmdsocket	/var/run/chilli.sock
1188
cmdsocket	/var/run/chilli.sock
1190
unixipc		chilli.$INTIF.ipc
1189
unixipc		chilli.$INTIF.ipc
1191
pidfile		/var/run/chilli.pid
1190
pidfile		/var/run/chilli.pid
1192
net		$PRIVATE_NETWORK_MASK
1191
net		$PRIVATE_NETWORK_MASK
1193
dhcpif		$INTIF
1192
dhcpif		$INTIF
1194
ethers		$DIR_DEST_ETC/alcasar-ethers
1193
ethers		$DIR_DEST_ETC/alcasar-ethers
1195
#nodynip
1194
#nodynip
1196
#statip
1195
#statip
1197
dynip		$PRIVATE_NETWORK_MASK
1196
dynip		$PRIVATE_NETWORK_MASK
1198
domain		$DOMAIN
1197
domain		$DOMAIN
1199
dns1		$PRIVATE_IP
1198
dns1		$PRIVATE_IP
1200
dns2		$PRIVATE_IP
1199
dns2		$PRIVATE_IP
1201
uamlisten	$PRIVATE_IP
1200
uamlisten	$PRIVATE_IP
1202
uamport		3990
1201
uamport		3990
1203
uamuiport	3991
1202
uamuiport	3991
1204
macauth
1203
macauth
1205
macpasswd	password
1204
macpasswd	password
1206
strictmacauth
1205
strictmacauth
1207
locationname	$HOSTNAME.$DOMAIN
1206
locationname	$HOSTNAME.$DOMAIN
1208
radiusserver1	127.0.0.1
1207
radiusserver1	127.0.0.1
1209
radiusserver2	127.0.0.1
1208
radiusserver2	127.0.0.1
1210
radiussecret	$secretradius
1209
radiussecret	$secretradius
1211
radiusauthport	1812
1210
radiusauthport	1812
1212
radiusacctport	1813
1211
radiusacctport	1813
1213
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
1212
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
1214
redirurl
1213
redirurl
1215
radiusnasid	$HOSTNAME.$DOMAIN
1214
radiusnasid	$HOSTNAME.$DOMAIN
1216
uamsecret	$secretuam
1215
uamsecret	$secretuam
1217
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1216
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1218
coaport		3799
1217
coaport		3799
1219
conup		$DIR_DEST_BIN/alcasar-conup.sh
1218
conup		$DIR_DEST_BIN/alcasar-conup.sh
1220
condown		$DIR_DEST_BIN/alcasar-condown.sh
1219
condown		$DIR_DEST_BIN/alcasar-condown.sh
1221
macup		$DIR_DEST_BIN/alcasar-macup.sh
1220
macup		$DIR_DEST_BIN/alcasar-macup.sh
1222
include		$DIR_DEST_ETC/alcasar-uamallowed
1221
include		$DIR_DEST_ETC/alcasar-uamallowed
1223
include		$DIR_DEST_ETC/alcasar-uamdomain
1222
include		$DIR_DEST_ETC/alcasar-uamdomain
1224
dhcpopt		2a04$PRIVATE_IP_HEXA
1223
dhcpopt		2a04$PRIVATE_IP_HEXA
1225
#dhcpgateway		none
1224
#dhcpgateway		none
1226
#dhcprelayagent		none
1225
#dhcprelayagent		none
1227
#dhcpgatewayport	none
1226
#dhcpgatewayport	none
1228
sslkeyfile	/etc/pki/tls/private/alcasar.key
1227
sslkeyfile	/etc/pki/tls/private/alcasar.key
1229
sslcertfile	/etc/pki/tls/certs/alcasar.crt
1228
sslcertfile	/etc/pki/tls/certs/alcasar.crt
1230
redirssl
1229
redirssl
1231
uamuissl
1230
uamuissl
1232
EOF
1231
EOF
1233
# create files for "DHCP static ip" and "DHCP static ip info". Reserve the second IP address for INTIF (the first one is for tun0)
1232
# create files for "DHCP static ip" and "DHCP static ip info". Reserve the second IP address for INTIF (the first one is for tun0)
1234
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1233
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1235
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers-info
1234
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers-info
1236
# create files for trusted domains and urls
1235
# create files for trusted domains and urls
1237
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1236
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1238
	chown root:apache $DIR_DEST_ETC/alcasar-*
1237
	chown root:apache $DIR_DEST_ETC/alcasar-*
1239
	chmod 660 $DIR_DEST_ETC/alcasar-*
1238
	chmod 660 $DIR_DEST_ETC/alcasar-*
1240
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1239
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1241
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1240
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1242
# user 'chilli' creation (in order to run conup/off and up/down scripts
1241
# user 'chilli' creation (in order to run conup/off and up/down scripts
1243
	chilli_exist=`grep -c ^chilli: /etc/passwd`
1242
	chilli_exist=`grep -c ^chilli: /etc/passwd`
1244
	if [ "$chilli_exist" == "1" ]
1243
	if [ "$chilli_exist" == "1" ]
1245
	then
1244
	then
1246
		userdel -r chilli 2>/dev/null
1245
		userdel -r chilli 2>/dev/null
1247
	fi
1246
	fi
1248
	groupadd -f chilli
1247
	groupadd -f chilli
1249
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1248
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1250
}  # End of chilli ()
1249
}  # End of chilli()
1251
 
1250
 
1252
################################################################
1251
################################################################
1253
##                   Function "e2guardian"                    ##
1252
##                   Function "e2guardian"                    ##
1254
## - Set the parameters of this HTML proxy (as controler)     ##
1253
## - Set the parameters of this HTML proxy (as controler)     ##
1255
################################################################
1254
################################################################
1256
e2guardian ()
1255
e2guardian()
1257
{
1256
{
1258
	mkdir -p /var/e2guardian /var/log/e2guardian
1257
	mkdir -p /var/e2guardian /var/log/e2guardian
1259
	chown -R e2guardian /var/e2guardian /var/log/e2guardian
1258
	chown -R e2guardian /var/e2guardian /var/log/e2guardian
1260
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/e2guardian -c /etc/e2guardian/e2guardian.conf?g" /lib/systemd/system/e2guardian.service
1259
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/e2guardian -c /etc/e2guardian/e2guardian.conf?g" /lib/systemd/system/e2guardian.service
1261
	$SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/e2guardian.service
1260
	$SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/e2guardian.service
1262
	[ -e $DIR_DG/e2guardian.conf.default ] || cp $DIR_DG/e2guardian.conf $DIR_DG/e2guardian.conf.default
1261
	[ -e $DIR_DG/e2guardian.conf.default ] || cp $DIR_DG/e2guardian.conf $DIR_DG/e2guardian.conf.default
1263
# By default the filter is off
1262
# By default the filter is off
1264
	$SED "s/^reportinglevel =.*/reportinglevel = 3/g" $DIR_DG/e2guardian.conf
1263
	$SED "s/^reportinglevel =.*/reportinglevel = 3/g" $DIR_DG/e2guardian.conf
1265
# French deny HTML page
1264
# French deny HTML page
1266
	$SED "s?^language =.*?language = french?g" $DIR_DG/e2guardian.conf
1265
	$SED "s?^language =.*?language = french?g" $DIR_DG/e2guardian.conf
1267
# Listen only on LAN side
1266
# Listen only on LAN side
1268
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/e2guardian.conf
1267
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/e2guardian.conf
1269
# DG send its flow to HAVP
1268
# DG send its flow to HAVP
1270
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/e2guardian.conf
1269
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/e2guardian.conf
1271
# replace the default deny HTML page
1270
# replace the default deny HTML page
1272
	cp -f $DIR_CONF/template.html /usr/share/e2guardian/languages/ukenglish/
1271
	cp -f $DIR_CONF/template.html /usr/share/e2guardian/languages/ukenglish/
1273
	cp -f $DIR_CONF/template-fr.html /usr/share/e2guardian/languages/french/template.html
1272
	cp -f $DIR_CONF/template-fr.html /usr/share/e2guardian/languages/french/template.html
1274
# Don't log
1273
# Don't log
1275
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/e2guardian.conf
1274
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/e2guardian.conf
1276
# # Change the default report page
1275
# # Change the default report page
1277
	$SED "s?^accessdeniedaddress =.*?accessdeniedaddress = http://$HOSTNAME.$DOMAIN?g" $DIR_DG/e2guardian.conf
1276
	$SED "s?^accessdeniedaddress =.*?accessdeniedaddress = http://$HOSTNAME.$DOMAIN?g" $DIR_DG/e2guardian.conf
1278
# Disable HTML content control
1277
# Disable HTML content control
1279
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/e2guardian.conf
1278
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/e2guardian.conf
1280
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1279
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1281
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1280
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1282
# Disable URL control with regex
1281
# Disable URL control with regex
1283
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1282
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1284
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1283
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1285
# Configure E2guardian for large site
1284
# Configure E2guardian for large site
1286
# Minimum number of processus to handle connections
1285
# Minimum number of processus to handle connections
1287
	$SED "s?^minchildren =.*?minchildren = 15?g" $DIR_DG/e2guardian.conf
1286
	$SED "s?^minchildren =.*?minchildren = 15?g" $DIR_DG/e2guardian.conf
1288
# Maximum number of processus to handle connections
1287
# Maximum number of processus to handle connections
1289
	$SED "s?^maxchildren =.*?maxchildren = 200?g" $DIR_DG/e2guardian.conf
1288
	$SED "s?^maxchildren =.*?maxchildren = 200?g" $DIR_DG/e2guardian.conf
1290
# Run at least 8 daemons
1289
# Run at least 8 daemons
1291
	$SED "s?^minsparechildren =.*?minsparechildren = 8?g" $DIR_DG/e2guardian.conf
1290
	$SED "s?^minsparechildren =.*?minsparechildren = 8?g" $DIR_DG/e2guardian.conf
1292
# minimum number of processes to spawn
1291
# minimum number of processes to spawn
1293
	$SED "s?^preforkchildren =.*?preforkchildren = 10?g" $DIR_DG/e2guardian.conf
1292
	$SED "s?^preforkchildren =.*?preforkchildren = 10?g" $DIR_DG/e2guardian.conf
1294
# maximum age of a child process before it croaks it
1293
# maximum age of a child process before it croaks it
1295
	$SED "s?^maxagechildren =.*?maxagechildren = 1000?g" $DIR_DG/e2guardian.conf
1294
	$SED "s?^maxagechildren =.*?maxagechildren = 1000?g" $DIR_DG/e2guardian.conf
1296
# Disable download files control
1295
# Disable download files control
1297
	[ -e $DIR_DG/e2guardianf1.conf.default ] || cp $DIR_DG/e2guardianf1.conf $DIR_DG/e2guardianf1.conf.default
1296
	[ -e $DIR_DG/e2guardianf1.conf.default ] || cp $DIR_DG/e2guardianf1.conf $DIR_DG/e2guardianf1.conf.default
1298
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/e2guardianf1.conf
1297
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/e2guardianf1.conf
1299
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1298
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1300
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1299
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1301
	touch $DIR_DG/lists/bannedextensionlist
1300
	touch $DIR_DG/lists/bannedextensionlist
1302
	touch $DIR_DG/lists/bannedmimetypelist
1301
	touch $DIR_DG/lists/bannedmimetypelist
1303
# 'Safesearch' regex actualisation
1302
# 'Safesearch' regex actualisation
1304
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1303
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1305
# empty LAN IP list that won't be WEB filtered
1304
# empty LAN IP list that won't be WEB filtered
1306
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1305
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1307
	touch $DIR_DG/lists/exceptioniplist
1306
	touch $DIR_DG/lists/exceptioniplist
1308
# Keep a copy of URL & domain filter configuration files
1307
# Keep a copy of URL & domain filter configuration files
1309
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1308
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1310
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1309
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1311
} # End of e2guardian ()
1310
} # End of e2guardian()
1312
 
1311
 
1313
##################################################################
1312
##################################################################
1314
##                     Function "antivirus"                     ##
1313
##                     Function "antivirus"                     ##
1315
## - Set the parameters of havp, libclamav and freshclam        ##
1314
## - Set the parameters of havp, libclamav and freshclam        ##
1316
##################################################################
1315
##################################################################
1317
antivirus ()
1316
antivirus()
1318
{
1317
{
1319
# create 'havp' user
1318
# create 'havp' user
1320
	havp_exist=`grep -c ^havp: /etc/passwd`
1319
	havp_exist=`grep -c ^havp: /etc/passwd`
1321
	if [ "$havp_exist" == "1" ]
1320
	if [ "$havp_exist" == "1" ]
1322
	then
1321
	then
1323
		userdel -r havp 2>/dev/null
1322
		userdel -r havp 2>/dev/null
1324
		groupdel havp 2>/dev/null
1323
		groupdel havp 2>/dev/null
1325
	fi
1324
	fi
1326
	groupadd -f havp
1325
	groupadd -f havp
1327
	useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1326
	useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1328
	mkdir -p /var/tmp/havp /var/log/havp /var/run/havp /var/log/clamav /var/lib/clamav
1327
	mkdir -p /var/tmp/havp /var/log/havp /var/run/havp /var/log/clamav /var/lib/clamav
1329
	chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1328
	chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1330
	chown -R clamav:clamav /var/log/clamav /var/lib/clamav
1329
	chown -R clamav:clamav /var/log/clamav /var/lib/clamav
1331
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1330
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1332
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1331
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1333
	$SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config	# pidfile
1332
	$SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config	# pidfile
1334
	$SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config		# transparent mode
1333
	$SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config		# transparent mode
1335
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
1334
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
1336
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on port 8090 (on loopback)
1335
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on port 8090 (on loopback)
1337
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
1336
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
1338
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1337
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1339
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
1338
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
1340
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
1339
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
1341
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1340
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1342
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1341
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1343
# skip checking of youtube flow (too heavy load / risk too low)
1342
# skip checking of youtube flow (too heavy load / risk too low)
1344
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1343
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1345
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1344
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1346
	echo "*.youtube.com/*" >> /etc/havp/whitelist
1345
	echo "*.youtube.com/*" >> /etc/havp/whitelist
1347
# adapt init script and systemd unit
1346
# adapt init script and systemd unit
1348
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1347
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1349
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
1348
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
1350
	[ -e /lib/systemd/system/havp.service.default ] || cp /lib/systemd/system/havp.service /lib/systemd/system/havp.service.default
1349
	[ -e /lib/systemd/system/havp.service.default ] || cp /lib/systemd/system/havp.service /lib/systemd/system/havp.service.default
1351
	$SED "/^PIDFile/i ExecStartPre=/bin/mkdir -p /var/run/havp" /lib/systemd/system/havp.service
1350
	$SED "/^PIDFile/i ExecStartPre=/bin/mkdir -p /var/run/havp" /lib/systemd/system/havp.service
1352
	$SED "/^PIDFile/i ExecStartPre=/bin/chown -R havp:havp /var/run/havp /var/log/havp" /lib/systemd/system/havp.service
1351
	$SED "/^PIDFile/i ExecStartPre=/bin/chown -R havp:havp /var/run/havp /var/log/havp" /lib/systemd/system/havp.service
1353
# replace of the intercept page (template)
1352
# replace of the intercept page (template)
1354
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1353
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1355
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1354
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1356
# update virus database every 4 hours (24h/6)
1355
# update virus database every 4 hours (24h/6)
1357
	[ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1356
	[ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1358
	$SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1357
	$SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1359
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1358
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1360
	$SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1359
	$SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1361
	$SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1360
	$SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1362
	$SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1361
	$SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1363
# update now
1362
# update now
1364
	/usr/bin/freshclam --no-warnings
1363
	/usr/bin/freshclam --no-warnings
1365
} # End of antivirus ()
1364
} # End of antivirus()
1366
 
1365
 
1367
################################################################################
1366
################################################################################
1368
##                           Function "tinyproxy"                             ##
1367
##                           Function "tinyproxy"                             ##
1369
## - Set the parameters of tinyproxy (proxy between filtered users and havp)  ##
1368
## - Set the parameters of tinyproxy (proxy between filtered users and havp)  ##
1370
################################################################################
1369
################################################################################
1371
tinyproxy ()
1370
tinyproxy()
1372
{
1371
{
1373
	tinyproxy_exist=`grep -c ^tinyproxy: /etc/passwd`
1372
	tinyproxy_exist=`grep -c ^tinyproxy: /etc/passwd`
1374
	if [ "$tinyproxy_exist" == "1" ]
1373
	if [ "$tinyproxy_exist" == "1" ]
1375
	then
1374
	then
1376
		userdel -r tinyproxy 2>/dev/null
1375
		userdel -r tinyproxy 2>/dev/null
1377
		groupdel tinyproxy 2>/dev/null
1376
		groupdel tinyproxy 2>/dev/null
1378
	fi
1377
	fi
1379
	groupadd -f tinyproxy
1378
	groupadd -f tinyproxy
1380
	useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" tinyproxy
1379
	useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" tinyproxy
1381
	mkdir -p /var/run/tinyproxy /var/log/tinyproxy
1380
	mkdir -p /var/run/tinyproxy /var/log/tinyproxy
1382
	chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1381
	chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1383
	[ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
1382
	[ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
1384
	$SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1383
	$SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1385
	$SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1384
	$SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1386
	$SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf			# Listen Port
1385
	$SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf			# Listen Port
1387
	$SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf		# Listen NIC (only intif)
1386
	$SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf		# Listen NIC (only intif)
1388
	$SED "s?^#LogFile.*?LogFile \"/var/log/tinyproxy/tinyproxy.log\"?g" /etc/tinyproxy/tinyproxy.conf
1387
	$SED "s?^#LogFile.*?LogFile \"/var/log/tinyproxy/tinyproxy.log\"?g" /etc/tinyproxy/tinyproxy.conf
1389
	$SED "s?^#PidFile.*?PidFile \"/var/run/tinyproxy/tinyproxy.pid\"?g" /etc/tinyproxy/tinyproxy.conf
1388
	$SED "s?^#PidFile.*?PidFile \"/var/run/tinyproxy/tinyproxy.pid\"?g" /etc/tinyproxy/tinyproxy.conf
1390
	$SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf		# Only errors are logged
1389
	$SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf		# Only errors are logged
1391
	$SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf	# forward to HAVP
1390
	$SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf	# forward to HAVP
1392
	$SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf	# Stealth mode
1391
	$SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf	# Stealth mode
1393
	$SED "s?^Allow.*?Allow $PRIVATE_NETWORK_MASK?g" /etc/tinyproxy/tinyproxy.conf	# Allow from LAN
1392
	$SED "s?^Allow.*?Allow $PRIVATE_NETWORK_MASK?g" /etc/tinyproxy/tinyproxy.conf	# Allow from LAN
1394
# Create the systemd unit
1393
# Create the systemd unit
1395
cat << EOF > /lib/systemd/system/tinyproxy.service
1394
cat << EOF > /lib/systemd/system/tinyproxy.service
1396
#  This file is part of systemd.
1395
#  This file is part of systemd.
1397
#
1396
#
1398
#  systemd is free software; you can redistribute it and/or modify it
1397
#  systemd is free software; you can redistribute it and/or modify it
1399
#  under the terms of the GNU General Public License as published by
1398
#  under the terms of the GNU General Public License as published by
1400
#  the Free Software Foundation; either version 2 of the License, or
1399
#  the Free Software Foundation; either version 2 of the License, or
1401
#  (at your option) any later version.
1400
#  (at your option) any later version.
1402
 
1401
 
1403
# This unit launches tinyproxy (a very light proxy).
1402
# This unit launches tinyproxy (a very light proxy).
1404
# The "sleep 2" is needed because the pid file isn't ready for systemd
1403
# The "sleep 2" is needed because the pid file isn't ready for systemd
1405
[Unit]
1404
[Unit]
1406
Description=Tinyproxy Web Proxy Server
1405
Description=Tinyproxy Web Proxy Server
1407
After=network.target iptables.service
1406
After=network.target iptables.service
1408
 
1407
 
1409
[Service]
1408
[Service]
1410
Type=forking
1409
Type=forking
1411
ExecStartPre=/bin/chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1410
ExecStartPre=/bin/chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1412
ExecStartPre=/bin/sleep 2
1411
ExecStartPre=/bin/sleep 2
1413
PIDFile=/var/run/tinyproxy/tinyproxy.pid
1412
PIDFile=/var/run/tinyproxy/tinyproxy.pid
1414
ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf
1413
ExecStart=/usr/sbin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf
1415
 
1414
 
1416
[Install]
1415
[Install]
1417
WantedBy=multi-user.target
1416
WantedBy=multi-user.target
1418
EOF
1417
EOF
1419
 
1418
 
1420
} # end of tinyproxy
1419
} # end of tinyproxy()
-
 
1420
 
1421
##############################################################################
1421
##############################################################
1422
##                            function "ulogd"                              ##
1422
##                            function "ulogd"              ##
1423
## - Ulog config for multi-log files                                        ##
1423
## - Ulog config for multi-log files                        ##
1424
##############################################################################
1424
##############################################################
1425
ulogd ()
1425
ulogd()
1426
{
1426
{
1427
# Three instances of ulogd (three different logfiles)
1427
# Three instances of ulogd (three different logfiles)
1428
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1428
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1429
	nl=1
1429
	nl=1
1430
	for log_type in traceability ssh ext-access
1430
	for log_type in traceability ssh ext-access
1431
	do
1431
	do
1432
		[ -e /lib/systemd/system/ulogd-$log_type.service ] || cp -f /lib/systemd/system/ulogd.service /lib/systemd/system/ulogd-$log_type.service
1432
		[ -e /lib/systemd/system/ulogd-$log_type.service ] || cp -f /lib/systemd/system/ulogd.service /lib/systemd/system/ulogd-$log_type.service
1433
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1433
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1434
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1434
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1435
		$SED "s?^group=.*?group=$nl?g" /etc/ulogd-$log_type.conf
1435
		$SED "s?^group=.*?group=$nl?g" /etc/ulogd-$log_type.conf
1436
		cat << EOF >> /etc/ulogd-$log_type.conf
1436
		cat << EOF >> /etc/ulogd-$log_type.conf
1437
[emu1]
1437
[emu1]
1438
file="/var/log/firewall/$log_type.log"
1438
file="/var/log/firewall/$log_type.log"
1439
sync=1
1439
sync=1
1440
EOF
1440
EOF
1441
		$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
1441
		$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
1442
		nl=`expr $nl + 1`
1442
		nl=`expr $nl + 1`
1443
	done
1443
	done
1444
	chown -R root:apache /var/log/firewall
1444
	chown -R root:apache /var/log/firewall
1445
	chmod 750 /var/log/firewall
1445
	chmod 750 /var/log/firewall
1446
	chmod 640 /var/log/firewall/*
1446
	chmod 640 /var/log/firewall/*
1447
}  # End of ulogd ()
1447
}  # End of ulogd()
1448
 
-
 
1449
 
1448
 
1450
##########################################################
1449
##########################################################
1451
##                    Function "nfsen"                  ##
1450
##                    Function "nfsen"                  ##
1452
## - install the nfsen grapher                          ##
1451
## - install the nfsen grapher                          ##
1453
## - install the two plugins porttracker & surfmap      ##
1452
## - install the two plugins porttracker & surfmap      ##
1454
##########################################################
1453
##########################################################
1455
nfsen()
1454
nfsen()
1456
{
1455
{
1457
	tar xzf ./conf/nfsen/nfsen-*.tar.gz -C /tmp/
1456
	tar xzf ./conf/nfsen/nfsen-*.tar.gz -C /tmp/
1458
# Add PortTracker plugin
1457
# Add PortTracker plugin
1459
	for i in /var/www/html/acc/manager/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1458
	for i in /var/www/html/acc/manager/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1460
	do
1459
	do
1461
		[ ! -d $i ] && mkdir -p $i && chown -R apache:apache $i
1460
		[ ! -d $i ] && mkdir -p $i && chown -R apache:apache $i
1462
	done
1461
	done
1463
	$SED "s?^my \$PORTSDBDIR =.*?my \$PORTSDBDIR = \"/var/log/netflow/porttracker\";?g" /tmp/nfsen-*/contrib/PortTracker/PortTracker.pm
1462
	$SED "s?^my \$PORTSDBDIR =.*?my \$PORTSDBDIR = \"/var/log/netflow/porttracker\";?g" /tmp/nfsen-*/contrib/PortTracker/PortTracker.pm
1464
# use of our conf file and init unit
1463
# use of our conf file and init unit
1465
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-*/etc/
1464
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-*/etc/
1466
# Installation of nfsen (we change a little 'install.pl in order not to ask the user for the perl version)
1465
# Installation of nfsen (we change a little 'install.pl in order not to ask the user for the perl version)
1467
	DirTmp=$(pwd)
1466
	DirTmp=$(pwd)
1468
	cd /tmp/nfsen-*/ || { echo "Unable to find nfsen directory"; exit 1; }
1467
	cd /tmp/nfsen-*/ || { echo "Unable to find nfsen directory"; exit 1; }
1469
	/usr/bin/perl install.pl etc/nfsen.conf
1468
	/usr/bin/perl install.pl etc/nfsen.conf
1470
	/usr/bin/perl install.pl etc/nfsen.conf # to avoid a Perl mistake "Semaphore introuvable"
1469
	/usr/bin/perl install.pl etc/nfsen.conf # to avoid a Perl mistake "Semaphore introuvable"
1471
# Create RRD DB for porttracker (only in it still doesn't exist)
1470
# Create RRD DB for porttracker (only in it still doesn't exist)
1472
	cp contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1471
	cp contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1473
	cp contrib/PortTracker/PortTracker.php /var/www/html/acc/manager/nfsen/plugins/
1472
	cp contrib/PortTracker/PortTracker.php /var/www/html/acc/manager/nfsen/plugins/
1474
	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
1473
	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
1475
	chmod -R 770 /var/log/netflow/porttracker
1474
	chmod -R 770 /var/log/netflow/porttracker
1476
# nfsen unit for systemd
1475
# nfsen unit for systemd
1477
	cat << EOF > /lib/systemd/system/nfsen.service
1476
	cat << EOF > /lib/systemd/system/nfsen.service
1478
#  This file is part of systemd.
1477
#  This file is part of systemd.
1479
#
1478
#
1480
#  systemd is free software; you can redistribute it and/or modify it
1479
#  systemd is free software; you can redistribute it and/or modify it
1481
#  under the terms of the GNU General Public License as published by
1480
#  under the terms of the GNU General Public License as published by
1482
#  the Free Software Foundation; either version 2 of the License, or
1481
#  the Free Software Foundation; either version 2 of the License, or
1483
#  (at your option) any later version.
1482
#  (at your option) any later version.
1484
 
1483
 
1485
# This unit launches nfsen (a Netflow grapher).
1484
# This unit launches nfsen (a Netflow grapher).
1486
[Unit]
1485
[Unit]
1487
Description= NfSen init script
1486
Description= NfSen init script
1488
After=network.target iptables.service
1487
After=network.target iptables.service
1489
 
1488
 
1490
[Service]
1489
[Service]
1491
Type=oneshot
1490
Type=oneshot
1492
RemainAfterExit=yes
1491
RemainAfterExit=yes
1493
PIDFile=/var/run/nfsen/nfsen.pid
1492
PIDFile=/var/run/nfsen/nfsen.pid
1494
ExecStartPre=/bin/mkdir -p /var/run/nfsen
1493
ExecStartPre=/bin/mkdir -p /var/run/nfsen
1495
ExecStartPre=/bin/chown apache:apache /var/run/nfsen
1494
ExecStartPre=/bin/chown apache:apache /var/run/nfsen
1496
ExecStart=/usr/bin/nfsen start
1495
ExecStart=/usr/bin/nfsen start
1497
ExecStop=/usr/bin/nfsen stop
1496
ExecStop=/usr/bin/nfsen stop
1498
ExecReload=/usr/bin/nfsen restart
1497
ExecReload=/usr/bin/nfsen restart
1499
TimeoutSec=0
1498
TimeoutSec=0
1500
 
1499
 
1501
[Install]
1500
[Install]
1502
WantedBy=multi-user.target
1501
WantedBy=multi-user.target
1503
EOF
1502
EOF
1504
# Add the listen port to collect netflow packet (nfcapd)
1503
# Add the listen port to collect netflow packet (nfcapd)
1505
	$SED 's?$ziparg $extensions.*?$ziparg $extensions -b 127.0.0.1";?g' /usr/libexec/NfSenRC.pm
1504
	$SED 's?$ziparg $extensions.*?$ziparg $extensions -b 127.0.0.1";?g' /usr/libexec/NfSenRC.pm
1506
# expire delay for the profile "live"
1505
# expire delay for the profile "live"
1507
	/usr/bin/systemctl start nfsen
1506
	/usr/bin/systemctl start nfsen
1508
	/bin/nfsen -m live -e 62d 2>/dev/null
1507
	/bin/nfsen -m live -e 62d 2>/dev/null
1509
# add SURFmap plugin (waiting for new technical solution)
1508
# add SURFmap plugin (waiting for new technical solution)
1510
# see https://adullact.net/forum/forum.php?thread_id=319545&forum_id=1601&group_id=450
1509
# see https://adullact.net/forum/forum.php?thread_id=319545&forum_id=1601&group_id=450
1511
#	cp $DIR_CONF/nfsen/SURFmap_*.tar.gz /tmp/
1510
#	cp $DIR_CONF/nfsen/SURFmap_*.tar.gz /tmp/
1512
#	cp $DIR_CONF/nfsen/GeoLiteCity* /tmp/
1511
#	cp $DIR_CONF/nfsen/GeoLiteCity* /tmp/
1513
#	tar xzf /tmp/SURFmap_*.tar.gz -C /tmp/
1512
#	tar xzf /tmp/SURFmap_*.tar.gz -C /tmp/
1514
#	cd /tmp/
1513
#	cd /tmp/
1515
#	/usr/bin/sh SURFmap/install.sh
1514
#	/usr/bin/sh SURFmap/install.sh (no more used since Google sells the access to googleMap API)
1516
# clear the installation
1515
# clear the installation
1517
#	rm -rf /tmp/SURFmap*
1516
#	rm -rf /tmp/SURFmap*
1518
	rm -rf /tmp/nfsen-*
1517
	rm -rf /tmp/nfsen-*
1519
	cd $DirTmp || { echo "Unable to find $DirTmp directory"; exit 1; }
1518
	cd $DirTmp || { echo "Unable to find $DirTmp directory"; exit 1; }
1520
	chown -R apache:apache /var/www/html/acc/manager/nfsen /usr/share/nfsen /var/log/nfsen
1519
	chown -R apache:apache /var/www/html/acc/manager/nfsen /usr/share/nfsen /var/log/nfsen
1521
} # End of nfsen ()
1520
} # End of nfsen()
1522
 
1521
 
1523
###########################################################
1522
###########################################################
1524
##                     Function "vnstat"                 ##
1523
##                     Function "vnstat"                 ##
1525
## - Initialization of Vnstat and vnstat phpFrontEnd     ##
1524
## - Initialization of Vnstat and vnstat phpFrontEnd     ##
1526
###########################################################
1525
###########################################################
1527
vnstat ()
1526
vnstat()
1528
{
1527
{
1529
	[ -e /etc/vnstat.conf.default ] || cp /etc/vnstat.conf /etc/vnstat.conf.default
1528
	[ -e /etc/vnstat.conf.default ] || cp /etc/vnstat.conf /etc/vnstat.conf.default
1530
	$SED "s?^Interface.*?Interface \"$EXTIF\"?g" /etc/vnstat.conf
1529
	$SED "s?^Interface.*?Interface \"$EXTIF\"?g" /etc/vnstat.conf
1531
	$SED "s?^DatabaseDir.*?DatabaseDir /var/log/vnstat?g" /etc/vnstat.conf
1530
	$SED "s?^DatabaseDir.*?DatabaseDir /var/log/vnstat?g" /etc/vnstat.conf
1532
	[ -e $DIR_ACC/manager/stats/config.php.default ] || cp $DIR_ACC/manager/stats/config.php $DIR_ACC/manager/stats/config.php.default
1531
	[ -e $DIR_ACC/manager/stats/config.php.default ] || cp $DIR_ACC/manager/stats/config.php $DIR_ACC/manager/stats/config.php.default
1533
	$SED "s?\$iface_list =.*?\$iface_list = array('$EXTIF');?" $DIR_ACC/manager/stats/config.php
1532
	$SED "s?\$iface_list =.*?\$iface_list = array('$EXTIF');?" $DIR_ACC/manager/stats/config.php
1534
	$SED "s?\$iface_title\['.*?\$iface_title\['$EXTIF'\] = \$title;?" $DIR_ACC/manager/stats/config.php
1533
	$SED "s?\$iface_title\['.*?\$iface_title\['$EXTIF'\] = \$title;?" $DIR_ACC/manager/stats/config.php
1535
	/usr/bin/vnstat -i $EXTIF -u --force
1534
	/usr/bin/vnstat -i $EXTIF -u --force
1536
} # End of vnstat
1535
} # End of vnstat()
1537
 
1536
 
1538
##################################################################
1537
###################################################################
1539
##                     Function "dnsmasq"                       ##
1538
##                     Function "dnsmasq"                        ##
1540
## - creation of the conf files of the 4 intances of dnsmasq    ##
1539
## - creation of the conf files of dnsmasq (whitelist for ipset )##
1541
## - creation of the file managing domain name (local & remote) ##
-
 
1542
##################################################################
1540
###################################################################
1543
dnsmasq ()
1541
dnsmasq()
1544
{
1542
{
1545
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1543
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1546
	[ -e /etc/dnsmasq.conf.default ] || mv /etc/dnsmasq.conf /etc/dnsmasq.conf.default
1544
	[ -e /etc/dnsmasq.conf.default ] || mv /etc/dnsmasq.conf /etc/dnsmasq.conf.default
1547
	# 3rd dnsmasq listen on udp 55 ("dnsmasq with whitelist")
1545
	# dnsmasq listen on udp 55 ("dnsmasq with whitelist")
1548
	cat << EOF > /etc/dnsmasq-whitelist.conf
1546
	cat << EOF > /etc/dnsmasq-whitelist.conf
1549
# Configuration file for "dnsmasq with whitelist"
1547
# Configuration file for "dnsmasq with whitelist"
1550
# ADD Toulouse university whitelist domains
1548
# ADD Toulouse university whitelist domains
1551
pid-file=/var/run/dnsmasq-whitelist.pid
1549
pid-file=/var/run/dnsmasq-whitelist.pid
1552
listen-address=127.0.0.1
1550
listen-address=127.0.0.1
1553
port=55
1551
port=55
1554
no-dhcp-interface=lo
1552
no-dhcp-interface=lo
1555
bind-interfaces
1553
bind-interfaces
1556
cache-size=1024
1554
cache-size=1024
1557
domain-needed
1555
domain-needed
1558
expand-hosts
1556
expand-hosts
1559
bogus-priv
1557
bogus-priv
1560
filterwin2k
1558
filterwin2k
1561
ipset=/#/wl_ip_allowed	# dynamically add the resolv IP address in the Firewall rules
1559
ipset=/#/wl_ip_allowed	# dynamically add the resolv IP address in the Firewall rules
1562
server=$DNS1
1560
server=$DNS1
1563
server=$DNS2
1561
server=$DNS2
1564
EOF
1562
EOF
1565
 
-
 
1566
	# Create dnsmasq-whitelist unit
1563
	# Create dnsmasq-whitelist unit
1567
	mv /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq.service.default
1564
	mv /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq.service.default
1568
	cp /lib/systemd/system/dnsmasq.service.default /lib/systemd/system/dnsmasq-whitelist.service
1565
	cp /lib/systemd/system/dnsmasq.service.default /lib/systemd/system/dnsmasq-whitelist.service
1569
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq-whitelist.conf?g" /lib/systemd/system/dnsmasq-whitelist.service
1566
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq-whitelist.conf?g" /lib/systemd/system/dnsmasq-whitelist.service
1570
	$SED "s?^PIDFile=.*?PIDFile=/var/run/dnsmasq-whitelist.pid?g" /lib/systemd/system/dnsmasq-whitelist.service
1567
	$SED "s?^PIDFile=.*?PIDFile=/var/run/dnsmasq-whitelist.pid?g" /lib/systemd/system/dnsmasq-whitelist.service
1571
} # End dnsmasq
1568
} # End of dnsmasq()
1572
 
1569
 
1573
##################################################
1570
#########################################################
1574
##              Function "unbound"              ##
1571
##              Function "unbound"                     ##
-
 
1572
## - create the conf files for 4 unbound services      ##
-
 
1573
## - create the systemd files for 4 unbound services   ##
1575
##################################################
1574
#########################################################
1576
unbound ()
1575
unbound ()
1577
{
1576
{
1578
	[ -d /etc/unbound/conf.d ] || mkdir -p /etc/unbound/conf.d
1577
	[ -d /etc/unbound/conf.d ] || mkdir -p /etc/unbound/conf.d
1579
	[ -d /etc/unbound/conf.d/common ] || mkdir /etc/unbound/conf.d/common
1578
	[ -d /etc/unbound/conf.d/common ] || mkdir /etc/unbound/conf.d/common
1580
	[ -d /etc/unbound/conf.d/common/local-forward ] || mkdir /etc/unbound/conf.d/common/local-forward
1579
	[ -d /etc/unbound/conf.d/common/local-forward ] || mkdir /etc/unbound/conf.d/common/local-forward
1581
	[ -d /etc/unbound/conf.d/common/local-dns ] || mkdir /etc/unbound/conf.d/common/local-dns
1580
	[ -d /etc/unbound/conf.d/common/local-dns ] || mkdir /etc/unbound/conf.d/common/local-dns
1582
	[ -d /etc/unbound/conf.d/forward ] || mkdir /etc/unbound/conf.d/forward
1581
	[ -d /etc/unbound/conf.d/forward ] || mkdir /etc/unbound/conf.d/forward
1583
	[ -d /etc/unbound/conf.d/blacklist ] || mkdir /etc/unbound/conf.d/blacklist
1582
	[ -d /etc/unbound/conf.d/blacklist ] || mkdir /etc/unbound/conf.d/blacklist
1584
	[ -d /etc/unbound/conf.d/whitelist ] || mkdir /etc/unbound/conf.d/whitelist
1583
	[ -d /etc/unbound/conf.d/whitelist ] || mkdir /etc/unbound/conf.d/whitelist
1585
	[ -d /etc/unbound/conf.d/blackhole ] || mkdir /etc/unbound/conf.d/blackhole
1584
	[ -d /etc/unbound/conf.d/blackhole ] || mkdir /etc/unbound/conf.d/blackhole
1586
	[ -d /var/log/unbound ] || { mkdir /var/log/unbound; chown unbound:unbound /var/log/unbound; }
1585
	[ -d /var/log/unbound ] || { mkdir /var/log/unbound; chown unbound:unbound /var/log/unbound; }
1587
	[ -e /etc/unbound/unbound.conf.default ] || cp /etc/unbound/unbound.conf /etc/unbound/unbound.conf.default
1586
	[ -e /etc/unbound/unbound.conf.default ] || cp /etc/unbound/unbound.conf /etc/unbound/unbound.conf.default
1588
 
-
 
1589
	# Local static DNS configuration
1587
	# Local static DNS configuration
1590
	[ -e /etc/unbound/conf.d/common/local-dns/global.conf ] || touch /etc/unbound/conf.d/common/local-dns/global.conf
1588
	[ -e /etc/unbound/conf.d/common/local-dns/global.conf ] || touch /etc/unbound/conf.d/common/local-dns/global.conf
1591
 
1589
 
1592
	# Forward zone configuration file for all unbound dns servers
1590
# Forward zone configuration file for all unbound dns servers
1593
	cat << EOF > /etc/unbound/conf.d/common/forward-zone.conf
1591
	cat << EOF > /etc/unbound/conf.d/common/forward-zone.conf
1594
forward-zone:
1592
forward-zone:
1595
	name: "."
1593
	name: "."
1596
	forward-addr: $DNS1
1594
	forward-addr: $DNS1
1597
	forward-addr: $DNS2
1595
	forward-addr: $DNS2
1598
EOF
1596
EOF
1599
 
1597
 
1600
	# Custom configuration file for manual DNS configuration
1598
# Custom configuration file for manual DNS configuration
1601
	cat << EOF > /etc/unbound/conf.d/common/local-forward/custom.conf
1599
	cat << EOF > /etc/unbound/conf.d/common/local-forward/custom.conf
1602
## Ajouter un bloc pour chaque nom de domaine géré par un autre seveur DNS
1600
## Ajouter un bloc pour chaque nom de domaine géré par un autre seveur DNS
1603
## Add one block for each domain name managed by an other DNS server
1601
## Add one block for each domain name managed by an other DNS server
1604
##
1602
##
1605
## Example:
1603
## Example:
1606
##
1604
##
1607
## server:
1605
## server:
1608
##     local-zone: "<your_domain>." transparent
1606
##     local-zone: "<your_domain>." transparent
1609
## forward-zone:
1607
## forward-zone:
1610
##     name: "<your_domain>."
1608
##     name: "<your_domain>."
1611
##     forward-addr: <@IP_domain_server>
1609
##     forward-addr: <@IP_domain_server>
1612
##
1610
##
1613
## INFO : local hostnames are resolved in /etc/hosts file
1611
## INFO : local hostnames are resolved in /etc/hosts file
1614
EOF
1612
EOF
1615
 
1613
 
1616
	# Configuration file of ALCASAR main domains for $INTIF
1614
# Configuration file of ALCASAR main domains for $INTIF
1617
	cat << EOF > /etc/unbound/conf.d/common/local-dns/${INTIF}.conf
1615
	cat << EOF > /etc/unbound/conf.d/common/local-dns/${INTIF}.conf
1618
server:
1616
server:
1619
	local-zone: "$HOSTNAME.$DOMAIN" static
1617
	local-zone: "$HOSTNAME.$DOMAIN" static
1620
	local-data: "$HOSTNAME.$DOMAIN A $PRIVATE_IP"
1618
	local-data: "$HOSTNAME.$DOMAIN A $PRIVATE_IP"
1621
	local-zone: "$HOSTNAME" static
1619
	local-zone: "$HOSTNAME" static
1622
	local-data: "$HOSTNAME A $PRIVATE_IP"
1620
	local-data: "$HOSTNAME A $PRIVATE_IP"
1623
	local-zone: "$DOMAIN." static
1621
	local-zone: "$DOMAIN." static
1624
	local-data: "$DOMAIN. A"
1622
	local-data: "$DOMAIN. A"
1625
EOF
1623
EOF
1626
 
1624
 
1627
	# Configuration file for lo of forward unbound
1625
# Configuration file for lo of forward unbound
1628
	cat << EOF > /etc/unbound/conf.d/forward/iface.lo.conf
1626
	cat << EOF > /etc/unbound/conf.d/forward/iface.lo.conf
1629
server:
1627
server:
1630
	interface: 127.0.0.1@53
1628
	interface: 127.0.0.1@53
1631
	access-control-view: 127.0.0.1/8 lo
1629
	access-control-view: 127.0.0.1/8 lo
1632
 
1630
 
1633
view:
1631
view:
1634
	name: "lo"
1632
	name: "lo"
1635
	local-zone: "$HOSTNAME.$DOMAIN" static
1633
	local-zone: "$HOSTNAME.$DOMAIN" static
1636
	local-data: "$HOSTNAME.$DOMAIN A 127.0.0.1"
1634
	local-data: "$HOSTNAME.$DOMAIN A 127.0.0.1"
1637
	local-zone: "$HOSTNAME" static
1635
	local-zone: "$HOSTNAME" static
1638
	local-data: "$HOSTNAME A 127.0.0.1"
1636
	local-data: "$HOSTNAME A 127.0.0.1"
1639
	view-first: yes
1637
	view-first: yes
1640
EOF
1638
EOF
1641
 
1639
 
1642
	# Configuration file for $INTIF of forward unbound
1640
# Configuration file for $INTIF of forward unbound
1643
	cat << EOF > /etc/unbound/conf.d/forward/iface.${INTIF}.conf
1641
	cat << EOF > /etc/unbound/conf.d/forward/iface.${INTIF}.conf
1644
server:
1642
server:
1645
	interface: ${PRIVATE_IP}@53
1643
	interface: ${PRIVATE_IP}@53
1646
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1644
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1647
 
1645
 
1648
view:
1646
view:
1649
	name: "$INTIF"
1647
	name: "$INTIF"
1650
	local-zone: "$HOSTNAME.$DOMAIN" static
1648
	local-zone: "$HOSTNAME.$DOMAIN" static
1651
	local-data: "$HOSTNAME.$DOMAIN A $PRIVATE_IP"
1649
	local-data: "$HOSTNAME.$DOMAIN A $PRIVATE_IP"
1652
	local-zone: "$HOSTNAME" static
1650
	local-zone: "$HOSTNAME" static
1653
	local-data: "$HOSTNAME A $PRIVATE_IP"
1651
	local-data: "$HOSTNAME A $PRIVATE_IP"
1654
	view-first: yes
1652
	view-first: yes
1655
EOF
1653
EOF
1656
 
1654
 
1657
	# Configuration file for forward unbound
1655
# Configuration file for forward unbound
1658
	cat << EOF > /etc/unbound/unbound.conf
1656
	cat << EOF > /etc/unbound/unbound.conf
1659
server:
1657
server:
1660
	verbosity: 1
1658
	verbosity: 1
1661
	hide-version: yes
1659
	hide-version: yes
1662
	hide-identity: yes
1660
	hide-identity: yes
1663
	do-ip6: no
1661
	do-ip6: no
1664
 
-
 
1665
	include: /etc/unbound/conf.d/common/forward-zone.conf
1662
	include: /etc/unbound/conf.d/common/forward-zone.conf
1666
	include: /etc/unbound/conf.d/common/local-forward/*
1663
	include: /etc/unbound/conf.d/common/local-forward/*
1667
	include: /etc/unbound/conf.d/common/local-dns/*
1664
	include: /etc/unbound/conf.d/common/local-dns/*
1668
	include: /etc/unbound/conf.d/forward/*
1665
	include: /etc/unbound/conf.d/forward/*
1669
EOF
1666
EOF
1670
 
1667
 
1671
	# Configuration file for $INTIF of blacklist unbound
1668
# Configuration file for $INTIF of blacklist unbound
1672
	cat << EOF > /etc/unbound/conf.d/blacklist/iface.${INTIF}.conf
1669
	cat << EOF > /etc/unbound/conf.d/blacklist/iface.${INTIF}.conf
1673
server:
1670
server:
1674
	interface: ${PRIVATE_IP}@54
1671
	interface: ${PRIVATE_IP}@54
1675
	access-control: $PRIVATE_IP_MASK allow
1672
	access-control: $PRIVATE_IP_MASK allow
1676
	access-control-tag: $PRIVATE_IP_MASK "blacklist"
1673
	access-control-tag: $PRIVATE_IP_MASK "blacklist"
1677
	access-control-tag-action: $PRIVATE_IP_MASK "blacklist" redirect
1674
	access-control-tag-action: $PRIVATE_IP_MASK "blacklist" redirect
1678
	access-control-tag-data: $PRIVATE_IP_MASK "blacklist" "A $PRIVATE_IP"
1675
	access-control-tag-data: $PRIVATE_IP_MASK "blacklist" "A $PRIVATE_IP"
1679
EOF
1676
EOF
1680
 
1677
 
1681
	# Configuration file for blacklist unbound
1678
# Configuration file for blacklist unbound
1682
	cat << EOF > /etc/unbound/unbound-blacklist.conf
1679
	cat << EOF > /etc/unbound/unbound-blacklist.conf
1683
server:
1680
server:
1684
	verbosity: 1
1681
	verbosity: 1
1685
	hide-version: yes
1682
	hide-version: yes
1686
	hide-identity: yes
1683
	hide-identity: yes
1687
	do-ip6: no
1684
	do-ip6: no
1688
	logfile: "/var/log/unbound/unbound-blacklist.log"
1685
	logfile: "/var/log/unbound/unbound-blacklist.log"
1689
	chroot: ""
1686
	chroot: ""
1690
	define-tag: "blacklist"
1687
	define-tag: "blacklist"
1691
	log-local-actions: yes
1688
	log-local-actions: yes
1692
 
-
 
1693
	include: /etc/unbound/conf.d/common/forward-zone.conf
1689
	include: /etc/unbound/conf.d/common/forward-zone.conf
1694
	include: /etc/unbound/conf.d/common/local-forward/*
1690
	include: /etc/unbound/conf.d/common/local-forward/*
1695
	include: /etc/unbound/conf.d/common/local-dns/*
1691
	include: /etc/unbound/conf.d/common/local-dns/*
1696
	include: /etc/unbound/conf.d/blacklist/*
1692
	include: /etc/unbound/conf.d/blacklist/*
1697
 
-
 
1698
	include: /usr/local/share/unbound-bl-enabled/*
1693
	include: /usr/local/share/unbound-bl-enabled/*
1699
EOF
1694
EOF
1700
 
1695
 
1701
	# Configuration file for $INTIF of whitelist unbound
1696
# Configuration file for $INTIF of whitelist unbound
1702
	cat << EOF > /etc/unbound/conf.d/whitelist/iface.${INTIF}.conf
1697
	cat << EOF > /etc/unbound/conf.d/whitelist/iface.${INTIF}.conf
1703
server:
1698
server:
1704
	interface: ${PRIVATE_IP}@55
1699
	interface: ${PRIVATE_IP}@55
1705
	access-control: $PRIVATE_IP_MASK allow
1700
	access-control: $PRIVATE_IP_MASK allow
1706
	access-control-tag: $PRIVATE_IP_MASK "whitelist"
1701
	access-control-tag: $PRIVATE_IP_MASK "whitelist"
1707
	access-control-tag-action: $PRIVATE_IP_MASK "whitelist" redirect
1702
	access-control-tag-action: $PRIVATE_IP_MASK "whitelist" redirect
1708
	access-control-tag-data: $PRIVATE_IP_MASK "whitelist" "A $PRIVATE_IP"
1703
	access-control-tag-data: $PRIVATE_IP_MASK "whitelist" "A $PRIVATE_IP"
1709
EOF
1704
EOF
1710
 
1705
 
1711
	# Configuration file for whitelist unbound
1706
# Configuration file for whitelist unbound
1712
	cat << EOF > /etc/unbound/unbound-whitelist.conf
1707
	cat << EOF > /etc/unbound/unbound-whitelist.conf
1713
server:
1708
server:
1714
	verbosity: 1
1709
	verbosity: 1
1715
	hide-version: yes
1710
	hide-version: yes
1716
	hide-identity: yes
1711
	hide-identity: yes
1717
	do-ip6: no
1712
	do-ip6: no
1718
	do-not-query-localhost: no
1713
	do-not-query-localhost: no
1719
	define-tag: "whitelist"
1714
	define-tag: "whitelist"
1720
 
-
 
1721
	local-zone: "." transparent
1715
	local-zone: "." transparent
1722
	local-zone-tag: "." "whitelist"
1716
	local-zone-tag: "." "whitelist"
1723
 
-
 
1724
	include: /usr/local/share/unbound-wl-enabled/*
1717
	include: /usr/local/share/unbound-wl-enabled/*
1725
	include: /etc/unbound/conf.d/whitelist/*
1718
	include: /etc/unbound/conf.d/whitelist/*
1726
	include: /etc/unbound/conf.d/common/local-dns/*
1719
	include: /etc/unbound/conf.d/common/local-dns/*
1727
	include: /etc/unbound/conf.d/common/local-forward/*
1720
	include: /etc/unbound/conf.d/common/local-forward/*
1728
 
-
 
1729
forward-zone:
1721
forward-zone:
1730
	name: "."
1722
	name: "."
1731
	forward-addr: 127.0.0.1@55
1723
	forward-addr: 127.0.0.1@55
1732
EOF
1724
EOF
1733
 
1725
 
1734
	# Configuration file for $INTIF of blackhole unbound
1726
# Configuration file for $INTIF of blackhole unbound
1735
	cat << EOF > /etc/unbound/conf.d/blackhole/iface.${INTIF}.conf
1727
	cat << EOF > /etc/unbound/conf.d/blackhole/iface.${INTIF}.conf
1736
server:
1728
server:
1737
	interface: ${PRIVATE_IP}@56
1729
	interface: ${PRIVATE_IP}@56
1738
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1730
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1739
 
1731
 
1740
view:
1732
view:
1741
	name: "$INTIF"
1733
	name: "$INTIF"
1742
	local-zone: "." redirect
1734
	local-zone: "." redirect
1743
	local-data: ". A $PRIVATE_IP"
1735
	local-data: ". A $PRIVATE_IP"
1744
EOF
1736
EOF
1745
 
1737
 
1746
	# Configuration file for blackhole unbound
1738
# Configuration file for blackhole unbound
1747
	cat << EOF > /etc/unbound/unbound-blackhole.conf
1739
	cat << EOF > /etc/unbound/unbound-blackhole.conf
1748
server:
1740
server:
1749
	verbosity: 1
1741
	verbosity: 1
1750
	hide-version: yes
1742
	hide-version: yes
1751
	hide-identity: yes
1743
	hide-identity: yes
1752
	do-ip6: no
1744
	do-ip6: no
1753
 
-
 
1754
	include: /etc/unbound/conf.d/blackhole/*
1745
	include: /etc/unbound/conf.d/blackhole/*
1755
	include: /etc/unbound/conf.d/common/local-dns/*
1746
	include: /etc/unbound/conf.d/common/local-dns/*
1756
	include: /etc/unbound/conf.d/common/local-forward/*
1747
	include: /etc/unbound/conf.d/common/local-forward/*
1757
EOF
1748
EOF
1758
 
1749
 
1759
	if [ ! -e /lib/systemd/system/unbound.service.default ]
1750
	if [ ! -e /lib/systemd/system/unbound.service.default ]
1760
	then
1751
	then
1761
		cp -f /lib/systemd/system/unbound.service /lib/systemd/system/unbound.service.default
1752
		cp -f /lib/systemd/system/unbound.service /lib/systemd/system/unbound.service.default
1762
	fi
1753
	fi
1763
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound.conf?g" /lib/systemd/system/unbound.service
1754
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound.conf?g" /lib/systemd/system/unbound.service
1764
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service?g" /lib/systemd/system/unbound.service
1755
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service?g" /lib/systemd/system/unbound.service
1765
 
-
 
1766
	for list in blacklist blackhole whitelist
1756
	for list in blacklist blackhole whitelist
1767
	do
1757
	do
1768
		cp -f /lib/systemd/system/unbound.service /lib/systemd/system/unbound-$list.service
1758
		cp -f /lib/systemd/system/unbound.service /lib/systemd/system/unbound-$list.service
1769
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound-$list.conf?g" /lib/systemd/system/unbound-$list.service
1759
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound-$list.conf?g" /lib/systemd/system/unbound-$list.service
1770
		$SED "s?^PIDFile=.*?PIDFile=/var/run/unbound-$list.pid?g" /lib/systemd/system/unbound-$list.service
1760
		$SED "s?^PIDFile=.*?PIDFile=/var/run/unbound-$list.pid?g" /lib/systemd/system/unbound-$list.service
1771
	done
1761
	done
1772
 
-
 
1773
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service dnsmasq-whitelist.service?g" /lib/systemd/system/unbound-whitelist.service
1762
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service dnsmasq-whitelist.service?g" /lib/systemd/system/unbound-whitelist.service
1774
} # End unbound
1763
} # End of unbound()
1775
 
1764
 
1776
##################################################
1765
##################################################
1777
##              Function "dhcpd"                ##
1766
##              Function "dhcpd"                ##
1778
##################################################
1767
##################################################
1779
dhcpd ()
1768
dhcpd()
1780
{
1769
{
1781
	[ -e /etc/dhcpd.conf.default ] || cp /etc/dhcpd.conf /etc/dhcpd.conf.default
1770
	[ -e /etc/dhcpd.conf.default ] || cp /etc/dhcpd.conf /etc/dhcpd.conf.default
1782
 
-
 
1783
	cat <<EOF > /etc/dhcpd.conf
1771
	cat <<EOF > /etc/dhcpd.conf
1784
ddns-update-style none;
1772
ddns-update-style none;
1785
subnet $PRIVATE_NETWORK netmask $PRIVATE_NETMASK {
1773
subnet $PRIVATE_NETWORK netmask $PRIVATE_NETMASK {
1786
	option routers $PRIVATE_IP;
1774
	option routers $PRIVATE_IP;
1787
	option subnet-mask $PRIVATE_NETMASK;
1775
	option subnet-mask $PRIVATE_NETMASK;
1788
	option domain-name-servers $PRIVATE_IP;
1776
	option domain-name-servers $PRIVATE_IP;
1789
 
-
 
1790
	range dynamic-bootp $PRIVATE_SECOND_IP $PRIVATE_LAST_IP;
1777
	range dynamic-bootp $PRIVATE_SECOND_IP $PRIVATE_LAST_IP;
1791
	default-lease-time 21600;
1778
	default-lease-time 21600;
1792
	max-lease-time 43200;
1779
	max-lease-time 43200;
1793
}
1780
}
1794
EOF
1781
EOF
1795
}
1782
} # End of dhcpd()
1796
 
1783
 
1797
##########################################################
1784
##########################################################
1798
##                      Function "BL"                   ##
1785
##                      Function "BL"                   ##
1799
## - copy Toulouse BL                                   ##
1786
## - copy Toulouse BL                                   ##
1800
## - adapt this BL to ALCASAR architecture              ##
1787
## - adapt this BL to ALCASAR architecture              ##
1801
##     - domain names for unbound-bl & unbound-wl       ##
1788
##     - domain names for unbound-bl & unbound-wl       ##
1802
##     - URLs for E²guardian                            ##
1789
##     - URLs for E²guardian                            ##
1803
##     - IPs for NetFilter                              ##
1790
##     - IPs for NetFilter                              ##
1804
##########################################################
1791
##########################################################
1805
BL ()
1792
BL()
1806
{
1793
{
1807
	# copy the Toulouse university BL in order to be adapted to ALCASAR architecture (alcasar-bl.sh -adapt)
1794
	# copy the Toulouse university BL in order to be adapted to ALCASAR architecture (alcasar-bl.sh -adapt)
1808
	rm -rf $DIR_DG/lists/blacklists
1795
	rm -rf $DIR_DG/lists/blacklists
1809
	mkdir -p /tmp/blacklists
1796
	mkdir -p /tmp/blacklists
1810
	cp $DIR_BLACKLIST/blacklists.tar.gz /tmp/blacklists/
1797
	cp $DIR_BLACKLIST/blacklists.tar.gz /tmp/blacklists/
1811
# creation of file for the rehabilited domains and urls
1798
# creation of file for the rehabilited domains and urls
1812
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
1799
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
1813
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
1800
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
1814
	touch $DIR_DG/lists/exceptionsitelist
1801
	touch $DIR_DG/lists/exceptionsitelist
1815
	touch $DIR_DG/lists/exceptionurllist
1802
	touch $DIR_DG/lists/exceptionurllist
1816
# On crée la configuration de base du filtrage de domaine et d'URL pour E2guardian
1803
# On crée la configuration de base du filtrage de domaine et d'URL pour E2guardian
1817
	cat <<EOF > $DIR_DG/lists/bannedurllist
1804
	cat <<EOF > $DIR_DG/lists/bannedurllist
1818
# E2guardian filter config for ALCASAR
1805
# E2guardian filter config for ALCASAR
1819
EOF
1806
EOF
1820
	cat <<EOF > $DIR_DG/lists/bannedsitelist
1807
	cat <<EOF > $DIR_DG/lists/bannedsitelist
1821
# E2guardian domain filter config for ALCASAR
1808
# E2guardian domain filter config for ALCASAR
1822
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1809
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1823
#**
1810
#**
1824
# block all SSL and CONNECT tunnels
1811
# block all SSL and CONNECT tunnels
1825
**s
1812
**s
1826
# block all SSL and CONNECT tunnels specified only as an IP
1813
# block all SSL and CONNECT tunnels specified only as an IP
1827
*ips
1814
*ips
1828
# block all sites specified only by an IP
1815
# block all sites specified only by an IP
1829
*ip
1816
*ip
1830
EOF
1817
EOF
1831
# Add Bing to the safesearch url regext list (parental control)
1818
# Add Bing to the safesearch url regext list (parental control)
1832
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1819
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1833
# Bing - add 'adlt=strict'
1820
# Bing - add 'adlt=strict'
1834
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1821
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1835
EOF
1822
EOF
1836
# change the google safesearch ("safe=strict" instead of "safe=vss")
1823
# change the google safesearch ("safe=strict" instead of "safe=vss")
1837
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
1824
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
1838
# creation of the custom BL and WL categorie named "ossi" (for domain names & ip only)
1825
# creation of the custom BL and WL categorie named "ossi" (for domain names & ip only)
1839
	mkdir -p $DIR_DG/lists/blacklists/ossi-bl
1826
	mkdir -p $DIR_DG/lists/blacklists/ossi-bl
1840
	touch $DIR_DG/lists/blacklists/ossi-bl/domains
1827
	touch $DIR_DG/lists/blacklists/ossi-bl/domains
1841
	echo "ossi-bl" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1828
	echo "ossi-bl" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1842
	mkdir -p $DIR_DG/lists/blacklists/ossi-wl
1829
	mkdir -p $DIR_DG/lists/blacklists/ossi-wl
1843
	touch $DIR_DG/lists/blacklists/ossi-wl/domains
1830
	touch $DIR_DG/lists/blacklists/ossi-wl/domains
1844
	echo "ossi-wl" >> $DIR_DEST_ETC/alcasar-wl-categories-enabled
1831
	echo "ossi-wl" >> $DIR_DEST_ETC/alcasar-wl-categories-enabled
1845
# add custom ALCASAR BL files
1832
# add custom ALCASAR BL files
1846
	for x in $(ls $DIR_BLACKLIST | grep -v "^blacklist")
1833
	for x in $(ls $DIR_BLACKLIST | grep -v "^blacklist")
1847
	do
1834
	do
1848
		mkdir $DIR_DG/lists/blacklists/ossi-bl-$x
1835
		mkdir $DIR_DG/lists/blacklists/ossi-bl-$x
1849
		cp $DIR_BLACKLIST/$x  $DIR_DG/lists/blacklists/ossi-bl-$x/domains
1836
		cp $DIR_BLACKLIST/$x  $DIR_DG/lists/blacklists/ossi-bl-$x/domains
1850
		echo "ossi-bl-$x" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1837
		echo "ossi-bl-$x" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1851
	done
1838
	done
1852
	chown -R e2guardian:apache $DIR_DG
1839
	chown -R e2guardian:apache $DIR_DG
1853
	chown -R root:apache $DIR_DEST_SHARE
1840
	chown -R root:apache $DIR_DEST_SHARE
1854
	chmod -R g+rw $DIR_DG $DIR_DEST_SHARE
1841
	chmod -R g+rw $DIR_DG $DIR_DEST_SHARE
1855
# adapt the Toulouse BL to ALCASAR architecture
1842
# adapt the Toulouse BL to ALCASAR architecture
1856
	$DIR_DEST_BIN/alcasar-bl.sh --adapt
1843
	$DIR_DEST_BIN/alcasar-bl.sh --adapt
1857
# enable the default categories
1844
# enable the default categories
1858
	$DIR_DEST_BIN/alcasar-bl.sh --cat_choice
1845
	$DIR_DEST_BIN/alcasar-bl.sh --cat_choice
1859
	rm -rf /tmp/blacklists
1846
	rm -rf /tmp/blacklists
1860
} # End BL()
1847
} # End of BL()
1861
 
1848
 
1862
#######################################################
1849
#######################################################
1863
##                  Function "cron"                  ##
1850
##                  Function "cron"                  ##
1864
## - write all cron & anacron files                  ##
1851
## - write all cron & anacron files                  ##
1865
#######################################################
1852
#######################################################
1866
cron ()
1853
cron()
1867
{
1854
{
1868
# 'crontab' with standard cron at midnight instead of 4:0 am (default)
1855
# 'crontab' with standard cron at midnight instead of 4:0 am (default)
1869
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1856
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1870
	cat <<EOF > /etc/crontab
1857
	cat <<EOF > /etc/crontab
1871
SHELL=/usr/bin/bash
1858
SHELL=/usr/bin/bash
1872
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1859
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1873
MAILTO=root
1860
MAILTO=root
1874
HOME=/
1861
HOME=/
1875
 
1862
 
1876
# run-parts
1863
# run-parts
1877
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1864
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1878
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1865
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1879
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1866
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1880
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1867
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1881
EOF
1868
EOF
1882
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1869
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1883
	cat <<EOF >> /etc/anacrontab
1870
	cat <<EOF >> /etc/anacrontab
1884
7	8	cron.MysqlDump		nice /etc/cron.d/alcasar-mysql
1871
7	8	cron.MysqlDump		nice /etc/cron.d/alcasar-mysql
1885
7	10	cron.logExport		nice /etc/cron.d/alcasar-archive
1872
7	10	cron.logExport		nice /etc/cron.d/alcasar-archive
1886
EOF
1873
EOF
1887
	cat <<EOF > /etc/cron.d/alcasar-mysql
1874
	cat <<EOF > /etc/cron.d/alcasar-mysql
1888
# Verify, repair and export users database (every monday at 4:45 am)
1875
# Verify, repair and export users database (every monday at 4:45 am)
1889
45 4 * * 1 root $DIR_DEST_BIN/alcasar-mysql.sh --dump
1876
45 4 * * 1 root $DIR_DEST_BIN/alcasar-mysql.sh --dump
1890
# Remove users whose expiration date is exceeded for more more than 7 days (every Monday at 4:40 am)
1877
# Remove users whose expiration date is exceeded for more more than 7 days (every Monday at 4:40 am)
1891
40 4 * * * root $DIR_DEST_BIN/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1878
40 4 * * * root $DIR_DEST_BIN/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1892
EOF
1879
EOF
1893
	cat <<EOF > /etc/cron.d/alcasar-archive
1880
	cat <<EOF > /etc/cron.d/alcasar-archive
1894
# Archiving logs (traceability & users database) (every Monday at 5:35 am)
1881
# Archiving logs (traceability & users database) (every Monday at 5:35 am)
1895
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1882
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1896
EOF
1883
EOF
1897
	cat <<EOF > /etc/cron.d/alcasar-ticket-clean
1884
	cat <<EOF > /etc/cron.d/alcasar-ticket-clean
1898
# Remove password files (created when importing users by CSV files) and user's PDF voucher (every hours at 30')
1885
# Remove password files (created when importing users by CSV files) and user's PDF voucher (every hours at 30')
1899
30 * * * *  root $DIR_DEST_BIN/alcasar-ticket-clean.sh
1886
30 * * * *  root $DIR_DEST_BIN/alcasar-ticket-clean.sh
1900
EOF
1887
EOF
1901
	cat <<EOF > /etc/cron.d/alcasar-distrib-updates
1888
	cat <<EOF > /etc/cron.d/alcasar-distrib-updates
1902
# Update the system (everyday at 3:30 am)
1889
# Update the system (everyday at 3:30 am)
1903
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
1890
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
1904
EOF
1891
EOF
1905
	cat <<EOF > /etc/cron.d/alcasar-connections-stats
1892
	cat <<EOF > /etc/cron.d/alcasar-connections-stats
1906
# Connection stats update (accounting). These Perl scripts are from "dialup_admin" (cf. wiki.freeradius.org/Dialup_admin).
1893
# Connection stats update (accounting). These Perl scripts are from "dialup_admin" (cf. wiki.freeradius.org/Dialup_admin).
1907
# 'alcasar-tot_stats' : aggregate the daily connections of users and write it in the table 'totacct' (everyday at 1:01 pm)
1894
# 'alcasar-tot_stats' : aggregate the daily connections of users and write it in the table 'totacct' (everyday at 1:01 pm)
1908
# 'alcasar-monthly_tot_stat' : aggregate the monthly connections of users and write it in table 'mtotacct' (everyday at 1h05 pm)
1895
# 'alcasar-monthly_tot_stat' : aggregate the monthly connections of users and write it in table 'mtotacct' (everyday at 1h05 pm)
1909
# 'alcasar-truncate_raddact' : remove the user' session log older than 365 days (applying French law : "LCEN") (every month, the first at 01:10 pm)
1896
# 'alcasar-truncate_raddact' : remove the user' session log older than 365 days (applying French law : "LCEN") (every month, the first at 01:10 pm)
1910
# 'alcasar-clean_radacct' : close the sessions openned for more than 30 days (every month, the first at 01:15 pm)
1897
# 'alcasar-clean_radacct' : close the sessions openned for more than 30 days (every month, the first at 01:15 pm)
1911
# 'alcasar-activity_report.sh' : generate an activity report in PDF (every sunday at 5:35 pm)
1898
# 'alcasar-activity_report.sh' : generate an activity report in PDF (every sunday at 5:35 pm)
1912
1 1 * * * root $DIR_DEST_BIN/alcasar-tot_stats > /dev/null 2>&1
1899
1 1 * * * root $DIR_DEST_BIN/alcasar-tot_stats > /dev/null 2>&1
1913
5 1 * * * root $DIR_DEST_BIN/alcasar-monthly_tot_stats > /dev/null 2>&1
1900
5 1 * * * root $DIR_DEST_BIN/alcasar-monthly_tot_stats > /dev/null 2>&1
1914
10 1 1 * * root $DIR_DEST_BIN/alcasar-truncate_radacct > /dev/null 2>&1
1901
10 1 1 * * root $DIR_DEST_BIN/alcasar-truncate_radacct > /dev/null 2>&1
1915
15 1 1 * * root $DIR_DEST_BIN/alcasar-clean_radacct > /dev/null 2>&1
1902
15 1 1 * * root $DIR_DEST_BIN/alcasar-clean_radacct > /dev/null 2>&1
1916
35 5 * * 0 root $DIR_DEST_BIN/alcasar-activity_report.sh > /dev/null 2>&1
1903
35 5 * * 0 root $DIR_DEST_BIN/alcasar-activity_report.sh > /dev/null 2>&1
1917
EOF
1904
EOF
1918
	cat <<EOF > /etc/cron.d/alcasar-watchdog
1905
	cat <<EOF > /etc/cron.d/alcasar-watchdog
1919
# 'alcasar-watchdog.sh' : run the "watchdog" (every 10')
1906
# 'alcasar-watchdog.sh' : run the "watchdog" (every 10')
1920
# 'alcasar-flush_ipset_wl.sh' : empty the IPSET of the whitelisted IP loaded dynamically with dnsmasq-whitelist hook (every sunday at 0:05 am)
1907
# 'alcasar-flush_ipset_wl.sh' : empty the IPSET of the whitelisted IP loaded dynamically with dnsmasq-whitelist hook (every sunday at 0:05 am)
1921
# 'alcasar-watchdog-hl.sh' : (optionnaly) remove the IP 0.0.0.0 from chilli cache memory
1908
# 'alcasar-watchdog-hl.sh' : (optionnaly) remove the IP 0.0.0.0 from chilli cache memory
1922
*/10 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1909
*/10 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1923
0 5 * * 0 root $DIR_DEST_BIN/alcasar-flush_ipset_wl.sh > /dev/null 2>&1
1910
0 5 * * 0 root $DIR_DEST_BIN/alcasar-flush_ipset_wl.sh > /dev/null 2>&1
1924
#* * * * * root $DIR_DEST_BIN/alcasar-watchdog-hl.sh > /dev/null 2>&1
1911
#* * * * * root $DIR_DEST_BIN/alcasar-watchdog-hl.sh > /dev/null 2>&1
1925
EOF
1912
EOF
1926
	cat <<EOF > /etc/cron.d/alcasar-daemon-watchdog
1913
	cat <<EOF > /etc/cron.d/alcasar-daemon-watchdog
1927
# start dead daemons (after boot process and every 18')
1914
# start dead daemons (after boot process and every 18')
1928
@reboot root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1915
@reboot root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1929
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1916
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1930
EOF
1917
EOF
1931
	cat <<EOF > /etc/cron.d/alcasar-rsync-bl
1918
	cat <<EOF > /etc/cron.d/alcasar-rsync-bl
1932
# Automatic update the BL via rsync (every 12 hours). The enabled categories are listed in '/usr/local/etc/update_cat.conf' (no sync if empty).
1919
# Automatic update the BL via rsync (every 12 hours). The enabled categories are listed in '/usr/local/etc/update_cat.conf' (no sync if empty).
1933
0 */12 * * * root $DIR_DEST_BIN/alcasar-bl.sh --update_cat > /dev/null 2>&1
1920
0 */12 * * * root $DIR_DEST_BIN/alcasar-bl.sh --update_cat > /dev/null 2>&1
1934
EOF
1921
EOF
1935
	cat <<EOF > /etc/cron.d/alcasar-letsencrypt
1922
	cat <<EOF > /etc/cron.d/alcasar-letsencrypt
1936
# Automatic renew the Let's Encrypt certificate (daily --> see "cron.daily")
1923
# Automatic renew the Let's Encrypt certificate (daily --> see "cron.daily")
1937
@daily root $DIR_DEST_BIN/alcasar-letsencrypt.sh --cron > /dev/null 2>&1
1924
@daily root $DIR_DEST_BIN/alcasar-letsencrypt.sh --cron > /dev/null 2>&1
1938
EOF
1925
EOF
1939
 
1926
 
1940
# removing the users crons
1927
# removing the users crons
1941
	rm -f /var/spool/cron/*
1928
	rm -f /var/spool/cron/*
1942
} # End cron()
1929
} # End of cron()
1943
 
1930
 
1944
######################################################################
1931
######################################################################
1945
##                      Fonction "Fail2Ban"                         ##
1932
##                      Fonction "Fail2Ban"                         ##
1946
##- Adapt conf file to ALCASAR                                      ##
1933
##- Adapt conf file to ALCASAR                                      ##
1947
##- Secure items : DDOS, SSH-Brute-Force, Intercept.php Brute-Force ##
1934
##- Secure items : DDOS, SSH-Brute-Force, Intercept.php Brute-Force ##
1948
######################################################################
1935
######################################################################
1949
fail2ban()
1936
fail2ban()
1950
{
1937
{
1951
	/usr/bin/sh $DIR_CONF/fail2ban.sh
1938
	/usr/bin/sh $DIR_CONF/fail2ban.sh
1952
# Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1939
# Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1953
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1940
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1954
	[ -e /var/Save/security/watchdog.log ] || touch /var/Save/security/watchdog.log
1941
	[ -e /var/Save/security/watchdog.log ] || touch /var/Save/security/watchdog.log
1955
	chmod 644 /var/log/fail2ban.log
1942
	chmod 644 /var/log/fail2ban.log
1956
	chmod 644 /var/Save/security/watchdog.log
1943
	chmod 644 /var/Save/security/watchdog.log
1957
	/usr/bin/touch /var/log/auth.log
1944
	/usr/bin/touch /var/log/auth.log
1958
# fail2ban unit
1945
# fail2ban unit
1959
[ -e /lib/systemd/system/fail2ban.service.default ] || cp /lib/systemd/system/fail2ban.service /lib/systemd/system/fail2ban.service.default
1946
[ -e /lib/systemd/system/fail2ban.service.default ] || cp /lib/systemd/system/fail2ban.service /lib/systemd/system/fail2ban.service.default
1960
$SED '/ExecStart=/a\ExecStop=/usr/bin/fail2ban-client stop' /usr/lib/systemd/system/fail2ban.service
1947
$SED '/ExecStart=/a\ExecStop=/usr/bin/fail2ban-client stop' /usr/lib/systemd/system/fail2ban.service
1961
$SED '/Type=/a\PIDFile=/var/run/fail2ban/fail2ban.pid' /usr/lib/systemd/system/fail2ban.service
1948
$SED '/Type=/a\PIDFile=/var/run/fail2ban/fail2ban.pid' /usr/lib/systemd/system/fail2ban.service
1962
$SED '/After=*/c After=syslog.target network.target lighttpd.service' /usr/lib/systemd/system/fail2ban.service
1949
$SED '/After=*/c After=syslog.target network.target lighttpd.service' /usr/lib/systemd/system/fail2ban.service
1963
} # End fail2ban()
1950
} # End of fail2ban()
1964
 
1951
 
1965
#########################################################
1952
#########################################################
1966
##                   Fonction "gammu_smsd"             ##
1953
##                   Fonction "gammu_smsd"             ##
1967
## - Creating of SMS management database               ##
1954
## - Creating of SMS management database               ##
1968
## - Write the gammu a gammu_smsd conf files           ##
1955
## - Write the gammu a gammu_smsd conf files           ##
1969
#########################################################
1956
#########################################################
1970
gammu_smsd()
1957
gammu_smsd()
1971
{
1958
{
1972
# Create 'gammu' system user
1959
# Create 'gammu' system user
1973
	groupadd -f gammu_smsd
1960
	groupadd -f gammu_smsd
1974
	useradd --system -g gammu_smsd -s /bin/false -c "system user for gammu_smsd" gammu_smsd
1961
	useradd --system -g gammu_smsd -s /bin/false -c "system user for gammu_smsd" gammu_smsd
1975
	usermod -a -G dialout gammu_smsd
1962
	usermod -a -G dialout gammu_smsd
1976
 
1963
 
1977
# Create 'gammu' database
1964
# Create 'gammu' database
1978
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --execute"
1965
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --execute"
1979
	$MYSQL "CREATE DATABASE IF NOT EXISTS $DB_GAMMU; GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd'; FLUSH PRIVILEGES;"
1966
	$MYSQL "CREATE DATABASE IF NOT EXISTS $DB_GAMMU; GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd'; FLUSH PRIVILEGES;"
1980
# Add a gammu database structure
1967
# Add a gammu database structure
1981
	/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/empty-gammu-smsd-db.sql
1968
	/usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/empty-gammu-smsd-db.sql
1982
 
1969
 
1983
# Config file for the gammu_smsd daemon & gammu (ttyUSB0 as default com port)
1970
# Config file for the gammu_smsd daemon & gammu (ttyUSB0 as default com port)
1984
	cat << EOF > /etc/gammurc
1971
	cat << EOF > /etc/gammurc
1985
[gammu]
1972
[gammu]
1986
device = /dev/ttyUSB0
1973
device = /dev/ttyUSB0
1987
connection = at115200
1974
connection = at115200
1988
EOF
1975
EOF
1989
 
1976
 
1990
	cat << EOF > /etc/gammu_smsd_conf
1977
	cat << EOF > /etc/gammu_smsd_conf
1991
[gammu]
1978
[gammu]
1992
port = /dev/ttyUSB0
1979
port = /dev/ttyUSB0
1993
connection = at115200
1980
connection = at115200
1994
 
1981
 
1995
[smsd]
1982
[smsd]
1996
PIN = 1234
1983
PIN = 1234
1997
logfile = /var/log/gammu-smsd/gammu-smsd.log
1984
logfile = /var/log/gammu-smsd/gammu-smsd.log
1998
logformat = textall
1985
logformat = textall
1999
debuglevel = 0
1986
debuglevel = 0
2000
 
1987
 
2001
service = sql
1988
service = sql
2002
driver = native_mysql
1989
driver = native_mysql
2003
user = $DB_USER
1990
user = $DB_USER
2004
password = $radiuspwd
1991
password = $radiuspwd
2005
pc = localhost
1992
pc = localhost
2006
database = $DB_GAMMU
1993
database = $DB_GAMMU
2007
 
1994
 
2008
RunOnReceive = sudo $DIR_DEST_BIN/alcasar-sms.sh --new_sms
1995
RunOnReceive = sudo $DIR_DEST_BIN/alcasar-sms.sh --new_sms
2009
 
1996
 
2010
StatusFrequency = 30
1997
StatusFrequency = 30
2011
;LoopSleep = 2
1998
;LoopSleep = 2
2012
 
1999
 
2013
;ResetFrequency = 300
2000
;ResetFrequency = 300
2014
;HardResetFrequency = 120
2001
;HardResetFrequency = 120
2015
 
2002
 
2016
CheckSecurity = 1
2003
CheckSecurity = 1
2017
CheckSignal = 1
2004
CheckSignal = 1
2018
CheckBattery = 0
2005
CheckBattery = 0
2019
EOF
2006
EOF
2020
	chmod 755 /etc/gammu_smsd_conf /etc/gammurc
2007
	chmod 755 /etc/gammu_smsd_conf /etc/gammurc
2021
 
2008
 
2022
# Create the systemd unit
2009
# Create the systemd unit
2023
	cat << EOF > /lib/systemd/system/gammu-smsd.service
2010
	cat << EOF > /lib/systemd/system/gammu-smsd.service
2024
[Unit]
2011
[Unit]
2025
Description=SMS daemon for Gammu
2012
Description=SMS daemon for Gammu
2026
Documentation=man:gammu-smsd(1)
2013
Documentation=man:gammu-smsd(1)
2027
After=network.target mysql.service
2014
After=network.target mysql.service
2028
 
2015
 
2029
[Service]
2016
[Service]
2030
Type=forking
2017
Type=forking
2031
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu_smsd_conf --user=gammu_smsd --group=gammu_smsd --pid=/var/run/gammu-smsd.pid --daemon
2018
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu_smsd_conf --user=gammu_smsd --group=gammu_smsd --pid=/var/run/gammu-smsd.pid --daemon
2032
ExecReload=/bin/kill -HUP $MAINPID
2019
ExecReload=/bin/kill -HUP $MAINPID
2033
ExecStopPost=/bin/rm -f /var/run/gammu-smsd.pid
2020
ExecStopPost=/bin/rm -f /var/run/gammu-smsd.pid
2034
PIDFile=/var/run/gammu-smsd.pid
2021
PIDFile=/var/run/gammu-smsd.pid
2035
 
2022
 
2036
[Install]
2023
[Install]
2037
WantedBy=multi-user.target
2024
WantedBy=multi-user.target
2038
EOF
2025
EOF
2039
 
2026
 
2040
# Log folder for gammu-smsd
2027
# Log folder for gammu-smsd
2041
	[ -e /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
2028
	[ -e /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
2042
	chmod 755 /var/log/gammu-smsd
2029
	chmod 755 /var/log/gammu-smsd
2043
 
2030
 
2044
# Udev rule for Modeswitch (switch from "mass_storage" mode to "ttyUSB" modem) needed with some Huawei MODEM (idVendor: 12d1)
2031
# Udev rule for Modeswitch (switch from "mass_storage" mode to "ttyUSB" modem) needed with some Huawei MODEM (idVendor: 12d1)
2045
# normally not needed now since modeswitch is managed by udev (see Mageia RPM)
2032
# normally not needed now since modeswitch is managed by udev (see Mageia RPM)
2046
#cat << EOF > /lib/udev/rules.d/66-huawei.rules
2033
#cat << EOF > /lib/udev/rules.d/66-huawei.rules
2047
#KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="$DIR_DEST_BIN/alcasar-sms.sh --mode"
2034
#KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="$DIR_DEST_BIN/alcasar-sms.sh --mode"
2048
#EOF
2035
#EOF
2049
# Udev rule for fixing the enumeration of ttyUSB port on some MODEM (when they switch randomly the order of their ports at boot time)
2036
# Udev rule for fixing the enumeration of ttyUSB port on some MODEM (when they switch randomly the order of their ports at boot time)
2050
# example : http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/
2037
# example : http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/
2051
 
2038
 
2052
} # End gammu_smsd()
2039
} # End of gammu_smsd()
2053
 
2040
 
2054
############################################################
2041
############################################################
2055
##                 Fonction "msec"                        ##
2042
##                 Fonction "msec"                        ##
2056
## - Apply the "fileserver" security level                ##
2043
## - Apply the "fileserver" security level                ##
2057
## - remove the "system request" for rebboting            ##
2044
## - remove the "system request" for rebboting            ##
2058
## - Fix several file permissions                         ##
2045
## - Fix several file permissions                         ##
2059
############################################################
2046
############################################################
2060
msec()
2047
msec()
2061
{
2048
{
2062
 
2049
 
2063
# Apply fileserver security level
2050
# Apply fileserver security level
2064
[ -e /etc/security/msec/security.conf.default ] || cp /etc/security/msec/security.conf /etc/security/msec/security.conf.default
2051
[ -e /etc/security/msec/security.conf.default ] || cp /etc/security/msec/security.conf /etc/security/msec/security.conf.default
2065
echo "BASE_LEVEL=fileserver" > /etc/security/msec/security.conf
2052
echo "BASE_LEVEL=fileserver" > /etc/security/msec/security.conf
2066
 
2053
 
2067
# Set permissions monitoring and enforcement
2054
# Set permissions monitoring and enforcement
2068
cat <<EOF > /etc/security/msec/perm.local
2055
cat <<EOF > /etc/security/msec/perm.local
2069
/var/log/firefwall/                     root.apache     750
2056
/var/log/firefwall/                     root.apache     750
2070
/var/log/firewall/*                     root.apache     640
2057
/var/log/firewall/*                     root.apache     640
2071
/etc/security/msec/perm.local           root.root       640
2058
/etc/security/msec/perm.local           root.root       640
2072
/etc/security/msec/level.local          root.root       640
2059
/etc/security/msec/level.local          root.root       640
2073
/etc/freeradius-web                     root.apache     750
2060
/etc/freeradius-web                     root.apache     750
2074
/etc/freeradius-web/admin.conf          root.apache     640
2061
/etc/freeradius-web/admin.conf          root.apache     640
2075
/etc/raddb/client.conf                  radius.radius   640
2062
/etc/raddb/client.conf                  radius.radius   640
2076
/etc/raddb/radius.conf                  radius.radius   640
2063
/etc/raddb/radius.conf                  radius.radius   640
2077
/etc/raddb/mods-available/ldap          radius.apache   660
2064
/etc/raddb/mods-available/ldap          radius.apache   660
2078
/etc/raddb/sites-available/alcasar      radius.apache   660
2065
/etc/raddb/sites-available/alcasar      radius.apache   660
2079
/etc/pki/*                              root.apache     750
2066
/etc/pki/*                              root.apache     750
2080
/var/log/netflow/porttracker            root.apache     770
2067
/var/log/netflow/porttracker            root.apache     770
2081
/var/log/netflow/porttracker/*          root.apache     660
2068
/var/log/netflow/porttracker/*          root.apache     660
2082
EOF
2069
EOF
2083
# apply now hourly & daily checks
2070
# apply now hourly & daily checks
2084
/usr/sbin/msec
2071
/usr/sbin/msec
2085
/etc/cron.weekly/msec
2072
/etc/cron.weekly/msec
2086
 
2073
 
2087
} # End msec()
2074
} # End of msec()
2088
 
-
 
2089
 
2075
 
2090
##################################################################
2076
##################################################################
2091
##                   Fonction "letsencrypt"                     ##
2077
##                   Fonction "letsencrypt"                     ##
2092
## - Install Let's Encrypt client                               ##
2078
## - Install Let's Encrypt client                               ##
2093
## - Prepare Let's Encrypt ALCASAR configuration file           ##
2079
## - Prepare Let's Encrypt ALCASAR configuration file           ##
2094
##################################################################
2080
##################################################################
2095
letsencrypt()
2081
letsencrypt()
2096
{
2082
{
2097
	echo "Installing Let's Encrypt client..."
2083
	echo "Installing Let's Encrypt client..."
2098
 
2084
 
2099
	# Remove potential old installers
2085
	# Remove potential old installers
2100
	rm -rf /tmp/acme.sh-*
2086
	rm -rf /tmp/acme.sh-*
2101
 
2087
 
2102
	# Extract acme.sh
2088
	# Extract acme.sh
2103
	tar xzf ./conf/letsencrypt-client/acme.sh-*.tar.gz -C /tmp/
2089
	tar xzf ./conf/letsencrypt-client/acme.sh-*.tar.gz -C /tmp/
2104
 
2090
 
2105
	pwdInstall=$(pwd)
2091
	pwdInstall=$(pwd)
2106
	cd /tmp/acme.sh-* || { echo "Unable to find ACME directory"; exit 1; }
2092
	cd /tmp/acme.sh-* || { echo "Unable to find ACME directory"; exit 1; }
2107
 
2093
 
2108
	acmesh_installDir="/opt/acme.sh"
2094
	acmesh_installDir="/opt/acme.sh"
2109
	acmesh_confDir="/usr/local/etc/letsencrypt"
2095
	acmesh_confDir="/usr/local/etc/letsencrypt"
2110
	acmesh_userAgent="ALCASAR"
2096
	acmesh_userAgent="ALCASAR"
2111
 
2097
 
2112
	# Install acme.sh
2098
	# Install acme.sh
2113
	./acme.sh --install \
2099
	./acme.sh --install \
2114
		--home $acmesh_installDir \
2100
		--home $acmesh_installDir \
2115
		--config-home $acmesh_confDir/data \
2101
		--config-home $acmesh_confDir/data \
2116
		--certhome $acmesh_confDir/certs \
2102
		--certhome $acmesh_confDir/certs \
2117
		--accountkey $acmesh_confDir/ca/account.key \
2103
		--accountkey $acmesh_confDir/ca/account.key \
2118
		--accountconf $acmesh_confDir/data/account.conf \
2104
		--accountconf $acmesh_confDir/data/account.conf \
2119
		--useragent $acmesh_userAgent \
2105
		--useragent $acmesh_userAgent \
2120
		--nocron \
2106
		--nocron \
2121
		> /dev/null
2107
		> /dev/null
2122
 
2108
 
2123
	if [ $? -ne 0 ]; then
2109
	if [ $? -ne 0 ]; then
2124
		echo "Error during installation of Let's Encrypt client (acme.sh)."
2110
		echo "Error during installation of Let's Encrypt client (acme.sh)."
2125
	fi
2111
	fi
2126
 
2112
 
2127
	# Create configuration file
2113
	# Create configuration file
2128
	cat <<EOF > /usr/local/etc/alcasar-letsencrypt
2114
	cat <<EOF > /usr/local/etc/alcasar-letsencrypt
2129
email=
2115
email=
2130
dateIssueRequest=
2116
dateIssueRequest=
2131
domainRequest=
2117
domainRequest=
2132
challenge=
2118
challenge=
2133
dateIssued=
2119
dateIssued=
2134
dnsapi=
2120
dnsapi=
2135
dateNextRenewal=
2121
dateNextRenewal=
2136
EOF
2122
EOF
2137
 
2123
 
2138
	cd $pwdInstall || { echo "Unable to find $pwdInstall directory"; exit 1; }
2124
	cd $pwdInstall || { echo "Unable to find $pwdInstall directory"; exit 1; }
2139
	rm -rf /tmp/acme.sh-*
2125
	rm -rf /tmp/acme.sh-*
2140
 
2126
 
2141
} # END letsencrypt()
2127
} # End of letsencrypt()
2142
 
2128
 
2143
##################################################################
2129
##################################################################
2144
##                    Fonction "post_install"                   ##
2130
##                    Fonction "post_install"                   ##
2145
## - Modifying banners (locals et ssh) & prompts                ##
2131
## - Modifying banners (locals et ssh) & prompts                ##
2146
## - SSH config                                                 ##
2132
## - SSH config                                                 ##
2147
## - sudoers config & files security                            ##
2133
## - sudoers config & files security                            ##
2148
## - log rotate & ANSSI security parameters                     ##
2134
## - log rotate & ANSSI security parameters                     ##
2149
## - Apply former conf in case of an update                     ##
2135
## - Apply former conf in case of an update                     ##
2150
##################################################################
2136
##################################################################
2151
post_install()
2137
post_install()
2152
{
2138
{
2153
# change the SSH banner
2139
# change the SSH banner
2154
	cp -f $DIR_CONF/banner /etc/ssh/alcasar-banner-ssh
2140
	cp -f $DIR_CONF/banner /etc/ssh/alcasar-banner-ssh
2155
	echo " V$VERSION" >> /etc/ssh/alcasar-banner-ssh
2141
	echo " V$VERSION" >> /etc/ssh/alcasar-banner-ssh
2156
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
2142
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
2157
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2143
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2158
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
2144
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
2159
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
2145
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
2160
# postfix banner anonymisation
2146
# postfix banner anonymisation
2161
	$SED "s?^smtpd_banner =.*?smtpd_banner = \$myhostname ESMTP?g" /etc/postfix/main.cf
2147
	$SED "s?^smtpd_banner =.*?smtpd_banner = \$myhostname ESMTP?g" /etc/postfix/main.cf
2162
	chown -R postfix:postfix /var/lib/postfix
2148
	chown -R postfix:postfix /var/lib/postfix
2163
# sshd liste on EXTIF & INTIF
2149
# sshd liste on EXTIF & INTIF
2164
	$SED "s?^#ListenAddress 0\.0\.0\.0.*?ListenAddress 0\.0\.0\.0?g" /etc/ssh/sshd_config
2150
	$SED "s?^#ListenAddress 0\.0\.0\.0.*?ListenAddress 0\.0\.0\.0?g" /etc/ssh/sshd_config
2165
# sshd authorized certificate for root login
2151
# sshd authorized certificate for root login
2166
	$SED "s?^PermitRootLogin.*?PermitRootLogin without-password?g" /etc/ssh/sshd_config
2152
	$SED "s?^PermitRootLogin.*?PermitRootLogin without-password?g" /etc/ssh/sshd_config
2167
# ALCASAR conf file
2153
# ALCASAR conf file
2168
	echo "HTTPS_LOGIN=on" >> $CONF_FILE
2154
	echo "HTTPS_LOGIN=on" >> $CONF_FILE
2169
	echo "HTTPS_CHILLI=off" >> $CONF_FILE
2155
	echo "HTTPS_CHILLI=off" >> $CONF_FILE
2170
	echo "SSH=on" >> $CONF_FILE
2156
	echo "SSH=on" >> $CONF_FILE
2171
	echo "SSH_ADMIN_FROM=0.0.0.0/0.0.0.0" >> $CONF_FILE
2157
	echo "SSH_ADMIN_FROM=0.0.0.0/0.0.0.0" >> $CONF_FILE
2172
	echo "LDAP=off" >> $CONF_FILE
2158
	echo "LDAP=off" >> $CONF_FILE
2173
	echo "LDAP_SERVER=127.0.0.1" >> $CONF_FILE
2159
	echo "LDAP_SERVER=127.0.0.1" >> $CONF_FILE
2174
	echo "LDAP_BASE=cn=Users;dc=serverad;dc=localdomain" >> $CONF_FILE
2160
	echo "LDAP_BASE=cn=Users;dc=serverad;dc=localdomain" >> $CONF_FILE
2175
	echo "LDAP_UID=sAMAccountName" >> $CONF_FILE
2161
	echo "LDAP_UID=sAMAccountName" >> $CONF_FILE
2176
	echo "LDAP_FILTER=" >> $CONF_FILE
2162
	echo "LDAP_FILTER=" >> $CONF_FILE
2177
	echo "LDAP_USER=alcasar" >> $CONF_FILE
2163
	echo "LDAP_USER=alcasar" >> $CONF_FILE
2178
	echo "LDAP_PASSWORD=" >> $CONF_FILE
2164
	echo "LDAP_PASSWORD=" >> $CONF_FILE
2179
	echo "LDAP_SSL=on" >> $CONF_FILE
2165
	echo "LDAP_SSL=on" >> $CONF_FILE
2180
	echo "LDAP_CERT_REQUIRED=" >> $CONF_FILE
2166
	echo "LDAP_CERT_REQUIRED=" >> $CONF_FILE
2181
	echo "SMS=off" >> $CONF_FILE
2167
	echo "SMS=off" >> $CONF_FILE
2182
	echo "SMS_NUM=" >> $CONF_FILE
2168
	echo "SMS_NUM=" >> $CONF_FILE
2183
	echo "MULTIWAN=off" >> $CONF_FILE
2169
	echo "MULTIWAN=off" >> $CONF_FILE
2184
	echo "FAILOVER=30" >> $CONF_FILE
2170
	echo "FAILOVER=30" >> $CONF_FILE
2185
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
2171
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
2186
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
2172
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
2187
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
2173
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
2188
	echo "BL_PUREIP=on" >> $CONF_FILE
2174
	echo "BL_PUREIP=on" >> $CONF_FILE
2189
	echo "BL_SAFESEARCH=off" >> $CONF_FILE
2175
	echo "BL_SAFESEARCH=off" >> $CONF_FILE
2190
	echo "WL_SAFESEARCH=off" >> $CONF_FILE
2176
	echo "WL_SAFESEARCH=off" >> $CONF_FILE
2191
# Prompt customisation (colors)
2177
# Prompt customisation (colors)
2192
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
2178
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
2193
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
2179
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
2194
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
2180
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
2195
# sudoers configuration for "apache" & "sysadmin"
2181
# sudoers configuration for "apache" & "sysadmin"
2196
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
2182
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
2197
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
2183
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
2198
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
2184
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
2199
# Modify some logrotate files (gammu, ulogd)
2185
# Modify some logrotate files (gammu, ulogd)
2200
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
2186
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
2201
	chmod 644 /etc/logrotate.d/*
2187
	chmod 644 /etc/logrotate.d/*
2202
# Log compression
2188
# Log compression
2203
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
2189
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
2204
# actualisation des fichiers logs compressés
2190
# actualisation des fichiers logs compressés
2205
	for dir in firewall e2guardian lighttpd
2191
	for dir in firewall e2guardian lighttpd
2206
	do
2192
	do
2207
		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 {} \;
2193
		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 {} \;
2208
	done
2194
	done
2209
# create the alcasar-load_balancing unit
2195
# create the alcasar-load_balancing unit
2210
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
2196
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
2211
#  This file is part of systemd.
2197
#  This file is part of systemd.
2212
#
2198
#
2213
#  systemd is free software; you can redistribute it and/or modify it
2199
#  systemd is free software; you can redistribute it and/or modify it
2214
#  under the terms of the GNU General Public License as published by
2200
#  under the terms of the GNU General Public License as published by
2215
#  the Free Software Foundation; either version 2 of the License, or
2201
#  the Free Software Foundation; either version 2 of the License, or
2216
#  (at your option) any later version.
2202
#  (at your option) any later version.
2217
 
2203
 
2218
# This unit lauches alcasar-load-balancing.sh script.
2204
# This unit lauches alcasar-load-balancing.sh script.
2219
[Unit]
2205
[Unit]
2220
Description=alcasar-load_balancing.sh execution
2206
Description=alcasar-load_balancing.sh execution
2221
After=network.target iptables.service
2207
After=network.target iptables.service
2222
 
2208
 
2223
[Service]
2209
[Service]
2224
Type=oneshot
2210
Type=oneshot
2225
RemainAfterExit=yes
2211
RemainAfterExit=yes
2226
ExecStart=$DIR_DEST_BIN/alcasar-load_balancing.sh start
2212
ExecStart=$DIR_DEST_BIN/alcasar-load_balancing.sh start
2227
ExecStop=$DIR_DEST_BIN/alcasar-load_balancing.sh stop
2213
ExecStop=$DIR_DEST_BIN/alcasar-load_balancing.sh stop
2228
TimeoutSec=0
2214
TimeoutSec=0
2229
SysVStartPriority=99
2215
SysVStartPriority=99
2230
 
2216
 
2231
[Install]
2217
[Install]
2232
WantedBy=multi-user.target
2218
WantedBy=multi-user.target
2233
EOF
2219
EOF
2234
	/usr/bin/systemctl daemon-reload
2220
	/usr/bin/systemctl daemon-reload
2235
# processes launched at boot time (Systemctl)
2221
# processes launched at boot time (Systemctl)
2236
	for i in alcasar-load_balancing mysqld lighttpd php-fpm ntpd iptables unbound unbound-blacklist unbound-whitelist dnsmasq-whitelist unbound-blackhole radiusd nfsen e2guardian freshclam ulogd-ssh ulogd-traceability ulogd-ext-access chilli fail2ban havp tinyproxy vnstat sshd
2222
	for i in alcasar-load_balancing mysqld lighttpd php-fpm ntpd iptables unbound unbound-blacklist unbound-whitelist dnsmasq-whitelist unbound-blackhole radiusd nfsen e2guardian freshclam ulogd-ssh ulogd-traceability ulogd-ext-access chilli fail2ban havp tinyproxy vnstat sshd
2237
	do
2223
	do
2238
		/usr/bin/systemctl -q enable $i.service
2224
		/usr/bin/systemctl -q enable $i.service
2239
	done
2225
	done
2240
 
2226
 
2241
# disable processes at boot time (Systemctl)
2227
# disable processes at boot time (Systemctl)
2242
	for i in ulogd gpm dhcpd
2228
	for i in ulogd gpm dhcpd
2243
	do
2229
	do
2244
		/usr/bin/systemctl -q disable $i.service
2230
		/usr/bin/systemctl -q disable $i.service
2245
	done
2231
	done
2246
 
2232
 
2247
# Apply French Security Agency (ANSSI) rules
2233
# Apply French Security Agency (ANSSI) rules
2248
# ignore ICMP broadcast (smurf attack)
2234
# ignore ICMP broadcast (smurf attack)
2249
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
2235
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
2250
# ignore ICMP errors bogus
2236
# ignore ICMP errors bogus
2251
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
2237
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
2252
# remove ICMP redirects responces
2238
# remove ICMP redirects responces
2253
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2239
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2254
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2240
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2255
# enable SYN Cookies (Syn flood attacks)
2241
# enable SYN Cookies (Syn flood attacks)
2256
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
2242
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
2257
# enable kernel antispoofing
2243
# enable kernel antispoofing
2258
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
2244
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
2259
# ignore source routing
2245
# ignore source routing
2260
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
2246
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
2261
# set conntrack timer to 1h (3600s) instead of 5 weeks
2247
# set conntrack timer to 1h (3600s) instead of 5 weeks
2262
	echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.d/alcasar.conf
2248
	echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.d/alcasar.conf
2263
# disable log_martians (ALCASAR is often installed between two private network addresses)
2249
# disable log_martians (ALCASAR is often installed between two private network addresses)
2264
	echo "net.ipv4.conf.all.log_martians = 0" >> /etc/sysctl.d/alcasar.conf
2250
	echo "net.ipv4.conf.all.log_martians = 0" >> /etc/sysctl.d/alcasar.conf
2265
# disable iptables_helpers
2251
# disable iptables_helpers
2266
	echo "net.netfilter.nf_conntrack_helper = 0" >> /etc/sysctl.d/alcasar.conf
2252
	echo "net.netfilter.nf_conntrack_helper = 0" >> /etc/sysctl.d/alcasar.conf
2267
# Switch to the router mode
2253
# Switch to the router mode
2268
	echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/alcasar.conf
2254
	echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/alcasar.conf
2269
# Remove unused service ipv6
2255
# Remove unused service ipv6
2270
	echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2256
	echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2271
	echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2257
	echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2272
	echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2258
	echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2273
	echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2259
	echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2274
# switch to multi-users runlevel (instead of x11)
2260
# switch to multi-users runlevel (instead of x11)
2275
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
2261
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
2276
# GRUB2 modifications (Wait time : 3s - ALCASAR entry - VGA=791 - Change the default banner
2262
# GRUB2 modifications (Wait time : 3s - ALCASAR entry - VGA=791 - Change the default banner
2277
	[ -e /etc/default/grub.default ]  || cp /etc/default/grub /etc/default/grub.default
2263
	[ -e /etc/default/grub.default ]  || cp /etc/default/grub /etc/default/grub.default
2278
	$SED "s?^GRUB_TIMEOUT=.*?GRUB_TIMEOUT=3?g" /etc/default/grub
2264
	$SED "s?^GRUB_TIMEOUT=.*?GRUB_TIMEOUT=3?g" /etc/default/grub
2279
	$SED "s?^GRUB_DISTRIBUTOR=.*?GRUB_DISTRIBUTOR=ALCASAR?g" /etc/default/grub
2265
	$SED "s?^GRUB_DISTRIBUTOR=.*?GRUB_DISTRIBUTOR=ALCASAR?g" /etc/default/grub
2280
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
2266
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
2281
	vm_vga=`lsmod | egrep -c "virtio|vmwgfx"` # test if in VM
2267
	vm_vga=`lsmod | egrep -c "virtio|vmwgfx"` # test if in VM
2282
	if [ $vm_vga == 0 ] # is not a VM
2268
	if [ $vm_vga == 0 ] # is not a VM
2283
	then
2269
	then
2284
		cp -f $DIR_CONF/banner /etc/mageia-release # ALCASAR ASCII-Art
2270
		cp -f $DIR_CONF/banner /etc/mageia-release # ALCASAR ASCII-Art
2285
		echo >> /etc/mageia-release
2271
		echo >> /etc/mageia-release
2286
		$SED "s?^GRUB_CMDLINE_LINUX_DEFAULT=\"?&vga=791 ?" /etc/default/grub
2272
		$SED "s?^GRUB_CMDLINE_LINUX_DEFAULT=\"?&vga=791 ?" /etc/default/grub
2287
	fi
2273
	fi
2288
	if [ $Lang == "fr" ]
2274
	if [ $Lang == "fr" ]
2289
	then
2275
	then
2290
		echo "Bienvenue sur ALCASAR V$VERSION" >> /etc/mageia-release
2276
		echo "Bienvenue sur ALCASAR V$VERSION" >> /etc/mageia-release
2291
		echo "Connectez-vous à l'URL 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2277
		echo "Connectez-vous à l'URL 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2292
	else
2278
	else
2293
		echo "Welcome on ALCASAR V$VERSION" >> /etc/mageia-release
2279
		echo "Welcome on ALCASAR V$VERSION" >> /etc/mageia-release
2294
		echo "Connect to 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2280
		echo "Connect to 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2295
	fi
2281
	fi
2296
	/usr/bin/update-grub2
2282
	/usr/bin/update-grub2
2297
# Load and apply the previous conf file
2283
# Load and apply the previous conf file
2298
	if [ "$mode" = "update" ]
2284
	if [ "$mode" = "update" ]
2299
	then
2285
	then
2300
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/archive
2286
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/archive
2301
		$DIR_DEST_BIN/alcasar-conf.sh --load
2287
		$DIR_DEST_BIN/alcasar-conf.sh --load
2302
		PARENT_SCRIPT=`basename $0`
2288
		PARENT_SCRIPT=`basename $0`
2303
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
2289
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
2304
		$DIR_DEST_BIN/alcasar-conf.sh --apply
2290
		$DIR_DEST_BIN/alcasar-conf.sh --apply
2305
		$DIR_DEST_BIN/alcasar-file-clean.sh # Clean & sort conf files. Add uamallowed domains to the dns-blackhole conf
2291
		$DIR_DEST_BIN/alcasar-file-clean.sh # Clean & sort conf files. Add uamallowed domains to the dns-blackhole conf
2306
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
2292
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
2307
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
2293
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
2308
	fi
2294
	fi
2309
	rm -f /var/tmp/alcasar-conf*
2295
	rm -f /var/tmp/alcasar-conf*
2310
	chown -R root:apache $DIR_DEST_ETC/*
2296
	chown -R root:apache $DIR_DEST_ETC/*
2311
	chmod -R 660 $DIR_DEST_ETC/*
2297
	chmod -R 660 $DIR_DEST_ETC/*
2312
	chmod ug+x $DIR_DEST_ETC/digest
2298
	chmod ug+x $DIR_DEST_ETC/digest
2313
	cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
2299
	cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
2314
	echo ""
2300
	echo ""
2315
	echo "#############################################################################"
2301
	echo "#############################################################################"
2316
	if [ $Lang == "fr" ]
2302
	if [ $Lang == "fr" ]
2317
		then
2303
		then
2318
		echo "#                        Fin d'installation d'ALCASAR                       #"
2304
		echo "#                        Fin d'installation d'ALCASAR                       #"
2319
		echo "#                                                                           #"
2305
		echo "#                                                                           #"
2320
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2306
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2321
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2307
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2322
		echo "#                                                                           #"
2308
		echo "#                                                                           #"
2323
		echo "#############################################################################"
2309
		echo "#############################################################################"
2324
		echo
2310
		echo
2325
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
2311
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
2326
		echo
2312
		echo
2327
		echo "- Lisez attentivement la documentation d'exploitation"
2313
		echo "- Lisez attentivement la documentation d'exploitation"
2328
		echo
2314
		echo
2329
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://$HOSTNAME.$DOMAIN"
2315
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://$HOSTNAME.$DOMAIN"
2330
		echo
2316
		echo
2331
		echo "                   Appuyez sur 'Entrée' pour continuer"
2317
		echo "                   Appuyez sur 'Entrée' pour continuer"
2332
	else
2318
	else
2333
		echo "#                        End of ALCASAR install process                     #"
2319
		echo "#                        End of ALCASAR install process                     #"
2334
		echo "#                                                                           #"
2320
		echo "#                                                                           #"
2335
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2321
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2336
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2322
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2337
		echo "#                                                                           #"
2323
		echo "#                                                                           #"
2338
		echo "#############################################################################"
2324
		echo "#############################################################################"
2339
		echo
2325
		echo
2340
		echo "- The system will be rebooted in order to operate ALCASAR"
2326
		echo "- The system will be rebooted in order to operate ALCASAR"
2341
		echo
2327
		echo
2342
		echo "- Read the exploitation documentation"
2328
		echo "- Read the exploitation documentation"
2343
		echo
2329
		echo
2344
		echo "- The ALCASAR Control Center (ACC) is at http://$HOSTNAME.$DOMAIN"
2330
		echo "- The ALCASAR Control Center (ACC) is at http://$HOSTNAME.$DOMAIN"
2345
		echo
2331
		echo
2346
		echo "                   Hit 'Enter' to continue"
2332
		echo "                   Hit 'Enter' to continue"
2347
	fi
2333
	fi
2348
	sleep 2
2334
	sleep 2
2349
	if [ "$mode" == "install" ] || [ "$DEBUG_ALCASAR" == "on" ]
2335
	if [ "$mode" == "install" ] || [ "$DEBUG_ALCASAR" == "on" ]
2350
	then
2336
	then
2351
		read
2337
		read
2352
	fi
2338
	fi
2353
	clear
2339
	clear
2354
	reboot
2340
	reboot
2355
} # End post_install ()
2341
} # End of post_install()
2356
 
2342
 
2357
#####################################################################################
2343
#####################################################################################
2358
#                                   Main Install loop                               #
2344
#                                   Main Install loop                               #
2359
#####################################################################################
2345
#####################################################################################
2360
dir_exec=`dirname "$0"`
2346
dir_exec=`dirname "$0"`
2361
if [ $dir_exec != "." ]
2347
if [ $dir_exec != "." ]
2362
then
2348
then
2363
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
2349
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
2364
	echo "Launch this program from the ALCASAR archive directory"
2350
	echo "Launch this program from the ALCASAR archive directory"
2365
	exit 0
2351
	exit 0
2366
fi
2352
fi
2367
if [ $EUID -gt 0 ]
2353
if [ $EUID -gt 0 ]
2368
then
2354
then
2369
	echo "Vous devez être \"root\" pour installer ALCASAR (commande 'su')"
2355
	echo "Vous devez être \"root\" pour installer ALCASAR (commande 'su')"
2370
	echo "You must be \"root\" to install ALCASAR ('su' command)"
2356
	echo "You must be \"root\" to install ALCASAR ('su' command)"
2371
	exit 0
2357
	exit 0
2372
fi
2358
fi
2373
VERSION=`cat $DIR_INSTALL/VERSION`
2359
VERSION=`cat $DIR_INSTALL/VERSION`
2374
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
2360
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
2375
nb_args=$#
2361
nb_args=$#
2376
args=$1
2362
args=$1
2377
if [ $nb_args -eq 0 ]
2363
if [ $nb_args -eq 0 ]
2378
then
2364
then
2379
	nb_args=1
2365
	nb_args=1
2380
	args="-h"
2366
	args="-h"
2381
fi
2367
fi
2382
chmod -R u+x $DIR_SCRIPTS/*
2368
chmod -R u+x $DIR_SCRIPTS/*
2383
case $args in
2369
case $args in
2384
	-\? | -h* | --h*)
2370
	-\? | -h* | --h*)
2385
		echo "$usage"
2371
		echo "$usage"
2386
		exit 0
2372
		exit 0
2387
		;;
2373
		;;
2388
	-i | --install)
2374
	-i | --install)
-
 
2375
		for func in license testing
-
 
2376
		do
2389
		header_install
2377
			header_install
-
 
2378
			$func
-
 
2379
			if [ $DEBUG_ALCASAR == "on" ]
2390
		license
2380
			then
-
 
2381
				echo "*** 'debug' : end of install '$func' ***"
2391
		header_install
2382
				read
-
 
2383
			fi
2392
		testing
2384
		done
2393
# RPMs install
2385
# RPMs install
2394
		$DIR_SCRIPTS/alcasar-urpmi.sh
2386
		$DIR_SCRIPTS/alcasar-urpmi.sh
2395
		if [ "$?" != "0" ]
2387
		if [ "$?" != "0" ]
2396
		then
2388
		then
2397
			exit 0
2389
			exit 0
2398
		fi
2390
		fi
2399
		if [ -e $CONF_FILE ]
2391
		if [ -e $CONF_FILE ]
2400
		then
2392
		then
2401
# Uninstall or update the running version
2393
# Uninstall or update the running version
2402
			if [ "$mode" == "update" ]
2394
			if [ "$mode" == "update" ]
2403
			then
2395
			then
2404
				$DIR_DEST_BIN/alcasar-uninstall.sh -update
2396
				$DIR_DEST_BIN/alcasar-uninstall.sh -update
2405
			else
2397
			else
2406
				$DIR_DEST_BIN/alcasar-uninstall.sh -full
2398
				$DIR_DEST_BIN/alcasar-uninstall.sh -full
2407
			fi
2399
			fi
2408
		fi
2400
		fi
2409
	if [ $DEBUG_ALCASAR == "on" ]
2401
	if [ $DEBUG_ALCASAR == "on" ]
2410
	then
2402
	then
2411
		echo "*** 'debug' : end of cleaning ***"
2403
		echo "*** 'debug' : end of cleaning ***"
2412
		read
2404
		read
2413
	fi
2405
	fi
2414
# Test if manual update
2406
# Test if manual update
2415
		if [ -e /var/tmp/alcasar-conf*.tar.gz ] && [ "$mode" == "install" ]
2407
		if [ -e /var/tmp/alcasar-conf*.tar.gz ] && [ "$mode" == "install" ]
2416
		then
2408
		then
2417
			header_install
2409
			header_install
2418
			if [ $Lang == "fr" ]
2410
			if [ $Lang == "fr" ]
2419
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
2411
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
2420
				else echo "The configuration file of an old version has been found";
2412
				else echo "The configuration file of an old version has been found";
2421
			fi
2413
			fi
2422
			response=0
2414
			response=0
2423
			PTN='^[oOnNyY]$'
2415
			PTN='^[oOnNyY]$'
2424
			until [[ $(expr $response : $PTN) -gt 0 ]]
2416
			until [[ $(expr $response : $PTN) -gt 0 ]]
2425
			do
2417
			do
2426
				if [ $Lang == "fr" ]
2418
				if [ $Lang == "fr" ]
2427
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
2419
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
2428
					else echo -n "Do you want to use it (Y/n)?";
2420
					else echo -n "Do you want to use it (Y/n)?";
2429
				 fi
2421
				 fi
2430
				read response
2422
				read response
2431
				if [ "$response" = "n" ] || [ "$response" = "N" ]
2423
				if [ "$response" = "n" ] || [ "$response" = "N" ]
2432
				then rm -f /var/tmp/alcasar-conf*
2424
				then rm -f /var/tmp/alcasar-conf*
2433
				fi
2425
				fi
2434
			done
2426
			done
2435
		fi
2427
		fi
2436
# Test if update
2428
# Test if update
2437
		if [ -e /var/tmp/alcasar-conf* ]
2429
		if [ -e /var/tmp/alcasar-conf* ]
2438
		then
2430
		then
2439
			if [ $Lang == "fr" ]
2431
			if [ $Lang == "fr" ]
2440
				then echo "#### Installation avec mise à jour ####";
2432
				then echo "#### Installation avec mise à jour ####";
2441
				else echo "#### Installation with update     ####";
2433
				else echo "#### Installation with update     ####";
2442
			fi
2434
			fi
2443
# Extract some info from the previous configuration file
2435
# Extract some info from the previous configuration file
2444
			tar -xf /var/tmp/alcasar-conf* conf/etc/alcasar.conf
2436
			tar -xf /var/tmp/alcasar-conf* conf/etc/alcasar.conf
2445
			ORGANISME=`grep ^ORGANISM= conf/etc/alcasar.conf|cut -d"=" -f2`
2437
			ORGANISME=`grep ^ORGANISM= conf/etc/alcasar.conf|cut -d"=" -f2`
2446
			PREVIOUS_VERSION=`grep ^VERSION= conf/etc/alcasar.conf|cut -d"=" -f2`
2438
			PREVIOUS_VERSION=`grep ^VERSION= conf/etc/alcasar.conf|cut -d"=" -f2`
2447
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2439
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2448
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2`
2440
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2`
2449
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3|cut -c1`
2441
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3|cut -c1`
2450
			mode="update"
2442
			mode="update"
2451
		fi
2443
		fi
2452
		for func in init network ACC CA time_server init_db freeradius chilli e2guardian antivirus tinyproxy ulogd nfsen vnstat dnsmasq unbound dhcpd BL cron fail2ban gammu_smsd msec letsencrypt post_install
2444
		for func in init network ACC CA time_server init_db freeradius chilli e2guardian antivirus tinyproxy ulogd nfsen vnstat dnsmasq unbound dhcpd BL cron fail2ban gammu_smsd msec letsencrypt post_install
2453
		do
2445
		do
2454
			$func
2446
			$func
2455
			if [ $DEBUG_ALCASAR == "on" ]
2447
			if [ $DEBUG_ALCASAR == "on" ]
2456
			then
2448
			then
2457
				echo "*** 'debug' : end of install '$func' ***"
2449
				echo "*** 'debug' : end of install '$func' ***"
2458
				read
2450
				read
2459
			fi
2451
			fi
2460
		done
2452
		done
2461
		;;
2453
		;;
2462
	-u | --uninstall)
2454
	-u | --uninstall)
2463
		if [ ! -e $DIR_DEST_BIN/alcasar-uninstall.sh ]
2455
		if [ ! -e $DIR_DEST_BIN/alcasar-uninstall.sh ]
2464
		then
2456
		then
2465
			if [ $Lang == "fr" ]
2457
			if [ $Lang == "fr" ]
2466
				then echo "ALCASAR n'est pas installé!";
2458
				then echo "ALCASAR n'est pas installé!";
2467
				else echo "ALCASAR isn't installed!";
2459
				else echo "ALCASAR isn't installed!";
2468
			fi
2460
			fi
2469
			exit 0
2461
			exit 0
2470
		fi
2462
		fi
2471
		response=0
2463
		response=0
2472
		PTN='^[oOnN]$'
2464
		PTN='^[oOnN]$'
2473
		until [[ $(expr $response : $PTN) -gt 0 ]]
2465
		until [[ $(expr $response : $PTN) -gt 0 ]]
2474
		do
2466
		do
2475
			if [ $Lang == "fr" ]
2467
			if [ $Lang == "fr" ]
2476
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
2468
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
2477
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2469
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2478
			fi
2470
			fi
2479
			read response
2471
			read response
2480
		done
2472
		done
2481
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2473
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2482
		then
2474
		then
2483
			$DIR_SCRIPTS/alcasar-conf.sh --create
2475
			$DIR_SCRIPTS/alcasar-conf.sh --create
2484
		else
2476
		else
2485
			rm -f /var/tmp/alcasar-conf*
2477
			rm -f /var/tmp/alcasar-conf*
2486
		fi
2478
		fi
2487
# Uninstall the running version
2479
# Uninstall the running version
2488
		$DIR_DEST_BIN/alcasar-uninstall.sh -full
2480
		$DIR_DEST_BIN/alcasar-uninstall.sh -full
2489
		;;
2481
		;;
2490
	*)
2482
	*)
2491
		echo "Argument inconnu :$1";
2483
		echo "Argument inconnu :$1";
2492
		echo "Unknown argument :$1";
2484
		echo "Unknown argument :$1";
2493
		echo "$usage"
2485
		echo "$usage"
2494
		exit 1
2486
		exit 1
2495
		;;
2487
		;;
2496
esac
2488
esac
2497
# end of script
2489
# end of script
2498
 
2490
 
2499
 
2491
 
2500

Generated by GNU Enscript 1.6.6.
2492

Generated by GNU Enscript 1.6.6.
2501
 
2493
 
2502
 
2494
 
2503
 
2495