Subversion Repositories ALCASAR

Rev

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

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