Subversion Repositories ALCASAR

Rev

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

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