Subversion Repositories ALCASAR

Rev

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

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

Generated by GNU Enscript 1.6.6.
2495

Generated by GNU Enscript 1.6.6.
2491
 
2496
 
2492
 
2497
 
2493
 
2498