Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2474

Generated by GNU Enscript 1.6.6.
2508
 
2475
 
2509
 
2476
 
2510
 
2477