Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2583

Generated by GNU Enscript 1.6.6.
2595
 
2584
 
2596
 
2585
 
2597
 
2586