Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2629

Generated by GNU Enscript 1.6.6.
2627
 
2630
 
2628
 
2631
 
2629
 
2632