Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2462

Generated by GNU Enscript 1.6.6.
2458
 
2463
 
2459
 
2464
 
2460
 
2465