Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2505

Generated by GNU Enscript 1.6.6.
2508
 
2506
 
2509
 
2507
 
2510
 
2508