Subversion Repositories ALCASAR

Rev

Rev 3310 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log

Rev 3310 Rev 3326
1
#!/bin/bash
1
#!/bin/bash
2
#  $Id: alcasar.sh 3310 2026-01-06 12:48:09Z rexy $
2
#  $Id: alcasar.sh 3326 2026-03-01 22:35:33Z 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 /etc/pki/tls/private
796
	chown root:root /etc/pki/CA/private /etc/pki/tls/private
797
	chmod 700 /etc/pki/CA/private /etc/pki/tls/private
797
	chmod 700 /etc/pki/CA/private /etc/pki/tls/private
798
	chmod 600 /etc/pki/CA/private/* /etc/pki/tls/private/*
798
	chmod 600 /etc/pki/CA/private/* /etc/pki/tls/private/*
799
	chmod 644 /etc/pki/tls/certs/*
799
	chmod 644 /etc/pki/tls/certs/*
800
} # End of CA()
800
} # End of CA()
801
 
801
 
802
######################################################
802
######################################################
803
##                       "ACC"                      ##
803
##                       "ACC"                      ##
804
## - copy ALCASAR Control Center (ACC) files        ##
804
## - copy ALCASAR Control Center (ACC) files        ##
805
## - configuration of the web server (Apache)       ##
805
## - configuration of the web server (Apache)       ##
806
## - creation of the first ACC admin account        ##
806
## - creation of the first ACC admin account        ##
807
## - secure the ACC access                          ##
807
## - secure the ACC access                          ##
808
######################################################
808
######################################################
809
ACC()
809
ACC()
810
{
810
{
811
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
811
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
812
	mkdir $DIR_WEB
812
	mkdir $DIR_WEB
813
# Copy & adapt ACC files
813
# Copy & adapt ACC files
814
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
814
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
815
	ln $DIR_WEB/images/favicon-48.ico $DIR_WEB/favicon.ico
815
	ln $DIR_WEB/images/favicon-48.ico $DIR_WEB/favicon.ico
816
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
816
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
817
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/welcome.php
817
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/welcome.php
818
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/welcome.php
818
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/welcome.php
819
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/welcome.php
819
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/welcome.php
820
	$SED "s?^\$csrf_key = .*?\$csrf_key = \"$csrfkey\"\;?g" $DIR_ACC/manager/htdocs/activity.php
820
	$SED "s?^\$csrf_key = .*?\$csrf_key = \"$csrfkey\"\;?g" $DIR_ACC/manager/htdocs/activity.php
821
	chown -R apache:apache $DIR_WEB/*
821
	chown -R apache:apache $DIR_WEB/*
822
# copy & adapt "freeradius-web" files
822
# copy & adapt "freeradius-web" files
823
	cp -rf $DIR_CONF/freeradius-web/ /etc/
823
	cp -rf $DIR_CONF/freeradius-web/ /etc/
824
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
824
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
825
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
825
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
826
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
826
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
827
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
827
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
828
	cat <<EOF > /etc/freeradius-web/naslist.conf
828
	cat <<EOF > /etc/freeradius-web/naslist.conf
829
nas1_name: alcasar-$ORGANISME
829
nas1_name: alcasar-$ORGANISME
830
nas1_model: Network Access Controler
830
nas1_model: Network Access Controler
831
nas1_ip: $PRIVATE_IP
831
nas1_ip: $PRIVATE_IP
832
nas1_port_num: 0
832
nas1_port_num: 0
833
nas1_community: public
833
nas1_community: public
834
EOF
834
EOF
835
	chown -R apache:apache /etc/freeradius-web/
835
	chown -R apache:apache /etc/freeradius-web/
836
# create the log & backup structure :
836
# create the log & backup structure :
837
# - base = users database
837
# - base = users database
838
# - archive = tarball of "base + http firewall + netflow"
838
# - archive = tarball of "base + http firewall + netflow"
839
# - security = watchdog log
839
# - security = watchdog log
840
# - conf_file = archive conf file (usefull in updating process)
840
# - conf_file = archive conf file (usefull in updating process)
841
	for i in base archive security activity_report iot_captures;
841
	for i in base archive security activity_report iot_captures;
842
	do
842
	do
843
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
843
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
844
	done
844
	done
845
	chown -R root:apache $DIR_SAVE
845
	chown -R root:apache $DIR_SAVE
846
# Configuring & securing php
846
# Configuring & securing php
847
	[ -e /etc/php.d/05_date.ini.default ] || cp /etc/php.d/05_date.ini /etc/php.d/05_date.ini.default
847
	[ -e /etc/php.d/05_date.ini.default ] || cp /etc/php.d/05_date.ini /etc/php.d/05_date.ini.default
848
	timezone=`timedatectl show --property=Timezone|cut -d"=" -f2`
848
	timezone=`timedatectl show --property=Timezone|cut -d"=" -f2`
849
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.d/05_date.ini
849
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.d/05_date.ini
850
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
850
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
851
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
851
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
852
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
852
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
853
	$SED "s?^display_errors.*?display_errors = Off?" /etc/php.ini
853
	$SED "s?^display_errors.*?display_errors = Off?" /etc/php.ini
854
	$SED "s?^display_startup_errors.*?display_startup_errors = Off?" /etc/php.ini
854
	$SED "s?^display_startup_errors.*?display_startup_errors = Off?" /etc/php.ini
855
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
855
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
856
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
856
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
857
	$SED "s?^allow_url_fopen.*?allow_url_fopen = Off?" /etc/php.ini
857
	$SED "s?^allow_url_fopen.*?allow_url_fopen = Off?" /etc/php.ini
858
# Configuring & securing Apache
858
# Configuring & securing Apache
859
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
859
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
860
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
860
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
861
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
861
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
862
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
862
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
863
	$SED "s?Options Indexes.*?Options -Indexes?g" /etc/httpd/conf/httpd.conf
863
	$SED "s?Options Indexes.*?Options -Indexes?g" /etc/httpd/conf/httpd.conf
864
	echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
864
	echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
865
	echo "ServerSignature Off" >> /etc/httpd/conf/httpd.conf
865
	echo "ServerSignature Off" >> /etc/httpd/conf/httpd.conf
866
	[ -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
866
	[ -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
	$SED "s?^LoadModule authn_anon_module.*?#LoadModule authn_anon_module modules/mod_authn_anon.so?g" /etc/httpd/conf/modules.d/00_base.conf
867
	$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 status_module.*?#LoadModule status_module modules/mod_status.so?g" /etc/httpd/conf/modules.d/00_base.conf
868
	$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 info_module.*?#LoadModule info_module modules/mod_info.so?g" /etc/httpd/conf/modules.d/00_base.conf
869
	$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 imagemap_module.*?#LoadModule imagemap_module modules/mod_imagemap.so?g" /etc/httpd/conf/modules.d/00_base.conf
870
	$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 rewrite_module.*?LoadModule rewrite_module modules/mod_rewrite.so?g" /etc/httpd/conf/modules.d/00_base.conf
871
	$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 speling_module.*?#LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/modules.d/00_base.conf
872
	$SED "s?^LoadModule speling_module.*?#LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/modules.d/00_base.conf
873
	[ -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
873
	[ -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
	echo "Listen $PRIVATE_IP:443" > /etc/httpd/conf/conf.d/ssl.conf # Listen only on INTIF
874
	echo "Listen $PRIVATE_IP:443" > /etc/httpd/conf/conf.d/ssl.conf # Listen only on INTIF
875
	echo "SSLProtocol all -SSLv2 -SSLv3" >> /etc/httpd/conf/conf.d/ssl.conf  # exclude vulnerable protocols
875
	echo "SSLProtocol all -SSLv2 -SSLv3" >> /etc/httpd/conf/conf.d/ssl.conf  # exclude vulnerable protocols
876
	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
876
	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 "SSLHonorCipherOrder on" >> /etc/httpd/conf/conf.d/ssl.conf # The Browser must respect the order of the cipher suite
877
	echo "SSLHonorCipherOrder on" >> /etc/httpd/conf/conf.d/ssl.conf # The Browser must respect the order of the cipher suite
878
	echo "SSLPassPhraseDialog  builtin" >> /etc/httpd/conf/conf.d/ssl.conf # in case of passphrase the dialog will be perform on stdin
878
	echo "SSLPassPhraseDialog  builtin" >> /etc/httpd/conf/conf.d/ssl.conf # in case of passphrase the dialog will be perform on stdin
879
	echo "SSLSessionCache \"shmcb:/run/httpd/ssl_scache(512000)\"" >> /etc/httpd/conf/conf.d/ssl.conf # default cache size
879
	echo "SSLSessionCache \"shmcb:/run/httpd/ssl_scache(512000)\"" >> /etc/httpd/conf/conf.d/ssl.conf # default cache size
880
	echo "SSLSessionCacheTimeout 300" >> /etc/httpd/conf/conf.d/ssl.conf # default cache time in seconds
880
	echo "SSLSessionCacheTimeout 300" >> /etc/httpd/conf/conf.d/ssl.conf # default cache time in seconds
881
	[ -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
881
	[ -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
	$SED "s?^    SSLCertificateFile.*?    SSLCertificateFile /etc/pki/tls/certs/alcasar.crt?g" /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf
882
	$SED "s?^    SSLCertificateFile.*?    SSLCertificateFile /etc/pki/tls/certs/alcasar.crt?g" /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf
883
	$SED "s?^    SSLCertificateKeyFile.*?    SSLCertificateKeyFile /etc/pki/tls/private/alcasar.key?g" /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf
883
	$SED "s?^    SSLCertificateKeyFile.*?    SSLCertificateKeyFile /etc/pki/tls/private/alcasar.key?g" /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf
884
	$SED "/^    SSLCertificateKeyFile/a\    SSLCertificateChainFile /etc/pki/tls/certs/server-chain.pem" /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf
884
	$SED "/^    SSLCertificateKeyFile/a\    SSLCertificateChainFile /etc/pki/tls/certs/server-chain.pem" /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf
885
# Error page management
885
# Error page management
886
	[ -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
886
	[ -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
	cat <<EOF > /etc/httpd/conf/conf.d/multilang-errordoc.conf
887
	cat <<EOF > /etc/httpd/conf/conf.d/multilang-errordoc.conf
888
Alias /error/ "/var/www/html/"
888
Alias /error/ "/var/www/html/"
889
<Directory "/usr/share/httpd/error">
889
<Directory "/usr/share/httpd/error">
890
    AllowOverride None
890
    AllowOverride None
891
    Options IncludesNoExec
891
    Options IncludesNoExec
892
    AddOutputFilter Includes html
892
    AddOutputFilter Includes html
893
    AddHandler type-map var
893
    AddHandler type-map var
894
    Require all granted
894
    Require all granted
895
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
895
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
896
    ForceLanguagePriority Prefer Fallback
896
    ForceLanguagePriority Prefer Fallback
897
</Directory>
897
</Directory>
898
ErrorDocument 400 /error/error.php?error=400
898
ErrorDocument 400 /error/error.php?error=400
899
ErrorDocument 401 /error/error.php?error=401
899
ErrorDocument 401 /error/error.php?error=401
900
ErrorDocument 403 /error/error.php?error=403
900
ErrorDocument 403 /error/error.php?error=403
901
ErrorDocument 404 /error/index.php
901
ErrorDocument 404 /error/index.php
902
ErrorDocument 405 /error/error.php?error=405
902
ErrorDocument 405 /error/error.php?error=405
903
ErrorDocument 408 /error/error.php?error=408
903
ErrorDocument 408 /error/error.php?error=408
904
ErrorDocument 410 /error/error.php?error=410
904
ErrorDocument 410 /error/error.php?error=410
905
ErrorDocument 411 /error/error.php?error=411
905
ErrorDocument 411 /error/error.php?error=411
906
ErrorDocument 412 /error/error.php?error=412
906
ErrorDocument 412 /error/error.php?error=412
907
ErrorDocument 413 /error/error.php?error=413
907
ErrorDocument 413 /error/error.php?error=413
908
ErrorDocument 414 /error/error.php?error=414
908
ErrorDocument 414 /error/error.php?error=414
909
ErrorDocument 415 /error/error.php?error=415
909
ErrorDocument 415 /error/error.php?error=415
910
ErrorDocument 500 /error/error.php?error=500
910
ErrorDocument 500 /error/error.php?error=500
911
ErrorDocument 501 /error/error.php?error=501
911
ErrorDocument 501 /error/error.php?error=501
912
ErrorDocument 502 /error/error.php?error=502
912
ErrorDocument 502 /error/error.php?error=502
913
ErrorDocument 503 /error/error.php?error=503
913
ErrorDocument 503 /error/error.php?error=503
914
ErrorDocument 506 /error/error.php?error=506
914
ErrorDocument 506 /error/error.php?error=506
915
EOF
915
EOF
916
	[ -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
916
	[ -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
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /usr/share/httpd/error/include/top.html
917
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /usr/share/httpd/error/include/top.html
918
	[ -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
918
	[ -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
	cat <<EOF > /usr/share/httpd/error/include/bottom.html
919
	cat <<EOF > /usr/share/httpd/error/include/bottom.html
920
</body>
920
</body>
921
</html>
921
</html>
922
EOF
922
EOF
923
# ACC partitioning
923
# ACC partitioning
924
	rm -f /etc/httpd/conf/vhosts.d/alcasar*
924
	rm -f /etc/httpd/conf/vhosts.d/alcasar*
925
	cat <<EOF > /etc/httpd/conf/vhosts.d/alcasar.conf
925
	cat <<EOF > /etc/httpd/conf/vhosts.d/alcasar.conf
926
<Directory $DIR_WEB>
926
<Directory $DIR_WEB>
927
        AllowOverride None
927
        AllowOverride None
928
        Order deny,allow
928
        Order deny,allow
929
        Deny from all
929
        Deny from all
930
        Allow from 127.0.0.1
930
        Allow from 127.0.0.1
931
        Allow from $PRIVATE_NETWORK_MASK
931
        Allow from $PRIVATE_NETWORK_MASK
932
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
932
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
933
</Directory>
933
</Directory>
934
<Directory $DIR_WEB/certs>
934
<Directory $DIR_WEB/certs>
935
        AddType application/x-x509-ca-cert crt
935
        AddType application/x-x509-ca-cert crt
936
</Directory>
936
</Directory>
937
<Directory $DIR_ACC>
937
<Directory $DIR_ACC>
938
        SSLRequireSSL
938
        SSLRequireSSL
939
        AllowOverride None
939
        AllowOverride None
940
        Order deny,allow
940
        Order deny,allow
941
        Deny from all
941
        Deny from all
942
        Allow from 127.0.0.1
942
        Allow from 127.0.0.1
943
        Allow from $PRIVATE_NETWORK_MASK
943
        Allow from $PRIVATE_NETWORK_MASK
944
        require valid-user
944
        require valid-user
945
        AuthType digest
945
        AuthType digest
946
        AuthName "ALCASAR Control Center (ACC)"
946
        AuthName "ALCASAR Control Center (ACC)"
947
        AuthDigestDomain $HOSTNAME.$DOMAIN
947
        AuthDigestDomain $HOSTNAME.$DOMAIN
948
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
948
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
949
        AuthUserFile $DIR_DEST_ETC/digest/key_all
949
        AuthUserFile $DIR_DEST_ETC/digest/key_all
950
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
950
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
951
</Directory>
951
</Directory>
952
<Directory $DIR_ACC/admin>
952
<Directory $DIR_ACC/admin>
953
        SSLRequireSSL
953
        SSLRequireSSL
954
        AllowOverride None
954
        AllowOverride None
955
        Order deny,allow
955
        Order deny,allow
956
        Deny from all
956
        Deny from all
957
        Allow from 127.0.0.1
957
        Allow from 127.0.0.1
958
        Allow from $PRIVATE_NETWORK_MASK
958
        Allow from $PRIVATE_NETWORK_MASK
959
        require valid-user
959
        require valid-user
960
        AuthType digest
960
        AuthType digest
961
        AuthName "ALCASAR Control Center (ACC)"
961
        AuthName "ALCASAR Control Center (ACC)"
962
        AuthDigestDomain $HOSTNAME.$DOMAIN
962
        AuthDigestDomain $HOSTNAME.$DOMAIN
963
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
963
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
964
        AuthUserFile $DIR_DEST_ETC/digest/key_admin
964
        AuthUserFile $DIR_DEST_ETC/digest/key_admin
965
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
965
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
966
</Directory>
966
</Directory>
967
<Directory $DIR_ACC/manager>
967
<Directory $DIR_ACC/manager>
968
        SSLRequireSSL
968
        SSLRequireSSL
969
        AllowOverride None
969
        AllowOverride None
970
        Order deny,allow
970
        Order deny,allow
971
        Deny from all
971
        Deny from all
972
        Allow from 127.0.0.1
972
        Allow from 127.0.0.1
973
        Allow from $PRIVATE_NETWORK_MASK
973
        Allow from $PRIVATE_NETWORK_MASK
974
        require valid-user
974
        require valid-user
975
        AuthType digest
975
        AuthType digest
976
        AuthName "ALCASAR Control Center (ACC)"
976
        AuthName "ALCASAR Control Center (ACC)"
977
        AuthDigestDomain $HOSTNAME.$DOMAIN
977
        AuthDigestDomain $HOSTNAME.$DOMAIN
978
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
978
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
979
        AuthUserFile $DIR_DEST_ETC/digest/key_manager
979
        AuthUserFile $DIR_DEST_ETC/digest/key_manager
980
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
980
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
981
</Directory>
981
</Directory>
982
<Directory $DIR_ACC/manager/nfsen>
982
<Directory $DIR_ACC/manager/nfsen>
983
        AllowOverride None
983
        AllowOverride None
984
        <IfModule mod_rewrite.c>
984
        <IfModule mod_rewrite.c>
985
                RewriteEngine On
985
                RewriteEngine On
986
                RewriteCond %{REQUEST_FILENAME} !-f
986
                RewriteCond %{REQUEST_FILENAME} !-f
987
                RewriteCond %{REQUEST_FILENAME} !-d
987
                RewriteCond %{REQUEST_FILENAME} !-d
988
                RewriteRule ^api/(.*)$ backend/index.php?request=\$1 [QSA,NC,L]
988
                RewriteRule ^api/(.*)$ backend/index.php?request=\$1 [QSA,NC,L]
989
                RewriteRule ^$ frontend [L]
989
                RewriteRule ^$ frontend [L]
990
        </IfModule>
990
        </IfModule>
991
</Directory>
991
</Directory>
992
<Directory $DIR_ACC/backup>
992
<Directory $DIR_ACC/backup>
993
        SSLRequireSSL
993
        SSLRequireSSL
994
        AllowOverride None
994
        AllowOverride None
995
        Order deny,allow
995
        Order deny,allow
996
        Deny from all
996
        Deny from all
997
        Allow from 127.0.0.1
997
        Allow from 127.0.0.1
998
        Allow from $PRIVATE_NETWORK_MASK
998
        Allow from $PRIVATE_NETWORK_MASK
999
        require valid-user
999
        require valid-user
1000
        AuthType digest
1000
        AuthType digest
1001
        AuthName "ALCASAR Control Center (ACC)"
1001
        AuthName "ALCASAR Control Center (ACC)"
1002
        AuthDigestDomain $HOSTNAME.$DOMAIN
1002
        AuthDigestDomain $HOSTNAME.$DOMAIN
1003
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
1003
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
1004
        AuthUserFile $DIR_DEST_ETC/digest/key_backup
1004
        AuthUserFile $DIR_DEST_ETC/digest/key_backup
1005
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1005
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1006
</Directory>
1006
</Directory>
1007
Alias /save/ "$DIR_SAVE/"
1007
Alias /save/ "$DIR_SAVE/"
1008
<Directory $DIR_SAVE>
1008
<Directory $DIR_SAVE>
1009
        SSLRequireSSL
1009
        SSLRequireSSL
1010
        Options Indexes
1010
        Options Indexes
1011
        Order deny,allow
1011
        Order deny,allow
1012
        Deny from all
1012
        Deny from all
1013
        Allow from 127.0.0.1
1013
        Allow from 127.0.0.1
1014
        Allow from $PRIVATE_NETWORK_MASK
1014
        Allow from $PRIVATE_NETWORK_MASK
1015
        require valid-user
1015
        require valid-user
1016
        AuthType digest
1016
        AuthType digest
1017
        AuthName "ALCASAR Control Center (ACC)"
1017
        AuthName "ALCASAR Control Center (ACC)"
1018
        AuthDigestDomain $HOSTNAME.$DOMAIN
1018
        AuthDigestDomain $HOSTNAME.$DOMAIN
1019
        AuthUserFile $DIR_DEST_ETC/digest/key_backup
1019
        AuthUserFile $DIR_DEST_ETC/digest/key_backup
1020
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1020
        ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
1021
</Directory>
1021
</Directory>
1022
EOF
1022
EOF
1023
# Creation of the first account (in 'admin' profile)
1023
# Creation of the first account (in 'admin' profile)
1024
	if [ "$mode" = "install" ]
1024
	if [ "$mode" = "install" ]
1025
	then
1025
	then
1026
		header_install
1026
		header_install
1027
# Creation of keys file for the admin account ("admin")
1027
# Creation of keys file for the admin account ("admin")
1028
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
1028
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
1029
		mkdir -p $DIR_DEST_ETC/digest
1029
		mkdir -p $DIR_DEST_ETC/digest
1030
		chmod 755 $DIR_DEST_ETC/digest
1030
		chmod 755 $DIR_DEST_ETC/digest
1031
		if [ $Lang == "fr" ]
1031
		if [ $Lang == "fr" ]
1032
			then echo "Création du premier compte administrateur : "
1032
			then echo "Création du premier compte administrateur : "
1033
			else echo "Creation of the first admin account : "
1033
			else echo "Creation of the first admin account : "
1034
		fi
1034
		fi
1035
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
1035
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
1036
		do
1036
		do
1037
			$DIR_DEST_BIN/alcasar-profil.sh --add admin
1037
			$DIR_DEST_BIN/alcasar-profil.sh --add admin
1038
		done
1038
		done
1039
	fi
1039
	fi
1040
# Link CAcerts in ACC
1040
# Link CAcerts in ACC
1041
	[ -d /var/www/html/certs ] || mkdir /var/www/html/certs
1041
	[ -d /var/www/html/certs ] || mkdir /var/www/html/certs
1042
	ln -s /etc/pki/CA/alcasar-ca.crt /var/www/html/certs/certificat_alcasar_ca.crt
1042
	ln -s /etc/pki/CA/alcasar-ca.crt /var/www/html/certs/certificat_alcasar_ca.crt
1043
# Run Apache after coova (in order waiting tun0 to be up)
1043
# Run Apache after coova (in order waiting tun0 to be up)
1044
	cp /lib/systemd/system/httpd.service /etc/systemd/system/httpd.service
1044
	cp /lib/systemd/system/httpd.service /etc/systemd/system/httpd.service
1045
	$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /etc/systemd/system/httpd.service
1045
	$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /etc/systemd/system/httpd.service
1046
	# Log file for ACC access imputability
1046
	# Log file for ACC access imputability
1047
	[ -e $DIR_SAVE/security/acc_access.log ] || touch $DIR_SAVE/security/acc_access.log
1047
	[ -e $DIR_SAVE/security/acc_access.log ] || touch $DIR_SAVE/security/acc_access.log
1048
	chown root:apache $DIR_SAVE/security/acc_access.log
1048
	chown root:apache $DIR_SAVE/security/acc_access.log
1049
	chmod 664 $DIR_SAVE/security/acc_access.log
1049
	chmod 664 $DIR_SAVE/security/acc_access.log
1050
} # End of ACC()
1050
} # End of ACC()
1051
 
1051
 
1052
#############################################################
1052
#############################################################
1053
##                     "time_server"                       ##
1053
##                     "time_server"                       ##
1054
## - Configuring NTP server                                ##
1054
## - Configuring NTP server                                ##
1055
#############################################################
1055
#############################################################
1056
time_server()
1056
time_server()
1057
{
1057
{
1058
[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
1058
[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
1059
$SED "s?^pool.*?pool fr.pool.ntp.org iburst?g" /etc/ntp.conf
1059
$SED "s?^pool.*?pool fr.pool.ntp.org iburst?g" /etc/ntp.conf
1060
echo "interface ignore wildcard" >> /etc/ntp.conf
1060
echo "interface ignore wildcard" >> /etc/ntp.conf
1061
echo "interface listen lo" >> /etc/ntp.conf
1061
echo "interface listen lo" >> /etc/ntp.conf
1062
echo "interface listen tun0" >> /etc/ntp.conf
1062
echo "interface listen tun0" >> /etc/ntp.conf
1063
# Synchronize now
1063
# Synchronize now
1064
	ntpdate fr.pool.ntp.org &
1064
	ntpdate fr.pool.ntp.org &
1065
sleep 2 # wait for time server responce
1065
sleep 2 # wait for time server responce
1066
} # End of time_server()
1066
} # End of time_server()
1067
 
1067
 
1068
#####################################################################
1068
#####################################################################
1069
##                           "init_db"                             ##
1069
##                           "init_db"                             ##
1070
## - MariaDb initialization                                        ##
1070
## - MariaDb initialization                                        ##
1071
## - Set admin (root) password                                     ##
1071
## - Set admin (root) password                                     ##
1072
## - Remove unused users & databases                               ##
1072
## - Remove unused users & databases                               ##
1073
## - Radius database creation                                      ##
1073
## - Radius database creation                                      ##
1074
## - Copy of accounting tables (mtotacct, totacct) & userinfo      ##
1074
## - Copy of accounting tables (mtotacct, totacct) & userinfo      ##
1075
#####################################################################
1075
#####################################################################
1076
init_db()
1076
init_db()
1077
{
1077
{
1078
	if [ "`systemctl is-active mariadb`" == "active" ]
1078
	if [ "`systemctl is-active mariadb`" == "active" ]
1079
	then
1079
	then
1080
		systemctl stop mariadb
1080
		systemctl stop mariadb
1081
	fi
1081
	fi
1082
	if [ "`systemctl is-active mysqld`" == "active" ]
1082
	if [ "`systemctl is-active mysqld`" == "active" ]
1083
	then
1083
	then
1084
		systemctl stop mysqld
1084
		systemctl stop mysqld
1085
	fi
1085
	fi
1086
	rm -rf /var/lib/mysql # to be sure that there is no former installation
1086
	rm -rf /var/lib/mysql # to be sure that there is no former installation
1087
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
1087
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
1088
	$SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
1088
	$SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
1089
	[ -e /etc/my.cnf.d/server.cnf.default ] || cp /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.default
1089
	[ -e /etc/my.cnf.d/server.cnf.default ] || cp /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.default
1090
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf.d/server.cnf
1090
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf.d/server.cnf
1091
	$SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf.d/server.cnf
1091
	$SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf.d/server.cnf
1092
	$SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf.d/server.cnf  # accentuated user names are allowed
1092
	$SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf.d/server.cnf  # accentuated user names are allowed
1093
	SRV_ID=`cat /dev/urandom | tr -dc "0-9" | head -c 9` # SRV_ID must be < 2^32 -1
1093
	SRV_ID=`cat /dev/urandom | tr -dc "0-9" | head -c 9` # SRV_ID must be < 2^32 -1
1094
	$SED "s?^server-id.*?server-id=$SRV_ID?g" /etc/my.cnf.d/server.cnf # Be sure not to have same server_id (need for replication architecture)
1094
	$SED "s?^server-id.*?server-id=$SRV_ID?g" /etc/my.cnf.d/server.cnf # Be sure not to have same server_id (need for replication architecture)
1095
	# Create our own systemd unit
1095
	# Create our own systemd unit
1096
	cp /lib/systemd/system/mysqld.service /etc/systemd/system/mariadb.service
1096
	cp /lib/systemd/system/mysqld.service /etc/systemd/system/mariadb.service
1097
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/mariadbd?g" /etc/systemd/system/mariadb.service
1097
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/mariadbd?g" /etc/systemd/system/mariadb.service
1098
	/usr/bin/systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
1098
	/usr/bin/systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
1099
	[ ! -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/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)
1100
	[ ! -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
	[ ! -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)
1101
	/usr/bin/systemctl start mariadb
1101
	/usr/bin/systemctl start mariadb
1102
	nb_round=1
1102
	nb_round=1
1103
	while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
1103
	while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
1104
	do
1104
	do
1105
		nb_round=`expr $nb_round + 1`
1105
		nb_round=`expr $nb_round + 1`
1106
		sleep 2
1106
		sleep 2
1107
	done
1107
	done
1108
	if [ ! -S /var/lib/mysql/mysql.sock ]
1108
	if [ ! -S /var/lib/mysql/mysql.sock ]
1109
	then
1109
	then
1110
		if [ $Lang == "fr" ]
1110
		if [ $Lang == "fr" ]
1111
			then echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
1111
			then echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
1112
			else echo "Problem: the 'MariaDB' database didn't start!"
1112
			else echo "Problem: the 'MariaDB' database didn't start!"
1113
		fi
1113
		fi
1114
		exit
1114
		exit
1115
	fi
1115
	fi
1116
# Secure the server
1116
# Secure the server
1117
	/usr/bin/mariadb --execute "GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '$dbpwd';"
1117
	/usr/bin/mariadb --execute "GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '$dbpwd';"
1118
	SQL="/usr/bin/mariadb -uroot -p$dbpwd --execute"
1118
	SQL="/usr/bin/mariadb -uroot -p$dbpwd --execute"
1119
	$SQL "DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
1119
	$SQL "DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
1120
	$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
	$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;"
1121
# Create 'radius' database
1121
# Create 'radius' database
1122
	$SQL "CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
1122
	$SQL "CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
1123
# Add an empty radius database structure
1123
# Add an empty radius database structure
1124
	/usr/bin/mariadb -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
1124
	/usr/bin/mariadb -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
1125
	# modify the start script in order to close accounting connexion when the system is comming down or up
1125
	# modify the start script in order to close accounting connexion when the system is comming down or up
1126
	$SED "/^ExecStart=/a ExecStop=$DIR_DEST_BIN/alcasar-mariadb.sh -acct_stop" /etc/systemd/system/mariadb.service
1126
	$SED "/^ExecStart=/a ExecStop=$DIR_DEST_BIN/alcasar-mariadb.sh -acct_stop" /etc/systemd/system/mariadb.service
1127
	$SED "/^ExecStop=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mariadb.sh -acct_stop" /etc/systemd/system/mariadb.service
1127
	$SED "/^ExecStop=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mariadb.sh -acct_stop" /etc/systemd/system/mariadb.service
1128
	/usr/bin/systemctl unset-environment MYSQLD_OPTS
1128
	/usr/bin/systemctl unset-environment MYSQLD_OPTS
1129
	/usr/bin/systemctl daemon-reload
1129
	/usr/bin/systemctl daemon-reload
1130
	/usr/bin/systemctl restart mariadb
1130
	/usr/bin/systemctl restart mariadb
1131
} # End of init_db()
1131
} # End of init_db()
1132
 
1132
 
1133
###################################################################
1133
###################################################################
1134
##                           "freeradius"                        ##
1134
##                           "freeradius"                        ##
1135
## - Set the configuration files                                 ##
1135
## - Set the configuration files                                 ##
1136
## - Set the shared secret between coova-chilli and freeradius   ##
1136
## - Set the shared secret between coova-chilli and freeradius   ##
1137
## - Adapt the MariaDB conf file and counters                      ##
1137
## - Adapt the MariaDB conf file and counters                      ##
1138
###################################################################
1138
###################################################################
1139
freeradius()
1139
freeradius()
1140
{
1140
{
1141
	cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
1141
	cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
1142
	chown -R radius:radius /etc/raddb
1142
	chown -R radius:radius /etc/raddb
1143
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
1143
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
1144
# Set radius global parameters (radius.conf)
1144
# Set radius global parameters (radius.conf)
1145
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
1145
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
1146
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
1146
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
1147
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
1147
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
1148
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf # remove the proxy function
1148
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf # remove the proxy function
1149
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf # remove the proxy function
1149
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf # remove the proxy function
1150
# Add ALCASAR & Coovachilli dictionaries
1150
# Add ALCASAR & Coovachilli dictionaries
1151
	[ -e /etc/raddb/dictionary.default ] || cp /etc/raddb/dictionary /etc/raddb/dictionary.default
1151
	[ -e /etc/raddb/dictionary.default ] || cp /etc/raddb/dictionary /etc/raddb/dictionary.default
1152
	cp $DIR_CONF/radius/dictionary.alcasar /etc/raddb/
1152
	cp $DIR_CONF/radius/dictionary.alcasar /etc/raddb/
1153
	echo '$INCLUDE dictionary.alcasar' > /etc/raddb/dictionary
1153
	echo '$INCLUDE dictionary.alcasar' > /etc/raddb/dictionary
1154
	cp /usr/share/doc/coova-chilli/dictionary.coovachilli /etc/raddb/
1154
	cp /usr/share/doc/coova-chilli/dictionary.coovachilli /etc/raddb/
1155
	echo '$INCLUDE dictionary.coovachilli' >> /etc/raddb/dictionary
1155
	echo '$INCLUDE dictionary.coovachilli' >> /etc/raddb/dictionary
1156
# Set "client.conf" to describe radius clients (coova on 127.0.0.1)
1156
# Set "client.conf" to describe radius clients (coova on 127.0.0.1)
1157
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1157
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1158
	cat << EOF > /etc/raddb/clients.conf
1158
	cat << EOF > /etc/raddb/clients.conf
1159
client localhost {
1159
client localhost {
1160
	ipaddr = 127.0.0.1
1160
	ipaddr = 127.0.0.1
1161
	secret = $secretradius
1161
	secret = $secretradius
1162
	shortname = chilli
1162
	shortname = chilli
1163
	nas_type = other
1163
	nas_type = other
1164
}
1164
}
1165
EOF
1165
EOF
1166
# Set Virtual server
1166
# Set Virtual server
1167
    # Remvoveing all except "alcasar virtual site")
1167
    # Remvoveing all except "alcasar virtual site")
1168
	# 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
	# INFO : To enable 802.1X, add the "innser-tunnel" virtual server (link in sites-enabled)  Change the firewall rules to allow "radius" extern connections.
1169
	cp $DIR_CONF/radius/alcasar /etc/raddb/sites-available/alcasar
1169
	cp $DIR_CONF/radius/alcasar /etc/raddb/sites-available/alcasar
1170
	cp $DIR_CONF/radius/alcasar-with-ldap /etc/raddb/sites-available/alcasar-with-ldap
1170
	cp $DIR_CONF/radius/alcasar-with-ldap /etc/raddb/sites-available/alcasar-with-ldap
1171
	chown radius:apache /etc/raddb/sites-available/alcasar*
1171
	chown radius:apache /etc/raddb/sites-available/alcasar*
1172
	chmod 660 /etc/raddb/sites-available/alcasar*
1172
	chmod 660 /etc/raddb/sites-available/alcasar*
1173
	rm -f /etc/raddb/sites-enabled/*
1173
	rm -f /etc/raddb/sites-enabled/*
1174
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1174
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1175
# Set modules
1175
# Set modules
1176
	# Add custom LDAP "available module"
1176
	# Add custom LDAP "available module"
1177
	# 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
	# 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.
1178
	cp -f $DIR_CONF/radius/ldap-alcasar /etc/raddb/mods-available/
1178
	cp -f $DIR_CONF/radius/ldap-alcasar /etc/raddb/mods-available/
1179
	chown -R radius:radius /etc/raddb/mods-available/ldap-alcasar
1179
	chown -R radius:radius /etc/raddb/mods-available/ldap-alcasar
1180
	# Set only usefull modules for ALCASAR (! the module 'ldap-alcasar' is enabled only via ACC)
1180
	# Set only usefull modules for ALCASAR (! the module 'ldap-alcasar' is enabled only via ACC)
1181
	rm -rf  /etc/raddb/mods-enabled/*
1181
	rm -rf  /etc/raddb/mods-enabled/*
1182
	for mods in sql sqlcounter attr_filter expiration logintime pap expr always
1182
	for mods in sql sqlcounter attr_filter expiration logintime pap expr always
1183
	do
1183
	do
1184
		ln -s /etc/raddb/mods-available/$mods /etc/raddb/mods-enabled/$mods
1184
		ln -s /etc/raddb/mods-available/$mods /etc/raddb/mods-enabled/$mods
1185
	done
1185
	done
1186
# Configure SQL module
1186
# Configure SQL module
1187
	[ -e /etc/raddb/mods-available/sql.default ] || cp /etc/raddb/mods-available/sql /etc/raddb/mods-available/sql.default
1187
	[ -e /etc/raddb/mods-available/sql.default ] || cp /etc/raddb/mods-available/sql /etc/raddb/mods-available/sql.default
1188
	$SED "s?^[\t ]*driver =.*?driver = \"rlm_sql_mysql\"?g" /etc/raddb/mods-available/sql
1188
	$SED "s?^[\t ]*driver =.*?driver = \"rlm_sql_mysql\"?g" /etc/raddb/mods-available/sql
1189
	$SED "s?^[\t ]*dialect =.*?dialect = \"mysql\"?g" /etc/raddb/mods-available/sql
1189
	$SED "s?^[\t ]*dialect =.*?dialect = \"mysql\"?g" /etc/raddb/mods-available/sql
1190
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/mods-available/sql
1190
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/mods-available/sql
1191
	$SED "s?^#[\t ]*server =.*?server = \"localhost\"?g" /etc/raddb/mods-available/sql
1191
	$SED "s?^#[\t ]*server =.*?server = \"localhost\"?g" /etc/raddb/mods-available/sql
1192
	$SED "s?^#[\t ]*port =.*?port = \"3306\"?g" /etc/raddb/mods-available/sql
1192
	$SED "s?^#[\t ]*port =.*?port = \"3306\"?g" /etc/raddb/mods-available/sql
1193
	$SED "s?^#[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/mods-available/sql
1193
	$SED "s?^#[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/mods-available/sql
1194
	$SED "s?^#[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/mods-available/sql
1194
	$SED "s?^#[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/mods-available/sql
1195
	# no TLS encryption on 127.0.0.1
1195
	# no TLS encryption on 127.0.0.1
1196
	$SED "s?^[\t ]*ca_file =.*?#&?g" /etc/raddb/mods-available/sql
1196
	$SED "s?^[\t ]*ca_file =.*?#&?g" /etc/raddb/mods-available/sql
1197
	$SED "s?^[\t ]*ca_path =.*?#&?g" /etc/raddb/mods-available/sql
1197
	$SED "s?^[\t ]*ca_path =.*?#&?g" /etc/raddb/mods-available/sql
1198
	$SED "s?^[\t ]*certificate_file =.*?#&?g" /etc/raddb/mods-available/sql
1198
	$SED "s?^[\t ]*certificate_file =.*?#&?g" /etc/raddb/mods-available/sql
1199
	$SED "s?^[\t ]*private_key_file =.*?#&?g" /etc/raddb/mods-available/sql
1199
	$SED "s?^[\t ]*private_key_file =.*?#&?g" /etc/raddb/mods-available/sql
1200
	$SED "s?^[\t ]*cipher =.*?#&?g" /etc/raddb/mods-available/sql
1200
	$SED "s?^[\t ]*cipher =.*?#&?g" /etc/raddb/mods-available/sql
1201
	$SED "s?^[\t ]*tls_required =.*?tls_required = no?g" /etc/raddb/mods-available/sql
1201
	$SED "s?^[\t ]*tls_required =.*?tls_required = no?g" /etc/raddb/mods-available/sql
1202
# queries.conf modifications : case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.
1202
# queries.conf modifications : case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.
1203
	[ -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
	[ -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
1204
	cp -f $DIR_CONF/radius/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf
1204
	cp -f $DIR_CONF/radius/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf
1205
	chown -R radius:radius /etc/raddb/mods-config/sql/main/mysql/queries.conf
1205
	chown -R radius:radius /etc/raddb/mods-config/sql/main/mysql/queries.conf
1206
# sqlcounter modifications
1206
# sqlcounter modifications
1207
	[ -e /etc/raddb/mods-available/sqlcounter.default ] || cp /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-available/sqlcounter.default
1207
	[ -e /etc/raddb/mods-available/sqlcounter.default ] || cp /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-available/sqlcounter.default
1208
	cp -f $DIR_CONF/radius/sqlcounter /etc/raddb/mods-available/sqlcounter
1208
	cp -f $DIR_CONF/radius/sqlcounter /etc/raddb/mods-available/sqlcounter
1209
	chown -R radius:radius /etc/raddb/mods-available/sqlcounter
1209
	chown -R radius:radius /etc/raddb/mods-available/sqlcounter
1210
# make certain that mariaDB is up before freeradius start
1210
# make certain that mariaDB is up before freeradius start
1211
	cp /lib/systemd/system/radiusd.service /etc/systemd/system/radiusd.service
1211
	cp /lib/systemd/system/radiusd.service /etc/systemd/system/radiusd.service
1212
	$SED "s?^After=.*?After=syslog.target network.target mariadb.service?g" /etc/systemd/system/radiusd.service
1212
	$SED "s?^After=.*?After=syslog.target network.target mariadb.service?g" /etc/systemd/system/radiusd.service
1213
	/usr/bin/systemctl daemon-reload
1213
	/usr/bin/systemctl daemon-reload
1214
# Allow apache to change some conf files (ie : ldap on/off)
1214
# Allow apache to change some conf files (ie : ldap on/off)
1215
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1215
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1216
	chmod 750 /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1216
	chmod 750 /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1217
} # End of freeradius()
1217
} # End of freeradius()
1218
 
1218
 
1219
#############################################################################
1219
#############################################################################
1220
##                                "chilli"                                 ##
1220
##                                "chilli"                                 ##
1221
## - Creation of the conf file and init file (systemd) for coova-chilli    ##
1221
## - Creation of the conf file and init file (systemd) for coova-chilli    ##
1222
## - Adapt the authentication web page (intercept.php)                     ##
1222
## - Adapt the authentication web page (intercept.php)                     ##
1223
#############################################################################
1223
#############################################################################
1224
chilli()
1224
chilli()
1225
{
1225
{
1226
# chilli unit for systemd
1226
# chilli unit for systemd
1227
	cat << EOF > /etc/systemd/system/chilli.service
1227
	cat << EOF > /etc/systemd/system/chilli.service
1228
#  This file is part of systemd.
1228
#  This file is part of systemd.
1229
#
1229
#
1230
#  systemd is free software; you can redistribute it and/or modify it
1230
#  systemd is free software; you can redistribute it and/or modify it
1231
#  under the terms of the GNU General Public License as published by
1231
#  under the terms of the GNU General Public License as published by
1232
#  the Free Software Foundation; either version 2 of the License, or
1232
#  the Free Software Foundation; either version 2 of the License, or
1233
#  (at your option) any later version.
1233
#  (at your option) any later version.
1234
 
1234
 
1235
# This unit launches coova-chilli a captive portal
1235
# This unit launches coova-chilli a captive portal
1236
[Unit]
1236
[Unit]
1237
Description=chilli is a captive portal daemon
1237
Description=chilli is a captive portal daemon
1238
After=network.target
1238
After=network.target
1239
 
1239
 
1240
[Service]
1240
[Service]
1241
Type=forking
1241
Type=forking
1242
ExecStart=/usr/libexec/chilli start
1242
ExecStart=/usr/libexec/chilli start
1243
ExecStop=/usr/libexec/chilli stop
1243
ExecStop=/usr/libexec/chilli stop
1244
ExecReload=/usr/libexec/chilli reload
1244
ExecReload=/usr/libexec/chilli reload
1245
PIDFile=/run/chilli.pid
1245
PIDFile=/run/chilli.pid
1246
 
1246
 
1247
[Install]
1247
[Install]
1248
WantedBy=multi-user.target
1248
WantedBy=multi-user.target
1249
EOF
1249
EOF
1250
# init file creation
1250
# init file creation
1251
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1251
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1252
	cat <<EOF > /etc/init.d/chilli
1252
	cat <<EOF > /etc/init.d/chilli
1253
#!/bin/sh
1253
#!/bin/sh
1254
#
1254
#
1255
# chilli CoovaChilli init
1255
# chilli CoovaChilli init
1256
#
1256
#
1257
# chkconfig: 2345 65 35
1257
# chkconfig: 2345 65 35
1258
# description: CoovaChilli
1258
# description: CoovaChilli
1259
### BEGIN INIT INFO
1259
### BEGIN INIT INFO
1260
# Provides:       chilli
1260
# Provides:       chilli
1261
# Required-Start: network
1261
# Required-Start: network
1262
# Should-Start:
1262
# Should-Start:
1263
# Required-Stop:  network
1263
# Required-Stop:  network
1264
# Should-Stop:
1264
# Should-Stop:
1265
# Default-Start:  2 3 5
1265
# Default-Start:  2 3 5
1266
# Default-Stop:
1266
# Default-Stop:
1267
# Description:    CoovaChilli access controller
1267
# Description:    CoovaChilli access controller
1268
### END INIT INFO
1268
### END INIT INFO
1269
 
1269
 
1270
[ -f /usr/sbin/chilli ] || exit 0
1270
[ -f /usr/sbin/chilli ] || exit 0
1271
. /etc/init.d/functions
1271
. /etc/init.d/functions
1272
CONFIG=/etc/chilli.conf
1272
CONFIG=/etc/chilli.conf
1273
pidfile=/run/chilli.pid
1273
pidfile=/run/chilli.pid
1274
[ -f \$CONFIG ] || {
1274
[ -f \$CONFIG ] || {
1275
	echo "\$CONFIG Not found"
1275
	echo "\$CONFIG Not found"
1276
	exit 0
1276
	exit 0
1277
}
1277
}
1278
current_users_file="/tmp/current_users.txt"	# file containing active users
1278
current_users_file="/tmp/current_users.txt"	# file containing active users
1279
RETVAL=0
1279
RETVAL=0
1280
prog="chilli"
1280
prog="chilli"
1281
case \$1 in
1281
case \$1 in
1282
	start)
1282
	start)
1283
		if [ -f \$pidfile ] ; then
1283
		if [ -f \$pidfile ] ; then
1284
			gprintf "chilli is already running"
1284
			gprintf "chilli is already running"
1285
		else
1285
		else
1286
			gprintf "Starting \$prog: "
1286
			gprintf "Starting \$prog: "
1287
			echo '' > \$current_users_file && chown root:apache \$current_users_file && chmod 660 \$current_users_file
1287
			echo '' > \$current_users_file && chown root:apache \$current_users_file && chmod 660 \$current_users_file
1288
			rm -f /run/chilli* # cleaning
1288
			rm -f /run/chilli* # cleaning
1289
			/usr/sbin/modprobe tun >/dev/null 2>&1
1289
			/usr/sbin/modprobe tun >/dev/null 2>&1
1290
			echo 1 > /proc/sys/net/ipv4/ip_forward
1290
			echo 1 > /proc/sys/net/ipv4/ip_forward
1291
			[ -e /dev/net/tun ] || {
1291
			[ -e /dev/net/tun ] || {
1292
				(cd /dev;
1292
				(cd /dev;
1293
				mkdir net;
1293
				mkdir net;
1294
				cd net;
1294
				cd net;
1295
				mknod tun c 10 200)
1295
				mknod tun c 10 200)
1296
			}
1296
			}
1297
			ifconfig $INTIF 0.0.0.0
1297
			ifconfig $INTIF 0.0.0.0
1298
			/usr/sbin/ethtool -K $INTIF gro off
1298
			/usr/sbin/ethtool -K $INTIF gro off
1299
			daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1299
			daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1300
			RETVAL=\$?
1300
			RETVAL=\$?
1301
		fi
1301
		fi
1302
		;;
1302
		;;
1303
 
1303
 
1304
	reload)
1304
	reload)
1305
		killall -HUP chilli
1305
		killall -HUP chilli
1306
		;;
1306
		;;
1307
 
1307
 
1308
	restart)
1308
	restart)
1309
		\$0 stop
1309
		\$0 stop
1310
		sleep 2
1310
		sleep 2
1311
		\$0 start
1311
		\$0 start
1312
		;;
1312
		;;
1313
 
1313
 
1314
	status)
1314
	status)
1315
		status chilli
1315
		status chilli
1316
		RETVAL=0
1316
		RETVAL=0
1317
		;;
1317
		;;
1318
 
1318
 
1319
	stop)
1319
	stop)
1320
		if [ -f \$pidfile ] ; then
1320
		if [ -f \$pidfile ] ; then
1321
			gprintf "Shutting down \$prog: "
1321
			gprintf "Shutting down \$prog: "
1322
			killproc /usr/sbin/chilli
1322
			killproc /usr/sbin/chilli
1323
			RETVAL=\$?
1323
			RETVAL=\$?
1324
			[ \$RETVAL = 0 ] && rm -f \$pidfile
1324
			[ \$RETVAL = 0 ] && rm -f \$pidfile
1325
			[ -e \$current_users_file ] && rm -f \$current_users_file
1325
			[ -e \$current_users_file ] && rm -f \$current_users_file
1326
		else
1326
		else
1327
			gprintf "chilli is not running"
1327
			gprintf "chilli is not running"
1328
		fi
1328
		fi
1329
		;;
1329
		;;
1330
 
1330
 
1331
	*)
1331
	*)
1332
		echo "Usage: \$0 {start|stop|restart|reload|status}"
1332
		echo "Usage: \$0 {start|stop|restart|reload|status}"
1333
		exit 1
1333
		exit 1
1334
esac
1334
esac
1335
echo
1335
echo
1336
EOF
1336
EOF
1337
	chmod a+x /etc/init.d/chilli
1337
	chmod a+x /etc/init.d/chilli
1338
	ln -s /etc/init.d/chilli /usr/libexec/chilli
1338
	ln -s /etc/init.d/chilli /usr/libexec/chilli
1339
# conf file creation
1339
# conf file creation
1340
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1340
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1341
	#NTP Option configuration for DHCP
1341
	#NTP Option configuration for DHCP
1342
	#DHCP Options : rfc2132
1342
	#DHCP Options : rfc2132
1343
		#dhcp option value will be convert in hexa.
1343
		#dhcp option value will be convert in hexa.
1344
		#NTP option (or 'option 42') is like :
1344
		#NTP option (or 'option 42') is like :
1345
		#
1345
		#
1346
		#    Code   Len         Address 1               Address 2
1346
		#    Code   Len         Address 1               Address 2
1347
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1347
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1348
		#   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1348
		#   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1349
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1349
		#   +-----+-----+-----+-----+-----+-----+-----+-----+--
1350
		#
1350
		#
1351
		#Code : 42 => 2a
1351
		#Code : 42 => 2a
1352
		#Len : 4 => 04
1352
		#Len : 4 => 04
1353
	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
	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)")
1354
	cat <<EOF > /etc/chilli.conf
1354
	cat <<EOF > /etc/chilli.conf
1355
# coova config for ALCASAR
1355
# coova config for ALCASAR
1356
cmdsocket	/run/chilli.sock
1356
cmdsocket	/run/chilli.sock
1357
unixipc		chilli.$INTIF.ipc
1357
unixipc		chilli.$INTIF.ipc
1358
pidfile		/run/chilli.pid
1358
pidfile		/run/chilli.pid
1359
net		$PRIVATE_NETWORK_MASK
1359
net		$PRIVATE_NETWORK_MASK
1360
dhcpif		$INTIF
1360
dhcpif		$INTIF
1361
ethers		$DIR_DEST_ETC/alcasar-ethers
1361
ethers		$DIR_DEST_ETC/alcasar-ethers
1362
#nodynip
1362
#nodynip
1363
#statip
1363
#statip
1364
dynip		$PRIVATE_NETWORK_MASK
1364
dynip		$PRIVATE_NETWORK_MASK
1365
domain		$DOMAIN
1365
domain		$DOMAIN
1366
dns1		$PRIVATE_IP
1366
dns1		$PRIVATE_IP
1367
dns2		$PRIVATE_IP
1367
dns2		$PRIVATE_IP
1368
uamlisten	$PRIVATE_IP
1368
uamlisten	$PRIVATE_IP
1369
uamport		3990
1369
uamport		3990
1370
uamuiport	3991
1370
uamuiport	3991
1371
macauth
1371
macauth
1372
macpasswd	password
1372
macpasswd	password
1373
strictmacauth
1373
strictmacauth
1374
locationname	$HOSTNAME.$DOMAIN
1374
locationname	$HOSTNAME.$DOMAIN
1375
radiusserver1	127.0.0.1
1375
radiusserver1	127.0.0.1
1376
radiusserver2	127.0.0.1
1376
radiusserver2	127.0.0.1
1377
radiussecret	$secretradius
1377
radiussecret	$secretradius
1378
radiusauthport	1812
1378
radiusauthport	1812
1379
radiusacctport	1813
1379
radiusacctport	1813
1380
uamserver	http://$HOSTNAME.$DOMAIN/intercept.php
1380
uamserver	http://$HOSTNAME.$DOMAIN/intercept.php
1381
redirurl
1381
redirurl
1382
radiusnasid	$HOSTNAME.$DOMAIN
1382
radiusnasid	$HOSTNAME.$DOMAIN
1383
uamsecret	$secretuam
1383
uamsecret	$secretuam
1384
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1384
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1385
coaport		3799
1385
coaport		3799
1386
conup		$DIR_DEST_BIN/alcasar-conup.sh
1386
conup		$DIR_DEST_BIN/alcasar-conup.sh
1387
condown		$DIR_DEST_BIN/alcasar-condown.sh
1387
condown		$DIR_DEST_BIN/alcasar-condown.sh
1388
macup		$DIR_DEST_BIN/alcasar-macup.sh
1388
macup		$DIR_DEST_BIN/alcasar-macup.sh
1389
include		$DIR_DEST_ETC/alcasar-uamallowed
1389
include		$DIR_DEST_ETC/alcasar-uamallowed
1390
include		$DIR_DEST_ETC/alcasar-uamdomain
1390
include		$DIR_DEST_ETC/alcasar-uamdomain
1391
dhcpopt		2a04$PRIVATE_IP_HEXA
1391
dhcpopt		2a04$PRIVATE_IP_HEXA
1392
#dhcpgateway		none
1392
#dhcpgateway		none
1393
#dhcprelayagent		none
1393
#dhcprelayagent		none
1394
#dhcpgatewayport	none
1394
#dhcpgatewayport	none
1395
sslkeyfile	/etc/pki/tls/private/alcasar.key
1395
sslkeyfile	/etc/pki/tls/private/alcasar.key
1396
sslcertfile	/etc/pki/tls/certs/alcasar.crt
1396
sslcertfile	/etc/pki/tls/certs/alcasar.crt
1397
sslcafile	/etc/pki/tls/certs/server-chain.pem
1397
sslcafile	/etc/pki/tls/certs/server-chain.pem
1398
#redirssl
1398
#redirssl
1399
#uamuissl
1399
#uamuissl
1400
EOF
1400
EOF
1401
# 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
# create files for "DHCP static ip" and "DHCP static ip info". Reserve the second IP address for INTIF (the first one is for tun0)
1402
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1402
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1403
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers-info
1403
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers-info
1404
# create files for trusted domains and urls
1404
# create files for trusted domains and urls
1405
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1405
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1406
	chown root:apache $DIR_DEST_ETC/alcasar-*
1406
	chown root:apache $DIR_DEST_ETC/alcasar-*
1407
	chmod 660 $DIR_DEST_ETC/alcasar-*
1407
	chmod 660 $DIR_DEST_ETC/alcasar-*
1408
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1408
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1409
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1409
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1410
# user 'chilli' creation (in order to run conup/off and up/down scripts
1410
# user 'chilli' creation (in order to run conup/off and up/down scripts
1411
	chilli_exist=`grep -c ^chilli: /etc/passwd`
1411
	chilli_exist=`grep -c ^chilli: /etc/passwd`
1412
	if [ "$chilli_exist" == "1" ]
1412
	if [ "$chilli_exist" == "1" ]
1413
	then
1413
	then
1414
		userdel -r chilli 2>/dev/null
1414
		userdel -r chilli 2>/dev/null
1415
	fi
1415
	fi
1416
	groupadd -f chilli
1416
	groupadd -f chilli
1417
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1417
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1418
}  # End of chilli()
1418
}  # End of chilli()
1419
 
1419
 
1420
################################################################
1420
################################################################
1421
##                        "e2guardian"                        ##
1421
##                        "e2guardian"                        ##
1422
## - Set the parameters of this HTTP proxy (as controler)     ##
1422
## - Set the parameters of this HTTP proxy (as controler)     ##
1423
################################################################
1423
################################################################
1424
e2guardian()
1424
e2guardian()
1425
{
1425
{
1426
# Adapt systemd unit
1426
# Adapt systemd unit
1427
	cp /lib/systemd/system/e2guardian.service /etc/systemd/system/e2guardian.service
1427
	cp /lib/systemd/system/e2guardian.service /etc/systemd/system/e2guardian.service
1428
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/e2guardian -c /etc/e2guardian/e2guardian.conf?g" /etc/systemd/system/e2guardian.service
1428
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/e2guardian -c /etc/e2guardian/e2guardian.conf?g" /etc/systemd/system/e2guardian.service
1429
	$SED "s?^After=.*?After=network-online.target chilli.service?g" /etc/systemd/system/e2guardian.service
1429
	$SED "s?^After=.*?After=network-online.target chilli.service?g" /etc/systemd/system/e2guardian.service
1430
	$SED "/^PIDFile=/d" /etc/systemd/system/e2guardian.service
1430
	$SED "/^PIDFile=/d" /etc/systemd/system/e2guardian.service
1431
 
1431
 
1432
# Adapt the main conf file
1432
# Adapt the main conf file
1433
	[ -e $DIR_E2G/e2guardian.conf.default ] || cp $DIR_E2G/e2guardian.conf $DIR_E2G/e2guardian.conf.default
1433
	[ -e $DIR_E2G/e2guardian.conf.default ] || cp $DIR_E2G/e2guardian.conf $DIR_E2G/e2guardian.conf.default
1434
# French deny HTML page
1434
# French deny HTML page
1435
	$SED "s?^language =.*?language = 'french'?g" $DIR_E2G/e2guardian.conf
1435
	$SED "s?^language =.*?language = 'french'?g" $DIR_E2G/e2guardian.conf
1436
# Listen & loop prevention on loopback
1436
# Listen & loop prevention on loopback
1437
	$SED "s?^#checkip = 127.0.0.1.*?checkip = 127.0.0.1?g" $DIR_E2G/e2guardian.conf
1437
	$SED "s?^#checkip = 127.0.0.1.*?checkip = 127.0.0.1?g" $DIR_E2G/e2guardian.conf
1438
# 2 filtergroups (8080 & 8081)
1438
# 2 filtergroups (8080 & 8081)
1439
	$SED "s?^#filtergroups =.*?filtergroups = 2?g" $DIR_E2G/e2guardian.conf
1439
	$SED "s?^#filtergroups =.*?filtergroups = 2?g" $DIR_E2G/e2guardian.conf
1440
# Listen on LAN only
1440
# Listen on LAN only
1441
	$SED "s?^#filterip =.*?filterip = $PRIVATE_IP?g" $DIR_E2G/e2guardian.conf
1441
	$SED "s?^#filterip =.*?filterip = $PRIVATE_IP?g" $DIR_E2G/e2guardian.conf
1442
# Listen on 8080 (group1 : BL users on HTTP)
1442
# Listen on 8080 (group1 : BL users on HTTP)
1443
	$SED "s?^#filterports = 8080:8081.*?filterports = 8080:8081?g" $DIR_E2G/e2guardian.conf
1443
	$SED "s?^#filterports = 8080:8081.*?filterports = 8080:8081?g" $DIR_E2G/e2guardian.conf
1444
# Listen on 8081 (group2 : previously AV users --> to be redefine)
1444
# Listen on 8081 (group2 : previously AV users --> to be redefine)
1445
#	$SED "/^filterip = $PRIVATE_IP/a filterip = $PRIVATE_IP" $DIR_E2G/e2guardian.conf
1445
#	$SED "/^filterip = $PRIVATE_IP/a filterip = $PRIVATE_IP" $DIR_E2G/e2guardian.conf
1446
	$SED "s?^#filterports = 8081.*?filterports = 8081?g" $DIR_E2G/e2guardian.conf
1446
	$SED "s?^#filterports = 8081.*?filterports = 8081?g" $DIR_E2G/e2guardian.conf
1447
# for now we don't listen transparently on 8443 (HTTPS) (only in future version)
1447
# for now we don't listen transparently on 8443 (HTTPS) (only in future version)
1448
	$SED "s?^transparenthttpsport =.*?#transparenthttpsport = 8443?g" $DIR_E2G/e2guardian.conf
1448
	$SED "s?^transparenthttpsport =.*?#transparenthttpsport = 8443?g" $DIR_E2G/e2guardian.conf
1449
# Don't log
1449
# Don't log
1450
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_E2G/e2guardian.conf
1450
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_E2G/e2guardian.conf
1451
# Disable HTML content control (weighted & banned)
1451
# Disable HTML content control (weighted & banned)
1452
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_E2G/e2guardian.conf
1452
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_E2G/e2guardian.conf
1453
# Enable authport plugin
1453
# Enable authport plugin
1454
	$SED "s?^#authplugin = '/etc/e2guardian/authplugins/port.conf'?authplugin = '/etc/e2guardian/authplugins/port.conf'?g" $DIR_E2G/e2guardian.conf
1454
	$SED "s?^#authplugin = '/etc/e2guardian/authplugins/port.conf'?authplugin = '/etc/e2guardian/authplugins/port.conf'?g" $DIR_E2G/e2guardian.conf
1455
	$SED "s?^#mapauthtoports =.*?mapauthtoports = off?g" $DIR_E2G/e2guardian.conf
1455
	$SED "s?^#mapauthtoports =.*?mapauthtoports = off?g" $DIR_E2G/e2guardian.conf
1456
	# !!! Set Max RAM cache to 10Mb (for antimalware/EDR)
1456
	# !!! Set Max RAM cache to 10Mb (for antimalware/EDR)
1457
	#$SED "s?^maxcontentramcachescansize =.*?maxcontentramcachescansize = 10240?g" $DIR_E2G/e2guardian.conf
1457
	#$SED "s?^maxcontentramcachescansize =.*?maxcontentramcachescansize = 10240?g" $DIR_E2G/e2guardian.conf
1458
	# !!! Set Max file size cache to 20Mb (for antimalware/EDR)
1458
	# !!! Set Max file size cache to 20Mb (for antimalware/EDR)
1459
	#$SED "s?^maxcontentfilecachescansize =.*?maxcontentfilecachescansize = 20480?g" $DIR_E2G/e2guardian.conf
1459
	#$SED "s?^maxcontentfilecachescansize =.*?maxcontentfilecachescansize = 20480?g" $DIR_E2G/e2guardian.conf
1460
 
1460
 
1461
# copy & adapt HTML templates
1461
# copy & adapt HTML templates
1462
	cp $DIR_CONF/alcasar-e2g-fr.html /usr/share/e2guardian/languages/french/alcasar-e2g.html
1462
	cp $DIR_CONF/alcasar-e2g-fr.html /usr/share/e2guardian/languages/french/alcasar-e2g.html
1463
	cp $DIR_CONF/alcasar-e2g-en.html /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html
1463
	cp $DIR_CONF/alcasar-e2g-en.html /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html
1464
	$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/french/alcasar-e2g.html
1465
	$SED "s?\/\/[a-z.]*\/?\/\/$HOSTNAME.$DOMAIN\/?g" /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html
1465
	$SED "s?\/\/[a-z.]*\/?\/\/$HOSTNAME.$DOMAIN\/?g" /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html
1466
 
1466
 
1467
###### ALCASAR filtering for group1 (blacklisted_users) ####
1467
###### ALCASAR filtering for group1 (blacklisted_users) ####
1468
# Adapt group1 conf file
1468
# Adapt group1 conf file
1469
	[ -e $DIR_E2G/e2guardianf1.conf.default ] || cp $DIR_E2G/e2guardianf1.conf $DIR_E2G/e2guardianf1.conf.default
1469
	[ -e $DIR_E2G/e2guardianf1.conf.default ] || cp $DIR_E2G/e2guardianf1.conf $DIR_E2G/e2guardianf1.conf.default
1470
	$SED "s?^#reportinglevel =.*?reportinglevel = 3?g" $DIR_E2G/e2guardianf1.conf
1470
	$SED "s?^#reportinglevel =.*?reportinglevel = 3?g" $DIR_E2G/e2guardianf1.conf
1471
	$SED "s?^#groupname =.*?groupname = 'blacklisted_users'?g" $DIR_E2G/e2guardianf1.conf
1471
	$SED "s?^#groupname =.*?groupname = 'blacklisted_users'?g" $DIR_E2G/e2guardianf1.conf
1472
	$SED "s?^#htmltemplate =.*?htmltemplate = 'alcasar-e2g.html'?g" $DIR_E2G/e2guardianf1.conf
1472
	$SED "s?^#htmltemplate =.*?htmltemplate = 'alcasar-e2g.html'?g" $DIR_E2G/e2guardianf1.conf
1473
	$SED "s?^\.Define LISTDIR.*?\.Define LISTDIR <$DIR_E2G/lists/group1>?g" $DIR_E2G/e2guardianf1.conf
1473
	$SED "s?^\.Define LISTDIR.*?\.Define LISTDIR <$DIR_E2G/lists/group1>?g" $DIR_E2G/e2guardianf1.conf
1474
	DIR_E2G_GROUP1="$DIR_E2G/lists/group1"
1474
	DIR_E2G_GROUP1="$DIR_E2G/lists/group1"
1475
	cp -r $DIR_E2G/lists/example.group $DIR_E2G_GROUP1
1475
	cp -r $DIR_E2G/lists/example.group $DIR_E2G_GROUP1
1476
 
1476
 
1477
# RAZ bannedphraselist
1477
# RAZ bannedphraselist
1478
	$SED "s?^[^#]?#&?g" $DIR_E2G_GROUP1/bannedphraselist # (comment what is not)
1478
	$SED "s?^[^#]?#&?g" $DIR_E2G_GROUP1/bannedphraselist # (comment what is not)
1479
# Disable URL control with regex
1479
# Disable URL control with regex
1480
	$SED "s?^[^#]?#&?g" $DIR_E2G_GROUP1/bannedregexpurllist # (comment what is not)
1480
	$SED "s?^[^#]?#&?g" $DIR_E2G_GROUP1/bannedregexpurllist # (comment what is not)
1481
# Dont filtering files by extension or mime-type (empty list)
1481
# Dont filtering files by extension or mime-type (empty list)
1482
	> $DIR_E2G_GROUP1/bannedextensionlist
1482
	> $DIR_E2G_GROUP1/bannedextensionlist
1483
	> $DIR_E2G_GROUP1/bannedmimetypelist
1483
	> $DIR_E2G_GROUP1/bannedmimetypelist
1484
# Creation of ALCASAR banned site list
1484
# Creation of ALCASAR banned site list
1485
	cat <<EOF > $DIR_E2G_GROUP1/greysitelist
1485
	cat <<EOF > $DIR_E2G_GROUP1/greysitelist
1486
# E2guardian filter config for ALCASAR
1486
# E2guardian filter config for ALCASAR
1487
# In ALCASAR E2guardian filters only URLs (domains are filtered with unbound)
1487
# In ALCASAR E2guardian filters only URLs (domains are filtered with unbound)
1488
# block all SSL and CONNECT tunnels
1488
# block all SSL and CONNECT tunnels
1489
**s
1489
**s
1490
# block all SSL and CONNECT tunnels specified only as an IP
1490
# block all SSL and CONNECT tunnels specified only as an IP
1491
*ips
1491
*ips
1492
# block all sites specified only by an IP
1492
# block all sites specified only by an IP
1493
*ip
1493
*ip
1494
EOF
1494
EOF
1495
# Creation of file for banned URLs (filled later with Toulouse BL --> see BL function)
1495
# Creation of file for banned URLs (filled later with Toulouse BL --> see BL function)
1496
	cat <<EOF > $DIR_E2G_GROUP1/bannedurllist
1496
	cat <<EOF > $DIR_E2G_GROUP1/bannedurllist
1497
# E2guardian URL filter config for ALCASAR
1497
# E2guardian URL filter config for ALCASAR
1498
EOF
1498
EOF
1499
# Creation of files for rehabilited domains
1499
# Creation of files for rehabilited domains
1500
	> $DIR_E2G_GROUP1/exceptionsitelist
1500
	> $DIR_E2G_GROUP1/exceptionsitelist
1501
# Creation of files for rehabilited IP
1501
# Creation of files for rehabilited IP
1502
	[ -e $DIR_E2G_GROUP1/exceptionsiteiplist.default ] || mv $DIR_E2G_GROUP1/exceptionsiteiplist $DIR_E2G_GROUP1/exceptionsiteiplist.default
1502
	[ -e $DIR_E2G_GROUP1/exceptionsiteiplist.default ] || mv $DIR_E2G_GROUP1/exceptionsiteiplist $DIR_E2G_GROUP1/exceptionsiteiplist.default
1503
	> $DIR_E2G_GROUP1/exceptionsiteiplist
1503
	> $DIR_E2G_GROUP1/exceptionsiteiplist
1504
# Create & adapt group2 conf file (av + av_wl)
1504
# Create & adapt group2 conf file (av + av_wl)
1505
	cp $DIR_E2G/e2guardianf1.conf.default $DIR_E2G/e2guardianf2.conf
1505
	cp $DIR_E2G/e2guardianf1.conf.default $DIR_E2G/e2guardianf2.conf
1506
	$SED "s?^#reportinglevel =.*?reportinglevel = 3?g" $DIR_E2G/e2guardianf2.conf
1506
	$SED "s?^#reportinglevel =.*?reportinglevel = 3?g" $DIR_E2G/e2guardianf2.conf
1507
	$SED "s?^#groupname =.*?groupname = 'antimalware + whitelested users'?g" $DIR_E2G/e2guardianf2.conf
1507
	$SED "s?^#groupname =.*?groupname = 'antimalware + whitelested users'?g" $DIR_E2G/e2guardianf2.conf
1508
# create log folder
1508
# create log folder
1509
	mkdir -p /var/log/e2guardian
1509
	mkdir -p /var/log/e2guardian
1510
	chown -R e2guardian /etc/e2guardian /var/log/e2guardian
1510
	chown -R e2guardian /etc/e2guardian /var/log/e2guardian
1511
} # End of e2guardian()
1511
} # End of e2guardian()
1512
 
1512
 
1513
##############################################################
1513
##############################################################
1514
##                        "ulogd"                           ##
1514
##                        "ulogd"                           ##
1515
## - Ulog config for multi-log files                        ##
1515
## - Ulog config for multi-log files                        ##
1516
##############################################################
1516
##############################################################
1517
ulogd()
1517
ulogd()
1518
{
1518
{
1519
# Three instances of ulogd (three different logfiles)
1519
# Three instances of ulogd (three different logfiles)
1520
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1520
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1521
	nl=1
1521
	nl=1
1522
	for log_type in traceability ssh ext-access
1522
	for log_type in traceability ssh ext-access
1523
	do
1523
	do
1524
		cp -f /lib/systemd/system/ulogd.service /etc/systemd/system/ulogd-$log_type.service
1524
		cp -f /lib/systemd/system/ulogd.service /etc/systemd/system/ulogd-$log_type.service
1525
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1525
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1526
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1526
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1527
		$SED "s?^group=.*?group=$nl?g" /etc/ulogd-$log_type.conf
1527
		$SED "s?^group=.*?group=$nl?g" /etc/ulogd-$log_type.conf
1528
		cat << EOF >> /etc/ulogd-$log_type.conf
1528
		cat << EOF >> /etc/ulogd-$log_type.conf
1529
[emu1]
1529
[emu1]
1530
file="/var/log/firewall/$log_type.log"
1530
file="/var/log/firewall/$log_type.log"
1531
sync=1
1531
sync=1
1532
EOF
1532
EOF
1533
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/ulogd -c /etc/ulogd-$log_type.conf $ULOGD_OPTIONS?g" /etc/systemd/system/ulogd-$log_type.service
1533
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/ulogd -c /etc/ulogd-$log_type.conf $ULOGD_OPTIONS?g" /etc/systemd/system/ulogd-$log_type.service
1534
		nl=`expr $nl + 1`
1534
		nl=`expr $nl + 1`
1535
	done
1535
	done
1536
	chown -R root:apache /var/log/firewall
1536
	chown -R root:apache /var/log/firewall
1537
	chmod 750 /var/log/firewall
1537
	chmod 750 /var/log/firewall
1538
	chmod 640 /var/log/firewall/*
1538
	chmod 640 /var/log/firewall/*
1539
}  # End of ulogd()
1539
}  # End of ulogd()
1540
 
1540
 
1541
##########################################################
1541
##########################################################
1542
##                     "nfsen"                          ##
1542
##                     "nfsen"                          ##
1543
## - configure NetFlow collector (nfcapd)               ##
1543
## - configure NetFlow collector (nfcapd)               ##
1544
## - configure NetFlow grapher (nfsen-ng)               ##
1544
## - configure NetFlow grapher (nfsen-ng)               ##
1545
##########################################################
1545
##########################################################
1546
nfsen()
1546
nfsen()
1547
{
1547
{
1548
	groupadd -f nfcapd
1548
	groupadd -f nfcapd
1549
	id -u nfcapd >/dev/null 2>&1 || useradd -r -g nfcapd -s /bin/false -c "system user for nfcapd" nfcapd
1549
	id -u nfcapd >/dev/null 2>&1 || useradd -r -g nfcapd -s /bin/false -c "system user for nfcapd" nfcapd
1550
# nfcapd unit for systemd
1550
# nfcapd unit for systemd
1551
	cat << EOF > /etc/systemd/system/nfcapd.service
1551
	cat << EOF > /etc/systemd/system/nfcapd.service
1552
#  This file is part of systemd.
1552
#  This file is part of systemd.
1553
#
1553
#
1554
#  systemd is free software; you can redistribute it and/or modify it
1554
#  systemd is free software; you can redistribute it and/or modify it
1555
#  under the terms of the GNU General Public License as published by
1555
#  under the terms of the GNU General Public License as published by
1556
#  the Free Software Foundation; either version 2 of the License, or
1556
#  the Free Software Foundation; either version 2 of the License, or
1557
#  (at your option) any later version.
1557
#  (at your option) any later version.
1558
 
1558
 
1559
# This unit launches nfcapd (a Netflow collector).
1559
# This unit launches nfcapd (a Netflow collector).
1560
[Unit]
1560
[Unit]
1561
Description=Netflow Capture Daemon
1561
Description=Netflow Capture Daemon
1562
After=network-online.target iptables.service
1562
After=network-online.target iptables.service
1563
 
1563
 
1564
[Service]
1564
[Service]
1565
Type=simple
1565
Type=simple
1566
ExecStartPre=/bin/mkdir -p /run/nfcapd
1566
ExecStartPre=/bin/mkdir -p /run/nfcapd
1567
ExecStartPre=/bin/chown nfcapd:nfcapd /run/nfcapd
1567
ExecStartPre=/bin/chown nfcapd:nfcapd /run/nfcapd
1568
PIDFile=/run/nfcapd/nfcapd.pid
1568
PIDFile=/run/nfcapd/nfcapd.pid
1569
ExecStart=/usr/bin/nfcapd -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
ExecStart=/usr/bin/nfcapd -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
1570
ExecReload=/bin/kill -HUP $MAINPID
1570
ExecReload=/bin/kill -HUP $MAINPID
1571
 
1571
 
1572
[Install]
1572
[Install]
1573
WantedBy=multi-user.target
1573
WantedBy=multi-user.target
1574
EOF
1574
EOF
1575
    [ -d /var/log/nfsen/profiles-data/live/alcasar_netflow ] || mkdir -p /var/log/nfsen/profiles-data/live/alcasar_netflow
1575
    [ -d /var/log/nfsen/profiles-data/live/alcasar_netflow ] || mkdir -p /var/log/nfsen/profiles-data/live/alcasar_netflow
1576
    touch /var/log/nfsen/profiles-data/live/alcasar_netflow/.nfstat
1576
    touch /var/log/nfsen/profiles-data/live/alcasar_netflow/.nfstat
1577
    chown -R nfcapd:nfcapd /var/log/nfsen
1577
    chown -R nfcapd:nfcapd /var/log/nfsen
1578
# nfsen-ng
1578
# nfsen-ng
1579
# initializing and populating the RRD database (see if it should be usefull)
1579
# initializing and populating the RRD database (see if it should be usefull)
1580
#su - apache --shell=/bin/bash -c '/var/www/html/acc/manager/nfsen/backend/cli.php -f -p -ps import'
1580
#su - apache --shell=/bin/bash -c '/var/www/html/acc/manager/nfsen/backend/cli.php -f -p -ps import'
1581
# nfsen-ng unit for systemd
1581
# nfsen-ng unit for systemd
1582
	cat << EOF > /etc/systemd/system/nfsen-ng.service
1582
	cat << EOF > /etc/systemd/system/nfsen-ng.service
1583
#  This file is part of systemd.
1583
#  This file is part of systemd.
1584
#
1584
#
1585
#  systemd is free software; you can redistribute it and/or modify it
1585
#  systemd is free software; you can redistribute it and/or modify it
1586
#  under the terms of the GNU General Public License as published by
1586
#  under the terms of the GNU General Public License as published by
1587
#  the Free Software Foundation; either version 2 of the License, or
1587
#  the Free Software Foundation; either version 2 of the License, or
1588
#  (at your option) any later version.
1588
#  (at your option) any later version.
1589
 
1589
 
1590
# This unit launches nfsen-ng (a Netflow grapher).
1590
# This unit launches nfsen-ng (a Netflow grapher).
1591
[Unit]
1591
[Unit]
1592
Description=nfsen-ng daemon (netflow grapher)
1592
Description=nfsen-ng daemon (netflow grapher)
1593
After=network-online.target
1593
After=network-online.target
1594
 
1594
 
1595
[Service]
1595
[Service]
1596
Type=simple
1596
Type=simple
1597
User=apache
1597
User=apache
1598
Group=apache
1598
Group=apache
1599
PIDFile=/var/www/html/acc/manager/nfsen/backend/nfsen-ng.pid
1599
PIDFile=/var/www/html/acc/manager/nfsen/backend/nfsen-ng.pid
1600
WorkingDirectory=/var/www/html/acc/manager/nfsen/backend/
1600
WorkingDirectory=/var/www/html/acc/manager/nfsen/backend/
1601
ExecStart=/usr/bin/php /var/www/html/acc/manager/nfsen/backend/listen.php
1601
ExecStart=/usr/bin/php /var/www/html/acc/manager/nfsen/backend/listen.php
1602
 
1602
 
1603
[Install]
1603
[Install]
1604
WantedBy=multi-user.target
1604
WantedBy=multi-user.target
1605
EOF
1605
EOF
1606
 
1606
 
1607
} # End of nfsen()
1607
} # End of nfsen()
1608
 
1608
 
1609
###########################################################
1609
###########################################################
1610
##                       "vnstat"                        ##
1610
##                       "vnstat"                        ##
1611
## - Initialization of vnstat and vnstat-dashboard       ##
1611
## - Initialization of vnstat and vnstat-dashboard       ##
1612
###########################################################
1612
###########################################################
1613
vnstat()
1613
vnstat()
1614
{
1614
{
1615
# vnstat
1615
# vnstat
1616
	[ -e /etc/vnstat.conf.default ] || cp /etc/vnstat.conf /etc/vnstat.conf.default
1616
	[ -e /etc/vnstat.conf.default ] || cp /etc/vnstat.conf /etc/vnstat.conf.default
1617
	$SED "s?^Interface.*?Interface \"$EXTIF\"?g" /etc/vnstat.conf
1617
	$SED "s?^Interface.*?Interface \"$EXTIF\"?g" /etc/vnstat.conf
1618
	$SED "s?^DatabaseDir.*?DatabaseDir /var/log/vnstat?g" /etc/vnstat.conf
1618
	$SED "s?^DatabaseDir.*?DatabaseDir /var/log/vnstat?g" /etc/vnstat.conf
1619
	$SED "s?^MaxBandwidth.*?MaxBandwidth 10000?g" /etc/vnstat.conf
1619
	$SED "s?^MaxBandwidth.*?MaxBandwidth 10000?g" /etc/vnstat.conf
1620
# vnstat-dashboard
1620
# vnstat-dashboard
1621
	$SED "s?^\$thisInterface.*?\$thisInterface = \"$EXTIF\";?" $DIR_ACC/manager/vnstat/index.php
1621
	$SED "s?^\$thisInterface.*?\$thisInterface = \"$EXTIF\";?" $DIR_ACC/manager/vnstat/index.php
1622
	cp /lib/systemd/system/vnstat.service /etc/systemd/system/vnstat.service
1622
	cp /lib/systemd/system/vnstat.service /etc/systemd/system/vnstat.service
1623
	$SED "s?^ReadWritePaths=.*?ReadWritePaths=/var/log?g" /etc/systemd/system/vnstat.service
1623
	$SED "s?^ReadWritePaths=.*?ReadWritePaths=/var/log?g" /etc/systemd/system/vnstat.service
1624
} # End of vnstat()
1624
} # End of vnstat()
1625
 
1625
 
1626
#########################################################
1626
#########################################################
1627
##                     "unbound"                       ##
1627
##                     "unbound"                       ##
1628
## - create the conf files for 4 unbound services      ##
1628
## - create the conf files for 4 unbound services      ##
1629
## - create the systemd files for 4 unbound services   ##
1629
## - create the systemd files for 4 unbound services   ##
1630
#########################################################
1630
#########################################################
1631
unbound ()
1631
unbound ()
1632
{
1632
{
1633
	[ -d /etc/unbound/conf.d ] || mkdir -p /etc/unbound/conf.d
1633
	[ -d /etc/unbound/conf.d ] || mkdir -p /etc/unbound/conf.d
1634
	[ -d /etc/unbound/conf.d/common ] || mkdir /etc/unbound/conf.d/common
1634
	[ -d /etc/unbound/conf.d/common ] || mkdir /etc/unbound/conf.d/common
1635
	[ -d /etc/unbound/conf.d/common/local-forward ] || mkdir /etc/unbound/conf.d/common/local-forward
1635
	[ -d /etc/unbound/conf.d/common/local-forward ] || mkdir /etc/unbound/conf.d/common/local-forward
1636
	[ -d /etc/unbound/conf.d/common/local-dns ] || mkdir /etc/unbound/conf.d/common/local-dns
1636
	[ -d /etc/unbound/conf.d/common/local-dns ] || mkdir /etc/unbound/conf.d/common/local-dns
1637
	[ -d /etc/unbound/conf.d/forward ] || mkdir /etc/unbound/conf.d/forward
1637
	[ -d /etc/unbound/conf.d/forward ] || mkdir /etc/unbound/conf.d/forward
1638
	[ -d /etc/unbound/conf.d/blacklist ] || mkdir /etc/unbound/conf.d/blacklist
1638
	[ -d /etc/unbound/conf.d/blacklist ] || mkdir /etc/unbound/conf.d/blacklist
1639
	[ -d /etc/unbound/conf.d/whitelist ] || mkdir /etc/unbound/conf.d/whitelist
1639
	[ -d /etc/unbound/conf.d/whitelist ] || mkdir /etc/unbound/conf.d/whitelist
1640
	[ -d /etc/unbound/conf.d/blackhole ] || mkdir /etc/unbound/conf.d/blackhole
1640
	[ -d /etc/unbound/conf.d/blackhole ] || mkdir /etc/unbound/conf.d/blackhole
1641
	[ -d /var/log/unbound ] || mkdir /var/log/unbound
1641
	[ -d /var/log/unbound ] || mkdir /var/log/unbound
1642
	chown unbound:unbound /var/log/unbound
1642
	chown unbound:unbound /var/log/unbound
1643
	[ -e /etc/unbound/unbound.conf.default ] || cp /etc/unbound/unbound.conf /etc/unbound/unbound.conf.default
1643
	[ -e /etc/unbound/unbound.conf.default ] || cp /etc/unbound/unbound.conf /etc/unbound/unbound.conf.default
1644
 
1644
 
1645
# Forward zone configuration file for all unbound dns servers
1645
# Forward zone configuration file for all unbound dns servers
1646
	cat << EOF > /etc/unbound/conf.d/common/forward-zone.conf
1646
	cat << EOF > /etc/unbound/conf.d/common/forward-zone.conf
1647
forward-zone:
1647
forward-zone:
1648
	name: "."
1648
	name: "."
1649
	forward-addr: $DNS1
1649
	forward-addr: $DNS1
1650
	forward-addr: $DNS2
1650
	forward-addr: $DNS2
1651
EOF
1651
EOF
1652
 
1652
 
1653
# Custom configuration file for manual DNS configuration
1653
# Custom configuration file for manual DNS configuration
1654
	cat << EOF > /etc/unbound/conf.d/common/local-forward/custom.conf
1654
	cat << EOF > /etc/unbound/conf.d/common/local-forward/custom.conf
1655
## Ajouter un bloc pour chaque nom de domaine géré par un autre seveur DNS
1655
## Ajouter un bloc pour chaque nom de domaine géré par un autre seveur DNS
1656
## Add one block for each domain name managed by an other DNS server
1656
## Add one block for each domain name managed by an other DNS server
1657
##
1657
##
1658
## Example:
1658
## Example:
1659
##
1659
##
1660
## server:
1660
## server:
1661
##     local-zone: "<your_domain>." transparent
1661
##     local-zone: "<your_domain>." transparent
1662
## forward-zone:
1662
## forward-zone:
1663
##     name: "<your_domain>."
1663
##     name: "<your_domain>."
1664
##     forward-addr: <@IP_domain_server>
1664
##     forward-addr: <@IP_domain_server>
1665
##
1665
##
1666
EOF
1666
EOF
1667
 
1667
 
1668
# Configuration file of ALCASAR main domains for $INTIF
1668
# Configuration file of ALCASAR main domains for $INTIF
1669
	cat << EOF > /etc/unbound/conf.d/common/local-dns/${INTIF}.conf
1669
	cat << EOF > /etc/unbound/conf.d/common/local-dns/${INTIF}.conf
1670
server:
1670
server:
1671
	local-data: "$HOSTNAME.$DOMAIN A $PRIVATE_IP"
1671
	local-data: "$HOSTNAME.$DOMAIN A $PRIVATE_IP"
1672
	local-data-ptr: "$PRIVATE_IP $HOSTNAME.$DOMAIN"
1672
	local-data-ptr: "$PRIVATE_IP $HOSTNAME.$DOMAIN"
1673
EOF
1673
EOF
1674
 
1674
 
1675
# Configuration file for lo of forward unbound
1675
# Configuration file for lo of forward unbound
1676
	cat << EOF > /etc/unbound/conf.d/forward/iface.lo.conf
1676
	cat << EOF > /etc/unbound/conf.d/forward/iface.lo.conf
1677
server:
1677
server:
1678
	interface: 127.0.0.1@53
1678
	interface: 127.0.0.1@53
1679
	access-control-view: 127.0.0.1/8 lo
1679
	access-control-view: 127.0.0.1/8 lo
1680
view:
1680
view:
1681
	name: "lo"
1681
	name: "lo"
1682
	local-data: "$HOSTNAME A 127.0.0.1"
1682
	local-data: "$HOSTNAME A 127.0.0.1"
1683
	local-data: "$HOSTNAME.$DOMAIN A 127.0.0.1"
1683
	local-data: "$HOSTNAME.$DOMAIN A 127.0.0.1"
1684
	local-data-ptr: "127.0.0.1 $HOSTNAME.$DOMAIN"
1684
	local-data-ptr: "127.0.0.1 $HOSTNAME.$DOMAIN"
1685
	view-first: yes
1685
	view-first: yes
1686
EOF
1686
EOF
1687
 
1687
 
1688
# Configuration file for $INTIF of forward unbound
1688
# Configuration file for $INTIF of forward unbound
1689
	cat << EOF > /etc/unbound/conf.d/forward/iface.${INTIF}.conf
1689
	cat << EOF > /etc/unbound/conf.d/forward/iface.${INTIF}.conf
1690
server:
1690
server:
1691
	interface: ${PRIVATE_IP}@53
1691
	interface: ${PRIVATE_IP}@53
1692
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1692
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1693
view:
1693
view:
1694
	name: "$INTIF"
1694
	name: "$INTIF"
1695
	view-first: yes
1695
	view-first: yes
1696
EOF
1696
EOF
1697
 
1697
 
1698
# Configuration file for main unbound
1698
# Configuration file for main unbound
1699
	cat << EOF > /etc/unbound/unbound.conf
1699
	cat << EOF > /etc/unbound/unbound.conf
1700
server:
1700
server:
1701
	verbosity: 1
1701
	verbosity: 1
1702
	hide-version: yes
1702
	hide-version: yes
1703
	hide-identity: yes
1703
	hide-identity: yes
1704
	do-ip6: no
1704
	do-ip6: no
1705
	include: /etc/unbound/conf.d/common/forward-zone.conf
1705
	include: /etc/unbound/conf.d/common/forward-zone.conf
1706
	include: /etc/unbound/conf.d/common/local-forward/*
1706
	include: /etc/unbound/conf.d/common/local-forward/*
1707
	include: /etc/unbound/conf.d/common/local-dns/*
1707
	include: /etc/unbound/conf.d/common/local-dns/*
1708
	include: /etc/unbound/conf.d/forward/*
1708
	include: /etc/unbound/conf.d/forward/*
1709
EOF
1709
EOF
1710
 
1710
 
1711
# Configuration file for $INTIF of blacklist unbound
1711
# Configuration file for $INTIF of blacklist unbound
1712
	cat << EOF > /etc/unbound/conf.d/blacklist/iface.${INTIF}.conf
1712
	cat << EOF > /etc/unbound/conf.d/blacklist/iface.${INTIF}.conf
1713
server:
1713
server:
1714
	interface: ${PRIVATE_IP}@54
1714
	interface: ${PRIVATE_IP}@54
1715
	access-control: $PRIVATE_IP_MASK allow
1715
	access-control: $PRIVATE_IP_MASK allow
1716
	access-control-tag: $PRIVATE_IP_MASK "blacklist"
1716
	access-control-tag: $PRIVATE_IP_MASK "blacklist"
1717
	access-control-tag-action: $PRIVATE_IP_MASK "blacklist" redirect
1717
	access-control-tag-action: $PRIVATE_IP_MASK "blacklist" redirect
1718
	access-control-tag-data: $PRIVATE_IP_MASK "blacklist" "A $PRIVATE_IP"
1718
	access-control-tag-data: $PRIVATE_IP_MASK "blacklist" "A $PRIVATE_IP"
1719
EOF
1719
EOF
1720
 
1720
 
1721
# Configuration file for blacklist unbound
1721
# Configuration file for blacklist unbound
1722
	cat << EOF > /etc/unbound/unbound-blacklist.conf
1722
	cat << EOF > /etc/unbound/unbound-blacklist.conf
1723
server:
1723
server:
1724
	verbosity: 1
1724
	verbosity: 1
1725
	hide-version: yes
1725
	hide-version: yes
1726
	hide-identity: yes
1726
	hide-identity: yes
1727
	do-ip6: no
1727
	do-ip6: no
1728
	logfile: "/var/log/unbound/unbound-blacklist.log"
1728
	logfile: "/var/log/unbound/unbound-blacklist.log"
1729
	chroot: ""
1729
	chroot: ""
1730
	define-tag: "blacklist"
1730
	define-tag: "blacklist"
1731
	log-local-actions: yes
1731
	log-local-actions: yes
1732
	include: /etc/unbound/conf.d/common/forward-zone.conf
1732
	include: /etc/unbound/conf.d/common/forward-zone.conf
1733
	include: /etc/unbound/conf.d/common/local-forward/*
1733
	include: /etc/unbound/conf.d/common/local-forward/*
1734
	include: /etc/unbound/conf.d/common/local-dns/*
1734
	include: /etc/unbound/conf.d/common/local-dns/*
1735
	include: /etc/unbound/conf.d/blacklist/*
1735
	include: /etc/unbound/conf.d/blacklist/*
1736
	include: /usr/local/share/unbound-bl-enabled/*
1736
	include: /usr/local/share/unbound-bl-enabled/*
1737
EOF
1737
EOF
1738
 
1738
 
1739
# Configuration file for $INTIF of whitelist unbound
1739
# Configuration file for $INTIF of whitelist unbound
1740
	cat << EOF > /etc/unbound/conf.d/whitelist/iface.${INTIF}.conf
1740
	cat << EOF > /etc/unbound/conf.d/whitelist/iface.${INTIF}.conf
1741
server:
1741
server:
1742
	interface: ${PRIVATE_IP}@55
1742
	interface: ${PRIVATE_IP}@55
1743
	access-control: $PRIVATE_IP_MASK allow
1743
	access-control: $PRIVATE_IP_MASK allow
1744
	access-control-tag: $PRIVATE_IP_MASK "whitelist"
1744
	access-control-tag: $PRIVATE_IP_MASK "whitelist"
1745
	access-control-tag-action: $PRIVATE_IP_MASK "whitelist" redirect
1745
	access-control-tag-action: $PRIVATE_IP_MASK "whitelist" redirect
1746
	access-control-tag-data: $PRIVATE_IP_MASK "whitelist" "A $PRIVATE_IP"
1746
	access-control-tag-data: $PRIVATE_IP_MASK "whitelist" "A $PRIVATE_IP"
1747
EOF
1747
EOF
1748
 
1748
 
1749
# Configuration file for whitelist unbound
1749
# Configuration file for whitelist unbound
1750
	cat << EOF > /etc/unbound/unbound-whitelist.conf
1750
	cat << EOF > /etc/unbound/unbound-whitelist.conf
1751
server:
1751
server:
1752
	module-config: "ipset validator iterator"
1752
	module-config: "ipset validator iterator"
1753
	verbosity: 1
1753
	verbosity: 1
1754
	hide-version: yes
1754
	hide-version: yes
1755
	hide-identity: yes
1755
	hide-identity: yes
1756
	do-ip6: no
1756
	do-ip6: no
1757
	do-not-query-localhost: no
1757
	do-not-query-localhost: no
1758
	define-tag: "whitelist"
1758
	define-tag: "whitelist"
1759
	local-zone: "." transparent
1759
	local-zone: "." transparent
1760
	local-zone-tag: "." "whitelist"
1760
	local-zone-tag: "." "whitelist"
1761
	include: /etc/unbound/conf.d/common/forward-zone.conf
1761
	include: /etc/unbound/conf.d/common/forward-zone.conf
1762
	include: /etc/unbound/conf.d/common/local-forward/*
1762
	include: /etc/unbound/conf.d/common/local-forward/*
1763
	include: /etc/unbound/conf.d/common/local-dns/*
1763
	include: /etc/unbound/conf.d/common/local-dns/*
1764
	include: /etc/unbound/conf.d/whitelist/*
1764
	include: /etc/unbound/conf.d/whitelist/*
1765
	include: /usr/local/share/unbound-wl-enabled/*
1765
	include: /usr/local/share/unbound-wl-enabled/*
1766
	username: ""
1766
	username: ""
1767
ipset:
1767
ipset:
1768
	name-v4: "wl_ip_allowed"
1768
	name-v4: "wl_ip_allowed"
1769
EOF
1769
EOF
1770
 
1770
 
1771
# Configuration file for $INTIF of blackhole unbound
1771
# Configuration file for $INTIF of blackhole unbound
1772
	cat << EOF > /etc/unbound/conf.d/blackhole/iface.${INTIF}.conf
1772
	cat << EOF > /etc/unbound/conf.d/blackhole/iface.${INTIF}.conf
1773
server:
1773
server:
1774
	interface: ${PRIVATE_IP}@56
1774
	interface: ${PRIVATE_IP}@56
1775
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1775
	access-control-view: $PRIVATE_NETWORK_MASK $INTIF
1776
view:
1776
view:
1777
	name: "$INTIF"
1777
	name: "$INTIF"
1778
	local-zone: "." redirect
1778
	local-zone: "." redirect
1779
	local-data: ". A $PRIVATE_IP"
1779
	local-data: ". A $PRIVATE_IP"
1780
EOF
1780
EOF
1781
 
1781
 
1782
# Configuration file for blackhole unbound
1782
# Configuration file for blackhole unbound
1783
	cat << EOF > /etc/unbound/unbound-blackhole.conf
1783
	cat << EOF > /etc/unbound/unbound-blackhole.conf
1784
server:
1784
server:
1785
	verbosity: 1
1785
	verbosity: 1
1786
	hide-version: yes
1786
	hide-version: yes
1787
	hide-identity: yes
1787
	hide-identity: yes
1788
	do-ip6: no
1788
	do-ip6: no
1789
	include: /etc/unbound/conf.d/common/local-forward/*
1789
	include: /etc/unbound/conf.d/common/local-forward/*
1790
	include: /etc/unbound/conf.d/common/local-dns/*
1790
	include: /etc/unbound/conf.d/common/local-dns/*
1791
	include: /etc/unbound/conf.d/blackhole/*
1791
	include: /etc/unbound/conf.d/blackhole/*
1792
EOF
1792
EOF
1793
 
1793
 
1794
# Add the safesearch conf file to blacklist & whitelist
1794
# Add the safesearch conf file to blacklist & whitelist
1795
	cp $DIR_CONF/safe-searching /etc/unbound/conf.d/blacklist/
1795
	cp $DIR_CONF/safe-searching /etc/unbound/conf.d/blacklist/
1796
	cp $DIR_CONF/safe-searching /etc/unbound/conf.d/whitelist/
1796
	cp $DIR_CONF/safe-searching /etc/unbound/conf.d/whitelist/
1797
	
1797
	
1798
# Adapt systemd unit for the 4 instances of unbound
1798
# Adapt systemd unit for the 4 instances of unbound
1799
	cp /lib/systemd/system/unbound.service /etc/systemd/system/unbound.service
1799
	cp /lib/systemd/system/unbound.service /etc/systemd/system/unbound.service
1800
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound.conf?g" /etc/systemd/system/unbound.service
1800
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound.conf?g" /etc/systemd/system/unbound.service
1801
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service?g" /etc/systemd/system/unbound.service
1801
	$SED "s?^After=.*?After=syslog.target network-online.target chilli.service?g" /etc/systemd/system/unbound.service
1802
	$SED "/^PIDFile=/d" /etc/systemd/system/unbound.service
1802
	$SED "/^PIDFile=/d" /etc/systemd/system/unbound.service
1803
	for list in blacklist blackhole whitelist
1803
	for list in blacklist blackhole whitelist
1804
	do
1804
	do
1805
		cp -f /etc/systemd/system/unbound.service /etc/systemd/system/unbound-$list.service
1805
		cp -f /etc/systemd/system/unbound.service /etc/systemd/system/unbound-$list.service
1806
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound-$list.conf?g" /etc/systemd/system/unbound-$list.service
1806
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/unbound -d -c /etc/unbound/unbound-$list.conf?g" /etc/systemd/system/unbound-$list.service
1807
	done
1807
	done
1808
} # End of unbound()
1808
} # End of unbound()
1809
 
1809
 
1810
##################################################
1810
##################################################
1811
##                   "dhcpd"                    ##
1811
##                   "dhcpd"                    ##
1812
##################################################
1812
##################################################
1813
dhcpd()
1813
dhcpd()
1814
{
1814
{
1815
	[ -e /etc/dhcpd.conf.default ] || cp /etc/dhcpd.conf /etc/dhcpd.conf.default
1815
	[ -e /etc/dhcpd.conf.default ] || cp /etc/dhcpd.conf /etc/dhcpd.conf.default
1816
	cat <<EOF > /etc/dhcpd.conf
1816
	cat <<EOF > /etc/dhcpd.conf
1817
ddns-update-style none;
1817
ddns-update-style none;
1818
subnet $PRIVATE_NETWORK netmask $PRIVATE_NETMASK {
1818
subnet $PRIVATE_NETWORK netmask $PRIVATE_NETMASK {
1819
	option routers $PRIVATE_IP;
1819
	option routers $PRIVATE_IP;
1820
	option subnet-mask $PRIVATE_NETMASK;
1820
	option subnet-mask $PRIVATE_NETMASK;
1821
	option domain-name-servers $PRIVATE_IP;
1821
	option domain-name-servers $PRIVATE_IP;
1822
	range dynamic-bootp $PRIVATE_SECOND_IP $PRIVATE_LAST_IP;
1822
	range dynamic-bootp $PRIVATE_SECOND_IP $PRIVATE_LAST_IP;
1823
	default-lease-time 21600;
1823
	default-lease-time 21600;
1824
	max-lease-time 43200;
1824
	max-lease-time 43200;
1825
}
1825
}
1826
EOF
1826
EOF
1827
chown -R dhcpd:dhcpd /var/lib/dhcpd
1827
chown -R dhcpd:dhcpd /var/lib/dhcpd
1828
} # End of dhcpd()
1828
} # End of dhcpd()
1829
 
1829
 
1830
##########################################################
1830
##########################################################
1831
##                         "BL"                         ##
1831
##                         "BL"                         ##
1832
## - copy & adapt Toulouse BL to ALCASAR architecture   ##
1832
## - copy & adapt Toulouse BL to ALCASAR architecture   ##
1833
##     - domain names for unbound-bl & unbound-wl       ##
1833
##     - domain names for unbound-bl & unbound-wl       ##
1834
##     - URLs for E²guardian                            ##
1834
##     - URLs for E²guardian                            ##
1835
##     - IPs for NetFilter                              ##
1835
##     - IPs for NetFilter                              ##
1836
## - copy additional BLs (TOR + Ultrasurf + C&C)        ##
1836
## - copy additional BLs (TOR + Ultrasurf + C&C)        ##
1837
##########################################################
1837
##########################################################
1838
BL()
1838
BL()
1839
{
1839
{
1840
# copy the Toulouse university BL in order to be adapted to ALCASAR architecture (alcasar-bl.sh -adapt)
1840
# copy the Toulouse university BL in order to be adapted to ALCASAR architecture (alcasar-bl.sh -adapt)
1841
	rm -rf $DIR_E2G/lists/blacklists
1841
	rm -rf $DIR_E2G/lists/blacklists
1842
	mkdir -p /tmp/blacklists
1842
	mkdir -p /tmp/blacklists
1843
	cp $DIR_BLACKLIST/blacklists.tar.gz /tmp/blacklists/
1843
	cp $DIR_BLACKLIST/blacklists.tar.gz /tmp/blacklists/
1844
# creation of the additional BL and WL categorie named "ossi" (for domain names & ip only)
1844
# creation of the additional BL and WL categorie named "ossi" (for domain names & ip only)
1845
	mkdir -p $DIR_E2G/lists/blacklists/ossi-bl
1845
	mkdir -p $DIR_E2G/lists/blacklists/ossi-bl
1846
	touch $DIR_E2G/lists/blacklists/ossi-bl/domains
1846
	touch $DIR_E2G/lists/blacklists/ossi-bl/domains
1847
	echo "ossi-bl" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1847
	echo "ossi-bl" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1848
	mkdir -p $DIR_E2G/lists/blacklists/ossi-wl
1848
	mkdir -p $DIR_E2G/lists/blacklists/ossi-wl
1849
	touch $DIR_E2G/lists/blacklists/ossi-wl/domains
1849
	touch $DIR_E2G/lists/blacklists/ossi-wl/domains
1850
	echo "ossi-wl" >> $DIR_DEST_ETC/alcasar-wl-categories-enabled
1850
	echo "ossi-wl" >> $DIR_DEST_ETC/alcasar-wl-categories-enabled
1851
# add additional BL files
1851
# add additional BL files
1852
	for x in $(ls $DIR_BLACKLIST | grep -v "^blacklists")
1852
	for x in $(ls $DIR_BLACKLIST | grep -v "^blacklists")
1853
	do
1853
	do
1854
		mkdir $DIR_E2G/lists/blacklists/ossi-bl-$x
1854
		mkdir $DIR_E2G/lists/blacklists/ossi-bl-$x
1855
		cp $DIR_BLACKLIST/$x  $DIR_E2G/lists/blacklists/ossi-bl-$x/domains
1855
		cp $DIR_BLACKLIST/$x  $DIR_E2G/lists/blacklists/ossi-bl-$x/domains
1856
		echo "ossi-bl-$x" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1856
		echo "ossi-bl-$x" >> $DIR_DEST_ETC/alcasar-bl-categories-enabled
1857
	done
1857
	done
1858
	chown -R e2guardian:apache $DIR_E2G
1858
	chown -R e2guardian:apache $DIR_E2G
1859
	chown -R root:apache $DIR_DEST_SHARE
1859
	chown -R root:apache $DIR_DEST_SHARE
1860
	chmod -R g+rw $DIR_E2G $DIR_DEST_SHARE
1860
	chmod -R g+rw $DIR_E2G $DIR_DEST_SHARE
1861
# adapt the Toulouse BL to ALCASAR architecture
1861
# adapt the Toulouse BL to ALCASAR architecture
1862
	$DIR_DEST_BIN/alcasar-bl.sh --adapt
1862
	$DIR_DEST_BIN/alcasar-bl.sh --adapt
1863
# enable the default categories
1863
# enable the default categories
1864
	$DIR_DEST_BIN/alcasar-bl.sh --cat_choice
1864
	$DIR_DEST_BIN/alcasar-bl.sh --cat_choice
1865
	rm -rf /tmp/blacklists
1865
	rm -rf /tmp/blacklists
1866
} # End of BL()
1866
} # End of BL()
1867
 
1867
 
1868
#######################################################
1868
#######################################################
1869
##                    "cron"                         ##
1869
##                    "cron"                         ##
1870
## - write all cron & anacron files                  ##
1870
## - write all cron & anacron files                  ##
1871
#######################################################
1871
#######################################################
1872
cron()
1872
cron()
1873
{
1873
{
1874
# 'crontab' with standard cron at midnight instead of 4:0 am (default)
1874
# 'crontab' with standard cron at midnight instead of 4:0 am (default)
1875
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1875
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1876
	cat <<EOF > /etc/crontab
1876
	cat <<EOF > /etc/crontab
1877
SHELL=/usr/bin/bash
1877
SHELL=/usr/bin/bash
1878
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1878
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1879
MAILTO=root
1879
MAILTO=root
1880
HOME=/
1880
HOME=/
1881
 
1881
 
1882
# run-parts
1882
# run-parts
1883
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1883
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1884
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1884
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1885
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1885
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1886
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1886
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1887
EOF
1887
EOF
1888
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1888
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1889
	cat <<EOF >> /etc/anacrontab
1889
	cat <<EOF >> /etc/anacrontab
1890
7	8	cron.MariaDBDump	nice /etc/cron.d/alcasar-mariadb
1890
7	8	cron.MariaDBDump	nice /etc/cron.d/alcasar-mariadb
1891
7	10	cron.logExport		nice /etc/cron.d/alcasar-archive
1891
7	10	cron.logExport		nice /etc/cron.d/alcasar-archive
1892
EOF
1892
EOF
1893
	cat <<EOF > /etc/cron.d/alcasar-mariadb
1893
	cat <<EOF > /etc/cron.d/alcasar-mariadb
1894
# Verify, repair and export users database (every monday at 4:45 am)
1894
# Verify, repair and export users database (every monday at 4:45 am)
1895
45 4 * * 1 root $DIR_DEST_BIN/alcasar-mariadb.sh --dump
1895
45 4 * * 1 root $DIR_DEST_BIN/alcasar-mariadb.sh --dump
1896
# Remove users whose expiration date is exceeded for more more than 7 days (every Monday at 4:40 am)
1896
# Remove users whose expiration date is exceeded for more more than 7 days (every Monday at 4:40 am)
1897
40 4 * * * root $DIR_DEST_BIN/alcasar-mariadb.sh --expire_user 2>&1 >/dev/null
1897
40 4 * * * root $DIR_DEST_BIN/alcasar-mariadb.sh --expire_user 2>&1 >/dev/null
1898
EOF
1898
EOF
1899
	cat <<EOF > /etc/cron.d/alcasar-archive
1899
	cat <<EOF > /etc/cron.d/alcasar-archive
1900
# Archiving logs (traceability & users database) (every Monday at 5:35 am)
1900
# Archiving logs (traceability & users database) (every Monday at 5:35 am)
1901
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1901
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1902
EOF
1902
EOF
1903
	cat <<EOF > /etc/cron.d/alcasar-ticket-clean
1903
	cat <<EOF > /etc/cron.d/alcasar-ticket-clean
1904
# Remove password files (created when importing users by CSV files) and user's PDF voucher (every hours at 30')
1904
# Remove password files (created when importing users by CSV files) and user's PDF voucher (every hours at 30')
1905
30 * * * *  root $DIR_DEST_BIN/alcasar-ticket-clean.sh
1905
30 * * * *  root $DIR_DEST_BIN/alcasar-ticket-clean.sh
1906
EOF
1906
EOF
1907
	cat <<EOF > /etc/cron.d/alcasar-distrib-updates
1907
	cat <<EOF > /etc/cron.d/alcasar-distrib-updates
1908
# Update the system and reboot if needed (everyday at 3:30 am)
1908
# Update the system and reboot if needed (everyday at 3:30 am)
1909
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1 ; /usr/local/bin/alcasar-daemon.sh -after-update
1909
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1 ; /usr/local/bin/alcasar-daemon.sh -after-update
1910
EOF
1910
EOF
1911
	cat <<EOF > /etc/cron.d/alcasar-connections-stats
1911
	cat <<EOF > /etc/cron.d/alcasar-connections-stats
1912
# Connection stats update (accounting). These Perl scripts are from "dialup_admin" (cf. wiki.freeradius.org/Dialup_admin).
1912
# Connection stats update (accounting). These Perl scripts are from "dialup_admin" (cf. wiki.freeradius.org/Dialup_admin).
1913
# 'alcasar-tot_stats' : aggregate the daily connections of users and write it in the table 'totacct' (everyday at 1:01 pm)
1913
# 'alcasar-tot_stats' : aggregate the daily connections of users and write it in the table 'totacct' (everyday at 1:01 pm)
1914
# 'alcasar-monthly_tot_stat' : aggregate the monthly connections of users and write it in table 'mtotacct' (everyday at 1h05 pm)
1914
# 'alcasar-monthly_tot_stat' : aggregate the monthly connections of users and write it in table 'mtotacct' (everyday at 1h05 pm)
1915
# '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-truncate_raddact' : remove the user' session log older than 365 days (applying French law : "LCEN") (every month, the first at 01:10 pm)
1916
# 'alcasar-clean_radacct' : close the sessions openned for more than 30 days (every month, the first at 01:15 pm)
1916
# 'alcasar-clean_radacct' : close the sessions openned for more than 30 days (every month, the first at 01:15 pm)
1917
# 'alcasar-activity_report.sh' : generate an activity report in PDF (every sunday at 5:35 pm)
1917
# 'alcasar-activity_report.sh' : generate an activity report in PDF (every sunday at 5:35 pm)
1918
1 1 * * * root $DIR_DEST_BIN/alcasar-tot_stats > /dev/null 2>&1
1918
1 1 * * * root $DIR_DEST_BIN/alcasar-tot_stats > /dev/null 2>&1
1919
5 1 * * * root $DIR_DEST_BIN/alcasar-monthly_tot_stats > /dev/null 2>&1
1919
5 1 * * * root $DIR_DEST_BIN/alcasar-monthly_tot_stats > /dev/null 2>&1
1920
10 1 1 * * root $DIR_DEST_BIN/alcasar-truncate_radacct > /dev/null 2>&1
1920
10 1 1 * * root $DIR_DEST_BIN/alcasar-truncate_radacct > /dev/null 2>&1
1921
15 1 1 * * root $DIR_DEST_BIN/alcasar-clean_radacct > /dev/null 2>&1
1921
15 1 1 * * root $DIR_DEST_BIN/alcasar-clean_radacct > /dev/null 2>&1
1922
35 5 * * 0 root $DIR_DEST_BIN/alcasar-activity_report.sh > /dev/null 2>&1
1922
35 5 * * 0 root $DIR_DEST_BIN/alcasar-activity_report.sh > /dev/null 2>&1
1923
EOF
1923
EOF
1924
	cat <<EOF > /etc/cron.d/alcasar-watchdog
1924
	cat <<EOF > /etc/cron.d/alcasar-watchdog
1925
# 'alcasar-watchdog.sh' : run the "watchdog" (every 10')
1925
# 'alcasar-watchdog.sh' : run the "watchdog" (every 10')
1926
# '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-flush_ipset_wl.sh' : empty the IPSET of the whitelisted IP loaded dynamically with unbound-whitelist hook (every sunday at 0:05 am)
1927
# 'alcasar-watchdog.sh --disconnect-permanent-users' : disconnect users with attribute "Alcasar-Status-Page-Must-Stay-Open" (daily --> see "cron.daily")
1927
# 'alcasar-watchdog.sh --disconnect-permanent-users' : disconnect users with attribute "Alcasar-Status-Page-Must-Stay-Open" (daily --> see "cron.daily")
1928
# 'alcasar-watchdog-hl.sh' : (optionnaly) remove the IP 0.0.0.0 from chilli cache memory
1928
# 'alcasar-watchdog-hl.sh' : (optionnaly) remove the IP 0.0.0.0 from chilli cache memory
1929
*/10 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1929
*/10 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1930
0 5 * * 0 root $DIR_DEST_BIN/alcasar-flush_ipset_wl.sh > /dev/null 2>&1
1930
0 5 * * 0 root $DIR_DEST_BIN/alcasar-flush_ipset_wl.sh > /dev/null 2>&1
1931
@daily root $DIR_DEST_BIN/alcasar-watchdog.sh --disconnect-permanent-users > /dev/null 2>&1
1931
@daily root $DIR_DEST_BIN/alcasar-watchdog.sh --disconnect-permanent-users > /dev/null 2>&1
1932
#* * * * * root $DIR_DEST_BIN/alcasar-watchdog-hl.sh > /dev/null 2>&1
1932
#* * * * * root $DIR_DEST_BIN/alcasar-watchdog-hl.sh > /dev/null 2>&1
1933
EOF
1933
EOF
1934
	cat <<EOF > /etc/cron.d/alcasar-daemon-watchdog
1934
	cat <<EOF > /etc/cron.d/alcasar-daemon-watchdog
1935
# start dead daemons (after boot process and every 20')
1935
# start dead daemons (after boot process and every 20')
1936
@reboot root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1936
@reboot root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1937
*/20 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1937
*/20 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1938
EOF
1938
EOF
1939
	cat <<EOF > /etc/cron.d/alcasar-rsync-bl
1939
	cat <<EOF > /etc/cron.d/alcasar-rsync-bl
1940
# Automatic update the BL (every 12 hours). The enabled categories are listed in '/usr/local/etc/update_cat.conf' (no sync if empty).
1940
# Automatic update the BL (every 12 hours). The enabled categories are listed in '/usr/local/etc/update_cat.conf' (no sync if empty).
1941
0 */12 * * * root $DIR_DEST_BIN/alcasar-bl-autoupdate.sh --update_cat > /dev/null 2>&1
1941
0 */12 * * * root $DIR_DEST_BIN/alcasar-bl-autoupdate.sh --update_cat > /dev/null 2>&1
1942
EOF
1942
EOF
1943
	cat <<EOF > /etc/cron.d/alcasar-rsync-ossi_bl
1943
	cat <<EOF > /etc/cron.d/alcasar-rsync-ossi_bl
1944
# Automatic update the OSSI BLs (every 12 hours) by running the custom update scripts specified in '/usr/local/etc/update_ossi_cat.conf'.
1944
# Automatic update the OSSI BLs (every 12 hours) by running the custom update scripts specified in '/usr/local/etc/update_ossi_cat.conf'.
1945
0 */12 * * * root /bin/bash /usr/local/etc/update_ossi_cat.conf > /dev/null 2>&1
1945
0 */12 * * * root /bin/bash /usr/local/etc/update_ossi_cat.conf > /dev/null 2>&1
1946
EOF
1946
EOF
1947
	cat <<EOF > /etc/cron.d/alcasar-letsencrypt
1947
	cat <<EOF > /etc/cron.d/alcasar-letsencrypt
1948
# Automatic renew the Let's Encrypt certificate (daily --> see "cron.daily")
1948
# Automatic renew the Let's Encrypt certificate (daily --> see "cron.daily")
1949
@daily root $DIR_DEST_BIN/alcasar-letsencrypt.sh --cron > /dev/null 2>&1
1949
@daily root $DIR_DEST_BIN/alcasar-letsencrypt.sh --cron > /dev/null 2>&1
1950
EOF
1950
EOF
1951
	cat <<EOF > /etc/cron.d/alcasar-nfcapd-expire
1951
	cat <<EOF > /etc/cron.d/alcasar-nfcapd-expire
1952
# Remove netflow files older than one year (daily --> see "cron.daily")
1952
# Remove netflow files older than one year (daily --> see "cron.daily")
1953
@daily root /usr/bin/nfexpire -e /var/log/nfsen/profiles-data/live/alcasar_netflow -t 365d
1953
@daily root /usr/bin/nfexpire -e /var/log/nfsen/profiles-data/live/alcasar_netflow -t 365d
1954
EOF
1954
EOF
1955
# removing the users crons
1955
# removing the users crons
1956
	rm -f /var/spool/cron/*
1956
	rm -f /var/spool/cron/*
1957
} # End of cron()
1957
} # End of cron()
1958
 
1958
 
1959
########################################################################
1959
########################################################################
1960
##                              "Fail2Ban"                            ##
1960
##                              "Fail2Ban"                            ##
1961
##- Adapt conf file to ALCASAR                                        ##
1961
##- Adapt conf file to ALCASAR                                        ##
1962
##- Secure items : SSH, intercept & ACC brute-Force + evasive + pwd   ##
1962
##- Secure items : SSH, intercept & ACC brute-Force + evasive + pwd   ##
1963
########################################################################
1963
########################################################################
1964
fail2ban()
1964
fail2ban()
1965
{
1965
{
1966
# adapt fail2ban to Mageia (fedora like) & ALCASAR behaviour
1966
# adapt fail2ban to Mageia (fedora like) & ALCASAR behaviour
1967
	[ -e /etc/fail2ban/jail.conf.default ] || cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.default
1967
	[ -e /etc/fail2ban/jail.conf.default ] || cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.default
1968
	$SED "s?^before =.*?before = paths-mageia.conf?g" /etc/fail2ban/jail.conf
1968
	$SED "s?^before =.*?before = paths-mageia.conf?g" /etc/fail2ban/jail.conf
1969
 
1969
 
1970
# add 5 jails and their filters
1970
# add 5 jails and their filters
1971
## sshd : Ban after 5 failed attempts (ie. brute-force). This "jail" uses the default "sshd" f2b filter.
1971
## sshd : Ban after 5 failed attempts (ie. brute-force). This "jail" uses the default "sshd" f2b filter.
1972
	cat << EOF > /etc/fail2ban/jail.d/01-alcasar_sshd.conf
1972
	cat << EOF > /etc/fail2ban/jail.d/01-alcasar_sshd.conf
1973
[sshd]
1973
[sshd]
1974
enabled = true
1974
enabled = true
1975
#enabled  = false
1975
#enabled  = false
1976
maxretry = 5
1976
maxretry = 5
1977
bantime = 3m
1977
bantime = 3m
1978
findtime = 3m
1978
findtime = 3m
1979
EOF
1979
EOF
1980
 
1980
 
1981
## alcasar_httpd-auth : Ban after 3 failed attempts on ACC. This "jail" uses the default "apache-auth" f2b filter.
1981
## alcasar_httpd-auth : Ban after 3 failed attempts on ACC. This "jail" uses the default "apache-auth" f2b filter.
1982
	cat << EOF > /etc/fail2ban/jail.d/02-alcasar_httpd-auth.conf
1982
	cat << EOF > /etc/fail2ban/jail.d/02-alcasar_httpd-auth.conf
1983
[apache-auth]
1983
[apache-auth]
1984
enabled = true
1984
enabled = true
1985
#enabled  = false
1985
#enabled  = false
1986
maxretry = 3
1986
maxretry = 3
1987
bantime = 3m
1987
bantime = 3m
1988
findtime = 3m
1988
findtime = 3m
1989
EOF
1989
EOF
1990
 
1990
 
1991
## mod-evasive : Ban after 3 failed retrieve page attempts (ie : unknown page)
1991
## mod-evasive : Ban after 3 failed retrieve page attempts (ie : unknown page)
1992
	cat << EOF > /etc/fail2ban/jail.d/03-alcasar_mod-evasive.conf
1992
	cat << EOF > /etc/fail2ban/jail.d/03-alcasar_mod-evasive.conf
1993
[alcasar_mod-evasive]
1993
[alcasar_mod-evasive]
1994
enabled = true
1994
enabled = true
1995
#enabled = false
1995
#enabled = false
1996
backend = auto
1996
backend = auto
1997
filter = alcasar_mod-evasive
1997
filter = alcasar_mod-evasive
1998
action = iptables-allports[name=alcasar_mod-evasive]
1998
action = iptables-allports[name=alcasar_mod-evasive]
1999
logpath = /var/log/httpd/access_log
1999
logpath = /var/log/httpd/access_log
2000
maxretry = 3
2000
maxretry = 3
2001
bantime = 3m
2001
bantime = 3m
2002
findtime = 3m
2002
findtime = 3m
2003
EOF
2003
EOF
2004
	cat << EOF > /etc/fail2ban/filter.d/alcasar_mod-evasive.conf
2004
	cat << EOF > /etc/fail2ban/filter.d/alcasar_mod-evasive.conf
2005
[Definition]
2005
[Definition]
2006
failregex =  <HOST> .+\] "[^"]+" 403
2006
failregex =  <HOST> .+\] "[^"]+" 403
2007
ignoreregex =
2007
ignoreregex =
2008
EOF
2008
EOF
2009
 
2009
 
2010
### alcasar_intercept : ban after 5 failed user login attemps on intercept.php
2010
### alcasar_intercept : ban after 5 failed user login attemps on intercept.php
2011
	cat << EOF > /etc/fail2ban/jail.d/04-alcasar_intercept.conf
2011
	cat << EOF > /etc/fail2ban/jail.d/04-alcasar_intercept.conf
2012
[alcasar_intercept]
2012
[alcasar_intercept]
2013
enabled = true
2013
enabled = true
2014
#enabled = false
2014
#enabled = false
2015
backend = auto
2015
backend = auto
2016
filter = alcasar_intercept
2016
filter = alcasar_intercept
2017
action = iptables-allports[name=alcasar_intercept]
2017
action = iptables-allports[name=alcasar_intercept]
2018
logpath = /var/log/httpd/access_log
2018
logpath = /var/log/httpd/access_log
2019
maxretry = 5
2019
maxretry = 5
2020
bantime = 3m
2020
bantime = 3m
2021
findtime = 3m
2021
findtime = 3m
2022
EOF
2022
EOF
2023
	cat << EOF > /etc/fail2ban/filter.d/alcasar_intercept.conf
2023
	cat << EOF > /etc/fail2ban/filter.d/alcasar_intercept.conf
2024
[Definition]
2024
[Definition]
2025
failregex = <HOST> .* \"GET \/intercept\.php\?res=failed\&reason=reject
2025
failregex = <HOST> .* \"GET \/intercept\.php\?res=failed\&reason=reject
2026
ignoreregex =
2026
ignoreregex =
2027
EOF
2027
EOF
2028
 
2028
 
2029
## alcasar_change-pwd : ban after 5 failed user change password attempts
2029
## alcasar_change-pwd : ban after 5 failed user change password attempts
2030
	cat << EOF > /etc/fail2ban/jail.d/05-alcasar_change-pwd.conf
2030
	cat << EOF > /etc/fail2ban/jail.d/05-alcasar_change-pwd.conf
2031
[alcasar_change-pwd]
2031
[alcasar_change-pwd]
2032
enabled = true
2032
enabled = true
2033
#enabled = false
2033
#enabled = false
2034
backend = auto
2034
backend = auto
2035
filter = alcasar_change-pwd
2035
filter = alcasar_change-pwd
2036
action = iptables-allports[name=alcasar_change-pwd]
2036
action = iptables-allports[name=alcasar_change-pwd]
2037
logpath = /var/log/httpd/access_log
2037
logpath = /var/log/httpd/access_log
2038
maxretry = 5
2038
maxretry = 5
2039
bantime = 3m
2039
bantime = 3m
2040
findtime = 3m
2040
findtime = 3m
2041
EOF
2041
EOF
2042
	cat << EOF > /etc/fail2ban/filter.d/alcasar_change-pwd.conf
2042
	cat << EOF > /etc/fail2ban/filter.d/alcasar_change-pwd.conf
2043
[Definition]
2043
[Definition]
2044
failregex = <HOST> .* \"POST \/password\.php
2044
failregex = <HOST> .* \"POST \/password\.php
2045
ignoreregex =
2045
ignoreregex =
2046
EOF
2046
EOF
2047
 
2047
 
2048
# allow reading of 2 log files (fail2ban & watchdog).
2048
# allow reading of 2 log files (fail2ban & watchdog).
2049
	[ -e /var/log/fail2ban.log ] || /usr/bin/touch /var/log/fail2ban.log
2049
	[ -e /var/log/fail2ban.log ] || /usr/bin/touch /var/log/fail2ban.log
2050
	[ -e $DIR_SAVE/security/watchdog.log ] || /usr/bin/touch $DIR_SAVE/security/watchdog.log
2050
	[ -e $DIR_SAVE/security/watchdog.log ] || /usr/bin/touch $DIR_SAVE/security/watchdog.log
2051
	chmod 644 /var/log/fail2ban.log
2051
	chmod 644 /var/log/fail2ban.log
2052
	chmod 644 $DIR_SAVE/security/watchdog.log
2052
	chmod 644 $DIR_SAVE/security/watchdog.log
2053
	/usr/bin/touch /var/log/auth.log
2053
	/usr/bin/touch /var/log/auth.log
2054
# fail2ban unit
2054
# fail2ban unit
2055
	cp /lib/systemd/system/fail2ban.service /etc/systemd/system/fail2ban.service
2055
	cp /lib/systemd/system/fail2ban.service /etc/systemd/system/fail2ban.service
2056
	$SED '/ExecStart=/a\ExecStop=/usr/bin/fail2ban-client stop' /etc/systemd/system/fail2ban.service
2056
	$SED '/ExecStart=/a\ExecStop=/usr/bin/fail2ban-client stop' /etc/systemd/system/fail2ban.service
2057
	$SED '/Type=/a\PIDFile=/run/fail2ban/fail2ban.pid' /etc/systemd/system/fail2ban.service
2057
	$SED '/Type=/a\PIDFile=/run/fail2ban/fail2ban.pid' /etc/systemd/system/fail2ban.service
2058
	$SED '/After=*/c After=syslog.target network.target httpd.service' /etc/systemd/system/fail2ban.service
2058
	$SED '/After=*/c After=syslog.target network.target httpd.service' /etc/systemd/system/fail2ban.service
2059
} # End of fail2ban()
2059
} # End of fail2ban()
2060
 
2060
 
2061
########################################################
2061
########################################################
2062
##                  "gammu_smsd"                      ##
2062
##                  "gammu_smsd"                      ##
2063
## - Creating of SMS management database              ##
2063
## - Creating of SMS management database              ##
2064
## - Write the gammu a gammu_smsd conf files          ##
2064
## - Write the gammu a gammu_smsd conf files          ##
2065
########################################################
2065
########################################################
2066
gammu_smsd()
2066
gammu_smsd()
2067
{
2067
{
2068
# Create 'gammu' system user
2068
# Create 'gammu' system user
2069
	groupadd -f gammu_smsd
2069
	groupadd -f gammu_smsd
2070
	useradd -r -g gammu_smsd -s /bin/false -c "system user for gammu_smsd" gammu_smsd
2070
	useradd -r -g gammu_smsd -s /bin/false -c "system user for gammu_smsd" gammu_smsd
2071
	usermod -a -G dialout gammu_smsd
2071
	usermod -a -G dialout gammu_smsd
2072
 
2072
 
2073
# Create 'gammu' database
2073
# Create 'gammu' database
2074
	SQL="/usr/bin/mariadb -uroot -p$dbpwd --execute"
2074
	SQL="/usr/bin/mariadb -uroot -p$dbpwd --execute"
2075
	$SQL "CREATE DATABASE IF NOT EXISTS $DB_GAMMU; GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd'; FLUSH PRIVILEGES;"
2075
	$SQL "CREATE DATABASE IF NOT EXISTS $DB_GAMMU; GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd'; FLUSH PRIVILEGES;"
2076
# Add a gammu database structure
2076
# Add a gammu database structure
2077
	/usr/bin/mariadb -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/empty-gammu-smsd-db.sql
2077
	/usr/bin/mariadb -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/empty-gammu-smsd-db.sql
2078
 
2078
 
2079
# Config file for the gammu_smsd daemon & gammu (ttyUSB0 as default com port)
2079
# Config file for the gammu_smsd daemon & gammu (ttyUSB0 as default com port)
2080
	cat << EOF > /etc/gammurc
2080
	cat << EOF > /etc/gammurc
2081
[gammu]
2081
[gammu]
2082
device = /dev/ttyUSB0
2082
device = /dev/ttyUSB0
2083
connection = at115200
2083
connection = at115200
2084
EOF
2084
EOF
2085
 
2085
 
2086
	cat << EOF > /etc/gammu_smsd_conf
2086
	cat << EOF > /etc/gammu_smsd_conf
2087
[gammu]
2087
[gammu]
2088
port = /dev/ttyUSB0
2088
port = /dev/ttyUSB0
2089
connection = at115200
2089
connection = at115200
2090
 
2090
 
2091
[smsd]
2091
[smsd]
2092
PIN = 1234
2092
PIN = 1234
2093
logfile = /var/log/gammu-smsd/gammu-smsd.log
2093
logfile = /var/log/gammu-smsd/gammu-smsd.log
2094
logformat = textall
2094
logformat = textall
2095
debuglevel = 0
2095
debuglevel = 0
2096
 
2096
 
2097
service = sql
2097
service = sql
2098
driver = native_mysql
2098
driver = native_mysql
2099
user = $DB_USER
2099
user = $DB_USER
2100
password = $radiuspwd
2100
password = $radiuspwd
2101
pc = localhost
2101
pc = localhost
2102
database = $DB_GAMMU
2102
database = $DB_GAMMU
2103
 
2103
 
2104
RunOnReceive = sudo $DIR_DEST_BIN/alcasar-sms.sh --new_sms
2104
RunOnReceive = sudo $DIR_DEST_BIN/alcasar-sms.sh --new_sms
2105
 
2105
 
2106
StatusFrequency = 30
2106
StatusFrequency = 30
2107
;LoopSleep = 2
2107
;LoopSleep = 2
2108
 
2108
 
2109
;ResetFrequency = 300
2109
;ResetFrequency = 300
2110
;HardResetFrequency = 120
2110
;HardResetFrequency = 120
2111
 
2111
 
2112
CheckSecurity = 1
2112
CheckSecurity = 1
2113
CheckSignal = 1
2113
CheckSignal = 1
2114
CheckBattery = 0
2114
CheckBattery = 0
2115
EOF
2115
EOF
2116
	chmod 755 /etc/gammu_smsd_conf /etc/gammurc
2116
	chmod 755 /etc/gammu_smsd_conf /etc/gammurc
2117
 
2117
 
2118
# Create the systemd unit
2118
# Create the systemd unit
2119
	cat << EOF > /etc/systemd/system/gammu-smsd.service
2119
	cat << EOF > /etc/systemd/system/gammu-smsd.service
2120
[Unit]
2120
[Unit]
2121
Description=SMS daemon for Gammu
2121
Description=SMS daemon for Gammu
2122
Documentation=man:gammu-smsd(1)
2122
Documentation=man:gammu-smsd(1)
2123
After=network.target mariadb.service
2123
After=network.target mariadb.service
2124
 
2124
 
2125
[Service]
2125
[Service]
2126
Type=forking
2126
Type=forking
2127
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu_smsd_conf --user=gammu_smsd --group=gammu_smsd --pid=/run/gammu-smsd.pid --daemon
2127
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu_smsd_conf --user=gammu_smsd --group=gammu_smsd --pid=/run/gammu-smsd.pid --daemon
2128
ExecReload=/bin/kill -HUP $MAINPID
2128
ExecReload=/bin/kill -HUP $MAINPID
2129
ExecStopPost=/bin/rm -f /run/gammu-smsd.pid
2129
ExecStopPost=/bin/rm -f /run/gammu-smsd.pid
2130
PIDFile=/run/gammu-smsd.pid
2130
PIDFile=/run/gammu-smsd.pid
2131
 
2131
 
2132
[Install]
2132
[Install]
2133
WantedBy=multi-user.target
2133
WantedBy=multi-user.target
2134
EOF
2134
EOF
2135
 
2135
 
2136
# Log folder for gammu-smsd
2136
# Log folder for gammu-smsd
2137
	[ -d /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
2137
	[ -d /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
2138
	chmod 755 /var/log/gammu-smsd
2138
	chmod 755 /var/log/gammu-smsd
2139
 
2139
 
2140
# Udev rule for Modeswitch (switch from "mass_storage" mode to "ttyUSB" modem) needed with some Huawei MODEM (idVendor: 12d1)
2140
# Udev rule for Modeswitch (switch from "mass_storage" mode to "ttyUSB" modem) needed with some Huawei MODEM (idVendor: 12d1)
2141
# normally not needed now since modeswitch is managed by udev (see Mageia RPM)
2141
# normally not needed now since modeswitch is managed by udev (see Mageia RPM)
2142
#cat << EOF > /lib/udev/rules.d/66-huawei.rules
2142
#cat << EOF > /lib/udev/rules.d/66-huawei.rules
2143
#KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="$DIR_DEST_BIN/alcasar-sms.sh --mode"
2143
#KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="$DIR_DEST_BIN/alcasar-sms.sh --mode"
2144
#EOF
2144
#EOF
2145
# 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
# Udev rule for fixing the enumeration of ttyUSB port on some MODEM (when they switch randomly the order of their ports at boot time)
2146
# example : http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/
2146
# example : http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/
2147
 
2147
 
2148
} # End of gammu_smsd()
2148
} # End of gammu_smsd()
2149
 
2149
 
2150
########################################################
2150
########################################################
2151
##                      "msec"                        ##
2151
##                      "msec"                        ##
2152
## - Apply the "fileserver" security level            ##
2152
## - Apply the "fileserver" security level            ##
2153
## - remove the "system request" for rebooting        ##
2153
## - remove the "system request" for rebooting        ##
2154
## - Fix several file permissions                     ##
2154
## - Fix several file permissions                     ##
2155
########################################################
2155
########################################################
2156
msec()
2156
msec()
2157
{
2157
{
2158
 
2158
 
2159
# Apply fileserver security level
2159
# Apply fileserver security level
2160
	[ -e /etc/security/msec/security.conf.default ] || cp /etc/security/msec/security.conf /etc/security/msec/security.conf.default
2160
	[ -e /etc/security/msec/security.conf.default ] || cp /etc/security/msec/security.conf /etc/security/msec/security.conf.default
2161
	echo "BASE_LEVEL=fileserver" > /etc/security/msec/security.conf
2161
	echo "BASE_LEVEL=fileserver" > /etc/security/msec/security.conf
2162
 
2162
 
2163
# Set permissions monitoring and enforcement
2163
# Set permissions monitoring and enforcement
2164
cat <<EOF > /etc/security/msec/perm.local
2164
cat <<EOF > /etc/security/msec/perm.local
2165
/var/log/firewall/                      root.apache     750
2165
/var/log/firewall/                      root.apache     750
2166
/var/log/firewall/*                     root.apache     640
2166
/var/log/firewall/*                     root.apache     640
2167
/etc/security/msec/perm.local           root.root       640
2167
/etc/security/msec/perm.local           root.root       640
2168
/etc/security/msec/level.local          root.root       640
2168
/etc/security/msec/level.local          root.root       640
2169
/etc/freeradius-web                     root.apache     750
2169
/etc/freeradius-web                     root.apache     750
2170
/etc/freeradius-web/admin.conf          root.apache     640
2170
/etc/freeradius-web/admin.conf          root.apache     640
2171
/etc/raddb/client.conf                  radius.radius   640
2171
/etc/raddb/client.conf                  radius.radius   640
2172
/etc/raddb/radius.conf                  radius.radius   640
2172
/etc/raddb/radius.conf                  radius.radius   640
2173
/etc/raddb/mods-available/ldap          radius.apache   660
2173
/etc/raddb/mods-available/ldap          radius.apache   660
2174
/etc/raddb/sites-available/alcasar      radius.apache   660
2174
/etc/raddb/sites-available/alcasar      radius.apache   660
2175
/etc/pki/CA/                            root.apache     750 force
2175
/etc/pki/CA/                            root.apache     750 force
2176
/etc/pki/CA/*                           root.apache     640 force 
2176
/etc/pki/CA/*                           root.apache     640 force 
2177
/etc/pki/CA/private/                    root.root       700 force
2177
/etc/pki/CA/private/                    root.root       700 force
2178
/etc/pki/CA/private/*                   root.root       600 force
2178
/etc/pki/CA/private/*                   root.root       600 force
2179
/etc/pki/tls/private/                   root.apache     750 force
2179
/etc/pki/tls/private/                   root.apache     750 force
2180
/etc/pki/tls/private/*                  root.apache     640 force
2180
/etc/pki/tls/private/*                  root.apache     640 force
2181
EOF
2181
EOF
2182
# apply now hourly & daily checks
2182
# apply now hourly & daily checks
2183
	/usr/sbin/msec
2183
	/usr/sbin/msec
2184
	/etc/cron.weekly/msec
2184
	/etc/cron.weekly/msec
2185
 
2185
 
2186
} # End of msec()
2186
} # End of msec()
2187
 
2187
 
2188
##################################################################
2188
##################################################################
2189
##                   Fonction "letsencrypt"                     ##
2189
##                   Fonction "letsencrypt"                     ##
2190
## - Install Let's Encrypt client                               ##
2190
## - Install Let's Encrypt client                               ##
2191
## - Prepare Let's Encrypt ALCASAR configuration file           ##
2191
## - Prepare Let's Encrypt ALCASAR configuration file           ##
2192
##################################################################
2192
##################################################################
2193
letsencrypt()
2193
letsencrypt()
2194
{
2194
{
2195
	acmesh_installDir="/opt/acme.sh"
2195
	acmesh_installDir="/opt/acme.sh"
2196
	acmesh_confDir="/usr/local/etc/letsencrypt"
2196
	acmesh_confDir="/usr/local/etc/letsencrypt"
2197
	acmesh_userAgent="ALCASAR"
2197
	acmesh_userAgent="ALCASAR"
2198
# Remove potential old installers
2198
# Remove potential old installers
2199
	rm -rf /tmp/acme.sh-*
2199
	rm -rf /tmp/acme.sh-*
2200
	[ -d $acmesh_confDir ] && rm -rf $acmesh_confDir
2200
	[ -d $acmesh_confDir ] && rm -rf $acmesh_confDir
2201
# Extract acme.sh
2201
# Extract acme.sh
2202
	tar xzf ./conf/letsencrypt-client/acme.sh-*.tar.gz -C /tmp/
2202
	tar xzf ./conf/letsencrypt-client/acme.sh-*.tar.gz -C /tmp/
2203
	pwdInstall=$(pwd)
2203
	pwdInstall=$(pwd)
2204
	cd /tmp/acme.sh-* || { echo "Unable to find tmp ACME directory"; exit 1; }
2204
	cd /tmp/acme.sh-* || { echo "Unable to find tmp ACME directory"; exit 1; }
2205
	mkdir $acmesh_confDir ; chown root:apache $acmesh_confDir ; chmod 440 $acmesh_confDir
2205
	mkdir $acmesh_confDir ; chown root:apache $acmesh_confDir ; chmod 440 $acmesh_confDir
2206
	mkdir $acmesh_confDir/{data,certs,ca} ; chown root:apache $acmesh_confDir/{data,certs,ca} ; chmod 440 $acmesh_confDir/{data,certs,ca}
2206
	mkdir $acmesh_confDir/{data,certs,ca} ; chown root:apache $acmesh_confDir/{data,certs,ca} ; chmod 440 $acmesh_confDir/{data,certs,ca}
2207
# Install acme.sh
2207
# Install acme.sh
2208
	./acme.sh --install \
2208
	./acme.sh --install \
2209
		--home $acmesh_installDir \
2209
		--home $acmesh_installDir \
2210
		--config-home $acmesh_confDir/data \
2210
		--config-home $acmesh_confDir/data \
2211
		--certhome $acmesh_confDir/certs \
2211
		--certhome $acmesh_confDir/certs \
2212
		--accountkey $acmesh_confDir/ca/account.key \
2212
		--accountkey $acmesh_confDir/ca/account.key \
2213
		--accountconf $acmesh_confDir/data/account.conf \
2213
		--accountconf $acmesh_confDir/data/account.conf \
2214
		--useragent $acmesh_userAgent \
2214
		--useragent $acmesh_userAgent \
2215
		--nocron \
2215
		--nocron \
2216
		> /dev/null
2216
		> /dev/null
2217
	if [ $? -ne 0 ]; then
2217
	if [ $? -ne 0 ]; then
2218
		echo "Error during installation of Let's Encrypt client (acme.sh)."
2218
		echo "Error during installation of Let's Encrypt client (acme.sh)."
2219
	fi
2219
	fi
2220
# Create configuration file
2220
# Create configuration file
2221
	cat <<EOF > /usr/local/etc/alcasar-letsencrypt
2221
	cat <<EOF > /usr/local/etc/alcasar-letsencrypt
2222
email=
2222
email=
2223
dateIssueRequest=
2223
dateIssueRequest=
2224
domainRequest=
2224
domainRequest=
2225
challenge=
2225
challenge=
2226
dateIssued=
2226
dateIssued=
2227
dnsapi=
2227
dnsapi=
2228
dateNextRenewal=
2228
dateNextRenewal=
2229
EOF
2229
EOF
2230
	cd $pwdInstall || { echo "Unable to find $pwdInstall directory"; exit 1; }
2230
	cd $pwdInstall || { echo "Unable to find $pwdInstall directory"; exit 1; }
2231
	rm -rf /tmp/acme.sh-*
2231
	rm -rf /tmp/acme.sh-*
2232
} # End of letsencrypt()
2232
} # End of letsencrypt()
2233
 
2233
 
2234
##################################################################
2234
##################################################################
2235
##                       "mail_service"                         ##
2235
##                       "mail_service"                         ##
2236
## - Postfix/cyrus-sasl conf for email registration method      ##
2236
## - Postfix/cyrus-sasl conf for email registration method      ##
2237
##################################################################
2237
##################################################################
2238
mail_service()
2238
mail_service()
2239
{
2239
{
2240
	[ -e /etc/php.d/05_mail.ini.default ] || cp /etc/php.d/05_mail.ini /etc/php.d/05_mail.ini.default
2240
	[ -e /etc/php.d/05_mail.ini.default ] || cp /etc/php.d/05_mail.ini /etc/php.d/05_mail.ini.default
2241
	$SED "s?^mail.add_x_header =.*?mail.add_x_header = Off?g" /etc/php.d/05_mail.ini
2241
	$SED "s?^mail.add_x_header =.*?mail.add_x_header = Off?g" /etc/php.d/05_mail.ini
2242
	[ -e /etc/postfix/main.cf.orig ] || cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
2242
	[ -e /etc/postfix/main.cf.orig ] || cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
2243
	$SED "s?^inet_protocols =.*?inet_protocols = ipv4?g" /etc/postfix/main.cf
2243
	$SED "s?^inet_protocols =.*?inet_protocols = ipv4?g" /etc/postfix/main.cf
2244
	$SED "s?^smtp_tls_security_level =.*?smtp_tls_security_level = encrypt?g" /etc/postfix/main.cf
2244
	$SED "s?^smtp_tls_security_level =.*?smtp_tls_security_level = encrypt?g" /etc/postfix/main.cf
2245
	$SED "s?^smtpd_banner =.*?smtpd_banner = $HOSTNAME.$DOMAIN ESMTP?g" /etc/postfix/main.cf
2245
	$SED "s?^smtpd_banner =.*?smtpd_banner = $HOSTNAME.$DOMAIN ESMTP?g" /etc/postfix/main.cf
2246
	cat << EOT >> /etc/postfix/main.cf
2246
	cat << EOT >> /etc/postfix/main.cf
2247
smtputf8_enable = no
2247
smtputf8_enable = no
2248
smtp_use_tls = yes
2248
smtp_use_tls = yes
2249
smtp_tls_wrappermode = yes
2249
smtp_tls_wrappermode = yes
2250
smtp_sasl_auth_enable = yes
2250
smtp_sasl_auth_enable = yes
2251
smtp_sasl_security_options = noanonymous
2251
smtp_sasl_security_options = noanonymous
2252
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
2252
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
2253
relayhost =
2253
relayhost =
2254
myhostname = $HOSTNAME.$DOMAIN
2254
myhostname = $HOSTNAME.$DOMAIN
2255
EOT
2255
EOT
2256
	[ -e /etc/postfix/aliases.default ] || cp /etc/postfix/aliases /etc/postfix/aliases.default
2256
	[ -e /etc/postfix/aliases.default ] || cp /etc/postfix/aliases /etc/postfix/aliases.default
2257
	human_user=`grep -E "x:1000:" /etc/passwd | cut -d":" -f1`
2257
	human_user=`grep -E "x:1000:" /etc/passwd | cut -d":" -f1`
2258
	grep -Eq 'root:\s+postfix$' /etc/postfix/aliases && $SED "/root:/ s/postfix/$human_user/" /etc/postfix/aliases && newaliases
2258
	grep -Eq 'root:\s+postfix$' /etc/postfix/aliases && $SED "/root:/ s/postfix/$human_user/" /etc/postfix/aliases && newaliases
2259
	chown -R postfix:postfix /var/lib/postfix
2259
	chown -R postfix:postfix /var/lib/postfix
2260
} # end of mail_service
2260
} # end of mail_service
2261
 
2261
 
2262
##################################################################
2262
##################################################################
2263
##                    Fonction "post_install"                   ##
2263
##                    Fonction "post_install"                   ##
2264
## - Modifying banners (locals et ssh) & prompts                ##
2264
## - Modifying banners (locals et ssh) & prompts                ##
2265
## - SSH config                                                 ##
2265
## - SSH config                                                 ##
2266
## - sudoers config & files security                            ##
2266
## - sudoers config & files security                            ##
2267
## - log rotate & ANSSI security parameters                     ##
2267
## - log rotate & ANSSI security parameters                     ##
2268
## - Apply former conf in case of an update                     ##
2268
## - Apply former conf in case of an update                     ##
2269
##################################################################
2269
##################################################################
2270
post_install()
2270
post_install()
2271
{
2271
{
2272
	MAGEIA_VERSION=`cat /etc/lsb-release|grep "DISTRIB_DESCRIPTION"|cut -d"=" -f2|tr -d '"'`
2272
	MAGEIA_VERSION=`cat /etc/lsb-release|grep "DISTRIB_DESCRIPTION"|cut -d"=" -f2|tr -d '"'`
2273
# change the SSHD options
2273
# change the SSHD options
2274
	cp -f $DIR_CONF/banner /etc/ssh/alcasar-banner-ssh
2274
	cp -f $DIR_CONF/banner /etc/ssh/alcasar-banner-ssh
2275
	echo " Version $VERSION ($MAGEIA_VERSION)" >> /etc/ssh/alcasar-banner-ssh
2275
	echo " Version $VERSION ($MAGEIA_VERSION)" >> /etc/ssh/alcasar-banner-ssh
2276
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
2276
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
2277
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2277
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2278
	$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
2279
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
2279
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
2280
# sshd listens on EXTIF & INTIF
2280
# sshd listens on EXTIF & INTIF
2281
	$SED "s?^#ListenAddress 0\.0\.0\.0.*?ListenAddress 0\.0\.0\.0?g" /etc/ssh/sshd_config
2281
	$SED "s?^#ListenAddress 0\.0\.0\.0.*?ListenAddress 0\.0\.0\.0?g" /etc/ssh/sshd_config
2282
# sshd authorized certificate for root login
2282
# sshd authorized certificate for root login
2283
	$SED "s?^PermitRootLogin.*?PermitRootLogin without-password?g" /etc/ssh/sshd_config
2283
	$SED "s?^PermitRootLogin.*?PermitRootLogin without-password?g" /etc/ssh/sshd_config
2284
	$SED "s?^X11Forwarding.*?#X11Forwarding yes?g" /etc/ssh/sshd_config
2284
	$SED "s?^X11Forwarding.*?#X11Forwarding yes?g" /etc/ssh/sshd_config
2285
# ALCASAR conf file
2285
# ALCASAR conf file
2286
	echo "HTTPS_LOGIN=off" >> $CONF_FILE
2286
	echo "HTTPS_LOGIN=off" >> $CONF_FILE
2287
	echo "HTTPS_CHILLI=off" >> $CONF_FILE
-
 
2288
	echo "SSH_LAN=22" >> $CONF_FILE
2287
	echo "SSH_LAN=22" >> $CONF_FILE
2289
	echo "SSH_WAN=0" >> $CONF_FILE
2288
	echo "SSH_WAN=0" >> $CONF_FILE
2290
	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
2291
	echo "INTERLAN=off" >> $CONF_FILE
2290
	echo "INTERLAN=off" >> $CONF_FILE
2292
	echo "LDAP=off" >> $CONF_FILE
2291
	echo "LDAP=off" >> $CONF_FILE
2293
	echo "LDAP_SERVER=127.0.0.1" >> $CONF_FILE
2292
	echo "LDAP_SERVER=127.0.0.1" >> $CONF_FILE
2294
	echo "LDAP_BASE=cn=Users;dc=serverad;dc=lan" >> $CONF_FILE
2293
	echo "LDAP_BASE=cn=Users;dc=serverad;dc=lan" >> $CONF_FILE
2295
	echo "LDAP_UID=sAMAccountName" >> $CONF_FILE
2294
	echo "LDAP_UID=sAMAccountName" >> $CONF_FILE
2296
	echo "LDAP_FILTER=" >> $CONF_FILE
2295
	echo "LDAP_FILTER=" >> $CONF_FILE
2297
	echo "LDAP_USER=alcasar" >> $CONF_FILE
2296
	echo "LDAP_USER=alcasar" >> $CONF_FILE
2298
	echo "LDAP_PASSWORD=" >> $CONF_FILE
2297
	echo "LDAP_PASSWORD=" >> $CONF_FILE
2299
	echo "LDAP_SSL=on" >> $CONF_FILE
2298
	echo "LDAP_SSL=on" >> $CONF_FILE
2300
	echo "LDAP_CERT_REQUIRED=" >> $CONF_FILE
2299
	echo "LDAP_CERT_REQUIRED=" >> $CONF_FILE
2301
	echo "SMS=off" >> $CONF_FILE
2300
	echo "SMS=off" >> $CONF_FILE
2302
	echo "SMS_NUM=" >> $CONF_FILE
2301
	echo "SMS_NUM=" >> $CONF_FILE
2303
	echo "MAIL=off" >> $CONF_FILE
2302
	echo "MAIL=off" >> $CONF_FILE
2304
	echo "MAIL_TYPE=" >> $CONF_FILE
2303
	echo "MAIL_TYPE=" >> $CONF_FILE
2305
	echo "MAIL_SMTP_IP=" >> $CONF_FILE
2304
	echo "MAIL_SMTP_IP=" >> $CONF_FILE
2306
	echo "MAIL_SMTP_PORT=" >> $CONF_FILE
2305
	echo "MAIL_SMTP_PORT=" >> $CONF_FILE
2307
	echo "MAIL_ADDR=" >> $CONF_FILE
2306
	echo "MAIL_ADDR=" >> $CONF_FILE
2308
	echo "MAIL_WHITEDOMAIN=" >> $CONF_FILE
2307
	echo "MAIL_WHITEDOMAIN=" >> $CONF_FILE
2309
	echo "MAIL_ADMIN=" >> $CONF_FILE
2308
	echo "MAIL_ADMIN=" >> $CONF_FILE
2310
	echo "BL_PUREIP=on" >> $CONF_FILE
2309
	echo "BL_PUREIP=on" >> $CONF_FILE
2311
	echo "BL_SAFESEARCH=off" >> $CONF_FILE
2310
	echo "BL_SAFESEARCH=off" >> $CONF_FILE
2312
	echo "WL_SAFESEARCH=off" >> $CONF_FILE
2311
	echo "WL_SAFESEARCH=off" >> $CONF_FILE
2313
	echo "IOT_CAPTURE=off" >> $CONF_FILE
2312
	echo "IOT_CAPTURE=off" >> $CONF_FILE
2314
	echo "WIFI4EU=off" >> $CONF_FILE
2313
	echo "WIFI4EU=off" >> $CONF_FILE
2315
	echo "WIFI4EU_CODE=123e4567-e89b-12d3-a456-426655440000" >> $CONF_FILE
2314
	echo "WIFI4EU_CODE=123e4567-e89b-12d3-a456-426655440000" >> $CONF_FILE
2316
	echo "MULTIWAN=off" >> $CONF_FILE
2315
	echo "MULTIWAN=off" >> $CONF_FILE
2317
	echo "REPLICATION=off" >> $CONF_FILE
2316
	echo "REPLICATION=off" >> $CONF_FILE
2318
	echo "REPLICATION_TO=" >> $CONF_FILE
2317
	echo "REPLICATION_TO=" >> $CONF_FILE
2319
# Prompt customisation (colors)
2318
# Prompt customisation (colors)
2320
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
2319
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
2321
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
2320
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
2322
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
2321
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
2323
	$SED "s?^alias ll=.*?alias ll=\"ls -al --color\"?g" /etc/profile.d/60alias.sh
2322
	$SED "s?^alias ll=.*?alias ll=\"ls -al --color\"?g" /etc/profile.d/60alias.sh
2324
# sudoers configuration for "apache" & "sysadmin"
2323
# sudoers configuration for "apache" & "sysadmin"
2325
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
2324
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
2326
	cp -f $DIR_CONF/sudoers /etc/ ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
2325
	cp -f $DIR_CONF/sudoers /etc/ ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
2327
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
2326
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
2328
# Modify some logrotate files (gammu, ulogd)
2327
# Modify some logrotate files (gammu, ulogd)
2329
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
2328
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
2330
	chmod 644 /etc/logrotate.d/*
2329
	chmod 644 /etc/logrotate.d/*
2331
# Log compression
2330
# Log compression
2332
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
2331
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
2333
# actualisation des fichiers logs compressés
2332
# actualisation des fichiers logs compressés
2334
	for dir in firewall e2guardian httpd
2333
	for dir in firewall e2guardian httpd
2335
	do
2334
	do
2336
		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 {} \;
2335
		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 {} \;
2337
	done
2336
	done
2338
	/usr/bin/systemctl daemon-reload
2337
	/usr/bin/systemctl daemon-reload
2339
# processes started at boot time (Systemctl)
2338
# processes started at boot time (Systemctl)
2340
	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
2339
	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
2341
	do
2340
	do
2342
		/usr/bin/systemctl -q enable $i.service
2341
		/usr/bin/systemctl -q enable $i.service
2343
	done
2342
	done
2344
 
2343
 
2345
# disable processes at boot time (Systemctl)
2344
# disable processes at boot time (Systemctl)
2346
	for i in ulogd gpm dhcpd
2345
	for i in ulogd gpm dhcpd
2347
	do
2346
	do
2348
		/usr/bin/systemctl -q disable $i.service
2347
		/usr/bin/systemctl -q disable $i.service
2349
	done
2348
	done
2350
 
2349
 
2351
# Apply some security rules (some are from French cybersecurity Agency - ANSSI)
2350
# Apply some security rules (some are from French cybersecurity Agency - ANSSI)
2352
# ignore ICMP broadcast (smurf attack)
2351
# ignore ICMP broadcast (smurf attack)
2353
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
2352
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
2354
# ignore ICMP errors bogus
2353
# ignore ICMP errors bogus
2355
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
2354
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
2356
# remove ICMP redirects responces
2355
# remove ICMP redirects responces
2357
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2356
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2358
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2357
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
2359
# enable SYN Cookies (Syn flood attacks)
2358
# enable SYN Cookies (Syn flood attacks)
2360
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
2359
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
2361
# enable kernel antispoofing
2360
# enable kernel antispoofing
2362
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
2361
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
2363
# ignore source routing
2362
# ignore source routing
2364
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
2363
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
2365
# 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)
2366
	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
2367
# Switch to the router mode
2366
# Switch to the router mode
2368
	echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/alcasar.conf
2367
	echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/alcasar.conf
2369
# Remove unused service ipv6
2368
# Remove unused service ipv6
2370
	echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2369
	echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2371
	echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2370
	echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2372
	echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2371
	echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.d/alcasar.conf
2373
	echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2372
	echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.d/alcasar.conf
2374
# switch to multi-users runlevel (instead of x11)
2373
# switch to multi-users runlevel (instead of x11)
2375
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
2374
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
2376
# disable Core dump file
2375
# disable Core dump file
2377
	[ -e /etc/security/limits.conf.default ]  || cp /etc/security/limits.conf /etc/security/limits.conf.default
2376
	[ -e /etc/security/limits.conf.default ]  || cp /etc/security/limits.conf /etc/security/limits.conf.default
2378
	$SED "/^# End of file.*/i*\tsoft\tcore\t0\n*\thard\tcore\t0" /etc/security/limits.conf
2377
	$SED "/^# End of file.*/i*\tsoft\tcore\t0\n*\thard\tcore\t0" /etc/security/limits.conf
2379
# GRUB2 modifications (Wait time : 3s - ALCASAR entry - VGA=791 - Change the default banner
2378
# GRUB2 modifications (Wait time : 3s - ALCASAR entry - VGA=791 - Change the default banner
2380
	[ -e /etc/default/grub.default ] || cp /etc/default/grub /etc/default/grub.default
2379
	[ -e /etc/default/grub.default ] || cp /etc/default/grub /etc/default/grub.default
2381
	$SED "s?^GRUB_TIMEOUT=.*?GRUB_TIMEOUT=3?g" /etc/default/grub
2380
	$SED "s?^GRUB_TIMEOUT=.*?GRUB_TIMEOUT=3?g" /etc/default/grub
2382
	$SED "s?^GRUB_DISTRIBUTOR=.*?GRUB_DISTRIBUTOR=ALCASAR?g" /etc/default/grub
2381
	$SED "s?^GRUB_DISTRIBUTOR=.*?GRUB_DISTRIBUTOR=ALCASAR?g" /etc/default/grub
2383
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
2382
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
2384
	vm_vga=`lsmod | grep -c -E "virtio|vmwgfx"` # test if in VM
2383
	vm_vga=`lsmod | grep -c -E "virtio|vmwgfx"` # test if in VM
2385
	if [ $vm_vga == 0 ] # is not a VM
2384
	if [ $vm_vga == 0 ] # is not a VM
2386
	then
2385
	then
2387
		cp -f $DIR_CONF/banner /etc/mageia-release # ALCASAR ASCII-Art
2386
		cp -f $DIR_CONF/banner /etc/mageia-release # ALCASAR ASCII-Art
2388
		echo >> /etc/mageia-release
2387
		echo >> /etc/mageia-release
2389
		$SED "s?^GRUB_CMDLINE_LINUX_DEFAULT=\"?&vga=791 ?" /etc/default/grub
2388
		$SED "s?^GRUB_CMDLINE_LINUX_DEFAULT=\"?&vga=791 ?" /etc/default/grub
2390
	else
2389
	else
2391
		echo > /etc/mageia-release
2390
		echo > /etc/mageia-release
2392
	fi
2391
	fi
2393
	if [ $Lang == "fr" ]
2392
	if [ $Lang == "fr" ]
2394
	then
2393
	then
2395
		echo "Bienvenue sur ALCASAR Version $VERSION ($MAGEIA_VERSION)" >> /etc/mageia-release
2394
		echo "Bienvenue sur ALCASAR Version $VERSION ($MAGEIA_VERSION)" >> /etc/mageia-release
2396
		echo "Connectez-vous à l'URL 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2395
		echo "Connectez-vous à l'URL 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2397
	else
2396
	else
2398
		echo "Welcome on ALCASAR Version $VERSION ($MAGEIA_VERSION)" >> /etc/mageia-release
2397
		echo "Welcome on ALCASAR Version $VERSION ($MAGEIA_VERSION)" >> /etc/mageia-release
2399
		echo "Connect to 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2398
		echo "Connect to 'https://$HOSTNAME.$DOMAIN/acc'" >> /etc/mageia-release
2400
	fi
2399
	fi
2401
	/usr/bin/update-grub2
2400
	/usr/bin/update-grub2
2402
# Load and apply the previous conf file
2401
# Load and apply the previous conf file
2403
	if [ "$mode" = "update" ]
2402
	if [ "$mode" = "update" ]
2404
	then
2403
	then
2405
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in $DIR_SAVE/archive
2404
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in $DIR_SAVE/archive
2406
		$DIR_DEST_BIN/alcasar-conf.sh --load
2405
		$DIR_DEST_BIN/alcasar-conf.sh --load
2407
		PARENT_SCRIPT=`basename $0`
2406
		PARENT_SCRIPT=`basename $0`
2408
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
2407
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
2409
		$DIR_DEST_BIN/alcasar-conf.sh --apply
2408
		$DIR_DEST_BIN/alcasar-conf.sh --apply
2410
		$DIR_DEST_BIN/alcasar-file-clean.sh # Clean & sort conf files. Add uamallowed domains to the dns-blackhole conf
2409
		$DIR_DEST_BIN/alcasar-file-clean.sh # Clean & sort conf files. Add uamallowed domains to the dns-blackhole conf
2411
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
2410
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
2412
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
2411
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
2413
	fi
2412
	fi
2414
	rm -f /var/tmp/alcasar-conf*
2413
	rm -f /var/tmp/alcasar-conf*
2415
	chown -R root:apache $DIR_DEST_ETC/*
2414
	chown -R root:apache $DIR_DEST_ETC/*
2416
	chmod -R 660 $DIR_DEST_ETC/*
2415
	chmod -R 660 $DIR_DEST_ETC/*
2417
	chmod ug+x $DIR_DEST_ETC/digest
2416
	chmod ug+x $DIR_DEST_ETC/digest
2418
	cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
2417
	cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
2419
	echo ""
2418
	echo ""
2420
	echo "#############################################################################"
2419
	echo "#############################################################################"
2421
	if [ $Lang == "fr" ]
2420
	if [ $Lang == "fr" ]
2422
		then
2421
		then
2423
		echo "#                        Fin d'installation d'ALCASAR                       #"
2422
		echo "#                        Fin d'installation d'ALCASAR                       #"
2424
		echo "#                                                                           #"
2423
		echo "#                                                                           #"
2425
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2424
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2426
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2425
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2427
		echo "#                                                                           #"
2426
		echo "#                                                                           #"
2428
		echo "#############################################################################"
2427
		echo "#############################################################################"
2429
		echo
2428
		echo
2430
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
2429
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
2431
		echo
2430
		echo
2432
		echo "- Lisez attentivement la documentation d'exploitation"
2431
		echo "- Lisez attentivement la documentation d'exploitation"
2433
		echo
2432
		echo
2434
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://$HOSTNAME.$DOMAIN"
2433
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://$HOSTNAME.$DOMAIN"
2435
		echo
2434
		echo
2436
		echo "                   Appuyez sur 'Entrée' pour continuer"
2435
		echo "                   Appuyez sur 'Entrée' pour continuer"
2437
	else
2436
	else
2438
		echo "#                        End of ALCASAR install process                     #"
2437
		echo "#                        End of ALCASAR install process                     #"
2439
		echo "#                                                                           #"
2438
		echo "#                                                                           #"
2440
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2439
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
2441
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2440
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
2442
		echo "#                                                                           #"
2441
		echo "#                                                                           #"
2443
		echo "#############################################################################"
2442
		echo "#############################################################################"
2444
		echo
2443
		echo
2445
		echo "- The system will be rebooted in order to operate ALCASAR"
2444
		echo "- The system will be rebooted in order to operate ALCASAR"
2446
		echo
2445
		echo
2447
		echo "- Read the exploitation documentation"
2446
		echo "- Read the exploitation documentation"
2448
		echo
2447
		echo
2449
		echo "- The ALCASAR Control Center (ACC) is at http://$HOSTNAME.$DOMAIN"
2448
		echo "- The ALCASAR Control Center (ACC) is at http://$HOSTNAME.$DOMAIN"
2450
		echo
2449
		echo
2451
		echo "                   Hit 'Enter' to continue"
2450
		echo "                   Hit 'Enter' to continue"
2452
	fi
2451
	fi
2453
	sleep 2
2452
	sleep 2
2454
	if [ "$mode" == "install" ] || [ "$DEBUG_ALCASAR" == "on" ]
2453
	if [ "$mode" == "install" ] || [ "$DEBUG_ALCASAR" == "on" ]
2455
	then
2454
	then
2456
		read
2455
		read
2457
	fi
2456
	fi
2458
	clear
2457
	clear
2459
	reboot
2458
	reboot
2460
} # End of post_install()
2459
} # End of post_install()
2461
 
2460
 
2462
#####################################################################################
2461
#####################################################################################
2463
#                                   Main Install loop                               #
2462
#                                   Main Install loop                               #
2464
#####################################################################################
2463
#####################################################################################
2465
dir_exec=`dirname "$0"`
2464
dir_exec=`dirname "$0"`
2466
if [ $dir_exec != "." ]
2465
if [ $dir_exec != "." ]
2467
then
2466
then
2468
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
2467
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
2469
	echo "Launch this program from the ALCASAR archive directory"
2468
	echo "Launch this program from the ALCASAR archive directory"
2470
	exit 0
2469
	exit 0
2471
fi
2470
fi
2472
if [ $EUID -gt 0 ]
2471
if [ $EUID -gt 0 ]
2473
then
2472
then
2474
	echo "Vous devez être \"root\" pour installer ALCASAR (commande 'su')"
2473
	echo "Vous devez être \"root\" pour installer ALCASAR (commande 'su')"
2475
	echo "You must be \"root\" to install ALCASAR ('su' command)"
2474
	echo "You must be \"root\" to install ALCASAR ('su' command)"
2476
	exit 0
2475
	exit 0
2477
fi
2476
fi
2478
VERSION=`cat $DIR_INSTALL/VERSION`
2477
VERSION=`cat $DIR_INSTALL/VERSION`
2479
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
2478
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
2480
nb_args=$#
2479
nb_args=$#
2481
args=$1
2480
args=$1
2482
if [ $nb_args -eq 0 ]
2481
if [ $nb_args -eq 0 ]
2483
then
2482
then
2484
	nb_args=1
2483
	nb_args=1
2485
	args="-h"
2484
	args="-h"
2486
fi
2485
fi
2487
chmod -R u+x $DIR_SCRIPTS/*
2486
chmod -R u+x $DIR_SCRIPTS/*
2488
case $args in
2487
case $args in
2489
	-\? | -h* | --h*)
2488
	-\? | -h* | --h*)
2490
		echo "$usage"
2489
		echo "$usage"
2491
		exit 0
2490
		exit 0
2492
		;;
2491
		;;
2493
	-i | --install)
2492
	-i | --install)
2494
		for func in system_testing network_testing
2493
		for func in system_testing network_testing
2495
		do
2494
		do
2496
			header_install
2495
			header_install
2497
			$func
2496
			$func
2498
			if [ $DEBUG_ALCASAR == "on" ]
2497
			if [ $DEBUG_ALCASAR == "on" ]
2499
			then
2498
			then
2500
				echo "*** 'debug' : end installing function '$func' ***"
2499
				echo "*** 'debug' : end installing function '$func' ***"
2501
				read
2500
				read
2502
			fi
2501
			fi
2503
		done
2502
		done
2504
# RPMs install
2503
# RPMs install
2505
		$DIR_SCRIPTS/alcasar-rpm.sh
2504
		$DIR_SCRIPTS/alcasar-rpm.sh
2506
		if [ "$?" != "0" ]
2505
		if [ "$?" != "0" ]
2507
		then
2506
		then
2508
			exit 0
2507
			exit 0
2509
		fi
2508
		fi
2510
		if [ -e $CONF_FILE ]
2509
		if [ -e $CONF_FILE ]
2511
		then
2510
		then
2512
# Uninstall or update the running version
2511
# Uninstall or update the running version
2513
			if [ "$mode" == "update" ]
2512
			if [ "$mode" == "update" ]
2514
			then
2513
			then
2515
				$DIR_DEST_BIN/alcasar-uninstall.sh -update
2514
				$DIR_DEST_BIN/alcasar-uninstall.sh -update
2516
			else
2515
			else
2517
				$DIR_DEST_BIN/alcasar-uninstall.sh -full
2516
				$DIR_DEST_BIN/alcasar-uninstall.sh -full
2518
			fi
2517
			fi
2519
		fi
2518
		fi
2520
		if [ $DEBUG_ALCASAR == "on" ]
2519
		if [ $DEBUG_ALCASAR == "on" ]
2521
		then
2520
		then
2522
			echo "*** 'debug' : end of cleaning ***"
2521
			echo "*** 'debug' : end of cleaning ***"
2523
			read
2522
			read
2524
		fi
2523
		fi
2525
# Avoid some RPM automatic updates
2524
# Avoid some RPM automatic updates
2526
		echo "/^kernel/" > /etc/urpmi/skip.list
2525
		echo "/^kernel/" > /etc/urpmi/skip.list
2527
		echo "/^wkhtmltopdf/" >> /etc/urpmi/skip.list
2526
		echo "/^wkhtmltopdf/" >> /etc/urpmi/skip.list
2528
		echo "/^freeradius/" >> /etc/urpmi/skip.list
2527
		echo "/^freeradius/" >> /etc/urpmi/skip.list
2529
		echo "/^mariadb/" >> /etc/urpmi/skip.list
2528
		echo "/^mariadb/" >> /etc/urpmi/skip.list
2530
		if [ `grep -E '^exclude=' /etc/dnf/dnf.conf |wc -l` -eq "1" ]; then
2529
		if [ `grep -E '^exclude=' /etc/dnf/dnf.conf |wc -l` -eq "1" ]; then
2531
			$SED "s?^exclude=.*?exclude=kernel\* wkhtmltopdf freeradius mariadb?g" /etc/dnf/dnf.conf
2530
			$SED "s?^exclude=.*?exclude=kernel\* wkhtmltopdf freeradius mariadb?g" /etc/dnf/dnf.conf
2532
		else
2531
		else
2533
			echo "exclude=kernel* wkhtmltopdf freeradius mariadb" >> /etc/dnf/dnf.conf
2532
			echo "exclude=kernel* wkhtmltopdf freeradius mariadb" >> /etc/dnf/dnf.conf
2534
		fi
2533
		fi
2535
# Test if conf file
2534
# Test if conf file
2536
		if [ -e /var/tmp/alcasar-conf.tar.gz ]
2535
		if [ -e /var/tmp/alcasar-conf.tar.gz ]
2537
		then
2536
		then
2538
# Extract some info from the previous configuration file
2537
# Extract some info from the previous configuration file
2539
			cd /var/tmp
2538
			cd /var/tmp
2540
			tar -xf /var/tmp/alcasar-conf.tar.gz conf/etc/alcasar.conf
2539
			tar -xf /var/tmp/alcasar-conf.tar.gz conf/etc/alcasar.conf
2541
			if [ "$mode" == "install" ] # don't display this if updating a running version
2540
			if [ "$mode" == "install" ] # don't display this if updating a running version
2542
			then
2541
			then
2543
				header_install
2542
				header_install
2544
				ORGANISME=`grep ^ORGANISM= conf/etc/alcasar.conf|cut -d"=" -f2`
2543
				ORGANISME=`grep ^ORGANISM= conf/etc/alcasar.conf|cut -d"=" -f2`
2545
				PREVIOUS_VERSION=`grep ^VERSION= conf/etc/alcasar.conf|cut -d"=" -f2`
2544
				PREVIOUS_VERSION=`grep ^VERSION= conf/etc/alcasar.conf|cut -d"=" -f2`
2546
				MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2545
				MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2547
				MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2`
2546
				MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2`
2548
				UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3|cut -c1`
2547
				UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3|cut -c1`
2549
				if [ $Lang == "fr" ]
2548
				if [ $Lang == "fr" ]
2550
					then echo "Le fichier de configuration d'une version $MAJ_PREVIOUS_VERSION.$MIN_PREVIOUS_VERSION.$UPD_PREVIOUS_VERSION a été trouvé";
2549
					then echo "Le fichier de configuration d'une version $MAJ_PREVIOUS_VERSION.$MIN_PREVIOUS_VERSION.$UPD_PREVIOUS_VERSION a été trouvé";
2551
					else echo "The configuration file of a version $MAJ_PREVIOUS_VERSION.$MIN_PREVIOUS_VERSION.$UPD_PREVIOUS_VERSION has been found";
2550
					else echo "The configuration file of a version $MAJ_PREVIOUS_VERSION.$MIN_PREVIOUS_VERSION.$UPD_PREVIOUS_VERSION has been found";
2552
				fi
2551
				fi
2553
				response=0
2552
				response=0
2554
				PTN='^[oOnNyY]?$'
2553
				PTN='^[oOnNyY]?$'
2555
				until [[ "$response" =~ $PTN ]]
2554
				until [[ "$response" =~ $PTN ]]
2556
				do
2555
				do
2557
					if [ $Lang == "fr" ]
2556
					if [ $Lang == "fr" ]
2558
						then echo -n "Voulez-vous l'utiliser (O/n)? ";
2557
						then echo -n "Voulez-vous l'utiliser (O/n)? ";
2559
						else echo -n "Do you want to use it (Y/n)?";
2558
						else echo -n "Do you want to use it (Y/n)?";
2560
					fi
2559
					fi
2561
					read response
2560
					read response
2562
					if [ "$response" = "n" ] || [ "$response" = "N" ]
2561
					if [ "$response" = "n" ] || [ "$response" = "N" ]
2563
					then
2562
					then
2564
						rm -f /var/tmp/alcasar-conf*
2563
						rm -f /var/tmp/alcasar-conf*
2565
						rm -rf /var/tmp/conf
2564
						rm -rf /var/tmp/conf
2566
					fi
2565
					fi
2567
				done
2566
				done
2568
			fi
2567
			fi
2569
			cd $DIR_INSTALL
2568
			cd $DIR_INSTALL
2570
		fi
2569
		fi
2571
# Test if update
2570
# Test if update
2572
		if [ -e /var/tmp/alcasar-conf.tar.gz ]
2571
		if [ -e /var/tmp/alcasar-conf.tar.gz ]
2573
		then
2572
		then
2574
			if [ $Lang == "fr" ]
2573
			if [ $Lang == "fr" ]
2575
				then echo "#### Installation avec mise à jour ####";
2574
				then echo "#### Installation avec mise à jour ####";
2576
				else echo "#### Installation with update     ####";
2575
				else echo "#### Installation with update     ####";
2577
			fi
2576
			fi
2578
			mode="update"
2577
			mode="update"
2579
		fi
2578
		fi
2580
		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
		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
		do
2580
		do
2582
			$func
2581
			$func
2583
			if [ $DEBUG_ALCASAR == "on" ]
2582
			if [ $DEBUG_ALCASAR == "on" ]
2584
			then
2583
			then
2585
				echo "*** 'debug' : end installing function '$func' ***"
2584
				echo "*** 'debug' : end installing function '$func' ***"
2586
				read
2585
				read
2587
			fi
2586
			fi
2588
		done
2587
		done
2589
		;;
2588
		;;
2590
	-u | --uninstall)
2589
	-u | --uninstall)
2591
		if [ ! -e $DIR_DEST_BIN/alcasar-uninstall.sh ]
2590
		if [ ! -e $DIR_DEST_BIN/alcasar-uninstall.sh ]
2592
		then
2591
		then
2593
			if [ $Lang == "fr" ]
2592
			if [ $Lang == "fr" ]
2594
				then echo "ALCASAR n'est pas installé!";
2593
				then echo "ALCASAR n'est pas installé!";
2595
				else echo "ALCASAR isn't installed!";
2594
				else echo "ALCASAR isn't installed!";
2596
			fi
2595
			fi
2597
			exit 0
2596
			exit 0
2598
		fi
2597
		fi
2599
		response=0
2598
		response=0
2600
		PTN='^[oOyYnN]?$'
2599
		PTN='^[oOyYnN]?$'
2601
		until [[ "$response" =~ $PTN ]]
2600
		until [[ "$response" =~ $PTN ]]
2602
		do
2601
		do
2603
			if [ $Lang == "fr" ]
2602
			if [ $Lang == "fr" ]
2604
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (O/n)? ";
2603
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (O/n)? ";
2605
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2604
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2606
			fi
2605
			fi
2607
			read response
2606
			read response
2608
		done
2607
		done
2609
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2608
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2610
		then
2609
		then
2611
			$DIR_DEST_BIN/alcasar-conf.sh --create
2610
			$DIR_DEST_BIN/alcasar-conf.sh --create
2612
		else
2611
		else
2613
			rm -f /var/tmp/alcasar-conf*
2612
			rm -f /var/tmp/alcasar-conf*
2614
		fi
2613
		fi
2615
# Uninstall the running version
2614
# Uninstall the running version
2616
		$DIR_DEST_BIN/alcasar-uninstall.sh -full
2615
		$DIR_DEST_BIN/alcasar-uninstall.sh -full
2617
		;;
2616
		;;
2618
	*)
2617
	*)
2619
		echo "Argument inconnu :$1";
2618
		echo "Argument inconnu :$1";
2620
		echo "Unknown argument :$1";
2619
		echo "Unknown argument :$1";
2621
		echo "$usage"
2620
		echo "$usage"
2622
		exit 1
2621
		exit 1
2623
		;;
2622
		;;
2624
esac
2623
esac
2625
# end of script
2624
# end of script
2626
 
2625
 
2627
 
2626
 
2628

Generated by GNU Enscript 1.6.6.
2627

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