Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2416

Generated by GNU Enscript 1.6.6.
2417
 
2417
 
2418
 
2418
 
2419
 
2419