Subversion Repositories ALCASAR

Rev

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

Rev 1485 Rev 1486
1
#!/bin/bash
1
#!/bin/bash
2
#  $Id: alcasar.sh 1485 2014-11-12 08:12:40Z richard $ 
2
#  $Id: alcasar.sh 1486 2014-11-13 11:15:17Z 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
#
22
#
23
# Coovachilli, freeradius, mariaDB, apache, netfilter, dansguardian, ntpd, openssl, dnsmasq, havp, libclamav, Ulog, fail2ban, NFsen and NFdump
23
# Coovachilli, freeradius, mariaDB, apache, netfilter, dansguardian, ntpd, openssl, dnsmasq, havp, libclamav, Ulog, fail2ban, NFsen and NFdump
24
 
24
 
25
# Options :
25
# Options :
26
#       -i or --install
26
#       -i or --install
27
#       -u or --uninstall
27
#       -u or --uninstall
28
 
28
 
29
# Functions :
29
# Functions :
30
#	testing			: connectivity tests, free space test and mageia version test
30
#	testing			: connectivity tests, free space test and mageia version test
31
#	init			: Installation of RPM and scripts
31
#	init			: Installation of RPM and scripts
32
#	network			: Network parameters
32
#	network			: Network parameters
33
#	ACC			: ALCASAR Control Center installation
33
#	ACC			: ALCASAR Control Center installation
34
#	CA			: Certification Authority initialization
34
#	CA			: Certification Authority initialization
35
#	init_db			: Initilization of radius database managed with MariaDB
35
#	init_db			: Initilization of radius database managed with MariaDB
36
#	radius			: FreeRadius initialisation
36
#	radius			: FreeRadius initialisation
37
#	radius_web		: copy ans modifiy original "freeradius web" in ACC
37
#	radius_web		: copy ans modifiy original "freeradius web" in ACC
38
#	chilli			: coovachilli initialisation (+authentication page)
38
#	chilli			: coovachilli initialisation (+authentication page)
39
#	dansguardian		: DansGuardian filtering HTTP proxy configuration
39
#	dansguardian		: DansGuardian filtering HTTP proxy configuration
40
#	antivirus		: HAVP + libclamav configuration
40
#	antivirus		: HAVP + libclamav configuration
41
#	tinyproxy		: little proxy for user filtered with "WL + antivirus" and "antivirus"
41
#	tinyproxy		: little proxy for user filtered with "WL + antivirus" and "antivirus"
42
#	ulogd			: log system in userland (match NFLOG target of iptables)
42
#	ulogd			: log system in userland (match NFLOG target of iptables)
43
#	nfsen		:	: Configuration du grapheur nfsen pour apache 
43
#	nfsen		:	: Configuration du grapheur nfsen pour apache 
44
#	dnsmasq			: Name server configuration
44
#	dnsmasq			: Name server configuration
45
#	BL			: BlackList of Toulouse configuration : split into 3 BL (for Dnsmasq, for dansguardian and for Netfilter)
45
#	BL			: BlackList of Toulouse configuration : 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
#	post_install		: Security, log rotation, etc.
49
#	post_install		: Security, log rotation, etc.
50
 
50
 
51
DATE=`date '+%d %B %Y - %Hh%M'`
51
DATE=`date '+%d %B %Y - %Hh%M'`
52
DATE_SHORT=`date '+%d/%m/%Y'`
52
DATE_SHORT=`date '+%d/%m/%Y'`
53
Lang=`echo $LANG|cut -c 1-2`
53
Lang=`echo $LANG|cut -c 1-2`
54
mode="install"
54
mode="install"
55
# ******* Files parameters - paramètres fichiers *********
55
# ******* Files parameters - paramètres fichiers *********
56
DIR_INSTALL=`pwd`				# current directory 
56
DIR_INSTALL=`pwd`				# current directory 
57
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
57
DIR_CONF="$DIR_INSTALL/conf"			# install directory (with conf files)
58
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
58
DIR_SCRIPTS="$DIR_INSTALL/scripts"		# install directory (with script files)
59
DIR_SAVE="/var/Save"				# backup directory (system_backup, user_db_backup, logs)
59
DIR_SAVE="/var/Save"				# backup directory (system_backup, user_db_backup, logs)
60
DIR_WEB="/var/www/html"				# directory of APACHE
60
DIR_WEB="/var/www/html"				# directory of APACHE
61
DIR_DG="/etc/dansguardian"			# directory of DansGuardian
61
DIR_DG="/etc/dansguardian"			# directory of DansGuardian
62
DIR_ACC="$DIR_WEB/acc"				# directory of the 'ALCASAR Control Center'
62
DIR_ACC="$DIR_WEB/acc"				# directory of the 'ALCASAR Control Center'
63
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
63
DIR_DEST_BIN="/usr/local/bin"			# directory of ALCASAR scripts
64
DIR_DEST_SBIN="/usr/local/sbin"			# directory of ALCASAR admin scripts
64
DIR_DEST_SBIN="/usr/local/sbin"			# directory of ALCASAR admin scripts
65
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
65
DIR_DEST_ETC="/usr/local/etc"			# directory of ALCASAR conf files
66
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (dnsmasq for instance)
66
DIR_DEST_SHARE="/usr/local/share"		# directory of share files used by ALCASAR (dnsmasq for instance)
67
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"		# central ALCASAR conf file
67
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"		# central ALCASAR conf file
68
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
68
PASSWD_FILE="/root/ALCASAR-passwords.txt"	# text file with the passwords and shared secrets
69
# ******* DBMS parameters - paramètres SGBD ********
69
# ******* DBMS parameters - paramètres SGBD ********
70
DB_RADIUS="radius"				# database name used by FreeRadius server
70
DB_RADIUS="radius"				# database name used by FreeRadius server
71
DB_USER="radius"				# user name allows to request the users database
71
DB_USER="radius"				# user name allows to request the users database
72
DB_GAMMU="gammu"				# database name used by Gammu-smsd
72
DB_GAMMU="gammu"				# database name used by Gammu-smsd
73
# ******* Network parameters - paramètres réseau *******
73
# ******* Network parameters - paramètres réseau *******
74
HOSTNAME="alcasar"				# default hostname
74
HOSTNAME="alcasar"				# default hostname
75
DOMAIN="localdomain"				# default local domain
75
DOMAIN="localdomain"				# default local domain
76
EXTIF=`/sbin/ip route|grep default|cut -d" " -f5`						# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
76
EXTIF=`/sbin/ip route|grep default|cut -d" " -f5`						# EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
77
INTIF=`/sbin/ip	link|grep '^[[:digit:]]:'|grep -v "lo\|$EXTIF"|cut -d" " -f2|tr -d ":"`		# INTIF is connected to the consultation network
77
INTIF=`/sbin/ip	link|grep '^[[:digit:]]:'|grep -v "lo\|$EXTIF"|cut -d" " -f2|tr -d ":"`		# INTIF is connected to the consultation network
78
MTU="1500"
78
MTU="1500"
79
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
79
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"	# Default ALCASAR IP address
80
# ****** Paths - chemin des commandes *******
80
# ****** Paths - chemin des commandes *******
81
SED="/bin/sed -i"
81
SED="/bin/sed -i"
82
# ****************** End of global parameters *********************
82
# ****************** End of global parameters *********************
83
 
83
 
84
license ()
84
license ()
85
{
85
{
86
	if [ $Lang == "fr" ]
86
	if [ $Lang == "fr" ]
87
	then cat $DIR_INSTALL/gpl-3.0.fr.txt | more
87
	then cat $DIR_INSTALL/gpl-3.0.fr.txt | more
88
	else cat $DIR_INSTALL/gpl-3.0.txt | more
88
	else cat $DIR_INSTALL/gpl-3.0.txt | more
89
	fi
89
	fi
90
	echo "Taper sur Entrée pour continuer !"
90
	echo "Taper sur Entrée pour continuer !"
91
	echo "Enter to continue."
91
	echo "Enter to continue."
92
	read a
92
	read a
93
}
93
}
94
 
94
 
95
header_install ()
95
header_install ()
96
{
96
{
97
	clear
97
	clear
98
	echo "-----------------------------------------------------------------------------"
98
	echo "-----------------------------------------------------------------------------"
99
	echo "                     ALCASAR V$VERSION Installation"
99
	echo "                     ALCASAR V$VERSION Installation"
100
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
100
	echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
101
	echo "-----------------------------------------------------------------------------"
101
	echo "-----------------------------------------------------------------------------"
102
}
102
}
103
 
103
 
104
##################################################################
104
##################################################################
105
##			Function "testing"			##
105
##			Function "testing"			##
106
## - Test of Mageia version					##
106
## - Test of Mageia version					##
107
## - Test of free space on /var  (>10G)				##
107
## - Test of free space on /var  (>10G)				##
108
## - Test of Internet access					##
108
## - Test of Internet access					##
109
##################################################################
109
##################################################################
110
testing ()
110
testing ()
111
{
111
{
112
# Test if ALCASAR is already installed
112
# Test if ALCASAR is already installed
113
	if [ -e $CONF_FILE ]
113
	if [ -e $CONF_FILE ]
114
	then
114
	then
115
		current_version=`cat $CONF_FILE | grep VERSION | cut -d"=" -f2`
115
		current_version=`cat $CONF_FILE | grep VERSION | cut -d"=" -f2`
116
		if [ $Lang == "fr" ]
116
		if [ $Lang == "fr" ]
117
			then echo -n "La version "; echo -n $current_version ; echo " d'ALCASAR est déjà installée";
117
			then echo -n "La version "; echo -n $current_version ; echo " d'ALCASAR est déjà installée";
118
			else echo -n "ALCASAR Version "; echo -n $current_version ; echo " is already installed";
118
			else echo -n "ALCASAR Version "; echo -n $current_version ; echo " is already installed";
119
		fi
119
		fi
120
		response=0
120
		response=0
121
		PTN='^[oOnNyY]$'
121
		PTN='^[oOnNyY]$'
122
		until [[ $(expr $response : $PTN) -gt 0 ]]
122
		until [[ $(expr $response : $PTN) -gt 0 ]]
123
		do
123
		do
124
			if [ $Lang == "fr" ]
124
			if [ $Lang == "fr" ]
125
				then echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
125
				then echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
126
				else echo -n "Do you want to update (Y/n)?";
126
				else echo -n "Do you want to update (Y/n)?";
127
			 fi
127
			 fi
128
			read response
128
			read response
129
		done
129
		done
130
		if [ "$response" = "n" ] || [ "$response" = "N" ] 
130
		if [ "$response" = "n" ] || [ "$response" = "N" ] 
131
		then
131
		then
132
			rm -f /tmp/alcasar-conf*
132
			rm -f /tmp/alcasar-conf*
133
		else
133
		else
134
# Create a backup of running importants files
134
# Create a backup of running importants files
135
			$DIR_SCRIPTS/alcasar-conf.sh --create
135
			$DIR_SCRIPTS/alcasar-conf.sh --create
136
			mode="update"
136
			mode="update"
137
		fi
137
		fi
138
	else
138
	else
139
		if [ ! -d /var/log/netflow/porttracker ]
139
		if [ ! -d /var/log/netflow/porttracker ]
140
			then
140
			then
141
# Test of free space on /var
141
# Test of free space on /var
142
			free_space=`df -BG --output=avail /var|tail -1|tr -d [:space:]G`
142
			free_space=`df -BG --output=avail /var|tail -1|tr -d [:space:]G`
143
			if [ $free_space -lt 10 ]
143
			if [ $free_space -lt 10 ]
144
				then
144
				then
145
				if [ $Lang == "fr" ]
145
				if [ $Lang == "fr" ]
146
					then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
146
					then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
147
					else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
147
					else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
148
				fi
148
				fi
149
			exit 0
149
			exit 0
150
			fi
150
			fi
151
		fi
151
		fi
152
# Test of Mageia version
152
# Test of Mageia version
153
# extract the current Mageia version and hardware architecture (i586 ou X64)
153
# extract the current Mageia version and hardware architecture (i586 ou X64)
154
		fic=`cat /etc/product.id`
154
		fic=`cat /etc/product.id`
155
		unknown_os=0
155
		unknown_os=0
156
		old="$IFS"
156
		old="$IFS"
157
		IFS=","
157
		IFS=","
158
		set $fic
158
		set $fic
159
		for i in $*
159
		for i in $*
160
		do
160
		do
161
			if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
161
			if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
162
				then 
162
				then 
163
				DISTRIBUTION=`echo $i|cut -d"=" -f2`
163
				DISTRIBUTION=`echo $i|cut -d"=" -f2`
164
				unknown_os=`expr $unknown_os + 1`
164
				unknown_os=`expr $unknown_os + 1`
165
			fi
165
			fi
166
			if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
166
			if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
167
				then 
167
				then 
168
				CURRENT_VERSION=`echo $i|cut -d"=" -f2`
168
				CURRENT_VERSION=`echo $i|cut -d"=" -f2`
169
				unknown_os=`expr $unknown_os + 1`
169
				unknown_os=`expr $unknown_os + 1`
170
			fi
170
			fi
171
			if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
171
			if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
172
				then 
172
				then 
173
				ARCH=`echo $i|cut -d"=" -f2`
173
				ARCH=`echo $i|cut -d"=" -f2`
174
				unknown_os=`expr $unknown_os + 1`
174
				unknown_os=`expr $unknown_os + 1`
175
			fi
175
			fi
176
		done
176
		done
177
		IFS="$old"
177
		IFS="$old"
178
		if [[ ( $unknown_os != 3 || "$DISTRIBUTION" != "Mageia" ) && ( "$CURRENT_VERSION" != "4" ) ]]
178
		if [[ ( $unknown_os != 3 || "$DISTRIBUTION" != "Mageia" ) && ( "$CURRENT_VERSION" != "4" ) ]]
179
			then
179
			then
180
			if [ $Lang == "fr" ]
180
			if [ $Lang == "fr" ]
181
				then	
181
				then	
182
				echo "L'installation ou la mise @ jour d'ALCASAR ne peut pas être réalisée."
182
				echo "L'installation ou la mise @ jour d'ALCASAR ne peut pas être réalisée."
183
				echo "Le système d'exploitation doit être remplacé (Mageia4)"
183
				echo "Le système d'exploitation doit être remplacé (Mageia4)"
184
			else
184
			else
185
				echo "The automatic update of ALCASAR can't be performed."
185
				echo "The automatic update of ALCASAR can't be performed."
186
				echo "The OS must be replaced (Mageia4)"
186
				echo "The OS must be replaced (Mageia4)"
187
			fi
187
			fi
188
			if [ -e /tmp/alcasar-conf.tar.gz ]
188
			if [ -e /tmp/alcasar-conf.tar.gz ]
189
				then
189
				then
190
				echo
190
				echo
191
				if [ $Lang == "fr" ]
191
				if [ $Lang == "fr" ]
192
					then	
192
					then	
193
					echo "1 - Récupérez le fichier de configuration actuel (/tmp/alcasar-conf.tar.gz)."
193
					echo "1 - Récupérez le fichier de configuration actuel (/tmp/alcasar-conf.tar.gz)."
194
					echo "2 - Installez Linux-Mageia4 (cf. doc d'installation)"
194
					echo "2 - Installez Linux-Mageia4 (cf. doc d'installation)"
195
					echo "3 - copiez le fichier 'alcasar-conf.tar.gz' dans le répertoire '/tmp' avant de lancer l'installation d'ALCASAR"
195
					echo "3 - copiez le fichier 'alcasar-conf.tar.gz' dans le répertoire '/tmp' avant de lancer l'installation d'ALCASAR"
196
				else
196
				else
197
					echo "1 - Retrieve the configuration file (/tmp/alcasar-conf.tar.gz)"
197
					echo "1 - Retrieve the configuration file (/tmp/alcasar-conf.tar.gz)"
198
					echo "2 - Install Linux-Mageia4 (cf. installation doc)"
198
					echo "2 - Install Linux-Mageia4 (cf. installation doc)"
199
					echo "3 - Copy the file 'alcasar-conf.tar.gz' in the folder '/tmp' before launching the installation of ALCASAR"
199
					echo "3 - Copy the file 'alcasar-conf.tar.gz' in the folder '/tmp' before launching the installation of ALCASAR"
200
				fi
200
				fi
201
			fi
201
			fi
202
			exit 0
202
			exit 0
203
		fi
203
		fi
204
	fi
204
	fi
205
	if [ $Lang == "fr" ]
205
	if [ $Lang == "fr" ]
206
		then echo -n "Tests des paramètres réseau : "
206
		then echo -n "Tests des paramètres réseau : "
207
		else echo -n "Network parameters tests : "
207
		else echo -n "Network parameters tests : "
208
	fi
208
	fi
209
 
209
 
210
# Test of Ethernet links state
210
# Test of Ethernet links state
211
	DOWN_IF=`/sbin/ip link|grep "NO-CARRIER"|cut -d":" -f2|tr -d " "`
211
	DOWN_IF=`/sbin/ip link|grep "NO-CARRIER"|cut -d":" -f2|tr -d " "`
212
	for i in $DOWN_IF
212
	for i in $DOWN_IF
213
	do
213
	do
214
		if [ $Lang == "fr" ]
214
		if [ $Lang == "fr" ]
215
		then 
215
		then 
216
			echo "Échec"
216
			echo "Échec"
217
			echo "Le lien réseau de la carte $i n'est pas actif."
217
			echo "Le lien réseau de la carte $i n'est pas actif."
218
			echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
218
			echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
219
		else
219
		else
220
			echo "Failed"
220
			echo "Failed"
221
			echo "The link state of $i interface is down."
221
			echo "The link state of $i interface is down."
222
			echo "Make sure that this network card is connected to a switch or an A.P."
222
			echo "Make sure that this network card is connected to a switch or an A.P."
223
		fi
223
		fi
224
		exit 0
224
		exit 0
225
	done
225
	done
226
	echo -n "."
226
	echo -n "."
227
 
227
 
228
# Test EXTIF config files
228
# Test EXTIF config files
229
	PUBLIC_IP=`grep IPADDR /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`
229
	PUBLIC_IP=`grep IPADDR /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`
230
	PUBLIC_GATEWAY=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`
230
	PUBLIC_GATEWAY=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2`
231
	if [ `echo $PUBLIC_IP|wc -c` -lt 7 ] || [ `echo $PUBLIC_GATEWAY|wc -c` -lt 7 ]
231
	if [ `echo $PUBLIC_IP|wc -c` -lt 7 ] || [ `echo $PUBLIC_GATEWAY|wc -c` -lt 7 ]
232
	then
232
	then
233
		if [ $Lang == "fr" ]
233
		if [ $Lang == "fr" ]
234
		then 
234
		then 
235
			echo "Échec"
235
			echo "Échec"
236
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
236
			echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
237
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
237
			echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
238
			echo "Appliquez les changements : 'systemctl restart network'"
238
			echo "Appliquez les changements : 'systemctl restart network'"
239
		else
239
		else
240
			echo "Failed"
240
			echo "Failed"
241
			echo "The Internet connected network card ($EXTIF) isn't well configured."
241
			echo "The Internet connected network card ($EXTIF) isn't well configured."
242
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
242
			echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
243
			echo "Apply the new configuration 'systemctl restart network'"
243
			echo "Apply the new configuration 'systemctl restart network'"
244
		fi
244
		fi
245
		echo "DEVICE=$EXTIF"
245
		echo "DEVICE=$EXTIF"
246
		echo "IPADDR="
246
		echo "IPADDR="
247
		echo "NETMASK="
247
		echo "NETMASK="
248
		echo "GATEWAY="
248
		echo "GATEWAY="
249
		echo "DNS1="
249
		echo "DNS1="
250
		echo "DNS2="
250
		echo "DNS2="
251
		echo "ONBOOT=yes"
251
		echo "ONBOOT=yes"
252
		exit 0
252
		exit 0
253
	fi
253
	fi
254
	echo -n "."
254
	echo -n "."
255
 
255
 
256
# Test if router is alive (Box FAI)
256
# Test if router is alive (Box FAI)
257
	if [ `ip route list|grep -c ^default` -ne "1" ] ; then
257
	if [ `ip route list|grep -c ^default` -ne "1" ] ; then
258
		if [ $Lang == "fr" ]
258
		if [ $Lang == "fr" ]
259
		then 
259
		then 
260
			echo "Échec"
260
			echo "Échec"
261
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
261
			echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
262
			echo "Réglez ce problème puis relancez ce script."
262
			echo "Réglez ce problème puis relancez ce script."
263
		else
263
		else
264
			echo "Failed"
264
			echo "Failed"
265
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
265
			echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
266
			echo "Resolv this problem, then restart this script."
266
			echo "Resolv this problem, then restart this script."
267
		fi
267
		fi
268
		exit 0
268
		exit 0
269
	fi
269
	fi
270
	echo -n "."
270
	echo -n "."
271
# On teste le lien vers le routeur par defaut
271
# On teste le lien vers le routeur par defaut
272
	IP_GW=`ip route list|grep ^default|cut -d" " -f3`
272
	IP_GW=`ip route list|grep ^default|cut -d" " -f3`
273
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $IP_GW|grep response|cut -d" " -f2`
273
	arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $IP_GW|grep response|cut -d" " -f2`
274
	if [ $(expr $arp_reply) -eq 0 ]
274
	if [ $(expr $arp_reply) -eq 0 ]
275
	       	then
275
	       	then
276
		if [ $Lang == "fr" ]
276
		if [ $Lang == "fr" ]
277
		then 
277
		then 
278
			echo "Échec"
278
			echo "Échec"
279
			echo "Le routeur de site ou la Box Internet ($IP_GW) ne répond pas."
279
			echo "Le routeur de site ou la Box Internet ($IP_GW) ne répond pas."
280
			echo "Réglez ce problème puis relancez ce script."
280
			echo "Réglez ce problème puis relancez ce script."
281
		else
281
		else
282
			echo "Failed"
282
			echo "Failed"
283
			echo "The Internet gateway doesn't answered"
283
			echo "The Internet gateway doesn't answered"
284
			echo "Resolv this problem, then restart this script."
284
			echo "Resolv this problem, then restart this script."
285
		fi
285
		fi
286
		exit 0
286
		exit 0
287
	fi
287
	fi
288
	echo -n "."
288
	echo -n "."
289
# On teste la connectivité Internet
289
# On teste la connectivité Internet
290
	rm -rf /tmp/con_ok.html
290
	rm -rf /tmp/con_ok.html
291
	/usr/bin/curl www.google.fr -s -o /tmp/con_ok.html
291
	/usr/bin/curl www.google.fr -s -o /tmp/con_ok.html
292
	if [ ! -e /tmp/con_ok.html ]
292
	if [ ! -e /tmp/con_ok.html ]
293
	then
293
	then
294
		if [ $Lang == "fr" ]
294
		if [ $Lang == "fr" ]
295
		then 
295
		then 
296
			echo "La tentative de connexion vers Internet a échoué (google.fr)."
296
			echo "La tentative de connexion vers Internet a échoué (google.fr)."
297
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
297
			echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
298
			echo "Vérifiez la validité des adresses IP des DNS."
298
			echo "Vérifiez la validité des adresses IP des DNS."
299
		else
299
		else
300
			echo "The Internet connection try failed (google.fr)."
300
			echo "The Internet connection try failed (google.fr)."
301
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
301
			echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
302
			echo "Verify the DNS IP addresses"
302
			echo "Verify the DNS IP addresses"
303
		fi
303
		fi
304
		exit 0
304
		exit 0
305
	fi
305
	fi
306
	rm -rf /tmp/con_ok.html
306
	rm -rf /tmp/con_ok.html
307
	echo ". : ok"
307
	echo ". : ok"
308
} # end of testing ()
308
} # end of testing ()
309
 
309
 
310
##################################################################
310
##################################################################
311
##			Function "init"				##
311
##			Function "init"				##
312
## - Création du fichier "/root/ALCASAR_parametres.txt"		##
312
## - Création du fichier "/root/ALCASAR_parametres.txt"		##
313
## - Installation et modification des scripts du portail	##
313
## - Installation et modification des scripts du portail	##
314
##################################################################
314
##################################################################
315
init ()
315
init ()
316
{
316
{
317
	if [ "$mode" != "update" ]
317
	if [ "$mode" != "update" ]
318
	then
318
	then
319
# On affecte le nom d'organisme
319
# On affecte le nom d'organisme
320
		header_install
320
		header_install
321
		ORGANISME=!
321
		ORGANISME=!
322
		PTN='^[a-zA-Z0-9-]*$'
322
		PTN='^[a-zA-Z0-9-]*$'
323
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
323
		until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
324
                do
324
                do
325
			if [ $Lang == "fr" ]
325
			if [ $Lang == "fr" ]
326
			       	then echo -n "Entrez le nom de votre organisme : "
326
			       	then echo -n "Entrez le nom de votre organisme : "
327
				else echo -n "Enter the name of your organism : "
327
				else echo -n "Enter the name of your organism : "
328
			fi
328
			fi
329
			read ORGANISME
329
			read ORGANISME
330
			if [ "$ORGANISME" == "" ]
330
			if [ "$ORGANISME" == "" ]
331
				then
331
				then
332
				ORGANISME=!
332
				ORGANISME=!
333
			fi
333
			fi
334
		done
334
		done
335
	fi
335
	fi
336
# On crée aléatoirement les mots de passe et les secrets partagés
336
# On crée aléatoirement les mots de passe et les secrets partagés
337
	rm -f $PASSWD_FILE
337
	rm -f $PASSWD_FILE
338
	grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
338
	grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
339
	echo -n "Password to protect the GRUB boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
339
	echo -n "Password to protect the GRUB boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
340
	echo "$grubpwd" >> $PASSWD_FILE
340
	echo "$grubpwd" >> $PASSWD_FILE
341
	md5_grubpwd=`/usr/bin/openssl passwd -1 $grubpwd`
341
	md5_grubpwd=`/usr/bin/openssl passwd -1 $grubpwd`
342
	$SED "/^password.*/d" /boot/grub/menu.lst
342
	$SED "/^password.*/d" /boot/grub/menu.lst
343
	$SED "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
343
	$SED "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
344
	mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
344
	mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
345
	echo -n "Name and password of Mysql/mariadb administrator : " >> $PASSWD_FILE
345
	echo -n "Name and password of Mysql/mariadb administrator : " >> $PASSWD_FILE
346
	echo "root / $mysqlpwd" >> $PASSWD_FILE
346
	echo "root / $mysqlpwd" >> $PASSWD_FILE
347
	radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
347
	radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
348
	echo -n "Name and password of Mysql/mariadb user : " >> $PASSWD_FILE
348
	echo -n "Name and password of Mysql/mariadb user : " >> $PASSWD_FILE
349
	echo "$DB_USER / $radiuspwd" >> $PASSWD_FILE
349
	echo "$DB_USER / $radiuspwd" >> $PASSWD_FILE
350
	secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
350
	secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
351
	echo -n "Shared secret between the script 'intercept.php' and coova-chilli : " >> $PASSWD_FILE
351
	echo -n "Shared secret between the script 'intercept.php' and coova-chilli : " >> $PASSWD_FILE
352
	echo "$secretuam" >> $PASSWD_FILE
352
	echo "$secretuam" >> $PASSWD_FILE
353
	secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
353
	secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
354
	echo -n "Shared secret between coova-chilli and FreeRadius : " >> $PASSWD_FILE
354
	echo -n "Shared secret between coova-chilli and FreeRadius : " >> $PASSWD_FILE
355
	echo "$secretradius" >> $PASSWD_FILE
355
	echo "$secretradius" >> $PASSWD_FILE
356
	chmod 640 $PASSWD_FILE
356
	chmod 640 $PASSWD_FILE
357
# Scripts and conf files copy 
357
# Scripts and conf files copy 
358
#  - in /usr/local/bin :  alcasar-{CA.sh,conf.sh,import-clean.sh,iptables-bypass.sh,iptables.sh,log.sh,watchdog.sh}
358
#  - in /usr/local/bin :  alcasar-{CA.sh,conf.sh,import-clean.sh,iptables-bypass.sh,iptables.sh,log.sh,watchdog.sh}
359
	cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
359
	cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
360
#  - in /usr/local/sbin :  alcasar-{bl.sh,bypass.sh,dateLog.sh,havp.sh,logout.sh,mysql.sh,nf.sh,profil.sh,uninstall.sh,version-list.sh,load-balancing.sh}
360
#  - in /usr/local/sbin :  alcasar-{bl.sh,bypass.sh,dateLog.sh,havp.sh,logout.sh,mysql.sh,nf.sh,profil.sh,uninstall.sh,version-list.sh,load-balancing.sh}
361
	cp -f $DIR_SCRIPTS/sbin/alcasar* $DIR_DEST_SBIN/. ; chown root:root $DIR_DEST_SBIN/alcasar* ; chmod 740 $DIR_DEST_SBIN/alcasar*
361
	cp -f $DIR_SCRIPTS/sbin/alcasar* $DIR_DEST_SBIN/. ; chown root:root $DIR_DEST_SBIN/alcasar* ; chmod 740 $DIR_DEST_SBIN/alcasar*
362
#  - in /usr/local/etc : alcasar-{bl-categories-enabled,dns-name,iptables-local.sh,services}
362
#  - in /usr/local/etc : alcasar-{bl-categories-enabled,dns-name,iptables-local.sh,services}
363
	cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown root:apache $DIR_DEST_ETC/alcasar* ; chmod 660 $DIR_DEST_ETC/alcasar*
363
	cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown root:apache $DIR_DEST_ETC/alcasar* ; chmod 660 $DIR_DEST_ETC/alcasar*
364
	$SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_SBIN/alcasar-logout.sh
364
	$SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_SBIN/alcasar-logout.sh
365
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh
365
	$SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh
366
	$SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
366
	$SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
367
	$SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
367
	$SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
368
# generate central conf file
368
# generate central conf file
369
	cat <<EOF > $CONF_FILE
369
	cat <<EOF > $CONF_FILE
370
##########################################
370
##########################################
371
##                                      ##
371
##                                      ##
372
##          ALCASAR Parameters          ##
372
##          ALCASAR Parameters          ##
373
##                                      ##
373
##                                      ##
374
##########################################
374
##########################################
375
 
375
 
376
INSTALL_DATE=$DATE
376
INSTALL_DATE=$DATE
377
VERSION=$VERSION
377
VERSION=$VERSION
378
ORGANISM=$ORGANISME
378
ORGANISM=$ORGANISME
379
DOMAIN=$DOMAIN
379
DOMAIN=$DOMAIN
380
EOF
380
EOF
381
	chmod o-rwx $CONF_FILE
381
	chmod o-rwx $CONF_FILE
382
} # End of init ()
382
} # End of init ()
383
 
383
 
384
##################################################################
384
##################################################################
385
##			Function "network"			##
385
##			Function "network"			##
386
## - Définition du plan d'adressage du réseau de consultation	##
386
## - Définition du plan d'adressage du réseau de consultation	##
387
## - Nommage DNS du système 					##
387
## - Nommage DNS du système 					##
388
## - Configuration de l'interface INTIF (réseau de consultation)##
388
## - Configuration de l'interface INTIF (réseau de consultation)##
389
## - Modification du fichier /etc/hosts				##
389
## - Modification du fichier /etc/hosts				##
390
## - Configuration du serveur de temps (NTP)			##
390
## - Configuration du serveur de temps (NTP)			##
391
## - Renseignement des fichiers hosts.allow et hosts.deny	##
391
## - Renseignement des fichiers hosts.allow et hosts.deny	##
392
##################################################################
392
##################################################################
393
network ()
393
network ()
394
{
394
{
395
	header_install
395
	header_install
396
	if [ "$mode" != "update" ]
396
	if [ "$mode" != "update" ]
397
		then
397
		then
398
		if [ $Lang == "fr" ]
398
		if [ $Lang == "fr" ]
399
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
399
			then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
400
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
400
			else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
401
		fi
401
		fi
402
		response=0
402
		response=0
403
		PTN='^[oOyYnN]$'
403
		PTN='^[oOyYnN]$'
404
		until [[ $(expr $response : $PTN) -gt 0 ]]
404
		until [[ $(expr $response : $PTN) -gt 0 ]]
405
		do
405
		do
406
			if [ $Lang == "fr" ]
406
			if [ $Lang == "fr" ]
407
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
407
				then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
408
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
408
				else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
409
			fi
409
			fi
410
			read response
410
			read response
411
		done
411
		done
412
		if [ "$response" = "n" ] || [ "$response" = "N" ]
412
		if [ "$response" = "n" ] || [ "$response" = "N" ]
413
		then
413
		then
414
			PRIVATE_IP_MASK="0"
414
			PRIVATE_IP_MASK="0"
415
			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:]]$'
415
			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:]]$'
416
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
416
			until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
417
			do
417
			do
418
				if [ $Lang == "fr" ]
418
				if [ $Lang == "fr" ]
419
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
419
					then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
420
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
420
					else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
421
				fi
421
				fi
422
				read PRIVATE_IP_MASK
422
				read PRIVATE_IP_MASK
423
			done
423
			done
424
		else
424
		else
425
       			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
425
       			PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
426
		fi
426
		fi
427
	else
427
	else
428
		PRIVATE_IP_MASK=`grep PRIVATE_IP conf/etc/alcasar.conf|cut -d"=" -f2` 
428
		PRIVATE_IP_MASK=`grep PRIVATE_IP conf/etc/alcasar.conf|cut -d"=" -f2` 
429
		rm -rf conf/etc/alcasar.conf
429
		rm -rf conf/etc/alcasar.conf
430
	fi
430
	fi
431
# Define LAN side global parameters
431
# Define LAN side global parameters
432
	hostname $HOSTNAME.$DOMAIN
432
	hostname $HOSTNAME.$DOMAIN
433
	echo $HOSTNAME.$DOMAIN > /etc/hostname
433
	echo $HOSTNAME.$DOMAIN > /etc/hostname
434
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
434
	PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network address (ie.: 192.168.182.0)
435
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
435
	PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`				# private network mask (ie.: 255.255.255.0)
436
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
436
	PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`						# ALCASAR private ip address (consultation LAN side)
437
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
437
	PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`					# network prefix (ie. 24)
438
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
438
	PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX						# ie.: 192.168.182.0/24
439
	classe=$((PRIVATE_PREFIX/8)); classe_sup=`expr $classe + 1`; classe_sup_sup=`expr $classe + 2`	# ie.: 2=classe B, 3=classe C
439
	classe=$((PRIVATE_PREFIX/8)); classe_sup=`expr $classe + 1`; classe_sup_sup=`expr $classe + 2`	# ie.: 2=classe B, 3=classe C
440
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
440
	PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.				# compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
441
	PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`			# private network broadcast (ie.: 192.168.182.255)
441
	PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`			# private network broadcast (ie.: 192.168.182.255)
442
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup`			# last octet of LAN address
442
	private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup`			# last octet of LAN address
443
	private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f$classe_sup`			# last octet of LAN broadcast
443
	private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f$classe_sup`			# last octet of LAN broadcast
444
	PRIVATE_FIRST_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`		# First network address (ex.: 192.168.182.1)
444
	PRIVATE_FIRST_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`		# First network address (ex.: 192.168.182.1)
445
	PRIVATE_SECOND_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 2`	# second network address (ex.: 192.168.182.2)
445
	PRIVATE_SECOND_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 2`	# second network address (ex.: 192.168.182.2)
446
	PRIVATE_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_ending - 1`	# last network address (ex.: 192.168.182.254)
446
	PRIVATE_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_ending - 1`	# last network address (ex.: 192.168.182.254)
447
	PRIVATE_MAC=`/sbin/ip link show $INTIF | grep ether | cut -d" " -f6`				# MAC address of INTIF
447
	PRIVATE_MAC=`/sbin/ip link show $INTIF | grep ether | cut -d" " -f6`				# MAC address of INTIF
448
# Define Internet parameters
448
# Define Internet parameters
449
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
449
	[ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
450
	DNS1=`grep DNS1 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 1er DNS
450
	DNS1=`grep DNS1 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 1er DNS
451
	DNS2=`grep DNS2 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 2ème DNS
451
	DNS2=`grep DNS2 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2` 	# @ip 2ème DNS
452
	DNS1=${DNS1:=208.67.220.220}
452
	DNS1=${DNS1:=208.67.220.220}
453
	DNS2=${DNS2:=208.67.222.222}
453
	DNS2=${DNS2:=208.67.222.222}
454
	PUBLIC_NETMASK=`grep NETMASK /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
454
	PUBLIC_NETMASK=`grep NETMASK /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
455
	DEFAULT_PUBLIC_NETMASK=`ipcalc -m $PUBLIC_IP | cut -d"=" -f2`
455
	DEFAULT_PUBLIC_NETMASK=`ipcalc -m $PUBLIC_IP | cut -d"=" -f2`
456
	PUBLIC_NETMASK=${PUBLIC_NETMASK:=$DEFAULT_PUBLIC_NETMASK}
456
	PUBLIC_NETMASK=${PUBLIC_NETMASK:=$DEFAULT_PUBLIC_NETMASK}
457
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
457
	PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
458
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
458
	PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
459
	echo "EXTIF=$EXTIF" >> $CONF_FILE
459
	echo "EXTIF=$EXTIF" >> $CONF_FILE
460
	echo "INTIF=$INTIF" >> $CONF_FILE
460
	echo "INTIF=$INTIF" >> $CONF_FILE
461
	echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
461
	echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
462
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
462
	echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
463
	echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE 
463
	echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE 
464
	echo "DNS1=$DNS1" >> $CONF_FILE
464
	echo "DNS1=$DNS1" >> $CONF_FILE
465
	echo "DNS2=$DNS2" >> $CONF_FILE
465
	echo "DNS2=$DNS2" >> $CONF_FILE
466
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
466
	echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
467
	echo "DHCP=on" >> $CONF_FILE
467
	echo "DHCP=on" >> $CONF_FILE
468
	echo "EXT_DHCP_IP=none" >> $CONF_FILE
468
	echo "EXT_DHCP_IP=none" >> $CONF_FILE
469
	echo "RELAY_DHCP_IP=none" >> $CONF_FILE
469
	echo "RELAY_DHCP_IP=none" >> $CONF_FILE
470
	echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
470
	echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
471
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
471
	[ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
472
# config network
472
# config network
473
	cat <<EOF > /etc/sysconfig/network
473
	cat <<EOF > /etc/sysconfig/network
474
NETWORKING=yes
474
NETWORKING=yes
475
HOSTNAME="$HOSTNAME.$DOMAIN"
475
HOSTNAME="$HOSTNAME.$DOMAIN"
476
FORWARD_IPV4=true
476
FORWARD_IPV4=true
477
EOF
477
EOF
478
# config /etc/hosts
478
# config /etc/hosts
479
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
479
	[ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
480
	cat <<EOF > /etc/hosts
480
	cat <<EOF > /etc/hosts
481
127.0.0.1	localhost
481
127.0.0.1	localhost
482
$PRIVATE_IP	$HOSTNAME.$DOMAIN $HOSTNAME $ORGANISME.$DOMAIN $ORGANISME
482
$PRIVATE_IP	$HOSTNAME.$DOMAIN $HOSTNAME $ORGANISME.$DOMAIN $ORGANISME
483
EOF
483
EOF
484
# Config EXTIF (Internet)
484
# Config EXTIF (Internet)
485
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
485
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
486
DEVICE=$EXTIF
486
DEVICE=$EXTIF
487
BOOTPROTO=static
487
BOOTPROTO=static
488
IPADDR=$PUBLIC_IP
488
IPADDR=$PUBLIC_IP
489
NETMASK=$PUBLIC_NETMASK
489
NETMASK=$PUBLIC_NETMASK
490
GATEWAY=$PUBLIC_GATEWAY
490
GATEWAY=$PUBLIC_GATEWAY
491
DNS1=127.0.0.1
491
DNS1=127.0.0.1
492
ONBOOT=yes
492
ONBOOT=yes
493
METRIC=10
493
METRIC=10
494
NOZEROCONF=yes
494
NOZEROCONF=yes
495
MII_NOT_SUPPORTED=yes
495
MII_NOT_SUPPORTED=yes
496
IPV6INIT=no
496
IPV6INIT=no
497
IPV6TO4INIT=no
497
IPV6TO4INIT=no
498
ACCOUNTING=no
498
ACCOUNTING=no
499
USERCTL=no
499
USERCTL=no
500
MTU=$MTU
500
MTU=$MTU
501
EOF
501
EOF
502
# Config INTIF (consultation LAN) in normal mode
502
# Config INTIF (consultation LAN) in normal mode
503
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
503
	cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
504
DEVICE=$INTIF
504
DEVICE=$INTIF
505
BOOTPROTO=static
505
BOOTPROTO=static
506
ONBOOT=yes
506
ONBOOT=yes
507
NOZEROCONF=yes
507
NOZEROCONF=yes
508
MII_NOT_SUPPORTED=yes
508
MII_NOT_SUPPORTED=yes
509
IPV6INIT=no
509
IPV6INIT=no
510
IPV6TO4INIT=no
510
IPV6TO4INIT=no
511
ACCOUNTING=no
511
ACCOUNTING=no
512
USERCTL=no
512
USERCTL=no
513
EOF
513
EOF
514
# Config of INTIF in bypass mode (see "alcasar-bypass.sh")
514
# Config of INTIF in bypass mode (see "alcasar-bypass.sh")
515
	cat <<EOF > /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
515
	cat <<EOF > /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
516
DEVICE=$INTIF
516
DEVICE=$INTIF
517
BOOTPROTO=static
517
BOOTPROTO=static
518
IPADDR=$PRIVATE_IP
518
IPADDR=$PRIVATE_IP
519
NETMASK=$PRIVATE_NETMASK
519
NETMASK=$PRIVATE_NETMASK
520
ONBOOT=yes
520
ONBOOT=yes
521
METRIC=10
521
METRIC=10
522
NOZEROCONF=yes
522
NOZEROCONF=yes
523
MII_NOT_SUPPORTED=yes
523
MII_NOT_SUPPORTED=yes
524
IPV6INIT=no
524
IPV6INIT=no
525
IPV6TO4INIT=no
525
IPV6TO4INIT=no
526
ACCOUNTING=no
526
ACCOUNTING=no
527
USERCTL=no
527
USERCTL=no
528
EOF
528
EOF
529
# Mise à l'heure du serveur
529
# Mise à l'heure du serveur
530
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
530
	[ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
531
	cat <<EOF > /etc/ntp/step-tickers
531
	cat <<EOF > /etc/ntp/step-tickers
532
0.fr.pool.ntp.org	# adapt to your country
532
0.fr.pool.ntp.org	# adapt to your country
533
1.fr.pool.ntp.org
533
1.fr.pool.ntp.org
534
2.fr.pool.ntp.org
534
2.fr.pool.ntp.org
535
EOF
535
EOF
536
# Configuration du serveur de temps (sur lui même)
536
# Configuration du serveur de temps (sur lui même)
537
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
537
	[ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
538
	cat <<EOF > /etc/ntp.conf
538
	cat <<EOF > /etc/ntp.conf
539
server 0.fr.pool.ntp.org	# adapt to your country
539
server 0.fr.pool.ntp.org	# adapt to your country
540
server 1.fr.pool.ntp.org
540
server 1.fr.pool.ntp.org
541
server 2.fr.pool.ntp.org
541
server 2.fr.pool.ntp.org
542
server 127.127.1.0   		# local clock si NTP internet indisponible ...
542
server 127.127.1.0   		# local clock si NTP internet indisponible ...
543
fudge 127.127.1.0 stratum 10
543
fudge 127.127.1.0 stratum 10
544
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
544
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
545
restrict 127.0.0.1
545
restrict 127.0.0.1
546
driftfile /var/lib/ntp/drift
546
driftfile /var/lib/ntp/drift
547
logfile /var/log/ntp.log
547
logfile /var/log/ntp.log
548
EOF
548
EOF
549
 
549
 
550
	chown -R ntp:ntp /var/lib/ntp
550
	chown -R ntp:ntp /var/lib/ntp
551
# Renseignement des fichiers hosts.allow et hosts.deny
551
# Renseignement des fichiers hosts.allow et hosts.deny
552
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
552
	[ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
553
	cat <<EOF > /etc/hosts.allow
553
	cat <<EOF > /etc/hosts.allow
554
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
554
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
555
sshd: ALL
555
sshd: ALL
556
ntpd: $PRIVATE_NETWORK_SHORT
556
ntpd: $PRIVATE_NETWORK_SHORT
557
EOF
557
EOF
558
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
558
	[ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
559
	cat <<EOF > /etc/hosts.deny
559
	cat <<EOF > /etc/hosts.deny
560
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
560
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
561
EOF
561
EOF
562
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
562
	chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
563
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
563
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
564
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
564
	echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
565
# load conntrack ftp module
565
# load conntrack ftp module
566
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
566
	[ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
567
	echo "ip_conntrack_ftp" >>  /etc/modprobe.preload
567
	echo "ip_conntrack_ftp" >>  /etc/modprobe.preload
568
# load ipt_NETFLOW module
568
# load ipt_NETFLOW module
569
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
569
	echo "ipt_NETFLOW" >>  /etc/modprobe.preload
570
# 
570
# 
571
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
571
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
572
} # End of network ()
572
} # End of network ()
573
 
573
 
574
##################################################################
574
##################################################################
575
##			Function "ACC"				##
575
##			Function "ACC"				##
576
## - installation du centre de gestion (ALCASAR Control Center)	##
576
## - installation du centre de gestion (ALCASAR Control Center)	##
577
## - configuration du serveur web (Apache)			##
577
## - configuration du serveur web (Apache)			##
578
## - définition du 1er comptes de gestion 			##
578
## - définition du 1er comptes de gestion 			##
579
## - sécurisation des accès					##
579
## - sécurisation des accès					##
580
##################################################################
580
##################################################################
581
ACC ()
581
ACC ()
582
{
582
{
583
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
583
	[ -d $DIR_WEB ] && rm -rf $DIR_WEB
584
	mkdir $DIR_WEB
584
	mkdir $DIR_WEB
585
# Copie et configuration des fichiers du centre de gestion
585
# Copie et configuration des fichiers du centre de gestion
586
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
586
	cp -rf $DIR_INSTALL/web/* $DIR_WEB/
587
	echo "$VERSION" > $DIR_WEB/VERSION
587
	echo "$VERSION" > $DIR_WEB/VERSION
588
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
588
	$SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
589
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
589
	$SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
590
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
590
	$SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
591
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
591
	$SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
592
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
592
	chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
593
	chown -R apache:apache $DIR_WEB/*
593
	chown -R apache:apache $DIR_WEB/*
594
	for i in system_backup base logs/firewall logs/httpd logs/security;
594
	for i in system_backup base logs/firewall logs/httpd logs/security;
595
	do
595
	do
596
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
596
		[ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
597
	done
597
	done
598
	chown -R root:apache $DIR_SAVE
598
	chown -R root:apache $DIR_SAVE
599
# Configuration et sécurisation php
599
# Configuration et sécurisation php
600
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
600
	[ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
601
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
601
	timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
602
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
602
	$SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
603
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
603
	$SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
604
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
604
	$SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
605
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
605
	$SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
606
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
606
	$SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
607
# Configuration et sécurisation Apache
607
# Configuration et sécurisation Apache
608
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
608
	rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
609
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
609
	[ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
610
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
610
	$SED "s?^#ServerName.*?ServerName $HOSTNAME.$DOMAIN?g" /etc/httpd/conf/httpd.conf
611
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
611
	$SED "s?^Listen.*?Listen $PRIVATE_IP:80?g" /etc/httpd/conf/httpd.conf
612
	$SED "s?^ServerTokens.*?ServerTokens Prod?g" /etc/httpd/conf/httpd.conf
612
	$SED "s?^ServerTokens.*?ServerTokens Prod?g" /etc/httpd/conf/httpd.conf
613
	$SED "s?^ServerSignature.*?ServerSignature Off?g" /etc/httpd/conf/httpd.conf
613
	$SED "s?^ServerSignature.*?ServerSignature Off?g" /etc/httpd/conf/httpd.conf
614
	$SED "s?^#ErrorDocument 404 /missing.html.*?ErrorDocument 404 /index.html?g" /etc/httpd/conf/httpd.conf
614
	$SED "s?^#ErrorDocument 404 /missing.html.*?ErrorDocument 404 /index.html?g" /etc/httpd/conf/httpd.conf
615
	$SED "s?^LoadModule authn_anon_module.*?#LoadModule authn_anon_module modules/mod_authn_anon.so?g" /etc/httpd/conf/httpd.conf
615
	$SED "s?^LoadModule authn_anon_module.*?#LoadModule authn_anon_module modules/mod_authn_anon.so?g" /etc/httpd/conf/httpd.conf
616
	$SED "s?^LoadModule status_module.*?#LoadModule status_module modules/mod_status.so?g" /etc/httpd/conf/httpd.conf
616
	$SED "s?^LoadModule status_module.*?#LoadModule status_module modules/mod_status.so?g" /etc/httpd/conf/httpd.conf
617
	$SED "s?^LoadModule autoindex_module.*?#LoadModule autoindex_module modules/mod_autoindex.so?g" /etc/httpd/conf/httpd.conf
617
	$SED "s?^LoadModule autoindex_module.*?#LoadModule autoindex_module modules/mod_autoindex.so?g" /etc/httpd/conf/httpd.conf
618
	$SED "s?^LoadModule info_module.*?#LoadModule info_module modules/mod_info.so?g" /etc/httpd/conf/httpd.conf
618
	$SED "s?^LoadModule info_module.*?#LoadModule info_module modules/mod_info.so?g" /etc/httpd/conf/httpd.conf
619
	$SED "s?^LoadModule imagemap_module.*?#LoadModule imagemap_module modules/mod_imagemap.so?g" /etc/httpd/conf/httpd.conf
619
	$SED "s?^LoadModule imagemap_module.*?#LoadModule imagemap_module modules/mod_imagemap.so?g" /etc/httpd/conf/httpd.conf
620
	$SED "s?^LoadModule rewrite_module.*?#LoadModule rewrite_module modules/mod_rewrite.so?g" /etc/httpd/conf/httpd.conf
620
	$SED "s?^LoadModule rewrite_module.*?#LoadModule rewrite_module modules/mod_rewrite.so?g" /etc/httpd/conf/httpd.conf
621
	$SED "s?LoadModule speling_module.*?LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/httpd.conf
621
	$SED "s?LoadModule speling_module.*?LoadModule speling_module modules/mod_speling.so?g" /etc/httpd/conf/httpd.conf
622
	[ -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
622
	[ -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
623
	$SED "s?^Listen.*?Listen $PRIVATE_IP:443?g" /etc/httpd/conf/conf.d/ssl.conf # Listen only on INTIF
623
	$SED "s?^Listen.*?Listen $PRIVATE_IP:443?g" /etc/httpd/conf/conf.d/ssl.conf # Listen only on INTIF
624
	[ -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
624
	[ -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
625
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /usr/share/httpd/error/include/top.html
625
	$SED "s?background-color.*?background-color: #EFEFEF; }?g" /usr/share/httpd/error/include/top.html
626
	[ -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
626
	[ -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
627
	cat <<EOF > /usr/share/httpd/error/include/bottom.html
627
	cat <<EOF > /usr/share/httpd/error/include/bottom.html
628
</body>
628
</body>
629
</html>
629
</html>
630
EOF
630
EOF
631
# Définition du premier compte lié au profil 'admin'
631
# Définition du premier compte lié au profil 'admin'
632
	header_install
632
	header_install
633
	if [ "$mode" = "install" ]
633
	if [ "$mode" = "install" ]
634
	then
634
	then
635
		admin_portal=!
635
		admin_portal=!
636
		PTN='^[a-zA-Z0-9-]*$'
636
		PTN='^[a-zA-Z0-9-]*$'
637
		until [[ $(expr $admin_portal : $PTN) -gt 0 ]]
637
		until [[ $(expr $admin_portal : $PTN) -gt 0 ]]
638
                	do
638
                	do
639
			header_install
639
			header_install
640
			if [ $Lang == "fr" ]
640
			if [ $Lang == "fr" ]
641
			then 
641
			then 
642
				echo ""
642
				echo ""
643
				echo "Définissez un premier compte d'administration du portail :"
643
				echo "Définissez un premier compte d'administration du portail :"
644
				echo
644
				echo
645
				echo -n "Nom : "
645
				echo -n "Nom : "
646
			else
646
			else
647
				echo ""
647
				echo ""
648
				echo "Define the first account allow to administrate the portal :"
648
				echo "Define the first account allow to administrate the portal :"
649
				echo
649
				echo
650
				echo -n "Account : "
650
				echo -n "Account : "
651
			fi
651
			fi
652
			read admin_portal
652
			read admin_portal
653
			if [ "$admin_portal" == "" ]
653
			if [ "$admin_portal" == "" ]
654
				then
654
				then
655
				admin_portal=!
655
				admin_portal=!
656
			fi
656
			fi
657
			done
657
			done
658
# Creation of keys file for the admin account ("admin")
658
# Creation of keys file for the admin account ("admin")
659
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
659
		[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
660
		mkdir -p $DIR_DEST_ETC/digest
660
		mkdir -p $DIR_DEST_ETC/digest
661
		chmod 755 $DIR_DEST_ETC/digest
661
		chmod 755 $DIR_DEST_ETC/digest
662
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
662
		until [ -s $DIR_DEST_ETC/digest/key_admin ]
663
			do
663
			do
664
				/usr/bin/htdigest -c $DIR_DEST_ETC/digest/key_admin $HOSTNAME.$DOMAIN $admin_portal
664
				/usr/bin/htdigest -c $DIR_DEST_ETC/digest/key_admin $HOSTNAME.$DOMAIN $admin_portal
665
			done
665
			done
666
		$DIR_DEST_SBIN/alcasar-profil.sh --list
666
		$DIR_DEST_SBIN/alcasar-profil.sh --list
667
	fi
667
	fi
668
# synchronisation horaire
668
# synchronisation horaire
669
	ntpd -q -g &
669
	ntpd -q -g &
670
# Sécurisation du centre
670
# Sécurisation du centre
671
	rm -f /etc/httpd/conf/webapps.d/alcasar*
671
	rm -f /etc/httpd/conf/webapps.d/alcasar*
672
	cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
672
	cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
673
<Directory $DIR_ACC>
673
<Directory $DIR_ACC>
674
	SSLRequireSSL
674
	SSLRequireSSL
675
	AllowOverride None
675
	AllowOverride None
676
	Order deny,allow
676
	Order deny,allow
677
	Deny from all
677
	Deny from all
678
	Allow from 127.0.0.1
678
	Allow from 127.0.0.1
679
	Allow from $PRIVATE_NETWORK_MASK
679
	Allow from $PRIVATE_NETWORK_MASK
680
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
680
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
681
	require valid-user
681
	require valid-user
682
	AuthType digest
682
	AuthType digest
683
	AuthName $HOSTNAME.$DOMAIN
683
	AuthName $HOSTNAME.$DOMAIN
684
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
684
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
685
	AuthUserFile $DIR_DEST_ETC/digest/key_all
685
	AuthUserFile $DIR_DEST_ETC/digest/key_all
686
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
686
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
687
</Directory>
687
</Directory>
688
<Directory $DIR_ACC/admin>
688
<Directory $DIR_ACC/admin>
689
	SSLRequireSSL
689
	SSLRequireSSL
690
	AllowOverride None
690
	AllowOverride None
691
	Order deny,allow
691
	Order deny,allow
692
	Deny from all
692
	Deny from all
693
	Allow from 127.0.0.1
693
	Allow from 127.0.0.1
694
	Allow from $PRIVATE_NETWORK_MASK
694
	Allow from $PRIVATE_NETWORK_MASK
695
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
695
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
696
	require valid-user
696
	require valid-user
697
	AuthType digest
697
	AuthType digest
698
	AuthName $HOSTNAME.$DOMAIN
698
	AuthName $HOSTNAME.$DOMAIN
699
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
699
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
700
	AuthUserFile $DIR_DEST_ETC/digest/key_admin
700
	AuthUserFile $DIR_DEST_ETC/digest/key_admin
701
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
701
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
702
</Directory>
702
</Directory>
703
<Directory $DIR_ACC/manager>
703
<Directory $DIR_ACC/manager>
704
	SSLRequireSSL
704
	SSLRequireSSL
705
	AllowOverride None
705
	AllowOverride None
706
	Order deny,allow
706
	Order deny,allow
707
	Deny from all
707
	Deny from all
708
	Allow from 127.0.0.1
708
	Allow from 127.0.0.1
709
	Allow from $PRIVATE_NETWORK_MASK
709
	Allow from $PRIVATE_NETWORK_MASK
710
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
710
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
711
	require valid-user
711
	require valid-user
712
	AuthType digest
712
	AuthType digest
713
	AuthName $HOSTNAME.$DOMAIN
713
	AuthName $HOSTNAME.$DOMAIN
714
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
714
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
715
	AuthUserFile $DIR_DEST_ETC/digest/key_manager
715
	AuthUserFile $DIR_DEST_ETC/digest/key_manager
716
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
716
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
717
</Directory>
717
</Directory>
718
<Directory $DIR_ACC/backup>
718
<Directory $DIR_ACC/backup>
719
	SSLRequireSSL
719
	SSLRequireSSL
720
	AllowOverride None
720
	AllowOverride None
721
	Order deny,allow
721
	Order deny,allow
722
	Deny from all
722
	Deny from all
723
	Allow from 127.0.0.1
723
	Allow from 127.0.0.1
724
	Allow from $PRIVATE_NETWORK_MASK
724
	Allow from $PRIVATE_NETWORK_MASK
725
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
725
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
726
	require valid-user
726
	require valid-user
727
	AuthType digest
727
	AuthType digest
728
	AuthName $HOSTNAME.$DOMAIN
728
	AuthName $HOSTNAME.$DOMAIN
729
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
729
	BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
730
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
730
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
731
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
731
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
732
</Directory>
732
</Directory>
733
Alias /save/ "$DIR_SAVE/"
733
Alias /save/ "$DIR_SAVE/"
734
<Directory $DIR_SAVE>
734
<Directory $DIR_SAVE>
735
	SSLRequireSSL
735
	SSLRequireSSL
736
	Options Indexes
736
	Options Indexes
737
	Order deny,allow
737
	Order deny,allow
738
	Deny from all
738
	Deny from all
739
	Allow from 127.0.0.1
739
	Allow from 127.0.0.1
740
	Allow from $PRIVATE_NETWORK_MASK
740
	Allow from $PRIVATE_NETWORK_MASK
741
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
741
#	Allow from AA.BB.CC.DD/32	# Allow from specific @IP
742
	require valid-user
742
	require valid-user
743
	AuthType digest
743
	AuthType digest
744
	AuthName $HOSTNAME.$DOMAIN
744
	AuthName $HOSTNAME.$DOMAIN
745
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
745
	AuthUserFile $DIR_DEST_ETC/digest/key_backup
746
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
746
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN/
747
</Directory>
747
</Directory>
748
EOF
748
EOF
749
# Launch after coova
749
# Launch after coova
750
$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/httpd.service
750
$SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/httpd.service
751
# Error page management
751
# Error page management
752
FIC_ERROR_DOC=`find /etc/httpd/conf -type f -name multilang-errordoc.conf`
752
FIC_ERROR_DOC=`find /etc/httpd/conf -type f -name multilang-errordoc.conf`
753
[ -e $FIC_ERROR_DOC ]  || cp $FIC_ERROR_DOC $FIC_ERROR_DOC.default
753
[ -e $FIC_ERROR_DOC ]  || cp $FIC_ERROR_DOC $FIC_ERROR_DOC.default
754
 
754
 
755
cat <<EOF > $FIC_ERROR_DOC
755
cat <<EOF > $FIC_ERROR_DOC
756
Alias /error/ "/var/www/html/"
756
Alias /error/ "/var/www/html/"
757
 
757
 
758
<Directory "/usr/share/httpd/error">
758
<Directory "/usr/share/httpd/error">
759
    AllowOverride None
759
    AllowOverride None
760
    Options IncludesNoExec
760
    Options IncludesNoExec
761
    AddOutputFilter Includes html
761
    AddOutputFilter Includes html
762
    AddHandler type-map var
762
    AddHandler type-map var
763
    Require all granted
763
    Require all granted
764
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
764
    LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
765
    ForceLanguagePriority Prefer Fallback
765
    ForceLanguagePriority Prefer Fallback
766
</Directory>
766
</Directory>
767
 
767
 
768
ErrorDocument 400 /error/error.php?error=400
768
ErrorDocument 400 /error/error.php?error=400
769
ErrorDocument 401 /error/error.php?error=401
769
ErrorDocument 401 /error/error.php?error=401
770
ErrorDocument 403 /error/error.php?error=403
770
ErrorDocument 403 /error/error.php?error=403
771
ErrorDocument 404 /error/error.php?error=404
771
ErrorDocument 404 /error/error.php?error=404
772
ErrorDocument 405 /error/error.php?error=405
772
ErrorDocument 405 /error/error.php?error=405
773
ErrorDocument 408 /error/error.php?error=408
773
ErrorDocument 408 /error/error.php?error=408
774
ErrorDocument 410 /error/error.php?error=410
774
ErrorDocument 410 /error/error.php?error=410
775
ErrorDocument 411 /error/error.php?error=411
775
ErrorDocument 411 /error/error.php?error=411
776
ErrorDocument 412 /error/error.php?error=412
776
ErrorDocument 412 /error/error.php?error=412
777
ErrorDocument 413 /error/error.php?error=413
777
ErrorDocument 413 /error/error.php?error=413
778
ErrorDocument 414 /error/error.php?error=414
778
ErrorDocument 414 /error/error.php?error=414
779
ErrorDocument 415 /error/error.php?error=415
779
ErrorDocument 415 /error/error.php?error=415
780
ErrorDocument 500 /error/error.php?error=500
780
ErrorDocument 500 /error/error.php?error=500
781
ErrorDocument 501 /error/error.php?error=501
781
ErrorDocument 501 /error/error.php?error=501
782
ErrorDocument 502 /error/error.php?error=502
782
ErrorDocument 502 /error/error.php?error=502
783
ErrorDocument 503 /error/error.php?error=503
783
ErrorDocument 503 /error/error.php?error=503
784
ErrorDocument 506 /error/error.php?error=506
784
ErrorDocument 506 /error/error.php?error=506
785
EOF
785
EOF
786
 
786
 
787
} # End of ACC ()
787
} # End of ACC ()
788
 
788
 
789
##########################################################################################
789
##########################################################################################
790
##				Fonction "CA"						##
790
##				Fonction "CA"						##
791
## - Création d'une Autorité de Certification et du certificat serveur pour apache 	##
791
## - Création d'une Autorité de Certification et du certificat serveur pour apache 	##
792
##########################################################################################
792
##########################################################################################
793
CA ()
793
CA ()
794
{
794
{
795
	$DIR_DEST_BIN/alcasar-CA.sh
795
	$DIR_DEST_BIN/alcasar-CA.sh
796
	FIC_VIRTUAL_SSL=`find /etc/httpd/conf -type f -name *default_ssl_vhost.conf`
796
	FIC_VIRTUAL_SSL=`find /etc/httpd/conf -type f -name *default_ssl_vhost.conf`
797
	[ -e /etc/httpd/conf/vhosts-ssl.default ]  || cp $FIC_VIRTUAL_SSL /etc/httpd/conf/vhosts-ssl.default
797
	[ -e /etc/httpd/conf/vhosts-ssl.default ]  || cp $FIC_VIRTUAL_SSL /etc/httpd/conf/vhosts-ssl.default
798
	
798
	
799
	#$SED "s?localhost.crt?alcasar.crt?g" $FIC_VIRTUAL_SSL
799
	#$SED "s?localhost.crt?alcasar.crt?g" $FIC_VIRTUAL_SSL
800
	#$SED "s?localhost.key?alcasar.key?g" $FIC_VIRTUAL_SSL
800
	#$SED "s?localhost.key?alcasar.key?g" $FIC_VIRTUAL_SSL
801
	#$SED "s?^#SSLCertificateChainFile.*?SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt?" $FIC_VIRTUAL_SSL
801
	#$SED "s?^#SSLCertificateChainFile.*?SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt?" $FIC_VIRTUAL_SSL
802
	
802
	
803
	cat <<EOF > $FIC_VIRTUAL_SSL
803
	cat <<EOF > $FIC_VIRTUAL_SSL
804
# default SSL virtual host, used for all HTTPS requests that do not
804
# default SSL virtual host, used for all HTTPS requests that do not
805
# match a ServerName or ServerAlias in any <VirtualHost> block.
805
# match a ServerName or ServerAlias in any <VirtualHost> block.
806
 
806
 
807
<VirtualHost _default_:443>
807
<VirtualHost _default_:443>
808
# general configuration
808
# general configuration
809
    ServerAdmin root@localhost
809
    ServerAdmin root@localhost
810
    ServerName localhost
810
    ServerName localhost
811
 
811
 
812
# SSL configuration
812
# SSL configuration
813
    SSLEngine on
813
    SSLEngine on
814
    SSLCertificateFile /etc/pki/tls/certs/alcasar.crt
814
    SSLCertificateFile /etc/pki/tls/certs/alcasar.crt
815
    SSLCertificateKeyFile /etc/pki/tls/private/alcasar.key
815
    SSLCertificateKeyFile /etc/pki/tls/private/alcasar.key
816
    SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
816
    SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
817
    CustomLog logs/ssl_request_log \
817
    CustomLog logs/ssl_request_log \
818
	"%t %{SSL_PROTOCOL}x %{SSL_CIPHER}x [%h] \"%r\" %b"
818
	"%t %{SSL_PROTOCOL}x %{SSL_CIPHER}x [%h] \"%r\" %b"
819
    ErrorLog logs/ssl_error_log
819
    ErrorLog logs/ssl_error_log
820
    ErrorLogFormat "[%t] [%m:%l] [client %a] %M"
820
    ErrorLogFormat "[%t] [%m:%l] [client %a] %M"
821
</VirtualHost>
821
</VirtualHost>
822
EOF
822
EOF
823
 
823
 
824
	chown -R root:apache /etc/pki
824
	chown -R root:apache /etc/pki
825
	chmod -R 750 /etc/pki
825
	chmod -R 750 /etc/pki
826
} # End of CA ()
826
} # End of CA ()
827
 
827
 
828
##########################################################################################
828
##########################################################################################
829
##			Fonction "init_db"						##
829
##			Fonction "init_db"						##
830
## - Initialisation de la base Mysql							##
830
## - Initialisation de la base Mysql							##
831
## - Affectation du mot de passe de l'administrateur (root)				##
831
## - Affectation du mot de passe de l'administrateur (root)				##
832
## - Suppression des bases et des utilisateurs superflus				##
832
## - Suppression des bases et des utilisateurs superflus				##
833
## - Création de la base 'radius'							##
833
## - Création de la base 'radius'							##
834
## - Installation du schéma de cette base						##
834
## - Installation du schéma de cette base						##
835
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)	##
835
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)	##
836
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)		##
836
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)		##
837
##########################################################################################
837
##########################################################################################
838
init_db ()
838
init_db ()
839
{
839
{
840
	rm -rf /var/lib/mysql # to be sure that there is no former installation
840
	rm -rf /var/lib/mysql # to be sure that there is no former installation
841
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
841
	[ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
842
	$SED "s?^#bind-address.*?bind-address=127.0.0.1?g" /etc/my.cnf
842
	$SED "s?^#bind-address.*?bind-address=127.0.0.1?g" /etc/my.cnf
843
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
843
	$SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
844
	systemctl start mysqld.service
844
	systemctl start mysqld.service
845
	sleep 4
845
	sleep 4
846
	mysqladmin -u root password $mysqlpwd
846
	mysqladmin -u root password $mysqlpwd
847
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
847
	MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
848
# Secure the server
848
# Secure the server
849
	$MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
849
	$MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
850
	$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;" 
850
	$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;" 
851
# Create 'radius' database
851
# Create 'radius' database
852
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
852
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
853
# Add an empty radius database structure
853
# Add an empty radius database structure
854
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/radiusd-db-vierge.sql
854
	mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/radiusd-db-vierge.sql
855
# modify the start script in order to close accounting connexion when the system is comming down or up
855
# modify the start script in order to close accounting connexion when the system is comming down or up
856
	[ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
856
	[ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
857
	$SED "/ExecStartPost=/a ExecStartPost=[ -e /usr/local/sbin/alcasar-mysql.sh ] && /usr/local/sbin/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
857
	$SED "/ExecStartPost=/a ExecStartPost=[ -e /usr/local/sbin/alcasar-mysql.sh ] && /usr/local/sbin/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
858
	$SED "/ExecStartPost=/a ExecStop=[ -e /usr/local/sbin/alcasar-mysql.sh ] && /usr/local/sbin/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
858
	$SED "/ExecStartPost=/a ExecStop=[ -e /usr/local/sbin/alcasar-mysql.sh ] && /usr/local/sbin/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
859
	systemctl daemon-reload
859
	systemctl daemon-reload
860
} # End of init_db ()
860
} # End of init_db ()
861
 
861
 
862
##########################################################################
862
##########################################################################
863
##			Fonction "radius"				##
863
##			Fonction "radius"				##
864
## - Paramètrage des fichiers de configuration FreeRadius		##
864
## - Paramètrage des fichiers de configuration FreeRadius		##
865
## - Affectation du secret partagé entre coova-chilli et freeradius	##
865
## - Affectation du secret partagé entre coova-chilli et freeradius	##
866
## - Modification de fichier de conf pour l'accès à Mysql		##
866
## - Modification de fichier de conf pour l'accès à Mysql		##
867
##########################################################################
867
##########################################################################
868
radius ()
868
radius ()
869
{
869
{
870
	cp -f $DIR_CONF/radiusd-db-vierge.sql /etc/raddb/
870
	cp -f $DIR_CONF/radiusd-db-vierge.sql /etc/raddb/
871
	chown -R radius:radius /etc/raddb
871
	chown -R radius:radius /etc/raddb
872
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
872
	[ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
873
# Set radius.conf parameters
873
# Set radius.conf parameters
874
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
874
	$SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
875
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
875
	$SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
876
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
876
	$SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
877
# remove the proxy function
877
# remove the proxy function
878
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
878
	$SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
879
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
879
	$SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
880
# remove EAP module
880
# remove EAP module
881
	$SED "s?^[\t ]*\$INCLUDE eap.conf.*?#\$INCLUDE eap.conf?g" /etc/raddb/radiusd.conf
881
	$SED "s?^[\t ]*\$INCLUDE eap.conf.*?#\$INCLUDE eap.conf?g" /etc/raddb/radiusd.conf
882
# listen on loopback (should be modified later if EAP enabled)
882
# listen on loopback (should be modified later if EAP enabled)
883
	$SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
883
	$SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
884
# enable the  SQL module (and SQL counter)
884
# enable the  SQL module (and SQL counter)
885
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
885
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
886
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
886
	$SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
887
	$SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
887
	$SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
888
# only include modules for ALCASAR needs
888
# only include modules for ALCASAR needs
889
	$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
889
	$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
890
	$SED "s/^[\t ]exec$/\#\texec/g" /etc/raddb/radiusd.conf
890
	$SED "s/^[\t ]exec$/\#\texec/g" /etc/raddb/radiusd.conf
891
	$SED "s?^[\t ]*expr.*?\#\texpr?g" /etc/raddb/radiusd.conf
891
	$SED "s?^[\t ]*expr.*?\#\texpr?g" /etc/raddb/radiusd.conf
892
	$SED "s?^[\t ]*\#	daily.*?\#\tdaily\n\tsql?g" /etc/raddb/radiusd.conf
892
	$SED "s?^[\t ]*\#	daily.*?\#\tdaily\n\tsql?g" /etc/raddb/radiusd.conf
893
	$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
893
	$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
894
	$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
894
	$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
895
# remvove virtual server and copy our conf file
895
# remvove virtual server and copy our conf file
896
	rm -f /etc/raddb/sites-enabled/*
896
	rm -f /etc/raddb/sites-enabled/*
897
       	cp $DIR_CONF/radius/alcasar-radius /etc/raddb/sites-available/alcasar
897
       	cp $DIR_CONF/radius/alcasar-radius /etc/raddb/sites-available/alcasar
898
	chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
898
	chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
899
	chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
899
	chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
900
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
900
	chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
901
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
901
	ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
902
# Inutile dans notre fonctionnement mais les liens sont recréés par un update de radius ... donc forcé en tant que fichier à 'vide'
902
# Inutile dans notre fonctionnement mais les liens sont recréés par un update de radius ... donc forcé en tant que fichier à 'vide'
903
	touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
903
	touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
904
# client.conf configuration (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
904
# client.conf configuration (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
905
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
905
	[ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
906
	cat << EOF > /etc/raddb/clients.conf
906
	cat << EOF > /etc/raddb/clients.conf
907
client 127.0.0.1 {
907
client 127.0.0.1 {
908
	secret = $secretradius
908
	secret = $secretradius
909
	shortname = localhost
909
	shortname = localhost
910
}
910
}
911
EOF
911
EOF
912
# sql.conf modification
912
# sql.conf modification
913
	[ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
913
	[ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
914
	$SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
914
	$SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
915
	$SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
915
	$SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
916
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
916
	$SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
917
	$SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
917
	$SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
918
# dialup.conf modification (case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.) 
918
# dialup.conf modification (case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.) 
919
	[ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
919
	[ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
920
	cp -f $DIR_CONF/radius/dialup.conf /etc/raddb/sql/mysql/dialup.conf
920
	cp -f $DIR_CONF/radius/dialup.conf /etc/raddb/sql/mysql/dialup.conf
921
# counter.conf modification (change the Max-All-Session-Time counter)
921
# counter.conf modification (change the Max-All-Session-Time counter)
922
	[ -e /etc/raddb/sql/mysql/counter.conf.default ] || cp /etc/raddb/sql/mysql/counter.conf /etc/raddb/sql/mysql/counter.conf.default
922
	[ -e /etc/raddb/sql/mysql/counter.conf.default ] || cp /etc/raddb/sql/mysql/counter.conf /etc/raddb/sql/mysql/counter.conf.default
923
	cp -f $DIR_CONF/radius/counter.conf /etc/raddb/sql/mysql/counter.conf
923
	cp -f $DIR_CONF/radius/counter.conf /etc/raddb/sql/mysql/counter.conf
924
	chown -R radius:radius /etc/raddb/sql/mysql/*
924
	chown -R radius:radius /etc/raddb/sql/mysql/*
925
# make certain that mysql is up before radius start
925
# make certain that mysql is up before radius start
926
	[ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
926
	[ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
927
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
927
	$SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
928
	systemctl daemon-reload
928
	systemctl daemon-reload
929
} # End radius ()
929
} # End radius ()
930
 
930
 
931
##########################################################################
931
##########################################################################
932
##			Function "radius_web"				##
932
##			Function "radius_web"				##
933
## - Import, modification et paramètrage de l'interface "dialupadmin"	##
933
## - Import, modification et paramètrage de l'interface "dialupadmin"	##
934
## - Création du lien vers la page de changement de mot de passe        ##
934
## - Création du lien vers la page de changement de mot de passe        ##
935
##########################################################################
935
##########################################################################
936
radius_web ()
936
radius_web ()
937
{
937
{
938
# copie de l'interface d'origine dans la structure Alcasar
938
# copie de l'interface d'origine dans la structure Alcasar
939
	[ -d /usr/share/freeradius-web ] && cp -rf /usr/share/freeradius-web/* $DIR_ACC/manager/
939
	[ -d /usr/share/freeradius-web ] && cp -rf /usr/share/freeradius-web/* $DIR_ACC/manager/
940
	rm -f $DIR_ACC/manager/index.html $DIR_ACC/manager/readme 
940
	rm -f $DIR_ACC/manager/index.html $DIR_ACC/manager/readme 
941
	rm -f $DIR_ACC/manager/htdocs/about.html $DIR_ACC/manager/htdocs/index.html $DIR_ACC/manager/htdocs/content.html
941
	rm -f $DIR_ACC/manager/htdocs/about.html $DIR_ACC/manager/htdocs/index.html $DIR_ACC/manager/htdocs/content.html
942
# copie des fichiers modifiés
942
# copie des fichiers modifiés
943
	cp -rf $DIR_INSTALL/web/acc/manager/* $DIR_ACC/manager/
943
	cp -rf $DIR_INSTALL/web/acc/manager/* $DIR_ACC/manager/
944
	chown -R apache:apache $DIR_ACC/manager/
944
	chown -R apache:apache $DIR_ACC/manager/
945
# Modification des fichiers de configuration
945
# Modification des fichiers de configuration
946
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
946
	[ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
947
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
947
	$SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
948
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
948
	$SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
949
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
949
	$SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
950
	$SED "s?^sql_debug:.*?sql_debug: false?g" /etc/freeradius-web/admin.conf
950
	$SED "s?^sql_debug:.*?sql_debug: false?g" /etc/freeradius-web/admin.conf
951
	$SED "s?^sql_usergroup_table: .*?sql_usergroup_table: radusergroup?g" /etc/freeradius-web/admin.conf
951
	$SED "s?^sql_usergroup_table: .*?sql_usergroup_table: radusergroup?g" /etc/freeradius-web/admin.conf
952
	$SED "s?^sql_password_attribute:.*?sql_password_attribute: Crypt-Password?g" /etc/freeradius-web/admin.conf
952
	$SED "s?^sql_password_attribute:.*?sql_password_attribute: Crypt-Password?g" /etc/freeradius-web/admin.conf
953
	$SED "s?^general_finger_type.*?# general_finger_type: snmp?g" /etc/freeradius-web/admin.conf
953
	$SED "s?^general_finger_type.*?# general_finger_type: snmp?g" /etc/freeradius-web/admin.conf
954
	$SED "s?^general_stats_use_totacct.*?general_stats_use_totacct: yes?g" /etc/freeradius-web/admin.conf
954
	$SED "s?^general_stats_use_totacct.*?general_stats_use_totacct: yes?g" /etc/freeradius-web/admin.conf
955
	$SED "s?^general_charset.*?general_charset: utf-8?g" /etc/freeradius-web/admin.conf
955
	$SED "s?^general_charset.*?general_charset: utf-8?g" /etc/freeradius-web/admin.conf
956
	[ -e /etc/freeradius-web/config.php.default ] || cp /etc/freeradius-web/config.php /etc/freeradius-web/config.php.default
956
	[ -e /etc/freeradius-web/config.php.default ] || cp /etc/freeradius-web/config.php /etc/freeradius-web/config.php.default
957
	cp -f $DIR_CONF/radius/freeradiusweb-config.php /etc/freeradius-web/config.php
957
	cp -f $DIR_CONF/radius/freeradiusweb-config.php /etc/freeradius-web/config.php
958
	cat <<EOF > /etc/freeradius-web/naslist.conf
958
	cat <<EOF > /etc/freeradius-web/naslist.conf
959
nas1_name: alcasar-$ORGANISME
959
nas1_name: alcasar-$ORGANISME
960
nas1_model: Portail captif
960
nas1_model: Portail captif
961
nas1_ip: $PRIVATE_IP
961
nas1_ip: $PRIVATE_IP
962
nas1_port_num: 0
962
nas1_port_num: 0
963
nas1_community: public
963
nas1_community: public
964
EOF
964
EOF
965
# Modification des attributs visibles lors de la création d'un usager ou d'un groupe
965
# Modification des attributs visibles lors de la création d'un usager ou d'un groupe
966
	[ -e /etc/freeradius-web/user_edit.attrs.default ] || mv /etc/freeradius-web/user_edit.attrs /etc/freeradius-web/user_edit.attrs.default
966
	[ -e /etc/freeradius-web/user_edit.attrs.default ] || mv /etc/freeradius-web/user_edit.attrs /etc/freeradius-web/user_edit.attrs.default
967
	cp -f $DIR_CONF/radius/user_edit.attrs /etc/freeradius-web/user_edit.attrs
967
	cp -f $DIR_CONF/radius/user_edit.attrs /etc/freeradius-web/user_edit.attrs
968
# Ajout du mappage des attributs chillispot
968
# Ajout du mappage des attributs chillispot
969
	[ -e /etc/freeradius-web/sql.attrmap.default ] || mv /etc/freeradius-web/sql.attrmap /etc/freeradius-web/sql.attrmap.default
969
	[ -e /etc/freeradius-web/sql.attrmap.default ] || mv /etc/freeradius-web/sql.attrmap /etc/freeradius-web/sql.attrmap.default
970
	cp -f $DIR_CONF/radius/sql.attrmap /etc/freeradius-web/sql.attrmap
970
	cp -f $DIR_CONF/radius/sql.attrmap /etc/freeradius-web/sql.attrmap
971
# Modification des attributs visibles sur les pages des statistiques (suppression NAS_IP et NAS_port)
971
# Modification des attributs visibles sur les pages des statistiques (suppression NAS_IP et NAS_port)
972
	[ -e /etc/freeradius-web/sql.attrs.default ] || cp /etc/freeradius-web/sql.attrs /etc/freeradius-web/sql.attrs.default
972
	[ -e /etc/freeradius-web/sql.attrs.default ] || cp /etc/freeradius-web/sql.attrs /etc/freeradius-web/sql.attrs.default
973
	$SED "s?^NASIPAddress.*?NASIPAddress\tNas IP Address\tno?g" /etc/freeradius-web/sql.attrs
973
	$SED "s?^NASIPAddress.*?NASIPAddress\tNas IP Address\tno?g" /etc/freeradius-web/sql.attrs
974
	$SED "s?^NASPortId.*?NASPortId\tNas Port\tno?g" /etc/freeradius-web/sql.attrs
974
	$SED "s?^NASPortId.*?NASPortId\tNas Port\tno?g" /etc/freeradius-web/sql.attrs
975
	chown -R apache:apache /etc/freeradius-web
975
	chown -R apache:apache /etc/freeradius-web
976
# Ajout de l'alias vers la page de "changement de mot de passe usager"
976
# Ajout de l'alias vers la page de "changement de mot de passe usager"
977
	cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
977
	cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
978
<Directory $DIR_WEB/pass>
978
<Directory $DIR_WEB/pass>
979
	SSLRequireSSL
979
	SSLRequireSSL
980
	AllowOverride None
980
	AllowOverride None
981
	Order deny,allow
981
	Order deny,allow
982
	Deny from all
982
	Deny from all
983
	Allow from 127.0.0.1
983
	Allow from 127.0.0.1
984
	Allow from $PRIVATE_NETWORK_MASK
984
	Allow from $PRIVATE_NETWORK_MASK
985
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN
985
	ErrorDocument 404 https://$HOSTNAME.$DOMAIN
986
</Directory>
986
</Directory>
987
EOF
987
EOF
988
} # End of radius_web ()
988
} # End of radius_web ()
989
 
989
 
990
##################################################################################
990
##################################################################################
991
##			Fonction "chilli"					##
991
##			Fonction "chilli"					##
992
## - Création du fichier d'initialisation et de configuration de coova-chilli	##
992
## - Création du fichier d'initialisation et de configuration de coova-chilli	##
993
## - Paramètrage de la page d'authentification (intercept.php)			##
993
## - Paramètrage de la page d'authentification (intercept.php)			##
994
##################################################################################
994
##################################################################################
995
chilli ()
995
chilli ()
996
{
996
{
997
# chilli unit for systemd
997
# chilli unit for systemd
998
cat << EOF > /lib/systemd/system/chilli.service
998
cat << EOF > /lib/systemd/system/chilli.service
999
#  This file is part of systemd.
999
#  This file is part of systemd.
1000
#
1000
#
1001
#  systemd is free software; you can redistribute it and/or modify it
1001
#  systemd is free software; you can redistribute it and/or modify it
1002
#  under the terms of the GNU General Public License as published by
1002
#  under the terms of the GNU General Public License as published by
1003
#  the Free Software Foundation; either version 2 of the License, or
1003
#  the Free Software Foundation; either version 2 of the License, or
1004
#  (at your option) any later version.
1004
#  (at your option) any later version.
1005
[Unit]
1005
[Unit]
1006
Description=chilli is a captive portal daemon
1006
Description=chilli is a captive portal daemon
1007
After=network.target
1007
After=network.target
1008
 
1008
 
1009
[Service]
1009
[Service]
1010
Type=forking
1010
Type=forking
1011
ExecStart=/usr/libexec/chilli start
1011
ExecStart=/usr/libexec/chilli start
1012
ExecStop=/usr/libexec/chilli stop
1012
ExecStop=/usr/libexec/chilli stop
1013
ExecReload=/usr/libexec/chilli reload
1013
ExecReload=/usr/libexec/chilli reload
1014
PIDFile=/var/run/chilli.pid
1014
PIDFile=/var/run/chilli.pid
1015
 
1015
 
1016
[Install]
1016
[Install]
1017
WantedBy=multi-user.target
1017
WantedBy=multi-user.target
1018
EOF
1018
EOF
1019
# init file creation
1019
# init file creation
1020
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1020
	[ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1021
	cat <<EOF > /usr/libexec/chilli
1021
	cat <<EOF > /usr/libexec/chilli
1022
#!/bin/sh
1022
#!/bin/sh
1023
#
1023
#
1024
# chilli CoovaChilli init
1024
# chilli CoovaChilli init
1025
#
1025
#
1026
# chkconfig: 2345 65 35
1026
# chkconfig: 2345 65 35
1027
# description: CoovaChilli
1027
# description: CoovaChilli
1028
### BEGIN INIT INFO
1028
### BEGIN INIT INFO
1029
# Provides:       chilli
1029
# Provides:       chilli
1030
# Required-Start: network 
1030
# Required-Start: network 
1031
# Should-Start: 
1031
# Should-Start: 
1032
# Required-Stop:  network
1032
# Required-Stop:  network
1033
# Should-Stop: 
1033
# Should-Stop: 
1034
# Default-Start:  2 3 5
1034
# Default-Start:  2 3 5
1035
# Default-Stop:
1035
# Default-Stop:
1036
# Description:    CoovaChilli access controller
1036
# Description:    CoovaChilli access controller
1037
### END INIT INFO
1037
### END INIT INFO
1038
 
1038
 
1039
[ -f /usr/sbin/chilli ] || exit 0
1039
[ -f /usr/sbin/chilli ] || exit 0
1040
. /etc/init.d/functions
1040
. /etc/init.d/functions
1041
CONFIG=/etc/chilli.conf
1041
CONFIG=/etc/chilli.conf
1042
pidfile=/var/run/chilli.pid
1042
pidfile=/var/run/chilli.pid
1043
[ -f \$CONFIG ] || {
1043
[ -f \$CONFIG ] || {
1044
    echo "\$CONFIG Not found"
1044
    echo "\$CONFIG Not found"
1045
    exit 0
1045
    exit 0
1046
}
1046
}
1047
RETVAL=0
1047
RETVAL=0
1048
prog="chilli"
1048
prog="chilli"
1049
case \$1 in
1049
case \$1 in
1050
    start)
1050
    start)
1051
	if [ -f \$pidfile ] ; then 
1051
	if [ -f \$pidfile ] ; then 
1052
		gprintf "chilli is already running"
1052
		gprintf "chilli is already running"
1053
	else
1053
	else
1054
        	gprintf "Starting \$prog: "
1054
        	gprintf "Starting \$prog: "
1055
		rm -f /var/run/chilli* # cleaning
1055
		rm -f /var/run/chilli* # cleaning
1056
        	/sbin/modprobe tun >/dev/null 2>&1
1056
        	/sbin/modprobe tun >/dev/null 2>&1
1057
        	echo 1 > /proc/sys/net/ipv4/ip_forward
1057
        	echo 1 > /proc/sys/net/ipv4/ip_forward
1058
		[ -e /dev/net/tun ] || {
1058
		[ -e /dev/net/tun ] || {
1059
	    	(cd /dev; 
1059
	    	(cd /dev; 
1060
			mkdir net; 
1060
			mkdir net; 
1061
			cd net; 
1061
			cd net; 
1062
			mknod tun c 10 200)
1062
			mknod tun c 10 200)
1063
		}
1063
		}
1064
		ifconfig $INTIF 0.0.0.0
1064
		ifconfig $INTIF 0.0.0.0
1065
		daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1065
		daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1066
        	RETVAL=$?
1066
        	RETVAL=$?
1067
	fi
1067
	fi
1068
	;;
1068
	;;
1069
 
1069
 
1070
    reload)
1070
    reload)
1071
	killall -HUP chilli
1071
	killall -HUP chilli
1072
	;;
1072
	;;
1073
 
1073
 
1074
    restart)
1074
    restart)
1075
	\$0 stop
1075
	\$0 stop
1076
        sleep 2
1076
        sleep 2
1077
	\$0 start
1077
	\$0 start
1078
	;;
1078
	;;
1079
    
1079
    
1080
    status)
1080
    status)
1081
        status chilli
1081
        status chilli
1082
        RETVAL=0
1082
        RETVAL=0
1083
        ;;
1083
        ;;
1084
 
1084
 
1085
    stop)
1085
    stop)
1086
	if [ -f \$pidfile ] ; then  
1086
	if [ -f \$pidfile ] ; then  
1087
        	gprintf "Shutting down \$prog: "
1087
        	gprintf "Shutting down \$prog: "
1088
		killproc /usr/sbin/chilli
1088
		killproc /usr/sbin/chilli
1089
		RETVAL=\$?
1089
		RETVAL=\$?
1090
		[ \$RETVAL = 0 ] && rm -f $pidfile
1090
		[ \$RETVAL = 0 ] && rm -f $pidfile
1091
	else	
1091
	else	
1092
        	gprintf "chilli is not running"
1092
        	gprintf "chilli is not running"
1093
	fi
1093
	fi
1094
	;;
1094
	;;
1095
    
1095
    
1096
    *)
1096
    *)
1097
        echo "Usage: \$0 {start|stop|restart|reload|status}"
1097
        echo "Usage: \$0 {start|stop|restart|reload|status}"
1098
        exit 1
1098
        exit 1
1099
esac
1099
esac
1100
echo
1100
echo
1101
EOF
1101
EOF
1102
chmod a+x /usr/libexec/chilli
1102
chmod a+x /usr/libexec/chilli
1103
# conf file creation
1103
# conf file creation
1104
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1104
	[ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1105
	cat <<EOF > /etc/chilli.conf
1105
	cat <<EOF > /etc/chilli.conf
1106
# coova config for ALCASAR
1106
# coova config for ALCASAR
1107
cmdsocket	/var/run/chilli.sock
1107
cmdsocket	/var/run/chilli.sock
1108
unixipc		chilli.$INTIF.ipc
1108
unixipc		chilli.$INTIF.ipc
1109
pidfile		/var/run/chilli.$INTIF.pid
1109
pidfile		/var/run/chilli.$INTIF.pid
1110
net		$PRIVATE_NETWORK_MASK
1110
net		$PRIVATE_NETWORK_MASK
1111
dhcpif		$INTIF
1111
dhcpif		$INTIF
1112
ethers		$DIR_DEST_ETC/alcasar-ethers
1112
ethers		$DIR_DEST_ETC/alcasar-ethers
1113
#nodynip
1113
#nodynip
1114
#statip
1114
#statip
1115
dynip		$PRIVATE_NETWORK_MASK
1115
dynip		$PRIVATE_NETWORK_MASK
1116
domain		$DOMAIN
1116
domain		$DOMAIN
1117
dns1		$PRIVATE_IP
1117
dns1		$PRIVATE_IP
1118
dns2		$PRIVATE_IP
1118
dns2		$PRIVATE_IP
1119
uamlisten	$PRIVATE_IP
1119
uamlisten	$PRIVATE_IP
1120
uamport		3990
1120
uamport		3990
1121
macauth
1121
macauth
1122
macpasswd	password
1122
macpasswd	password
1123
locationname	$HOSTNAME.$DOMAIN
1123
locationname	$HOSTNAME.$DOMAIN
1124
radiusserver1	127.0.0.1
1124
radiusserver1	127.0.0.1
1125
radiusserver2	127.0.0.1
1125
radiusserver2	127.0.0.1
1126
radiussecret	$secretradius
1126
radiussecret	$secretradius
1127
radiusauthport	1812
1127
radiusauthport	1812
1128
radiusacctport	1813
1128
radiusacctport	1813
1129
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
1129
uamserver	https://$HOSTNAME.$DOMAIN/intercept.php
1130
radiusnasid	$HOSTNAME.$DOMAIN
1130
radiusnasid	$HOSTNAME.$DOMAIN
1131
uamsecret	$secretuam
1131
uamsecret	$secretuam
1132
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1132
uamallowed	$HOSTNAME,$HOSTNAME.$DOMAIN
1133
coaport		3799
1133
coaport		3799
1134
conup		$DIR_DEST_BIN/alcasar-conup.sh
1134
conup		$DIR_DEST_BIN/alcasar-conup.sh
1135
condown		$DIR_DEST_BIN/alcasar-condown.sh
1135
condown		$DIR_DEST_BIN/alcasar-condown.sh
1136
include		$DIR_DEST_ETC/alcasar-uamallowed
1136
include		$DIR_DEST_ETC/alcasar-uamallowed
1137
include		$DIR_DEST_ETC/alcasar-uamdomain
1137
include		$DIR_DEST_ETC/alcasar-uamdomain
1138
#dhcpgateway
1138
#dhcpgateway
1139
#dhcprelayagent
1139
#dhcprelayagent
1140
#dhcpgatewayport
1140
#dhcpgatewayport
1141
EOF
1141
EOF
1142
# create file for DHCP static ip. Reserve the second IP address for INTIF (the first one is for tun0)
1142
# create file for DHCP static ip. Reserve the second IP address for INTIF (the first one is for tun0)
1143
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1143
	echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1144
# create files for trusted domains and urls
1144
# create files for trusted domains and urls
1145
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1145
	touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1146
	chown root:apache $DIR_DEST_ETC/alcasar-*
1146
	chown root:apache $DIR_DEST_ETC/alcasar-*
1147
	chmod 660 $DIR_DEST_ETC/alcasar-*
1147
	chmod 660 $DIR_DEST_ETC/alcasar-*
1148
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1148
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1149
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1149
	$SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1150
	$SED "s?^\$userpassword=1.*?\$userpassword=1;?g" $DIR_WEB/intercept.php
1150
	$SED "s?^\$userpassword=1.*?\$userpassword=1;?g" $DIR_WEB/intercept.php
1151
# user 'chilli' creation (in order to run conup/off and up/down scripts
1151
# user 'chilli' creation (in order to run conup/off and up/down scripts
1152
	chilli_exist=`grep chilli /etc/passwd|wc -l`
1152
	chilli_exist=`grep chilli /etc/passwd|wc -l`
1153
	if [ "$chilli_exist" == "1" ]
1153
	if [ "$chilli_exist" == "1" ]
1154
	then
1154
	then
1155
	      userdel -r chilli 2>/dev/null
1155
	      userdel -r chilli 2>/dev/null
1156
	fi
1156
	fi
1157
	groupadd -f chilli
1157
	groupadd -f chilli
1158
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1158
	useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1159
}  # End of chilli ()
1159
}  # End of chilli ()
1160
 
1160
 
1161
##################################################################
1161
##################################################################
1162
##		Fonction "dansguardian"				##
1162
##		Fonction "dansguardian"				##
1163
## - Paramètrage du gestionnaire de contenu Dansguardian	##
1163
## - Paramètrage du gestionnaire de contenu Dansguardian	##
1164
##################################################################
1164
##################################################################
1165
dansguardian ()
1165
dansguardian ()
1166
{
1166
{
1167
	mkdir /var/dansguardian
1167
	mkdir /var/dansguardian
1168
	chown dansguardian /var/dansguardian
1168
	chown dansguardian /var/dansguardian
1169
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dansguardian -c /etc/dansguardian/dansguardian.conf?g" /lib/systemd/system/dansguardian.service
1169
	$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dansguardian -c /etc/dansguardian/dansguardian.conf?g" /lib/systemd/system/dansguardian.service
1170
	$SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/dansguardian.service
1170
	$SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/dansguardian.service
1171
	[ -e $DIR_DG/dansguardian.conf.default ] || cp $DIR_DG/dansguardian.conf $DIR_DG/dansguardian.conf.default
1171
	[ -e $DIR_DG/dansguardian.conf.default ] || cp $DIR_DG/dansguardian.conf $DIR_DG/dansguardian.conf.default
1172
# By default the filter is off 
1172
# By default the filter is off 
1173
	$SED "s/^reportinglevel =.*/reportinglevel = -1/g" $DIR_DG/dansguardian.conf
1173
	$SED "s/^reportinglevel =.*/reportinglevel = -1/g" $DIR_DG/dansguardian.conf
1174
# French deny HTML page
1174
# French deny HTML page
1175
	$SED "s?^language =.*?language = french?g" $DIR_DG/dansguardian.conf
1175
	$SED "s?^language =.*?language = french?g" $DIR_DG/dansguardian.conf
1176
# Listen only on LAN side
1176
# Listen only on LAN side
1177
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/dansguardian.conf
1177
	$SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/dansguardian.conf
1178
# DG send its flow to HAVP
1178
# DG send its flow to HAVP
1179
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/dansguardian.conf
1179
	$SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/dansguardian.conf
1180
# replace the default deny HTML page
1180
# replace the default deny HTML page
1181
	cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
1181
	cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
1182
	cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
1182
	cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
1183
# Don't log
1183
# Don't log
1184
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/dansguardian.conf
1184
	$SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/dansguardian.conf
1185
# Run 10 daemons (20 in largest server)
1185
# Run 10 daemons (20 in largest server)
1186
	$SED "s?^minchildren =.*?minchildren = 10?g" $DIR_DG/dansguardian.conf
1186
	$SED "s?^minchildren =.*?minchildren = 10?g" $DIR_DG/dansguardian.conf
1187
# on désactive par défaut le controle de contenu des pages html
1187
# on désactive par défaut le controle de contenu des pages html
1188
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/dansguardian.conf
1188
	$SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/dansguardian.conf
1189
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1189
	cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1190
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1190
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1191
# on désactive par défaut le contrôle d'URL par expressions régulières
1191
# on désactive par défaut le contrôle d'URL par expressions régulières
1192
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1192
	cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1193
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1193
	$SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1194
# on désactive par défaut le contrôle de téléchargement de fichiers
1194
# on désactive par défaut le contrôle de téléchargement de fichiers
1195
	[ -e $DIR_DG/dansguardianf1.conf.default ] || cp $DIR_DG/dansguardianf1.conf $DIR_DG/dansguardianf1.conf.default
1195
	[ -e $DIR_DG/dansguardianf1.conf.default ] || cp $DIR_DG/dansguardianf1.conf $DIR_DG/dansguardianf1.conf.default
1196
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/dansguardianf1.conf
1196
	$SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/dansguardianf1.conf
1197
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1197
	[ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1198
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1198
	[ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1199
	touch $DIR_DG/lists/bannedextensionlist
1199
	touch $DIR_DG/lists/bannedextensionlist
1200
	touch $DIR_DG/lists/bannedmimetypelist
1200
	touch $DIR_DG/lists/bannedmimetypelist
1201
# 'Safesearch' regex actualisation
1201
# 'Safesearch' regex actualisation
1202
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1202
	$SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1203
# empty LAN IP list that won't be WEB filtered
1203
# empty LAN IP list that won't be WEB filtered
1204
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1204
	[ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1205
	touch $DIR_DG/lists/exceptioniplist
1205
	touch $DIR_DG/lists/exceptioniplist
1206
# Keep a copy of URL & domain filter configuration files
1206
# Keep a copy of URL & domain filter configuration files
1207
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1207
	[ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1208
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1208
	[ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1209
} # End of dansguardian ()
1209
} # End of dansguardian ()
1210
 
1210
 
1211
##################################################################
1211
##################################################################
1212
##			Fonction "antivirus"			##
1212
##			Fonction "antivirus"			##
1213
## - configuration of havp, libclamav and freshclam		##
1213
## - configuration of havp, libclamav and freshclam		##
1214
##################################################################
1214
##################################################################
1215
antivirus ()		
1215
antivirus ()		
1216
{
1216
{
1217
# create 'havp' user
1217
# create 'havp' user
1218
	havp_exist=`grep havp /etc/passwd|wc -l`
1218
	havp_exist=`grep havp /etc/passwd|wc -l`
1219
	if [ "$havp_exist" == "1" ]
1219
	if [ "$havp_exist" == "1" ]
1220
	then
1220
	then
1221
	      userdel -r havp 2>/dev/null
1221
	      userdel -r havp 2>/dev/null
1222
	      groupdel havp 2>/dev/null
1222
	      groupdel havp 2>/dev/null
1223
	fi
1223
	fi
1224
	groupadd -f havp
1224
	groupadd -f havp
1225
	useradd -r -g havp -s /bin/false -c "system user for havp" havp
1225
	useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1226
	mkdir -p /var/tmp/havp /var/log/havp /var/run/havp
1226
	mkdir -p /var/tmp/havp /var/log/havp /var/run/havp
1227
	chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1227
	chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1228
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1228
	[ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1229
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1229
	$SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1230
	$SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config	# pidfile
1230
	$SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config	# pidfile
1231
	$SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config		# transparent mode
1231
	$SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config		# transparent mode
1232
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
1232
	$SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config	# we listen only on loopback
1233
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on port 8090 (on loopback)
1233
	$SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config				# datas come on port 8090 (on loopback)
1234
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
1234
	$SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config	# Log format
1235
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1235
	$SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config		# active libclamav AV
1236
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
1236
	$SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config			# log only when malware matches
1237
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
1237
	$SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config		# 10 daemons are started simultaneously
1238
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1238
	$SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config		# doesn't scan image files
1239
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1239
	$SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1240
# skip checking of youtube flow (too heavy load / risk too low)
1240
# skip checking of youtube flow (too heavy load / risk too low)
1241
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1241
	[ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1242
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1242
	echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1243
	echo "*.youtube.com/*" >> /etc/havp/whitelist
1243
	echo "*.youtube.com/*" >> /etc/havp/whitelist
1244
# replacement of init script
1244
# replacement of init script
1245
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1245
	[ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1246
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
1246
	cp -f $DIR_CONF/havp-init /etc/init.d/havp
1247
# replace of the intercept page (template)
1247
# replace of the intercept page (template)
1248
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1248
	cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1249
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1249
	cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1250
# update virus database every 4 hours (24h/6)
1250
# update virus database every 4 hours (24h/6)
1251
	[ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1251
	[ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1252
	$SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1252
	$SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1253
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1253
	$SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1254
	$SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1254
	$SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1255
	$SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1255
	$SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1256
	$SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1256
	$SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1257
# update now
1257
# update now
1258
	/usr/bin/freshclam --no-warnings
1258
	/usr/bin/freshclam --no-warnings
1259
} # End of antivirus ()
1259
} # End of antivirus ()
1260
 
1260
 
1261
##################################################################
1261
##########################################################################
1262
##			Fonction "antivirus"			##
1262
##			Fonction "tinyproxy"				##
1263
## - configuration of havp, libclamav and freshclam		##
1263
## - configuration of tinyproxy (proxy between filterde users and havp)	##
1264
##################################################################
1264
##########################################################################
1265
tinyproxy ()		
1265
tinyproxy ()		
1266
{
1266
{
-
 
1267
	tinyproxy_exist=`grep tinyproxy /etc/passwd|wc -l`
-
 
1268
	if [ "$tinyproxy_exist" == "1" ]
-
 
1269
	then
-
 
1270
	      userdel -r tinyproxy 2>/dev/null
-
 
1271
	      groupdel tinyproxy 2>/dev/null
-
 
1272
	fi
-
 
1273
	groupadd -f tinyproxy
-
 
1274
	useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" havp
-
 
1275
	mkdir -p /var/log/tinyproxy /var/run/tinyproxy
-
 
1276
	chown -R tinyproxy:tinyproxy /var/log/tinyproxy /var/run/tinyproxy
-
 
1277
	[ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
-
 
1278
	$SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
-
 
1279
	$SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
-
 
1280
	$SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf			# Listen Port
-
 
1281
	$SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf		# Listen NIC (only intif)
-
 
1282
	$SED "s?^#LogFile.*?LogFile /var/log/tinyproxy/tinyproxy.log?g" /etc/tinyproxy/tinyproxy.conf
-
 
1283
	$SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf		# Only errors are logged
-
 
1284
	$SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf	# forward to HAVP
-
 
1285
	$SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf	# Stealth mode
1267
 
1286
 
1268
} # end of tinyproxy
1287
} # end of tinyproxy
1269
##################################################################################
1288
##################################################################################
1270
##			function "ulogd"					##
1289
##			function "ulogd"					##
1271
## - Ulog config for multi-log files 						##
1290
## - Ulog config for multi-log files 						##
1272
##################################################################################
1291
##################################################################################
1273
ulogd ()
1292
ulogd ()
1274
{
1293
{
1275
# Three instances of ulogd (three different logfiles)
1294
# Three instances of ulogd (three different logfiles)
1276
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1295
	[ -d /var/log/firewall ] || mkdir -p /var/log/firewall
1277
	nl=1
1296
	nl=1
1278
	for log_type in traceability ssh ext-access
1297
	for log_type in traceability ssh ext-access
1279
	do
1298
	do
1280
		[ -e /lib/systemd/system/ulogd-$log_type.service ] || cp -f /lib/systemd/system/ulogd.service /lib/systemd/system/ulogd-$log_type.service
1299
		[ -e /lib/systemd/system/ulogd-$log_type.service ] || cp -f /lib/systemd/system/ulogd.service /lib/systemd/system/ulogd-$log_type.service
1281
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1300
		[ -e /var/log/firewall/$log_type.log ] || echo "" > /var/log/firewall/$log_type.log
1282
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1301
		cp -f $DIR_CONF/ulogd-sample.conf /etc/ulogd-$log_type.conf
1283
		$SED "s?^nlgroup=.*?nlgroup=$nl?g" /etc/ulogd-$log_type.conf 
1302
		$SED "s?^nlgroup=.*?nlgroup=$nl?g" /etc/ulogd-$log_type.conf 
1284
		cat << EOF >> /etc/ulogd-$log_type.conf
1303
		cat << EOF >> /etc/ulogd-$log_type.conf
1285
[emu1]
1304
[emu1]
1286
file="/var/log/firewall/$log_type.log"
1305
file="/var/log/firewall/$log_type.log"
1287
sync=1
1306
sync=1
1288
EOF
1307
EOF
1289
		$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
1308
		$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
1290
		nl=`expr $nl + 1`
1309
		nl=`expr $nl + 1`
1291
	done
1310
	done
1292
	chown -R root:apache /var/log/firewall
1311
	chown -R root:apache /var/log/firewall
1293
	chmod 750 /var/log/firewall
1312
	chmod 750 /var/log/firewall
1294
	chmod 640 /var/log/firewall/*
1313
	chmod 640 /var/log/firewall/*
1295
}  # End of ulogd ()
1314
}  # End of ulogd ()
1296
 
1315
 
1297
 
1316
 
1298
##########################################################
1317
##########################################################
1299
##              Function "nfsen"			##
1318
##              Function "nfsen"			##
1300
##########################################################
1319
##########################################################
1301
nfsen()
1320
nfsen()
1302
{
1321
{
1303
	tar xzf ./conf/nfsen/nfsen-1.3.6p1.tar.gz -C /tmp/
1322
	tar xzf ./conf/nfsen/nfsen-1.3.6p1.tar.gz -C /tmp/
1304
# Add PortTracker plugin
1323
# Add PortTracker plugin
1305
	for i in /var/www/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1324
	for i in /var/www/nfsen/plugins /var/log/netflow/porttracker /usr/share/nfsen/plugins
1306
	do
1325
	do
1307
	[ ! -d $i ] && mkdir $i && chown -R apache:apache $i && echo "$i created" || echo "$i already exists"
1326
	[ ! -d $i ] && mkdir $i && chown -R apache:apache $i && echo "$i created" || echo "$i already exists"
1308
	done
1327
	done
1309
	cp -f $DIR_CONF/nfsen/PortTracker.pm /tmp/nfsen-1.3.6p1/contrib/PortTracker/
1328
	cp -f $DIR_CONF/nfsen/PortTracker.pm /tmp/nfsen-1.3.6p1/contrib/PortTracker/
1310
# use of our conf file and init unit
1329
# use of our conf file and init unit
1311
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-1.3.6p1/etc/
1330
	cp $DIR_CONF/nfsen/nfsen.conf /tmp/nfsen-1.3.6p1/etc/
1312
# Installation of nfsen
1331
# Installation of nfsen
1313
	DirTmp=$(pwd)
1332
	DirTmp=$(pwd)
1314
	cd /tmp/nfsen-1.3.6p1/
1333
	cd /tmp/nfsen-1.3.6p1/
1315
	/usr/bin/perl5 install.pl etc/nfsen.conf
1334
	/usr/bin/perl5 install.pl etc/nfsen.conf
1316
	/usr/bin/perl5 install.pl etc/nfsen.conf # to avoid a Perl mistake "Semaphore introuvable"
1335
	/usr/bin/perl5 install.pl etc/nfsen.conf # to avoid a Perl mistake "Semaphore introuvable"
1317
# Create RRD DB for porttracker (only in it still doesn't exist)
1336
# Create RRD DB for porttracker (only in it still doesn't exist)
1318
	cp /tmp/nfsen-1.3.6p1/contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1337
	cp /tmp/nfsen-1.3.6p1/contrib/PortTracker/PortTracker.pm /usr/share/nfsen/plugins/
1319
	cp /tmp/nfsen-1.3.6p1/contrib/PortTracker/PortTracker.php /var/www/nfsen/plugins/
1338
	cp /tmp/nfsen-1.3.6p1/contrib/PortTracker/PortTracker.php /var/www/nfsen/plugins/
1320
	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
1339
	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
1321
	chmod -R 770 /var/log/netflow/porttracker
1340
	chmod -R 770 /var/log/netflow/porttracker
1322
# Apache conf file
1341
# Apache conf file
1323
	cat << EOF > /etc/httpd/conf/conf.d/nfsen.conf
1342
	cat << EOF > /etc/httpd/conf/conf.d/nfsen.conf
1324
Alias /nfsen /var/www/nfsen 
1343
Alias /nfsen /var/www/nfsen 
1325
<Directory /var/www/nfsen/> 
1344
<Directory /var/www/nfsen/> 
1326
DirectoryIndex nfsen.php 
1345
DirectoryIndex nfsen.php 
1327
Options -Indexes 
1346
Options -Indexes 
1328
AllowOverride all 
1347
AllowOverride all 
1329
order allow,deny 
1348
order allow,deny 
1330
allow from all 
1349
allow from all 
1331
AddType application/x-httpd-php .php 
1350
AddType application/x-httpd-php .php 
1332
php_flag magic_quotes_gpc on 
1351
php_flag magic_quotes_gpc on 
1333
php_flag track_vars on 
1352
php_flag track_vars on 
1334
</Directory>
1353
</Directory>
1335
EOF
1354
EOF
1336
# nfsen unit for systemd
1355
# nfsen unit for systemd
1337
cat << EOF > /lib/systemd/system/nfsen.service
1356
cat << EOF > /lib/systemd/system/nfsen.service
1338
#  This file is part of systemd.
1357
#  This file is part of systemd.
1339
#
1358
#
1340
#  systemd is free software; you can redistribute it and/or modify it
1359
#  systemd is free software; you can redistribute it and/or modify it
1341
#  under the terms of the GNU General Public License as published by
1360
#  under the terms of the GNU General Public License as published by
1342
#  the Free Software Foundation; either version 2 of the License, or
1361
#  the Free Software Foundation; either version 2 of the License, or
1343
#  (at your option) any later version.
1362
#  (at your option) any later version.
1344
 
1363
 
1345
# This unit launches nfsen (a Netflow grapher).
1364
# This unit launches nfsen (a Netflow grapher).
1346
[Unit]
1365
[Unit]
1347
Description= NfSen init script
1366
Description= NfSen init script
1348
After=network.target iptables.service
1367
After=network.target iptables.service
1349
 
1368
 
1350
[Service]
1369
[Service]
1351
Type=oneshot
1370
Type=oneshot
1352
RemainAfterExit=yes
1371
RemainAfterExit=yes
1353
PIDFile=/var/run/nfsen/nfsen.pid
1372
PIDFile=/var/run/nfsen/nfsen.pid
1354
ExecStartPre=/bin/mkdir -p /var/run/nfsen
1373
ExecStartPre=/bin/mkdir -p /var/run/nfsen
1355
ExecStartPre=/bin/chown apache:apache /var/run/nfsen
1374
ExecStartPre=/bin/chown apache:apache /var/run/nfsen
1356
ExecStart=/usr/bin/nfsen start 
1375
ExecStart=/usr/bin/nfsen start 
1357
ExecStop=/usr/bin/nfsen stop
1376
ExecStop=/usr/bin/nfsen stop
1358
ExecReload=/usr/bin/nfsen restart
1377
ExecReload=/usr/bin/nfsen restart
1359
TimeoutSec=0
1378
TimeoutSec=0
1360
 
1379
 
1361
[Install]
1380
[Install]
1362
WantedBy=multi-user.target
1381
WantedBy=multi-user.target
1363
EOF
1382
EOF
1364
# Add the listen port to collect netflow packet (nfcapd)
1383
# Add the listen port to collect netflow packet (nfcapd)
1365
$SED "s?'\$ziparg $extensions.*?\$ziparg $extensions -b 127.0.0.1;'?g" /usr/libexec/NfSenRC.pm 
1384
$SED "s?'\$ziparg $extensions.*?\$ziparg $extensions -b 127.0.0.1;'?g" /usr/libexec/NfSenRC.pm 
1366
# expire delay for the profile "live"
1385
# expire delay for the profile "live"
1367
	systemctl start nfsen
1386
	systemctl start nfsen
1368
	/bin/nfsen -m live -e 62d 2>/dev/null
1387
	/bin/nfsen -m live -e 62d 2>/dev/null
1369
# add SURFmap plugin
1388
# add SURFmap plugin
1370
	tar xzf $DIR_CONF/nfsen/SURFmap_v3.3b1.tar.gz -C /tmp/
1389
	tar xzf $DIR_CONF/nfsen/SURFmap_v3.3b1.tar.gz -C /tmp/
1371
	cp $DIR_CONF/nfsen/install-surfmap.sh /tmp/SURFmap/install.sh
1390
	cp $DIR_CONF/nfsen/install-surfmap.sh /tmp/SURFmap/install.sh
1372
	cd /tmp/SURFmap
1391
	cd /tmp/SURFmap
1373
	/usr/bin/sh install.sh
1392
	/usr/bin/sh install.sh
1374
 
1393
 
1375
# clear the installation
1394
# clear the installation
1376
	cd $DirTmp
1395
	cd $DirTmp
1377
	rm -rf /tmp/nfsen-1.3.6p1/
1396
	rm -rf /tmp/nfsen-1.3.6p1/
1378
	rm -rf /tmp/SURFmap/
1397
	rm -rf /tmp/SURFmap/
1379
} # End of nfsen ()
1398
} # End of nfsen ()
1380
 
1399
 
1381
##################################################
1400
##################################################
1382
##		Function "dnsmasq"		##
1401
##		Function "dnsmasq"		##
1383
##################################################
1402
##################################################
1384
dnsmasq ()
1403
dnsmasq ()
1385
{
1404
{
1386
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1405
	[ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1387
	[ -e /etc/sysconfig/dnsmasq.default ] || cp /etc/sysconfig/dnsmasq /etc/sysconfig/dnsmasq.default
1406
	[ -e /etc/sysconfig/dnsmasq.default ] || cp /etc/sysconfig/dnsmasq /etc/sysconfig/dnsmasq.default
1388
	$SED "s?^OPTION=.*?OPTION=-C /etc/dnsmasq.conf?g" /etc/sysconfig/dnsmasq # default conf file for the first dnsmasq instance
1407
	$SED "s?^OPTION=.*?OPTION=-C /etc/dnsmasq.conf?g" /etc/sysconfig/dnsmasq # default conf file for the first dnsmasq instance
1389
	[ -e /etc/dnsmasq.conf.default ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
1408
	[ -e /etc/dnsmasq.conf.default ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
1390
# 1st dnsmasq listen on udp 53 ("dnsmasq - forward"). It's used as dhcp server only if "alcasar-bypass" is on.
1409
# 1st dnsmasq listen on udp 53 ("dnsmasq - forward"). It's used as dhcp server only if "alcasar-bypass" is on.
1391
	cat << EOF > /etc/dnsmasq.conf 
1410
	cat << EOF > /etc/dnsmasq.conf 
1392
# Configuration file for "dnsmasq in forward mode"
1411
# Configuration file for "dnsmasq in forward mode"
1393
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1412
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1394
listen-address=$PRIVATE_IP
1413
listen-address=$PRIVATE_IP
1395
pid-file=/var/run/dnsmasq.pid
1414
pid-file=/var/run/dnsmasq.pid
1396
listen-address=127.0.0.1
1415
listen-address=127.0.0.1
1397
no-dhcp-interface=$INTIF
1416
no-dhcp-interface=$INTIF
1398
no-dhcp-interface=tun0
1417
no-dhcp-interface=tun0
1399
no-dhcp-interface=lo
1418
no-dhcp-interface=lo
1400
bind-interfaces
1419
bind-interfaces
1401
cache-size=256
1420
cache-size=256
1402
domain=$DOMAIN
1421
domain=$DOMAIN
1403
domain-needed
1422
domain-needed
1404
expand-hosts
1423
expand-hosts
1405
bogus-priv
1424
bogus-priv
1406
filterwin2k
1425
filterwin2k
1407
server=$DNS1
1426
server=$DNS1
1408
server=$DNS2
1427
server=$DNS2
1409
# DHCP service is configured. It will be enabled in "bypass" mode
1428
# DHCP service is configured. It will be enabled in "bypass" mode
1410
dhcp-range=$PRIVATE_FIRST_IP,$PRIVATE_LAST_IP,$PRIVATE_NETMASK,12h
1429
dhcp-range=$PRIVATE_FIRST_IP,$PRIVATE_LAST_IP,$PRIVATE_NETMASK,12h
1411
dhcp-option=option:router,$PRIVATE_IP
1430
dhcp-option=option:router,$PRIVATE_IP
1412
dhcp-option=option:ntp-server,$PRIVATE_IP
1431
dhcp-option=option:ntp-server,$PRIVATE_IP
1413
 
1432
 
1414
# Exemple of static dhcp assignation : <@MAC>,<name>,<@IP>,<MASK>,<ttl bail>
1433
# Exemple of static dhcp assignation : <@MAC>,<name>,<@IP>,<MASK>,<ttl bail>
1415
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.182.20,255.255.255.0,45m
1434
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.182.20,255.255.255.0,45m
1416
EOF
1435
EOF
1417
# 2nd dnsmasq listen on udp 54 ("dnsmasq with blacklist")
1436
# 2nd dnsmasq listen on udp 54 ("dnsmasq with blacklist")
1418
	cat << EOF > /etc/dnsmasq-blacklist.conf 
1437
	cat << EOF > /etc/dnsmasq-blacklist.conf 
1419
# Configuration file for "dnsmasq with blacklist"
1438
# Configuration file for "dnsmasq with blacklist"
1420
# Add Toulouse blacklist domains
1439
# Add Toulouse blacklist domains
1421
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1440
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1422
conf-dir=$DIR_DEST_SHARE/dnsmasq-bl-enabled
1441
conf-dir=$DIR_DEST_SHARE/dnsmasq-bl-enabled
1423
pid-file=/var/run/dnsmasq-blacklist.pid
1442
pid-file=/var/run/dnsmasq-blacklist.pid
1424
listen-address=$PRIVATE_IP
1443
listen-address=$PRIVATE_IP
1425
port=54
1444
port=54
1426
no-dhcp-interface=$INTIF
1445
no-dhcp-interface=$INTIF
1427
no-dhcp-interface=tun0
1446
no-dhcp-interface=tun0
1428
no-dhcp-interface=lo
1447
no-dhcp-interface=lo
1429
bind-interfaces
1448
bind-interfaces
1430
cache-size=256
1449
cache-size=256
1431
domain=$DOMAIN
1450
domain=$DOMAIN
1432
domain-needed
1451
domain-needed
1433
expand-hosts
1452
expand-hosts
1434
bogus-priv
1453
bogus-priv
1435
filterwin2k
1454
filterwin2k
1436
server=$DNS1
1455
server=$DNS1
1437
server=$DNS2
1456
server=$DNS2
1438
EOF
1457
EOF
1439
# 3rd dnsmasq listen on udp 55 ("dnsmasq with whitelist")
1458
# 3rd dnsmasq listen on udp 55 ("dnsmasq with whitelist")
1440
	cat << EOF > /etc/dnsmasq-whitelist.conf 
1459
	cat << EOF > /etc/dnsmasq-whitelist.conf 
1441
# Configuration file for "dnsmasq with whitelist"
1460
# Configuration file for "dnsmasq with whitelist"
1442
# Inclusion de la whitelist <domains> de Toulouse dans la configuration
1461
# Inclusion de la whitelist <domains> de Toulouse dans la configuration
1443
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1462
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1444
conf-dir=$DIR_DEST_SHARE/dnsmasq-wl-enabled
1463
conf-dir=$DIR_DEST_SHARE/dnsmasq-wl-enabled
1445
pid-file=/var/run/dnsmasq-whitelist.pid
1464
pid-file=/var/run/dnsmasq-whitelist.pid
1446
listen-address=$PRIVATE_IP
1465
listen-address=$PRIVATE_IP
1447
port=55
1466
port=55
1448
no-dhcp-interface=$INTIF
1467
no-dhcp-interface=$INTIF
1449
no-dhcp-interface=tun0
1468
no-dhcp-interface=tun0
1450
no-dhcp-interface=lo
1469
no-dhcp-interface=lo
1451
bind-interfaces
1470
bind-interfaces
1452
cache-size=256
1471
cache-size=256
1453
domain=$DOMAIN
1472
domain=$DOMAIN
1454
domain-needed
1473
domain-needed
1455
expand-hosts
1474
expand-hosts
1456
bogus-priv
1475
bogus-priv
1457
filterwin2k
1476
filterwin2k
1458
address=/#/$PRIVATE_IP				# for Domain name without local resolution (WL)  
1477
address=/#/$PRIVATE_IP				# for Domain name without local resolution (WL)  
1459
ipset=/#/whitelist_ip_allowed			# dynamicly add the resolv IP address in the Firewall rules
1478
ipset=/#/whitelist_ip_allowed			# dynamicly add the resolv IP address in the Firewall rules
1460
EOF
1479
EOF
1461
# 4th dnsmasq listen on udp 56 ("blackhole")
1480
# 4th dnsmasq listen on udp 56 ("blackhole")
1462
	cat << EOF > /etc/dnsmasq-blackhole.conf 
1481
	cat << EOF > /etc/dnsmasq-blackhole.conf 
1463
# Configuration file for "dnsmasq as a blackhole"
1482
# Configuration file for "dnsmasq as a blackhole"
1464
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1483
conf-file=$DIR_DEST_ETC/alcasar-dns-name	# local DNS resolutions
1465
address=/#/$PRIVATE_IP				# redirect all on ALCASAR IP address
1484
address=/#/$PRIVATE_IP				# redirect all on ALCASAR IP address
1466
pid-file=/var/run/dnsmasq-blackhole.pid
1485
pid-file=/var/run/dnsmasq-blackhole.pid
1467
listen-address=$PRIVATE_IP
1486
listen-address=$PRIVATE_IP
1468
port=56
1487
port=56
1469
no-dhcp-interface=$INTIF
1488
no-dhcp-interface=$INTIF
1470
no-dhcp-interface=tun0
1489
no-dhcp-interface=tun0
1471
no-dhcp-interface=lo
1490
no-dhcp-interface=lo
1472
bind-interfaces
1491
bind-interfaces
1473
cache-size=256
1492
cache-size=256
1474
domain=$DOMAIN
1493
domain=$DOMAIN
1475
domain-needed
1494
domain-needed
1476
expand-hosts
1495
expand-hosts
1477
bogus-priv
1496
bogus-priv
1478
filterwin2k
1497
filterwin2k
1479
EOF
1498
EOF
1480
 
1499
 
1481
# Start after chilli (which create tun0)
1500
# Start after chilli (which create tun0)
1482
	$SED "s?^After=.*?After=syslog.target network.target chilli.service?g" /lib/systemd/system/dnsmasq.service
1501
	$SED "s?^After=.*?After=syslog.target network.target chilli.service?g" /lib/systemd/system/dnsmasq.service
1483
# Create dnsmasq-blacklist, dnsmasq-whitelist and dnsmasq-blackhole unit
1502
# Create dnsmasq-blacklist, dnsmasq-whitelist and dnsmasq-blackhole unit
1484
	for list in blacklist whitelist blackhole
1503
	for list in blacklist whitelist blackhole
1485
	do
1504
	do
1486
		cp -f /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq-$list.service
1505
		cp -f /lib/systemd/system/dnsmasq.service /lib/systemd/system/dnsmasq-$list.service
1487
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq-$list.conf?g" /lib/systemd/system/dnsmasq-$list.service
1506
		$SED "s?^ExecStart=.*?ExecStart=/usr/sbin/dnsmasq -C /etc/dnsmasq-$list.conf?g" /lib/systemd/system/dnsmasq-$list.service
1488
		$SED "s?^PIDFile=.*?PIDFile=/var/run/dnsmasq-$list.pid?g" /lib/systemd/system/dnsmasq-$list.service
1507
		$SED "s?^PIDFile=.*?PIDFile=/var/run/dnsmasq-$list.pid?g" /lib/systemd/system/dnsmasq-$list.service
1489
	done
1508
	done
1490
} # End dnsmasq
1509
} # End dnsmasq
1491
 
1510
 
1492
##########################################################
1511
##########################################################
1493
##		Fonction "BL"				##
1512
##		Fonction "BL"				##
1494
##########################################################
1513
##########################################################
1495
BL ()
1514
BL ()
1496
{
1515
{
1497
# modify iptables boot file to start alcasar-iptables.sh when the system is booting
1516
# modify iptables boot file to start alcasar-iptables.sh when the system is booting
1498
[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
1517
[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
1499
$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
1518
$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
1500
# copy and extract toulouse BL
1519
# copy and extract toulouse BL
1501
	rm -rf $DIR_DG/lists/blacklists
1520
	rm -rf $DIR_DG/lists/blacklists
1502
	tar zxf $DIR_CONF/blacklists.tar.gz --directory=$DIR_DG/lists/ > /dev/null 2>&1
1521
	tar zxf $DIR_CONF/blacklists.tar.gz --directory=$DIR_DG/lists/ > /dev/null 2>&1
1503
# creation of the OSSI BL and WL categories (domain name and url)
1522
# creation of the OSSI BL and WL categories (domain name and url)
1504
	mkdir $DIR_DG/lists/blacklists/ossi
1523
	mkdir $DIR_DG/lists/blacklists/ossi
1505
	touch $DIR_DG/lists/blacklists/ossi/domains $DIR_DG/lists/blacklists/ossi/domains_wl
1524
	touch $DIR_DG/lists/blacklists/ossi/domains $DIR_DG/lists/blacklists/ossi/domains_wl
1506
	touch $DIR_DG/lists/blacklists/ossi/urls $DIR_DG/lists/blacklists/ossi/urls_wl
1525
	touch $DIR_DG/lists/blacklists/ossi/urls $DIR_DG/lists/blacklists/ossi/urls_wl
1507
	chown -R dansguardian:apache $DIR_DG $DIR_DEST_SHARE
1526
	chown -R dansguardian:apache $DIR_DG $DIR_DEST_SHARE
1508
	chmod -R g+rw $DIR_DG $DIR_DEST_SHARE
1527
	chmod -R g+rw $DIR_DG $DIR_DEST_SHARE
1509
# creation of file for the rehabilited domains and urls
1528
# creation of file for the rehabilited domains and urls
1510
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
1529
	[ -e $DIR_DG/lists/exceptionsitelist.default ] || mv $DIR_DG/lists/exceptionsitelist $DIR_DG/lists/exceptionsitelist.default
1511
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
1530
	[ -e $DIR_DG/lists/exceptionurllist.default ] || mv $DIR_DG/lists/exceptionurllist $DIR_DG/lists/exceptionurllist.default
1512
	touch $DIR_DG/lists/exceptionsitelist
1531
	touch $DIR_DG/lists/exceptionsitelist
1513
	touch $DIR_DG/lists/exceptionurllist
1532
	touch $DIR_DG/lists/exceptionurllist
1514
# On crée la configuration de base du filtrage de domaine et d'URL pour Dansguardian
1533
# On crée la configuration de base du filtrage de domaine et d'URL pour Dansguardian
1515
	cat <<EOF > $DIR_DG/lists/bannedurllist
1534
	cat <<EOF > $DIR_DG/lists/bannedurllist
1516
# Dansguardian filter config for ALCASAR
1535
# Dansguardian filter config for ALCASAR
1517
EOF
1536
EOF
1518
	cat <<EOF > $DIR_DG/lists/bannedsitelist
1537
	cat <<EOF > $DIR_DG/lists/bannedsitelist
1519
# Dansguardian domain filter config for ALCASAR
1538
# Dansguardian domain filter config for ALCASAR
1520
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1539
# block all sites except those in the exceptionsitelist --> liste blanche (désactivée)
1521
#**
1540
#**
1522
# block all SSL and CONNECT tunnels
1541
# block all SSL and CONNECT tunnels
1523
**s
1542
**s
1524
# block all SSL and CONNECT tunnels specified only as an IP
1543
# block all SSL and CONNECT tunnels specified only as an IP
1525
*ips
1544
*ips
1526
# block all sites specified only by an IP
1545
# block all sites specified only by an IP
1527
*ip
1546
*ip
1528
EOF
1547
EOF
1529
# Add Bing and Youtube to the safesearch url regext list (parental control)
1548
# Add Bing and Youtube to the safesearch url regext list (parental control)
1530
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1549
	cat <<EOF >> $DIR_DG/lists/urlregexplist
1531
# Bing - add 'adlt=strict'
1550
# Bing - add 'adlt=strict'
1532
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1551
#"(^http://[0-9a-z]+\.bing\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&adlt=strict"
1533
# Youtube - add 'edufilter=your_ID' 
1552
# Youtube - add 'edufilter=your_ID' 
1534
#"(^http://[0-9a-z]+\.youtube\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&edufilter=ABCD1234567890abcdef"
1553
#"(^http://[0-9a-z]+\.youtube\.[a-z]+[-/%.0-9a-z]*\?)(.*)"->"\1\2&edufilter=ABCD1234567890abcdef"
1535
EOF
1554
EOF
1536
# change the the google safesearch ("safe=strict" instead of "safe=vss")
1555
# change the the google safesearch ("safe=strict" instead of "safe=vss")
1537
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
1556
	$SED "s?safe=vss?safe=strict?g" $DIR_DG/lists/urlregexplist
1538
# adapt the BL to ALCASAR architecture. Enable the default categories
1557
# adapt the BL to ALCASAR architecture. Enable the default categories
1539
	if [ "$mode" != "update" ]; then
1558
	if [ "$mode" != "update" ]; then
1540
		$DIR_DEST_SBIN/alcasar-bl.sh --adapt
1559
		$DIR_DEST_SBIN/alcasar-bl.sh --adapt
1541
		$DIR_DEST_SBIN/alcasar-bl.sh --cat_choice
1560
		$DIR_DEST_SBIN/alcasar-bl.sh --cat_choice
1542
# !!! we can be banned by DNS server (waiting for a cool solution	$DIR_DEST_SBIN/alcasar-bl.sh --ip_retrieving
1561
# !!! we can be banned by DNS server (waiting for a cool solution	$DIR_DEST_SBIN/alcasar-bl.sh --ip_retrieving
1543
	fi
1562
	fi
1544
}
1563
}
1545
 
1564
 
1546
##########################################################
1565
##########################################################
1547
##		Fonction "cron"				##
1566
##		Fonction "cron"				##
1548
## - Mise en place des différents fichiers de cron	##
1567
## - Mise en place des différents fichiers de cron	##
1549
##########################################################
1568
##########################################################
1550
cron ()
1569
cron ()
1551
{
1570
{
1552
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1571
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1553
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1572
	[ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1554
	cat <<EOF > /etc/crontab
1573
	cat <<EOF > /etc/crontab
1555
SHELL=/bin/bash
1574
SHELL=/bin/bash
1556
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1575
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1557
MAILTO=root
1576
MAILTO=root
1558
HOME=/
1577
HOME=/
1559
 
1578
 
1560
# run-parts
1579
# run-parts
1561
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1580
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1562
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1581
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1563
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1582
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1564
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1583
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1565
EOF
1584
EOF
1566
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1585
	[ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1567
	cat <<EOF >> /etc/anacrontab
1586
	cat <<EOF >> /etc/anacrontab
1568
7       8       cron.MysqlDump          nice /etc/cron.d/alcasar-mysql
1587
7       8       cron.MysqlDump          nice /etc/cron.d/alcasar-mysql
1569
7       10      cron.logExport          nice /etc/cron.d/alcasar-archive
1588
7       10      cron.logExport          nice /etc/cron.d/alcasar-archive
1570
7	20	cron.importClean	nice /etc/cron.d/alcasar-clean_import
1589
7	20	cron.importClean	nice /etc/cron.d/alcasar-clean_import
1571
EOF
1590
EOF
1572
 
1591
 
1573
	cat <<EOF > /etc/cron.d/alcasar-mysql
1592
	cat <<EOF > /etc/cron.d/alcasar-mysql
1574
# Contrôle, réparation et export de la base des usagers (tous les lundi à 4h45)
1593
# Contrôle, réparation et export de la base des usagers (tous les lundi à 4h45)
1575
45 4 * * 1 root $DIR_DEST_SBIN/alcasar-mysql.sh --dump
1594
45 4 * * 1 root $DIR_DEST_SBIN/alcasar-mysql.sh --dump
1576
# Nettoyage des utilisateurs dont la date d'expiration du compte est supérieure à 7 jours
1595
# Nettoyage des utilisateurs dont la date d'expiration du compte est supérieure à 7 jours
1577
40 4 * * * root /usr/local/sbin/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1596
40 4 * * * root /usr/local/sbin/alcasar-mysql.sh --expire_user 2>&1 >/dev/null
1578
EOF
1597
EOF
1579
	cat <<EOF > /etc/cron.d/alcasar-archive
1598
	cat <<EOF > /etc/cron.d/alcasar-archive
1580
# Archive des logs et de la base de données (tous les lundi à 5h35)
1599
# Archive des logs et de la base de données (tous les lundi à 5h35)
1581
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1600
35 5 * * 1 root $DIR_DEST_BIN/alcasar-archive.sh --now
1582
EOF
1601
EOF
1583
	cat << EOF > /etc/cron.d/alcasar-clean_import
1602
	cat << EOF > /etc/cron.d/alcasar-clean_import
1584
# suppression des fichiers de mots de passe lors d'imports massifs par fichier de plus de 24h
1603
# suppression des fichiers de mots de passe lors d'imports massifs par fichier de plus de 24h
1585
30 * * * *  root $DIR_DEST_BIN/alcasar-import-clean.sh
1604
30 * * * *  root $DIR_DEST_BIN/alcasar-import-clean.sh
1586
EOF
1605
EOF
1587
	cat << EOF > /etc/cron.d/alcasar-distrib-updates
1606
	cat << EOF > /etc/cron.d/alcasar-distrib-updates
1588
# mise à jour automatique de la distribution tous les jours 3h30
1607
# mise à jour automatique de la distribution tous les jours 3h30
1589
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
1608
30 3 * * *  root /usr/sbin/urpmi --auto-update --auto 2>&1
1590
EOF
1609
EOF
1591
	#cat << EOF > /etc/cron.d/alcasar-netflow
1610
	#cat << EOF > /etc/cron.d/alcasar-netflow
1592
# mise à jour automatique du délais d'expiration des log Nertflow (tous les vendredi à 0h05)
1611
# mise à jour automatique du délais d'expiration des log Nertflow (tous les vendredi à 0h05)
1593
#15 0 * * 1  root $DIR_DEST_BIN/alcasar-netflow.sh
1612
#15 0 * * 1  root $DIR_DEST_BIN/alcasar-netflow.sh
1594
#EOF
1613
#EOF
1595
 
1614
 
1596
# mise à jour des stats de connexion (accounting). Scripts provenant de "dialupadmin" (rpm freeradius-web) (cf. wiki.freeradius.org/Dialup_admin).
1615
# mise à jour des stats de connexion (accounting). Scripts provenant de "dialupadmin" (rpm freeradius-web) (cf. wiki.freeradius.org/Dialup_admin).
1597
# on écrase le crontab d'origine installé par le RPM "freeradius-web" (bug remonté à qa.mandriva.com : 46739).
1616
# on écrase le crontab d'origine installé par le RPM "freeradius-web" (bug remonté à qa.mandriva.com : 46739).
1598
# 'tot_stats' (tout les jours à 01h01) : aggrégat des connexions journalières par usager (renseigne la table 'totacct') 
1617
# 'tot_stats' (tout les jours à 01h01) : aggrégat des connexions journalières par usager (renseigne la table 'totacct') 
1599
# 'monthly_tot_stat' (tous les jours à 01h05) : aggrégat des connexions mensuelles par usager (renseigne la table 'mtotacct')
1618
# 'monthly_tot_stat' (tous les jours à 01h05) : aggrégat des connexions mensuelles par usager (renseigne la table 'mtotacct')
1600
# 'truncate_raddact' (tous les 1er du mois à 01h10) : supprime les entrées journalisées plus vieilles que '$back_days' jours (défini ci-après)
1619
# 'truncate_raddact' (tous les 1er du mois à 01h10) : supprime les entrées journalisées plus vieilles que '$back_days' jours (défini ci-après)
1601
# 'clean_radacct' (tous les 1er du mois à 01h15) : ferme les session ouvertes de plus de '$back_days' jours (défini ci-après)
1620
# 'clean_radacct' (tous les 1er du mois à 01h15) : ferme les session ouvertes de plus de '$back_days' jours (défini ci-après)
1602
	$SED "s?^\$back_days.*?\$back_days = 365;?g" /usr/bin/truncate_radacct
1621
	$SED "s?^\$back_days.*?\$back_days = 365;?g" /usr/bin/truncate_radacct
1603
	$SED "s?^\$back_days.*?\$back_days = 30;?g" /usr/bin/clean_radacct
1622
	$SED "s?^\$back_days.*?\$back_days = 30;?g" /usr/bin/clean_radacct
1604
	rm -f /etc/cron.daily/freeradius-web
1623
	rm -f /etc/cron.daily/freeradius-web
1605
	rm -f /etc/cron.monthly/freeradius-web
1624
	rm -f /etc/cron.monthly/freeradius-web
1606
	cat << EOF > /etc/cron.d/freeradius-web
1625
	cat << EOF > /etc/cron.d/freeradius-web
1607
1 1 * * * root /usr/bin/tot_stats > /dev/null 2>&1
1626
1 1 * * * root /usr/bin/tot_stats > /dev/null 2>&1
1608
5 1 * * * root /usr/bin/monthly_tot_stats > /dev/null 2>&1
1627
5 1 * * * root /usr/bin/monthly_tot_stats > /dev/null 2>&1
1609
10 1 1 * * root /usr/bin/truncate_radacct > /dev/null 2>&1
1628
10 1 1 * * root /usr/bin/truncate_radacct > /dev/null 2>&1
1610
15 1 1 * * root /usr/bin/clean_radacct > /dev/null 2>&1
1629
15 1 1 * * root /usr/bin/clean_radacct > /dev/null 2>&1
1611
EOF
1630
EOF
1612
	cat << EOF > /etc/cron.d/alcasar-watchdog
1631
	cat << EOF > /etc/cron.d/alcasar-watchdog
1613
# activation du "chien de garde" (watchdog) toutes les 3'
1632
# activation du "chien de garde" (watchdog) toutes les 3'
1614
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1633
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1615
EOF
1634
EOF
1616
# activation du "chien de garde des services" (watchdog) toutes les 18'
1635
# activation du "chien de garde des services" (watchdog) toutes les 18'
1617
	cat << EOF > /etc/cron.d/alcasar-daemon-watchdog
1636
	cat << EOF > /etc/cron.d/alcasar-daemon-watchdog
1618
# activation du "chien de garde" (daemon-watchdog) toutes les 18'
1637
# activation du "chien de garde" (daemon-watchdog) toutes les 18'
1619
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1638
*/18 * * * * root $DIR_DEST_BIN/alcasar-daemon.sh > /dev/null 2>&1
1620
EOF
1639
EOF
1621
# suppression des crons usagers
1640
# suppression des crons usagers
1622
	rm -f /var/spool/cron/*
1641
	rm -f /var/spool/cron/*
1623
} # End cron
1642
} # End cron
1624
 
1643
 
1625
##################################################################
1644
##################################################################
1626
## 			Fonction "Fail2Ban"			##
1645
## 			Fonction "Fail2Ban"			##
1627
##- Modification de la configuration de fail2ban		##
1646
##- Modification de la configuration de fail2ban		##
1628
##- Sécurisation DDOS, SSH-Brute-Force, Intercept.php ...	##
1647
##- Sécurisation DDOS, SSH-Brute-Force, Intercept.php ...	##
1629
##################################################################
1648
##################################################################
1630
fail2ban()
1649
fail2ban()
1631
{
1650
{
1632
	$DIR_CONF/fail2ban.sh
1651
	$DIR_CONF/fail2ban.sh
1633
# Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1652
# Autorise la lecture seule 2 des 3 fichiers de log concernés, havp est traité dans le script d'init de havp
1634
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1653
	[ -e /var/log/fail2ban.log ] || touch /var/log/fail2ban.log
1635
	[ -e /var/Save/logs/security/watchdog.log ] || touch /var/Save/logs/security/watchdog.log
1654
	[ -e /var/Save/logs/security/watchdog.log ] || touch /var/Save/logs/security/watchdog.log
1636
	chmod 644 /var/log/fail2ban.log
1655
	chmod 644 /var/log/fail2ban.log
1637
	chmod 644 /var/Save/logs/security/watchdog.log
1656
	chmod 644 /var/Save/logs/security/watchdog.log
1638
	/usr/bin/touch /var/log/auth.log
1657
	/usr/bin/touch /var/log/auth.log
1639
	
1658
	
1640
 
1659
 
1641
# Edition de l'unité fail2ban
1660
# Edition de l'unité fail2ban
1642
[ -e /usr/lib/systemd/system/fail2ban.service ] && cp /usr/lib/systemd/system/fail2ban.service /usr/lib/systemd/system/fail2ban.service.default
1661
[ -e /usr/lib/systemd/system/fail2ban.service ] && cp /usr/lib/systemd/system/fail2ban.service /usr/lib/systemd/system/fail2ban.service.default
1643
$SED '/Type/a\PIDFile=/var/run/fail2ban/fail2ban.pid' /usr/lib/systemd/system/fail2ban.service
1662
$SED '/Type/a\PIDFile=/var/run/fail2ban/fail2ban.pid' /usr/lib/systemd/system/fail2ban.service
1644
$SED '/After=*/c After=syslog.target network.target httpd.service' /usr/lib/systemd/system/fail2ban.service
1663
$SED '/After=*/c After=syslog.target network.target httpd.service' /usr/lib/systemd/system/fail2ban.service
1645
 
1664
 
1646
 
1665
 
1647
} #Fin de fail2ban_install()
1666
} #Fin de fail2ban_install()
1648
 
1667
 
1649
##################################################################
1668
##################################################################
1650
## 			Fonction "gammu_smsd"			##
1669
## 			Fonction "gammu_smsd"			##
1651
## - Creation de la base de donnée Gammu			##
1670
## - Creation de la base de donnée Gammu			##
1652
## - Creation du fichier de config: gammu_smsd_conf		##
1671
## - Creation du fichier de config: gammu_smsd_conf		##
1653
##								##
1672
##								##
1654
##################################################################
1673
##################################################################
1655
gammu_smsd()
1674
gammu_smsd()
1656
{
1675
{
1657
# Create 'gammu' databse
1676
# Create 'gammu' databse
1658
MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
1677
MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
1659
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_GAMMU;GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES"
1678
	$MYSQL="CREATE DATABASE IF NOT EXISTS $DB_GAMMU;GRANT ALL ON $DB_GAMMU.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES"
1660
# Add a gammu database structure
1679
# Add a gammu database structure
1661
	mysql -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/gammu-smsd-db-vierge.sql
1680
	mysql -u$DB_USER -p$radiuspwd $DB_GAMMU < $DIR_CONF/gammu-smsd-db-vierge.sql
1662
 
1681
 
1663
# config file for the daemon
1682
# config file for the daemon
1664
cat << EOF > /etc/gammu_smsd_conf
1683
cat << EOF > /etc/gammu_smsd_conf
1665
[gammu]
1684
[gammu]
1666
port = /dev/ttyUSB0
1685
port = /dev/ttyUSB0
1667
connection = at115200
1686
connection = at115200
1668
 
1687
 
1669
;########################################################
1688
;########################################################
1670
 
1689
 
1671
[smsd]
1690
[smsd]
1672
 
1691
 
1673
PIN = 1234
1692
PIN = 1234
1674
 
1693
 
1675
logfile = /var/log/gammu-smsd/gammu-smsd.log
1694
logfile = /var/log/gammu-smsd/gammu-smsd.log
1676
logformat = textall
1695
logformat = textall
1677
debuglevel = 0
1696
debuglevel = 0
1678
 
1697
 
1679
service = sql
1698
service = sql
1680
driver = native_mysql
1699
driver = native_mysql
1681
user = $DB_USER
1700
user = $DB_USER
1682
password = $radiuspwd
1701
password = $radiuspwd
1683
pc = localhost
1702
pc = localhost
1684
database = $DB_GAMMU
1703
database = $DB_GAMMU
1685
 
1704
 
1686
RunOnReceive = /usr/local/bin/alcasar-sms.sh --new_sms
1705
RunOnReceive = /usr/local/bin/alcasar-sms.sh --new_sms
1687
 
1706
 
1688
StatusFrequency = 30
1707
StatusFrequency = 30
1689
;LoopSleep = 2
1708
;LoopSleep = 2
1690
 
1709
 
1691
;ResetFrequency = 300
1710
;ResetFrequency = 300
1692
;HardResetFrequency = 120
1711
;HardResetFrequency = 120
1693
 
1712
 
1694
CheckSecurity = 1 
1713
CheckSecurity = 1 
1695
CheckSignal = 1
1714
CheckSignal = 1
1696
CheckBattery = 0
1715
CheckBattery = 0
1697
EOF
1716
EOF
1698
 
1717
 
1699
chmod 755 /etc/gammu_smsd_conf
1718
chmod 755 /etc/gammu_smsd_conf
1700
 
1719
 
1701
#Creation dossier de log Gammu-smsd
1720
#Creation dossier de log Gammu-smsd
1702
[ -e /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
1721
[ -e /var/log/gammu-smsd ] || mkdir /var/log/gammu-smsd
1703
chmod 755 /var/log/gammu-smsd
1722
chmod 755 /var/log/gammu-smsd
1704
 
1723
 
1705
#Edition du script sql gammu <-> radius
1724
#Edition du script sql gammu <-> radius
1706
$SED "s/^u_db=\".*/u_db=\"$DB_USER\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1725
$SED "s/^u_db=\".*/u_db=\"$DB_USER\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1707
$SED "s/^p_db=\".*/p_db=\"$radiuspwd\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1726
$SED "s/^p_db=\".*/p_db=\"$radiuspwd\"/g" $DIR_DEST_BIN/alcasar-sms.sh
1708
 
1727
 
1709
#Création de la règle udev pour les Huawei // idVendor: 12d1
1728
#Création de la règle udev pour les Huawei // idVendor: 12d1
1710
cat << EOF > /etc/udev/rules.d/66-huawei.rules
1729
cat << EOF > /etc/udev/rules.d/66-huawei.rules
1711
KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="/usr/local/bin/alcasar-sms.sh --mode"
1730
KERNEL=="ttyUSB0",ATTRS{idVendor}=="12d1",RUN+="/usr/local/bin/alcasar-sms.sh --mode"
1712
EOF
1731
EOF
1713
 
1732
 
1714
} # END gammu_smsd()
1733
} # END gammu_smsd()
1715
 
1734
 
1716
##################################################################
1735
##################################################################
1717
##			Fonction "post_install"			##
1736
##			Fonction "post_install"			##
1718
## - Modification des bannières (locales et ssh) et des prompts ##
1737
## - Modification des bannières (locales et ssh) et des prompts ##
1719
## - Installation de la structure de chiffrement pour root	##
1738
## - Installation de la structure de chiffrement pour root	##
1720
## - Mise en place du sudoers et de la sécurité sur les fichiers##
1739
## - Mise en place du sudoers et de la sécurité sur les fichiers##
1721
## - Mise en place du la rotation des logs			##
1740
## - Mise en place du la rotation des logs			##
1722
## - Configuration dans le cas d'une mise à jour		##
1741
## - Configuration dans le cas d'une mise à jour		##
1723
##################################################################
1742
##################################################################
1724
post_install()
1743
post_install()
1725
{
1744
{
1726
# création de la bannière locale
1745
# création de la bannière locale
1727
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
1746
	[ -e /etc/mageia-release.default ]  || cp /etc/mageia-release /etc/mageia-release.default
1728
	cp -f $DIR_CONF/banner /etc/mageia-release
1747
	cp -f $DIR_CONF/banner /etc/mageia-release
1729
	echo " V$VERSION" >> /etc/mageia-release
1748
	echo " V$VERSION" >> /etc/mageia-release
1730
# création de la bannière SSH
1749
# création de la bannière SSH
1731
	cp /etc/mageia-release /etc/ssh/alcasar-banner-ssh
1750
	cp /etc/mageia-release /etc/ssh/alcasar-banner-ssh
1732
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1751
	chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1733
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1752
	[ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1734
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1753
	$SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1735
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1754
	$SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1736
# postfix banner anonymisation
1755
# postfix banner anonymisation
1737
	$SED "s?^smtpd_banner =.*?smtpd_banner = $myhostname ESMTP?g" /etc/postfix/main.cf
1756
	$SED "s?^smtpd_banner =.*?smtpd_banner = $myhostname ESMTP?g" /etc/postfix/main.cf
1738
# sshd écoute côté LAN et WAN
1757
# sshd écoute côté LAN et WAN
1739
	$SED "s?^#ListenAddress 0\.0\.0\.0?ListenAddress $PRIVATE_IP?g" /etc/ssh/sshd_config
1758
	$SED "s?^#ListenAddress 0\.0\.0\.0?ListenAddress $PRIVATE_IP?g" /etc/ssh/sshd_config
1740
	$SED "/^ListenAddress $PRIVATE_IP/a\ListenAddress $PUBLIC_IP" /etc/ssh/sshd_config 
1759
	$SED "/^ListenAddress $PRIVATE_IP/a\ListenAddress $PUBLIC_IP" /etc/ssh/sshd_config 
1741
	# Put the default value in conf file (sshd, QOS and protocols/dns/ are off)(web antivirus is on)
1760
	# Put the default value in conf file (sshd, QOS and protocols/dns/ are off)(web antivirus is on)
1742
	echo "SSH=off" >> $CONF_FILE
1761
	echo "SSH=off" >> $CONF_FILE
1743
	echo 'SSH_ADMIN_FROM=0.0.0.0/0.0.0.0' >> $CONF_FILE
1762
	echo 'SSH_ADMIN_FROM=0.0.0.0/0.0.0.0' >> $CONF_FILE
1744
	echo "QOS=off" >> $CONF_FILE
1763
	echo "QOS=off" >> $CONF_FILE
1745
	echo "LDAP=off" >> $CONF_FILE
1764
	echo "LDAP=off" >> $CONF_FILE
1746
	echo "LDAP_IP=0.0.0.0/0.0.0.0" >> $CONF_FILE
1765
	echo "LDAP_IP=0.0.0.0/0.0.0.0" >> $CONF_FILE
1747
	echo "YOUTUBE_ID=ABCD1234567890abcdef" >> $CONF_FILE
1766
	echo "YOUTUBE_ID=ABCD1234567890abcdef" >> $CONF_FILE
1748
	echo "MULTIWAN=off" >> $CONF_FILE
1767
	echo "MULTIWAN=off" >> $CONF_FILE
1749
	echo "FAILOVER=30" >> $CONF_FILE
1768
	echo "FAILOVER=30" >> $CONF_FILE
1750
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
1769
	echo "## WANx=active,@IPx/mask,GWx,Weight,MTUx" >> $CONF_FILE
1751
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
1770
	echo "#WAN1=\"1,$EXTIF:1,192.168.2.20/24,192.168.2.6,1,1500\"" >> $CONF_FILE
1752
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
1771
	echo "#WAN2=\"1,$EXTIF:2,192.168.3.20/24,192.168.3.1,2,1500\"" >> $CONF_FILE
1753
# Coloration des prompts
1772
# Coloration des prompts
1754
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
1773
	[ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
1755
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
1774
	cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
1756
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
1775
	$SED "s?^ORGANISME.*?ORGANISME=$ORGANISME?g" /etc/bashrc
1757
# Droits d'exécution pour utilisateur apache et sysadmin
1776
# Droits d'exécution pour utilisateur apache et sysadmin
1758
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
1777
	[ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
1759
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
1778
	cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
1760
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
1779
	$SED "s?^Host_Alias.*?Host_Alias	LAN_ORG=$PRIVATE_NETWORK/$PRIVATE_NETMASK,localhost		#réseau de l'organisme?g" /etc/sudoers
1761
# prise en compte de la rotation des logs sur 1 an (concerne mysql, httpd, dansguardian, radiusd, ulogd)
1780
# prise en compte de la rotation des logs sur 1 an (concerne mysql, httpd, dansguardian, radiusd, ulogd)
1762
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1781
	cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1763
	chmod 644 /etc/logrotate.d/*
1782
	chmod 644 /etc/logrotate.d/*
1764
# rectification sur versions précédentes de la compression des logs
1783
# rectification sur versions précédentes de la compression des logs
1765
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
1784
	$SED "s?^delaycompress.*?#&?g" /etc/logrotate.conf
1766
# actualisation des fichiers logs compressés
1785
# actualisation des fichiers logs compressés
1767
	for dir in firewall dansguardian httpd
1786
	for dir in firewall dansguardian httpd
1768
	do
1787
	do
1769
	      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 {} \;
1788
	      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 {} \;
1770
	done
1789
	done
1771
# create the alcasar-load_balancing unit
1790
# create the alcasar-load_balancing unit
1772
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
1791
	cat << EOF > /lib/systemd/system/alcasar-load_balancing.service
1773
#  This file is part of systemd.
1792
#  This file is part of systemd.
1774
#
1793
#
1775
#  systemd is free software; you can redistribute it and/or modify it
1794
#  systemd is free software; you can redistribute it and/or modify it
1776
#  under the terms of the GNU General Public License as published by
1795
#  under the terms of the GNU General Public License as published by
1777
#  the Free Software Foundation; either version 2 of the License, or
1796
#  the Free Software Foundation; either version 2 of the License, or
1778
#  (at your option) any later version.
1797
#  (at your option) any later version.
1779
 
1798
 
1780
# This unit lauches alcasar-load-balancing.sh script.
1799
# This unit lauches alcasar-load-balancing.sh script.
1781
[Unit]
1800
[Unit]
1782
Description=alcasar-load_balancing.sh execution
1801
Description=alcasar-load_balancing.sh execution
1783
After=network.target iptables.service
1802
After=network.target iptables.service
1784
 
1803
 
1785
[Service]
1804
[Service]
1786
Type=oneshot
1805
Type=oneshot
1787
RemainAfterExit=yes
1806
RemainAfterExit=yes
1788
ExecStart=/usr/local/sbin/alcasar-load_balancing.sh start
1807
ExecStart=/usr/local/sbin/alcasar-load_balancing.sh start
1789
ExecStop=/usr/local/sbin/alcasar-load_balancing.sh stop
1808
ExecStop=/usr/local/sbin/alcasar-load_balancing.sh stop
1790
TimeoutSec=0
1809
TimeoutSec=0
1791
SysVStartPriority=99
1810
SysVStartPriority=99
1792
 
1811
 
1793
[Install]
1812
[Install]
1794
WantedBy=multi-user.target
1813
WantedBy=multi-user.target
1795
EOF
1814
EOF
1796
# processes launched at boot time (SYSV)
1815
# processes launched at boot time (SYSV)
1797
	for i in havp 
1816
	for i in havp tinyproxy
1798
	do
1817
	do
1799
		/sbin/chkconfig --add $i
1818
		/sbin/chkconfig --add $i
1800
	done
1819
	done
1801
# processes launched at boot time (Systemctl)
1820
# processes launched at boot time (Systemctl)
1802
	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
1821
	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
1803
	do
1822
	do
1804
		systemctl -q enable $i.service
1823
		systemctl -q enable $i.service
1805
	done
1824
	done
1806
	
1825
	
1807
# disable processes at boot time (Systemctl)
1826
# disable processes at boot time (Systemctl)
1808
	for i in ulogd
1827
	for i in ulogd
1809
	do
1828
	do
1810
		systemctl -q disable $i.service
1829
		systemctl -q disable $i.service
1811
	done
1830
	done
1812
	
1831
	
1813
# Apply French Security Agency (ANSSI) rules
1832
# Apply French Security Agency (ANSSI) rules
1814
# ignore ICMP broadcast (smurf attack)
1833
# ignore ICMP broadcast (smurf attack)
1815
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
1834
	echo "net.ipv4.icmp_echo_ignore_broadcasts = 1" > /etc/sysctl.d/alcasar.conf
1816
# ignore ICMP errors bogus
1835
# ignore ICMP errors bogus
1817
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
1836
	echo "net.ipv4.icmp_ignore_bogus_error_responses = 1" >> /etc/sysctl.d/alcasar.conf
1818
# remove ICMP redirects responces
1837
# remove ICMP redirects responces
1819
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
1838
	echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.d/alcasar.conf
1820
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
1839
	echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.d/alcasar.conf
1821
# enable SYN Cookies (Syn flood attacks)
1840
# enable SYN Cookies (Syn flood attacks)
1822
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
1841
	echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.d/alcasar.conf
1823
# enable kernel antispoofing
1842
# enable kernel antispoofing
1824
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
1843
	echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.d/alcasar.conf
1825
# ignore source routing
1844
# ignore source routing
1826
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
1845
	echo "net.ipv4.conf.all.accept_source_route = 0" >> /etc/sysctl.d/alcasar.conf
1827
# set conntrack timer to 1h (3600s) instead of 5 weeks
1846
# set conntrack timer to 1h (3600s) instead of 5 weeks
1828
	echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.d/alcasar.conf
1847
	echo "net.netfilter.nf_conntrack_tcp_timeout_established = 3600" >> /etc/sysctl.d/alcasar.conf
1829
# disable log_martians (ALCASAR is often installed between two private network addresses) 
1848
# disable log_martians (ALCASAR is often installed between two private network addresses) 
1830
	echo "net.ipv4.conf.all.log_martians = 0" >> /etc/sysctl.d/alcasar.conf
1849
	echo "net.ipv4.conf.all.log_martians = 0" >> /etc/sysctl.d/alcasar.conf
1831
# remove Magic SysReq Keys
1850
# remove Magic SysReq Keys
1832
	[ -e /etc/sysctl.d/51-alt-sysrq.conf ] && rm /etc/sysctl.d/51-alt-sysrq.conf
1851
	[ -e /etc/sysctl.d/51-alt-sysrq.conf ] && rm /etc/sysctl.d/51-alt-sysrq.conf
1833
# switch to multi-users runlevel (instead of x11)
1852
# switch to multi-users runlevel (instead of x11)
1834
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
1853
	ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
1835
#	GRUB modifications
1854
#	GRUB modifications
1836
# limit wait time to 3s
1855
# limit wait time to 3s
1837
# create an alcasar entry instead of linux-nonfb
1856
# create an alcasar entry instead of linux-nonfb
1838
# change display to 1024*768 (vga791)
1857
# change display to 1024*768 (vga791)
1839
	$SED "s?^timeout.*?timeout 3?g" /boot/grub/menu.lst
1858
	$SED "s?^timeout.*?timeout 3?g" /boot/grub/menu.lst
1840
	$SED "s?^title linux?title ALCASAR?g" /boot/grub/menu.lst
1859
	$SED "s?^title linux?title ALCASAR?g" /boot/grub/menu.lst
1841
	$SED "/^kernel/s/splash quiet //" /boot/grub/menu.lst
1860
	$SED "/^kernel/s/splash quiet //" /boot/grub/menu.lst
1842
	$SED "/^kernel/s/vga=.*/vga=791 nomodeset/" /boot/grub/menu.lst
1861
	$SED "/^kernel/s/vga=.*/vga=791 nomodeset/" /boot/grub/menu.lst
1843
	$SED "/^kernel/s/BOOT_IMAGE=linux /BOOT_IMAGE=linux-nonfb /" /boot/grub/menu.lst
1862
	$SED "/^kernel/s/BOOT_IMAGE=linux /BOOT_IMAGE=linux-nonfb /" /boot/grub/menu.lst
1844
	$SED "/^gfxmenu/d" /boot/grub/menu.lst
1863
	$SED "/^gfxmenu/d" /boot/grub/menu.lst
1845
# Remove unused services and users
1864
# Remove unused services and users
1846
	for svc in sshd.service
1865
	for svc in sshd.service
1847
	do
1866
	do
1848
		/bin/systemctl -q disable $svc
1867
		/bin/systemctl -q disable $svc
1849
	done
1868
	done
1850
# Load and apply the previous conf file
1869
# Load and apply the previous conf file
1851
	if [ "$mode" = "update" ]
1870
	if [ "$mode" = "update" ]
1852
	then
1871
	then
1853
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/logs
1872
		$DIR_DEST_BIN/alcasar-archive.sh --now # exports current logs in /var/Save/logs
1854
		$DIR_DEST_BIN/alcasar-conf.sh --load
1873
		$DIR_DEST_BIN/alcasar-conf.sh --load
1855
		PARENT_SCRIPT=`basename $0`
1874
		PARENT_SCRIPT=`basename $0`
1856
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
1875
		export PARENT_SCRIPT # to avoid stop&start process during the installation process
1857
		$DIR_DEST_BIN/alcasar-conf.sh --apply
1876
		$DIR_DEST_BIN/alcasar-conf.sh --apply
1858
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
1877
		$SED "s?^INSTALL_DATE=.*?INSTALL_DATE=$DATE?g" $CONF_FILE
1859
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
1878
		$SED "s?^VERSION=.*?VERSION=$VERSION?g" $CONF_FILE
1860
		if [ $MAJ_PREVIOUS_VERSION -lt 2 ] || ([ $MAJ_PREVIOUS_VERSION -eq 2 ] && [ $MIN_PREVIOUS_VERSION -lt 8 ])
1879
		if [ $MAJ_PREVIOUS_VERSION -lt 2 ] || ([ $MAJ_PREVIOUS_VERSION -eq 2 ] && [ $MIN_PREVIOUS_VERSION -lt 8 ])
1861
		# update needed for versions previous then 2.8 due to the integration of the domainname ("localdomain" by default)
1880
		# update needed for versions previous then 2.8 due to the integration of the domainname ("localdomain" by default)
1862
		then
1881
		then
1863
			header_install
1882
			header_install
1864
			if [ $Lang == "fr" ]
1883
			if [ $Lang == "fr" ]
1865
			then 
1884
			then 
1866
				echo "Cette mise à jour nécessite de redéfinir le premier compte d'administration du portail"
1885
				echo "Cette mise à jour nécessite de redéfinir le premier compte d'administration du portail"
1867
				echo
1886
				echo
1868
				echo -n "Nom : "
1887
				echo -n "Nom : "
1869
			else
1888
			else
1870
				echo "This update need to redefine the first admin account"
1889
				echo "This update need to redefine the first admin account"
1871
				echo
1890
				echo
1872
				echo -n "Account : "
1891
				echo -n "Account : "
1873
			fi
1892
			fi
1874
			read admin_portal
1893
			read admin_portal
1875
			[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
1894
			[ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
1876
			mkdir -p $DIR_DEST_ETC/digest
1895
			mkdir -p $DIR_DEST_ETC/digest
1877
			chmod 755 $DIR_DEST_ETC/digest
1896
			chmod 755 $DIR_DEST_ETC/digest
1878
			until [ -s $DIR_DEST_ETC/digest/key_admin ]
1897
			until [ -s $DIR_DEST_ETC/digest/key_admin ]
1879
			do
1898
			do
1880
				/usr/bin/htdigest -c $DIR_DEST_ETC/digest/key_admin $HOSTNAME.$DOMAIN $admin_portal
1899
				/usr/bin/htdigest -c $DIR_DEST_ETC/digest/key_admin $HOSTNAME.$DOMAIN $admin_portal
1881
			done
1900
			done
1882
			$DIR_DEST_SBIN/alcasar-profil.sh --list
1901
			$DIR_DEST_SBIN/alcasar-profil.sh --list
1883
		fi
1902
		fi
1884
	fi
1903
	fi
1885
	rm -f /tmp/alcasar-conf*
1904
	rm -f /tmp/alcasar-conf*
1886
	chown -R root:apache $DIR_DEST_ETC/*
1905
	chown -R root:apache $DIR_DEST_ETC/*
1887
	chmod -R 660 $DIR_DEST_ETC/*
1906
	chmod -R 660 $DIR_DEST_ETC/*
1888
	chmod ug+x $DIR_DEST_ETC/digest
1907
	chmod ug+x $DIR_DEST_ETC/digest
1889
# Apply and save the firewall rules
1908
# Apply and save the firewall rules
1890
 	sh $DIR_DEST_BIN/alcasar-iptables.sh
1909
 	sh $DIR_DEST_BIN/alcasar-iptables.sh
1891
	sleep 2
1910
	sleep 2
1892
	cd $DIR_INSTALL
1911
	cd $DIR_INSTALL
1893
	echo ""
1912
	echo ""
1894
	echo "#############################################################################"
1913
	echo "#############################################################################"
1895
	if [ $Lang == "fr" ]
1914
	if [ $Lang == "fr" ]
1896
		then
1915
		then
1897
		echo "#                        Fin d'installation d'ALCASAR                       #"
1916
		echo "#                        Fin d'installation d'ALCASAR                       #"
1898
		echo "#                                                                           #"
1917
		echo "#                                                                           #"
1899
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1918
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1900
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1919
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1901
		echo "#                                                                           #"
1920
		echo "#                                                                           #"
1902
		echo "#############################################################################"
1921
		echo "#############################################################################"
1903
		echo
1922
		echo
1904
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
1923
		echo "- ALCASAR sera fonctionnel après redémarrage du système"
1905
		echo
1924
		echo
1906
		echo "- Lisez attentivement la documentation d'exploitation"
1925
		echo "- Lisez attentivement la documentation d'exploitation"
1907
		echo
1926
		echo
1908
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://alcasar"
1927
		echo "- Le centre de controle d'ALCASAR (ACC) est à l'adresse http://alcasar"
1909
		echo
1928
		echo
1910
		echo "                   Appuyez sur 'Entrée' pour continuer"
1929
		echo "                   Appuyez sur 'Entrée' pour continuer"
1911
	else	
1930
	else	
1912
		echo "#                        Enf of ALCASAR install process                     #"
1931
		echo "#                        Enf of ALCASAR install process                     #"
1913
		echo "#                                                                           #"
1932
		echo "#                                                                           #"
1914
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1933
		echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1915
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1934
		echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1916
		echo "#                                                                           #"
1935
		echo "#                                                                           #"
1917
		echo "#############################################################################"
1936
		echo "#############################################################################"
1918
		echo
1937
		echo
1919
		echo "- The system will be rebooted in order to operate ALCASAR"
1938
		echo "- The system will be rebooted in order to operate ALCASAR"
1920
		echo
1939
		echo
1921
		echo "- Read the exploitation documentation"
1940
		echo "- Read the exploitation documentation"
1922
		echo
1941
		echo
1923
		echo "- The ALCASAR Control Center (ACC) is at http://alcasar"
1942
		echo "- The ALCASAR Control Center (ACC) is at http://alcasar"
1924
		echo
1943
		echo
1925
		echo "                   Hit 'Enter' to continue"
1944
		echo "                   Hit 'Enter' to continue"
1926
	fi
1945
	fi
1927
	sleep 2
1946
	sleep 2
1928
	if [ "$mode" != "update" ]
1947
	if [ "$mode" != "update" ]
1929
	then
1948
	then
1930
		read a
1949
		read a
1931
	fi
1950
	fi
1932
	clear
1951
	clear
1933
	reboot
1952
	reboot
1934
} # End post_install ()
1953
} # End post_install ()
1935
 
1954
 
1936
#################################
1955
#################################
1937
#  	Main Install loop  	#
1956
#  	Main Install loop  	#
1938
#################################
1957
#################################
1939
dir_exec=`dirname "$0"`
1958
dir_exec=`dirname "$0"`
1940
if [ $dir_exec != "." ]
1959
if [ $dir_exec != "." ]
1941
then
1960
then
1942
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
1961
	echo "Lancez ce programme depuis le répertoire de l'archive d'ALCASAR"
1943
	echo "Launch this program from the ALCASAR archive directory"
1962
	echo "Launch this program from the ALCASAR archive directory"
1944
	exit 0
1963
	exit 0
1945
fi
1964
fi
1946
VERSION=`cat $DIR_INSTALL/VERSION`
1965
VERSION=`cat $DIR_INSTALL/VERSION`
1947
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
1966
usage="Usage: alcasar.sh {-i or --install} | {-u or --uninstall}"
1948
nb_args=$#
1967
nb_args=$#
1949
args=$1
1968
args=$1
1950
if [ $nb_args -eq 0 ]
1969
if [ $nb_args -eq 0 ]
1951
then
1970
then
1952
	nb_args=1
1971
	nb_args=1
1953
	args="-h"
1972
	args="-h"
1954
fi
1973
fi
1955
chmod -R u+x $DIR_SCRIPTS/*
1974
chmod -R u+x $DIR_SCRIPTS/*
1956
case $args in
1975
case $args in
1957
	-\? | -h* | --h*)
1976
	-\? | -h* | --h*)
1958
		echo "$usage"
1977
		echo "$usage"
1959
		exit 0
1978
		exit 0
1960
		;;
1979
		;;
1961
	-i | --install)
1980
	-i | --install)
1962
		license
1981
		license
1963
		header_install
1982
		header_install
1964
		testing
1983
		testing
1965
# RPMs install
1984
# RPMs install
1966
		$DIR_SCRIPTS/alcasar-urpmi.sh
1985
		$DIR_SCRIPTS/alcasar-urpmi.sh
1967
		if [ "$?" != "0" ]
1986
		if [ "$?" != "0" ]
1968
		then
1987
		then
1969
			exit 0
1988
			exit 0
1970
		fi
1989
		fi
1971
		if [ -e $CONF_FILE ]
1990
		if [ -e $CONF_FILE ]
1972
		then
1991
		then
1973
# Uninstall the running version
1992
# Uninstall the running version
1974
			$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1993
			$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1975
		fi
1994
		fi
1976
# Test if manual update	
1995
# Test if manual update	
1977
		if [ -e /tmp/alcasar-conf*.tar.gz ] && [ "$mode" == "install" ]
1996
		if [ -e /tmp/alcasar-conf*.tar.gz ] && [ "$mode" == "install" ]
1978
		then
1997
		then
1979
			header_install
1998
			header_install
1980
			if [ $Lang == "fr" ]
1999
			if [ $Lang == "fr" ]
1981
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
2000
				then echo "Le fichier de configuration d'une ancienne version a été trouvé";
1982
				else echo "The configuration file of an old version has been found";
2001
				else echo "The configuration file of an old version has been found";
1983
			fi
2002
			fi
1984
			response=0
2003
			response=0
1985
			PTN='^[oOnNyY]$'
2004
			PTN='^[oOnNyY]$'
1986
			until [[ $(expr $response : $PTN) -gt 0 ]]
2005
			until [[ $(expr $response : $PTN) -gt 0 ]]
1987
			do
2006
			do
1988
				if [ $Lang == "fr" ]
2007
				if [ $Lang == "fr" ]
1989
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
2008
					then echo -n "Voulez-vous l'utiliser (O/n)? ";
1990
					else echo -n "Do you want to use it (Y/n)?";
2009
					else echo -n "Do you want to use it (Y/n)?";
1991
				 fi
2010
				 fi
1992
				read response
2011
				read response
1993
				if [ "$response" = "n" ] || [ "$response" = "N" ] 
2012
				if [ "$response" = "n" ] || [ "$response" = "N" ] 
1994
				then rm -f /tmp/alcasar-conf*
2013
				then rm -f /tmp/alcasar-conf*
1995
				fi
2014
				fi
1996
			done
2015
			done
1997
		fi
2016
		fi
1998
# Test if update
2017
# Test if update
1999
		if [ -e /tmp/alcasar-conf* ] 
2018
		if [ -e /tmp/alcasar-conf* ] 
2000
		then
2019
		then
2001
			if [ $Lang == "fr" ]
2020
			if [ $Lang == "fr" ]
2002
				then echo "#### Installation avec mise à jour ####";
2021
				then echo "#### Installation avec mise à jour ####";
2003
				else echo "#### Installation with update     ####";
2022
				else echo "#### Installation with update     ####";
2004
			fi
2023
			fi
2005
# Extract the central configuration file
2024
# Extract the central configuration file
2006
			tar -xf /tmp/alcasar-conf* conf/etc/alcasar.conf 
2025
			tar -xf /tmp/alcasar-conf* conf/etc/alcasar.conf 
2007
			ORGANISME=`grep ORGANISM conf/etc/alcasar.conf|cut -d"=" -f2`
2026
			ORGANISME=`grep ORGANISM conf/etc/alcasar.conf|cut -d"=" -f2`
2008
			PREVIOUS_VERSION=`grep VERSION conf/etc/alcasar.conf|cut -d"=" -f2`
2027
			PREVIOUS_VERSION=`grep VERSION conf/etc/alcasar.conf|cut -d"=" -f2`
2009
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2028
			MAJ_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f1`
2010
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2|cut -c1`
2029
			MIN_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f2|cut -c1`
2011
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3`
2030
			UPD_PREVIOUS_VERSION=`echo $PREVIOUS_VERSION|cut -d"." -f3`
2012
			mode="update"
2031
			mode="update"
2013
		fi
2032
		fi
2014
		for func in init network ACC CA init_db radius radius_web chilli dansguardian antivirus ulogd nfsen dnsmasq BL cron fail2ban gammu_smsd post_install
2033
		for func in init network ACC CA init_db radius radius_web chilli dansguardian antivirus tinyproxy ulogd nfsen dnsmasq BL cron fail2ban gammu_smsd post_install
2015
		do
2034
		do
2016
			$func
2035
			$func
2017
# echo "*** 'debug' : end of function $func ***"; read a
2036
# echo "*** 'debug' : end of function $func ***"; read a
2018
		done
2037
		done
2019
		;;
2038
		;;
2020
	-u | --uninstall)
2039
	-u | --uninstall)
2021
		if [ ! -e $DIR_DEST_SBIN/alcasar-uninstall.sh ]
2040
		if [ ! -e $DIR_DEST_SBIN/alcasar-uninstall.sh ]
2022
		then
2041
		then
2023
			if [ $Lang == "fr" ]
2042
			if [ $Lang == "fr" ]
2024
				then echo "ALCASAR n'est pas installé!";
2043
				then echo "ALCASAR n'est pas installé!";
2025
				else echo "ALCASAR isn't installed!";
2044
				else echo "ALCASAR isn't installed!";
2026
			fi
2045
			fi
2027
			exit 0
2046
			exit 0
2028
		fi
2047
		fi
2029
		response=0
2048
		response=0
2030
		PTN='^[oOnN]$'
2049
		PTN='^[oOnN]$'
2031
		until [[ $(expr $response : $PTN) -gt 0 ]]
2050
		until [[ $(expr $response : $PTN) -gt 0 ]]
2032
		do
2051
		do
2033
			if [ $Lang == "fr" ]
2052
			if [ $Lang == "fr" ]
2034
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
2053
				then echo -n "Voulez-vous créer le fichier de configuration de la version actuelle (0/n)? ";
2035
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2054
				else echo -n "Do you want to create the running version configuration file (Y/n)? ";
2036
			fi
2055
			fi
2037
			read response
2056
			read response
2038
		done
2057
		done
2039
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2058
		if [ "$response" = "o" ] || [ "$response" = "O" ] || [ "$response" = "Y" ] || [ "$response" = "y" ]
2040
		then
2059
		then
2041
			$DIR_SCRIPTS/alcasar-conf.sh --create
2060
			$DIR_SCRIPTS/alcasar-conf.sh --create
2042
		else	
2061
		else	
2043
			rm -f /tmp/alcasar-conf*
2062
			rm -f /tmp/alcasar-conf*
2044
		fi
2063
		fi
2045
# Uninstall the running version
2064
# Uninstall the running version
2046
		$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
2065
		$DIR_SCRIPTS/sbin/alcasar-uninstall.sh
2047
		;;
2066
		;;
2048
	*)
2067
	*)
2049
		echo "Argument inconnu :$1";
2068
		echo "Argument inconnu :$1";
2050
		echo "Unknown argument :$1";
2069
		echo "Unknown argument :$1";
2051
		echo "$usage"
2070
		echo "$usage"
2052
		exit 1
2071
		exit 1
2053
		;;
2072
		;;
2054
esac
2073
esac
2055
# end of script
2074
# end of script
2056
 
2075
 
2057
 
2076