Subversion Repositories ALCASAR

Rev

Rev 2681 | Rev 2689 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log

Rev 2681 Rev 2688
1
#!/bin/bash
1
#!/bin/bash
2
#  $Id: alcasar.sh 2681 2019-01-02 14:58:43Z tom.houdayer $
2
#  $Id: alcasar.sh 2688 2019-01-18 23:15:49Z lucas.echard $
3
 
3
 
4
# alcasar.sh
4
# alcasar.sh
5
# ALCASAR is a Free and open source NAC created by Franck BOUIJOUX (3abtux), Pascal LEVANT and Richard REY (Rexy)
5
# ALCASAR is a Free and open source NAC created by Franck BOUIJOUX (3abtux), Pascal LEVANT and Richard REY (Rexy)
6
# This script is distributed under the Gnu General Public License (GPL)
6
# This script is distributed under the Gnu General Public License (GPL)
7
#  team@alcasar.net
7
#  team@alcasar.net
8
 
8
 
9
# ALCASAR Install script -  CopyLeft ALCASAR Team [Rexy + 3abtux + Steweb + Crox + ...]
9
# ALCASAR Install script -  CopyLeft ALCASAR Team [Rexy + 3abtux + Steweb + Crox + ...]
10
# Ce programme est un logiciel libre ; This software is free and open source
10
# Ce programme est un logiciel libre ; This software is free and open source
11
# elle que publiée par la Free Software Foundation ; soit la version 3 de la Licence.
11
# elle que publiée par la Free Software Foundation ; soit la version 3 de la Licence.
12
# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ;
12
# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ;
13
# sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE.
13
# sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE.
14
# Voir la Licence Publique Générale GNU pour plus de détails.
14
# Voir la Licence Publique Générale GNU pour plus de détails.
15
 
15
 
16
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
16
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
17
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
17
# ALCASAR est architecturé autour d'une distribution Linux Mageia minimaliste et les logiciels libres suivants :
18
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
18
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
19
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares :
19
# ALCASAR is based on a stripped Mageia (LSB) with the following open source softwares :
20
 
20
 
21
# Coovachilli, freeradius, mariaDB, lighttpd, netfilter, e2guardian, ntpd, openssl, dnsmasq, gammu, havp, libclamav, Ulog, fail2ban, tinyproxy, NFsen and NFdump
21
# Coovachilli, freeradius, mariaDB, lighttpd, netfilter, e2guardian, ntpd, openssl, dnsmasq, unbound, gammu, havp, libclamav, Ulog, fail2ban, tinyproxy, NFsen and NFdump
22
 
22
 
23
# Options :
23
# Options :
24
#       -i or --install
24
#       -i or --install
25
#       -u or --uninstall
25
#       -u or --uninstall
26
 
26
 
27
# Functions :
27
# Functions :
28
#       testing                 : connectivity tests, free space test and mageia version test
28
#       testing                 : connectivity tests, free space test and mageia version test
29
#       init                    : Installation of RPM and scripts
29
#       init                    : Installation of RPM and scripts
30
#       network                 : Network parameters
30
#       network                 : Network parameters
31
#       ACC                             : ALCASAR Control Center installation
31
#       ACC                             : ALCASAR Control Center installation
32
#       CA                              : Certification Authority initialization
32
#       CA                              : Certification Authority initialization
33
#       time_server             : NTPd configuration
33
#       time_server             : NTPd configuration
34
#       init_db                 : Initilization of radius database managed with MariaDB
34
#       init_db                 : Initilization of radius database managed with MariaDB
35
#       freeradius              : FreeRadius initialisation
35
#       freeradius              : FreeRadius initialisation
36
#       chilli                  : coovachilli initialisation (+authentication page)
36
#       chilli                  : coovachilli initialisation (+authentication page)
37
#       e2guardian              : E2Guardian filtering HTTP proxy configuration
37
#       e2guardian              : E2Guardian filtering HTTP proxy configuration
38
#       antivirus               : HAVP + libclamav configuration
38
#       antivirus               : HAVP + libclamav configuration
39
#       tinyproxy               : little proxy for user filtered with "WL + antivirus" and "antivirus"
39
#       tinyproxy               : little proxy for user filtered with "WL + antivirus" and "antivirus"
40
#       ulogd                   : log system in userland (match NFLOG target of iptables)
40
#       ulogd                   : log system in userland (match NFLOG target of iptables)
41
#       nfsen                   : Configuration of Nfsen Netflow grapher
41
#       nfsen                   : Configuration of Nfsen Netflow grapher
42
#       dnsmasq                 : Name server configuration
42
#       unbound                 : Name server configuration
-
 
43
#       dnsmasq                 : Name server configuration (for whitelist ipset support)
43
#       vnstat                  : little network stat daemon
44
#       vnstat                  : little network stat daemon
44
#       BL                              : Adaptation of Toulouse University BlackList : split into 3 BL (for Dnsmasq, for e2guardian and for Netfilter)
45
#       BL                              : Adaptation of Toulouse University BlackList : split into 3 BL (for unbound, for e2guardian and for Netfilter)
45
#       cron                    : Logs export + watchdog + connexion statistics
46
#       cron                    : Logs export + watchdog + connexion statistics
46
#       fail2ban                : Fail2ban IDS installation and configuration
47
#       fail2ban                : Fail2ban IDS installation and configuration
47
#       gammu_smsd              : Autoregister addon via SMS (gammu-smsd)
48
#       gammu_smsd              : Autoregister addon via SMS (gammu-smsd)
48
#       msec                    : Mandriva security package configuration
49
#       msec                    : Mandriva security package configuration
49
#       letsencrypt             : Let's Encrypt client
50
#       letsencrypt             : Let's Encrypt client
50
#       post_install    : Security, log rotation, etc.
51
#       post_install    : Security, log rotation, etc.
51
 
52
 
52
DEBUG_ALCASAR='off'; export DEBUG_ALCASAR       # Debug mode = wait (hit key) after each function
53
DEBUG_ALCASAR='off'; export DEBUG_ALCASAR       # Debug mode = wait (hit key) after each function
53
DATE=`date '+%d %B %Y - %Hh%M'`
54
DATE=`date '+%d %B %Y - %Hh%M'`
54
DATE_SHORT=`date '+%d/%m/%Y'`
55
DATE_SHORT=`date '+%d/%m/%Y'`
55
Lang=`echo $LANG|cut -c 1-2`
56
Lang=`echo $LANG|cut -c 1-2`
56
mode="install"
57
mode="install"
57
# ******* Files parameters - paramètres fichiers *********
58
# ******* Files parameters - paramètres fichiers *********
58
DIR_INSTALL=`pwd`                                               # current directory
59
DIR_INSTALL=`pwd`                                               # current directory
59
DIR_CONF="$DIR_INSTALL/conf"                    # install directory (with conf files)
60
DIR_CONF="$DIR_INSTALL/conf"                    # install directory (with conf files)
60
DIR_SCRIPTS="$DIR_INSTALL/scripts"              # install directory (with script files)
61
DIR_SCRIPTS="$DIR_INSTALL/scripts"              # install directory (with script files)
61
DIR_BLACKLIST="$DIR_INSTALL/blacklist"  # install directory (with blacklist files)
62
DIR_BLACKLIST="$DIR_INSTALL/blacklist"  # install directory (with blacklist files)
62
DIR_SAVE="/var/Save"                                    # backup directory (traceability_log, user_db, security_log)
63
DIR_SAVE="/var/Save"                                    # backup directory (traceability_log, user_db, security_log)
63
DIR_WEB="/var/www/html"                                 # directory of Lighttpd
64
DIR_WEB="/var/www/html"                                 # directory of Lighttpd
64
DIR_DG="/etc/e2guardian"                                # directory of E2Guardian
65
DIR_DG="/etc/e2guardian"                                # directory of E2Guardian
65
DIR_ACC="$DIR_WEB/acc"                                  # directory of the 'ALCASAR Control Center'
66
DIR_ACC="$DIR_WEB/acc"                                  # directory of the 'ALCASAR Control Center'
66
DIR_DEST_BIN="/usr/local/bin"                   # directory of ALCASAR scripts
67
DIR_DEST_BIN="/usr/local/bin"                   # directory of ALCASAR scripts
67
DIR_DEST_ETC="/usr/local/etc"                   # directory of ALCASAR conf files
68
DIR_DEST_ETC="/usr/local/etc"                   # directory of ALCASAR conf files
68
DIR_DEST_SHARE="/usr/local/share"               # directory of share files used by ALCASAR (dnsmasq for instance)
69
DIR_DEST_SHARE="/usr/local/share"               # directory of share files used by ALCASAR (unbound for instance)
69
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"  # central ALCASAR conf file
70
CONF_FILE="$DIR_DEST_ETC/alcasar.conf"  # central ALCASAR conf file
70
PASSWD_FILE="/root/ALCASAR-passwords.txt"       # text file with the passwords and shared secrets
71
PASSWD_FILE="/root/ALCASAR-passwords.txt"       # text file with the passwords and shared secrets
71
# ******* DBMS parameters - paramètres SGBD ********
72
# ******* DBMS parameters - paramètres SGBD ********
72
DB_RADIUS="radius"                                              # database name used by FreeRadius server
73
DB_RADIUS="radius"                                              # database name used by FreeRadius server
73
DB_USER="radius"                                                # user name allows to request the users database
74
DB_USER="radius"                                                # user name allows to request the users database
74
DB_GAMMU="gammu"                                                # database name used by Gammu-smsd
75
DB_GAMMU="gammu"                                                # database name used by Gammu-smsd
75
# ******* Network parameters - paramètres réseau *******
76
# ******* Network parameters - paramètres réseau *******
76
HOSTNAME="alcasar"                                              # default hostname
77
HOSTNAME="alcasar"                                              # default hostname
77
DOMAIN="localdomain"                                    # default local domain
78
DOMAIN="localdomain"                                    # default local domain
78
EXTIF=''                                        # EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
79
EXTIF=''                                        # EXTIF is connected to the ISP broadband modem/router (In France : Box-FAI)
79
INTIF=''                                        # INTIF is connected to the consultation network
80
INTIF=''                                        # INTIF is connected to the consultation network
80
MTU="1500"
81
MTU="1500"
81
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"      # Default ALCASAR IP address
82
DEFAULT_PRIVATE_IP_MASK="192.168.182.1/24"      # Default ALCASAR IP address
82
# ****** Paths - chemin des commandes *******
83
# ****** Paths - chemin des commandes *******
83
SED="/bin/sed -i"
84
SED="/bin/sed -i"
84
# ****************** End of global parameters *********************
85
# ****************** End of global parameters *********************
85
 
86
 
86
license ()
87
license ()
87
{
88
{
88
        if [ $Lang == "fr" ]
89
        if [ $Lang == "fr" ]
89
        then
90
        then
90
                cat $DIR_INSTALL/gpl-warning.fr.txt | more
91
                cat $DIR_INSTALL/gpl-warning.fr.txt | more
91
        else
92
        else
92
                cat $DIR_INSTALL/gpl-warning.txt | more
93
                cat $DIR_INSTALL/gpl-warning.txt | more
93
        fi
94
        fi
94
        response=0
95
        response=0
95
        PTN='^[oOyYnN]$'
96
        PTN='^[oOyYnN]$'
96
        until [[ $(expr $response : $PTN) -gt 0 ]]
97
        until [[ $(expr $response : $PTN) -gt 0 ]]
97
        do
98
        do
98
                if [ $Lang == "fr" ]
99
                if [ $Lang == "fr" ]
99
                        then echo -n "Acceptez-vous les termes de cette licence (O/n)? : "
100
                        then echo -n "Acceptez-vous les termes de cette licence (O/n)? : "
100
                        else echo -n "Do you accept the terms of this license (Y/n)? : "
101
                        else echo -n "Do you accept the terms of this license (Y/n)? : "
101
                fi
102
                fi
102
                read response
103
                read response
103
        done
104
        done
104
        if [ "$response" = "n" ] || [ "$response" = "N" ]
105
        if [ "$response" = "n" ] || [ "$response" = "N" ]
105
        then
106
        then
106
                exit 1
107
                exit 1
107
        fi
108
        fi
108
}
109
}
109
 
110
 
110
header_install ()
111
header_install ()
111
{
112
{
112
        clear
113
        clear
113
        echo "-----------------------------------------------------------------------------"
114
        echo "-----------------------------------------------------------------------------"
114
        echo "                     ALCASAR V$VERSION Installation"
115
        echo "                     ALCASAR V$VERSION Installation"
115
        echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
116
        echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
116
        echo "-----------------------------------------------------------------------------"
117
        echo "-----------------------------------------------------------------------------"
117
}
118
}
118
 
119
 
119
########################################################
120
########################################################
120
##                  Function "testing"                ##
121
##                  Function "testing"                ##
121
## - Test Mageia version                              ##
122
## - Test Mageia version                              ##
122
## - Test ALCASAR version (if already installed)      ##
123
## - Test ALCASAR version (if already installed)      ##
123
## - Test free space on /var  (>10G)                  ##
124
## - Test free space on /var  (>10G)                  ##
124
## - Test Internet access                             ##
125
## - Test Internet access                             ##
125
########################################################
126
########################################################
126
testing ()
127
testing ()
127
{
128
{
128
# Test of Mageia version
129
# Test of Mageia version
129
# extract the current Mageia version and hardware architecture (i586 ou X64)
130
# extract the current Mageia version and hardware architecture (i586 ou X64)
130
        fic=`cat /etc/product.id`
131
        fic=`cat /etc/product.id`
131
        unknown_os=0
132
        unknown_os=0
132
        old="$IFS"
133
        old="$IFS"
133
        IFS=","
134
        IFS=","
134
        set $fic
135
        set $fic
135
        for i in $*
136
        for i in "$@"
136
        do
137
        do
137
                if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
138
                if [ "`echo $i|grep distribution|cut -d'=' -f1`" == "distribution" ]
138
                        then
139
                        then
139
                        DISTRIBUTION=`echo $i|cut -d"=" -f2`
140
                        DISTRIBUTION=`echo $i|cut -d"=" -f2`
140
                        unknown_os=`expr $unknown_os + 1`
141
                        unknown_os=`expr $unknown_os + 1`
141
                fi
142
                fi
142
                if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
143
                if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
143
                        then
144
                        then
144
                        CURRENT_VERSION=`echo $i|cut -d"=" -f2`
145
                        CURRENT_VERSION=`echo $i|cut -d"=" -f2`
145
                        unknown_os=`expr $unknown_os + 1`
146
                        unknown_os=`expr $unknown_os + 1`
146
                fi
147
                fi
147
                if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
148
                if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
148
                        then
149
                        then
149
                        ARCH=`echo $i|cut -d"=" -f2`
150
                        ARCH=`echo $i|cut -d"=" -f2`
150
                        unknown_os=`expr $unknown_os + 1`
151
                        unknown_os=`expr $unknown_os + 1`
151
                fi
152
                fi
152
        done
153
        done
153
        if [ "$ARCH" != "x86_64" ]
154
        if [ "$ARCH" != "x86_64" ]
154
                then
155
                then
155
                if [ $Lang == "fr" ]
156
                if [ $Lang == "fr" ]
156
                        then echo "Votre architecture matérielle doit être en 64bits"
157
                        then echo "Votre architecture matérielle doit être en 64bits"
157
                        else echo "You hardware architecture must be 64bits"
158
                        else echo "You hardware architecture must be 64bits"
158
                fi
159
                fi
159
                exit 1
160
                exit 1
160
        fi
161
        fi
161
        IFS="$old"
162
        IFS="$old"
162
        if [[ ( $unknown_os != 3 ) || ("$DISTRIBUTION" != "Mageia" ) || ( "$CURRENT_VERSION" != "6" ) ]]
163
        if [[ ( $unknown_os != 3 ) || ("$DISTRIBUTION" != "Mageia" ) || ( "$CURRENT_VERSION" != "6" ) ]]
163
                then
164
        then
164
                if [ -e /var/tmp/alcasar-conf.tar.gz ] # update
165
                if [ -e /var/tmp/alcasar-conf.tar.gz ] # update
165
                        then
166
                        then
166
                        echo
167
                        echo
167
                        if [ $Lang == "fr" ]
168
                        if [ $Lang == "fr" ]
168
                                then
169
                                then
169
                                echo "La mise à jour automatique d'ALCASAR ne peut pas être réalisée."
170
                                echo "La mise à jour automatique d'ALCASAR ne peut pas être réalisée."
170
                                echo "1 - Effectuez une sauvegarde des fichiers de traçabilité et de la base des usagers via l'ACC"
171
                                echo "1 - Effectuez une sauvegarde des fichiers de traçabilité et de la base des usagers via l'ACC"
171
                                echo "2 - Installez Linux-Mageia 6.0 (64bits) et ALCASAR (cf. doc d'installation)"
172
                                echo "2 - Installez Linux-Mageia 6.0 (64bits) et ALCASAR (cf. doc d'installation)"
172
                                echo "3 - Importez votre base des usagers"
173
                                echo "3 - Importez votre base des usagers"
173
                        else
174
                        else
174
                                echo "The automatic update of ALCASAR can't be performed."
175
                                echo "The automatic update of ALCASAR can't be performed."
175
                                echo "1 - Save your traceability files and the user database"
176
                                echo "1 - Save your traceability files and the user database"
176
                                echo "2 - Install Linux-Mageia 6 (64bits) & ALCASAR (cf. installation doc)"
177
                                echo "2 - Install Linux-Mageia 6 (64bits) & ALCASAR (cf. installation doc)"
177
                                echo "3 - Import your users database"
178
                                echo "3 - Import your users database"
178
                        fi
179
                        fi
179
                else
180
                else
180
                        if [ $Lang == "fr" ]
181
                        if [ $Lang == "fr" ]
181
                                then echo "L'installation d'ALCASAR ne peut pas être réalisée."
182
                                then echo "L'installation d'ALCASAR ne peut pas être réalisée."
182
                                else echo "The installation of ALCASAR can't be performed."
183
                                else echo "The installation of ALCASAR can't be performed."
183
                        fi
184
                        fi
184
                fi
185
                fi
185
                echo
186
                echo
186
                if [ $Lang == "fr" ]
187
                if [ $Lang == "fr" ]
187
                        then echo "Le système d'exploitation doit être remplacé (Mageia6-64bits)"
188
                        then echo "Le système d'exploitation doit être remplacé (Mageia6-64bits)"
188
                        else echo "The OS must be replaced (Mageia6-64bits)"
189
                        else echo "The OS must be replaced (Mageia6-64bits)"
189
                fi
190
                fi
190
                exit 0
191
                exit 1
191
        fi
192
        fi
192
 
193
 
193
# Test if ALCASAR is already installed
194
# Test if ALCASAR is already installed
194
        if [ -e $CONF_FILE ]
195
        if [ -e $CONF_FILE ]
195
        then
196
        then
196
                current_version=`grep ^VERSION= $CONF_FILE | cut -d"=" -f2`
197
                current_version=`grep ^VERSION= $CONF_FILE | cut -d"=" -f2`
197
                if [ $Lang == "fr" ]
198
                if [ $Lang == "fr" ]
198
                        then echo "La version $current_version d'ALCASAR est déjà installée"
199
                        then echo "La version $current_version d'ALCASAR est déjà installée"
199
                        else echo "ALCASAR version $current_version is already installed"
200
                        else echo "ALCASAR version $current_version is already installed"
200
                fi
201
                fi
201
                response=0
202
                response=0
202
                PTN='^[12]$'
203
                PTN='^[12]$'
203
                until [[ $(expr $response : $PTN) -gt 0 ]]
204
                until [[ $(expr $response : $PTN) -gt 0 ]]
204
                do
205
                do
205
                        if [ $Lang == "fr" ]
206
                        if [ $Lang == "fr" ]
206
                                then echo -n "Tapez '1' pour une mise à jour; Tapez '2' pour une réinstallation : "
207
                                then echo -n "Tapez '1' pour une mise à jour; Tapez '2' pour une réinstallation : "
207
                                else echo -n "Hit '1' for an update; Hit '2' for a reinstallation : "
208
                                else echo -n "Hit '1' for an update; Hit '2' for a reinstallation : "
208
                        fi
209
                        fi
209
                        read response
210
                        read response
210
                done
211
                done
211
                if [ "$response" = "2" ]
212
                if [ "$response" = "2" ]
212
                then
213
                then
213
                        rm -f /var/tmp/alcasar-conf*
214
                        rm -f /var/tmp/alcasar-conf*
214
                else
215
                else
215
# Retrieve former NICname
216
# Retrieve former NICname
216
                        EXTIF_saved=`grep ^EXTIF= $CONF_FILE | cut -d'=' -f2-`  # EXTernal InterFace
217
                        EXTIF_saved=`grep ^EXTIF= $CONF_FILE | cut -d'=' -f2-`  # EXTernal InterFace
217
                        INTIF_saved=`grep ^INTIF= $CONF_FILE | cut -d'=' -f2-`  # INTernal InterFace
218
                        INTIF_saved=`grep ^INTIF= $CONF_FILE | cut -d'=' -f2-`  # INTernal InterFace
218
                        [ $(/usr/sbin/ip link | grep -c " $EXTIF_saved:") -ne 0 ] && EXTIF=$EXTIF_saved || echo "Warning: Network card \"$EXTIF_saved\" is not connected, so \"$EXTIF\" will be used for external network."
219
                        [ "$(/usr/sbin/ip link | grep -c " $EXTIF_saved:")" -ne 0 ] && EXTIF=$EXTIF_saved || echo "Warning: Network card \"$EXTIF_saved\" is not connected, so \"$EXTIF\" will be used for external network."
219
                        [ $(/usr/sbin/ip link | grep -c " $INTIF_saved:") -ne 0 ] && INTIF=$INTIF_saved || echo "Warning: Network card \"$INTIF_saved\" is not connected, so \"$INTIF\" will be used for internal network."
220
                        [ "$(/usr/sbin/ip link | grep -c " $INTIF_saved:")" -ne 0 ] && INTIF=$INTIF_saved || echo "Warning: Network card \"$INTIF_saved\" is not connected, so \"$INTIF\" will be used for internal network."
220
# Create the current conf file
221
# Create the current conf file
221
                        $DIR_SCRIPTS/alcasar-conf.sh --create
222
                        $DIR_SCRIPTS/alcasar-conf.sh --create
222
                        mode="update"
223
                        mode="update"
223
                fi
224
                fi
224
        fi
225
        fi
225
# Test free space on /var
226
# Test free space on /var
226
        if [ ! -d /var/log/netflow/porttracker ]
227
        if [ ! -d /var/log/netflow/porttracker ]
227
                then
228
                then
228
                free_space=`df -BG --output=avail /var|tail -1|tr -d [:space:]G`
229
                free_space=`df -BG --output=avail /var|tail -1|tr -d '[:space:]G'`
229
                if [ $free_space -lt 10 ]
230
                if [ $free_space -lt 10 ]
230
                        then
231
                        then
231
                        if [ $Lang == "fr" ]
232
                        if [ $Lang == "fr" ]
232
                                then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
233
                                then echo "place disponible sur /var insufisante ($free_space Go au lieu de 10 Go au minimum)"
233
                                else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
234
                                else echo "not enough free space on /var ($free_space GB instead of at least 10 GB)"
234
                        fi
235
                        fi
235
                exit 0
236
                exit 0
236
                fi
237
                fi
237
        fi
238
        fi
238
 
239
 
239
# Detect external/internal interfaces
240
# Detect external/internal interfaces
240
        if [ -z "$EXTIF" ]; then
241
        if [ -z "$EXTIF" ]; then
241
                EXTIF=$(/usr/sbin/ip route list | awk '/^default / {print $5}')
242
                EXTIF=$(/usr/sbin/ip route list | awk '/^default / {print $5}')
242
                if [ -z "$EXTIF" ]; then
243
                if [ -z "$EXTIF" ]; then
243
                        if [ "$Lang" == 'fr' ]
244
                        if [ "$Lang" == 'fr' ]
244
                                then echo -n "Aucune passerelle par défaut configurée"
245
                                then echo -n "Aucune passerelle par défaut configurée"
245
                                else echo -n "No default gateway configured"
246
                                else echo -n "No default gateway configured"
246
                        fi
247
                        fi
247
                        exit 1
248
                        exit 1
248
                fi
249
                fi
249
        fi
250
        fi
250
        if [ "$Lang" == 'fr' ]
251
        if [ "$Lang" == 'fr' ]
251
                then echo "Interface externe (Internet) utilisée : $EXTIF"
252
                then echo "Interface externe (Internet) utilisée : $EXTIF"
252
                else echo "External interface (Internet) used: $EXTIF"
253
                else echo "External interface (Internet) used: $EXTIF"
253
        fi
254
        fi
254
 
255
 
255
        if [ -z "$INTIF" ]; then
256
        if [ -z "$INTIF" ]; then
256
                interfacesList=$(/usr/sbin/ip -br link show | cut -d' ' -f1 | grep -v "^\(lo\|tun0\|$EXTIF\)\$")
257
                interfacesList=$(/usr/sbin/ip -br link show | cut -d' ' -f1 | grep -v "^\(lo\|tun0\|$EXTIF\)\$")
257
                interfacesCount=$(echo "$interfacesList" | wc -l)
258
                interfacesCount=$(echo "$interfacesList" | wc -l)
258
                if [ $interfacesCount -eq 0 ]; then
259
                if [ $interfacesCount -eq 0 ]; then
259
                        if [ "$Lang" == 'fr' ]
260
                        if [ "$Lang" == 'fr' ]
260
                                then echo "Aucune interface de disponible pour le réseau interne"
261
                                then echo "Aucune interface de disponible pour le réseau interne"
261
                                else echo "No interface available for the internal network"
262
                                else echo "No interface available for the internal network"
262
                        fi
263
                        fi
263
                        exit 1
264
                        exit 1
264
                elif [ $interfacesCount -eq 1 ]; then
265
                elif [ $interfacesCount -eq 1 ]; then
265
                        INTIF="$interfacesList"
266
                        INTIF="$interfacesList"
266
                else
267
                else
267
                        interfacesSorted=$(/usr/sbin/ip -br addr | grep -v "^\(lo\|tun0\|$EXTIF\) " | sort -b -k3n -k2r -k1)
268
                        interfacesSorted=$(/usr/sbin/ip -br addr | grep -v "^\(lo\|tun0\|$EXTIF\) " | sort -b -k3n -k2r -k1)
268
                        interfacePreferred=$(echo "$interfacesSorted" | head -1 | cut -d' ' -f1)
269
                        interfacePreferred=$(echo "$interfacesSorted" | head -1 | cut -d' ' -f1)
269
 
270
 
270
                        if [ "$Lang" == 'fr' ]
271
                        if [ "$Lang" == 'fr' ]
271
                                then echo 'Liste des interfaces disponible :'
272
                                then echo 'Liste des interfaces disponible :'
272
                                else echo 'List of available interfaces:'
273
                                else echo 'List of available interfaces:'
273
                        fi
274
                        fi
274
                        echo "$interfacesSorted"
275
                        echo "$interfacesSorted"
275
                        response=''
276
                        response=''
276
                        while true; do
277
                        while true; do
277
                                if [ "$Lang" == 'fr' ]
278
                                if [ "$Lang" == 'fr' ]
278
                                        then echo -n "Choix de l'interface interne ? [$interfacePreferred] "
279
                                        then echo -n "Choix de l'interface interne ? [$interfacePreferred] "
279
                                        else echo -n "Choice of internal interface ? [$interfacePreferred] "
280
                                        else echo -n "Choice of internal interface ? [$interfacePreferred] "
280
                                fi
281
                                fi
281
                                read response
282
                                read response
282
 
283
 
283
                                [ -z "$response" ] && response="$interfacePreferred"
284
                                [ -z "$response" ] && response="$interfacePreferred"
284
 
285
 
285
                                # Check if interface exist
286
                                # Check if interface exist
286
                                if [ $(echo "$interfacesList" | grep -c "^$response\$") -eq 1 ]; then
287
                                if [ "$(echo "$interfacesList" | grep -c "^$response\$")" -eq 1 ]; then
287
                                        INTIF="$response"
288
                                        INTIF="$response"
288
                                        break
289
                                        break
289
                                else
290
                                else
290
                                        if [ "$Lang" == 'fr' ]
291
                                        if [ "$Lang" == 'fr' ]
291
                                                then echo "Interface \"$response\" introuvable"
292
                                                then echo "Interface \"$response\" introuvable"
292
                                                else echo "Interface \"$response\" not found"
293
                                                else echo "Interface \"$response\" not found"
293
                                        fi
294
                                        fi
294
                                fi
295
                                fi
295
                        done
296
                        done
296
                fi
297
                fi
297
        fi
298
        fi
298
        if [ "$Lang" == 'fr' ]
299
        if [ "$Lang" == 'fr' ]
299
                then echo "Interface interne utilisée : $INTIF"
300
                then echo "Interface interne utilisée : $INTIF"
300
                else echo "Internal interface used: $INTIF"
301
                else echo "Internal interface used: $INTIF"
301
        fi
302
        fi
302
 
303
 
303
        if [ $Lang == "fr" ]
304
        if [ $Lang == "fr" ]
304
                then echo -n "Tests des paramètres réseau : "
305
                then echo -n "Tests des paramètres réseau : "
305
                else echo -n "Network parameters tests: "
306
                else echo -n "Network parameters tests: "
306
        fi
307
        fi
307
# Remove conf file if NIC is not plugged (ie : GSM/WIFI/Bt dongles)
308
# Remove conf file if NIC is not plugged (ie : GSM/WIFI/Bt dongles)
308
        cd /etc/sysconfig/network-scripts/
309
        cd /etc/sysconfig/network-scripts/ || { echo "Unable to find /etc/sysconfig/network-scripts directory"; exit 1; }
309
        IF_INTERFACES=`ls ifcfg-*|cut -d"-" -f2|grep -v "^lo"|cut -d"*" -f1`
310
        IF_INTERFACES=`ls ifcfg-*|cut -d"-" -f2|grep -v "^lo"|cut -d"*" -f1`
310
        for i in $IF_INTERFACES
311
        for i in $IF_INTERFACES
311
        do
312
        do
312
                if [ $(/usr/sbin/ip link | grep -c " $i:") -eq 0 ]; then
313
                if [ "$(/usr/sbin/ip link | grep -c " $i:")" -eq 0 ]; then
313
                        rm -f ifcfg-$i
314
                        rm -f ifcfg-$i
314
 
315
 
315
                        if [ $Lang == "fr" ]
316
                        if [ $Lang == "fr" ]
316
                                then echo "Suppression : ifcfg-$i"
317
                                then echo "Suppression : ifcfg-$i"
317
                                else echo "Deleting: ifcfg-$i"
318
                                else echo "Deleting: ifcfg-$i"
318
                        fi
319
                        fi
319
                fi
320
                fi
320
        done
321
        done
321
        cd $DIR_INSTALL
322
        cd $DIR_INSTALL || { echo "Unable to find $DIR_INSTALL directory"; exit 1; }
322
        echo -n "."
323
        echo -n "."
323
# Test Ethernet NIC links state
324
# Test Ethernet NIC links state
324
        interfacesDown=$(/usr/sbin/ip -br link | grep "^\($EXTIF\|$INTIF\) " | grep 'NO-CARRIER' | cut -d' ' -f1)
325
        interfacesDown=$(/usr/sbin/ip -br link | grep "^\($EXTIF\|$INTIF\) " | grep 'NO-CARRIER' | cut -d' ' -f1)
325
        if [ ! -z "$interfacesDown" ]; then
326
        if [ ! -z "$interfacesDown" ]; then
326
                for i in $interfacesDown; do
327
                for i in $interfacesDown; do
327
                        if [ $Lang == "fr" ]
328
                        if [ $Lang == "fr" ]
328
                        then
329
                        then
329
                                echo -e "\nÉchec"
330
                                echo -e "\nÉchec"
330
                                echo "Le lien réseau de la carte $i n'est pas actif."
331
                                echo "Le lien réseau de la carte $i n'est pas actif."
331
                                echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
332
                                echo "Assurez-vous que cette carte est bien connectée à un équipement (commutateur, A.P., etc.)"
332
                        else
333
                        else
333
                                echo -e "\nFailed"
334
                                echo -e "\nFailed"
334
                                echo "The link state of $i interface is down."
335
                                echo "The link state of $i interface is down."
335
                                echo "Make sure that this network card is connected to a switch or an A.P."
336
                                echo "Make sure that this network card is connected to a switch or an A.P."
336
                        fi
337
                        fi
337
                done
338
                done
338
                exit 1
339
                exit 1
339
        fi
340
        fi
340
        echo -n "."
341
        echo -n "."
341
# Test EXTIF config files
342
# Test EXTIF config files
342
        PUBLIC_IP_MASK=`/usr/sbin/ip addr show $EXTIF | grep '^\s*inet\s' | awk '{ print $2 }'`
343
        PUBLIC_IP_MASK=`/usr/sbin/ip addr show $EXTIF | grep '^\s*inet\s' | awk '{ print $2 }'`
343
        PUBLIC_IP=`echo $PUBLIC_IP_MASK | cut -d'/' -f1`
344
        PUBLIC_IP=`echo $PUBLIC_IP_MASK | cut -d'/' -f1`
344
        PUBLIC_GATEWAY=`/usr/sbin/ip route list | awk -v EXTIF="$EXTIF" '(/^default / && $5 == EXTIF) {print $3}'`
345
        PUBLIC_GATEWAY=`/usr/sbin/ip route list | awk -v EXTIF="$EXTIF" '(/^default / && $5 == EXTIF) {print $3}'`
345
        if [ `echo $PUBLIC_IP|wc -c` -lt 7 ] || [ `echo $PUBLIC_GATEWAY|wc -c` -lt 7 ]
346
        if [ "$(echo $PUBLIC_IP|wc -c)" -lt 7 ] || [ "$(echo $PUBLIC_GATEWAY|wc -c)" -lt 7 ]
346
        then
347
        then
347
                if [ $Lang == "fr" ]
348
                if [ $Lang == "fr" ]
348
                then
349
                then
349
                        echo -e "\nÉchec"
350
                        echo -e "\nÉchec"
350
                        echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
351
                        echo "La carte réseau connectée à Internet ($EXTIF) n'est pas correctement configurée."
351
                        echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
352
                        echo "Renseignez les champs suivants dans le fichier '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
352
                        echo "Appliquez les changements : 'systemctl restart network'"
353
                        echo "Appliquez les changements : 'systemctl restart network'"
353
                else
354
                else
354
                        echo -e "\nFailed"
355
                        echo -e "\nFailed"
355
                        echo "The Internet connected network card ($EXTIF) isn't well configured."
356
                        echo "The Internet connected network card ($EXTIF) isn't well configured."
356
                        echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
357
                        echo "The folowing parametres must be set in the file '/etc/sysconfig/network-scripts/ifcfg-$EXTIF' :"
357
                        echo "Apply the new configuration: 'systemctl restart network'"
358
                        echo "Apply the new configuration: 'systemctl restart network'"
358
                fi
359
                fi
359
                echo "DEVICE=$EXTIF"
360
                echo "DEVICE=$EXTIF"
360
                echo "IPADDR="
361
                echo "IPADDR="
361
                echo "NETMASK="
362
                echo "NETMASK="
362
                echo "GATEWAY="
363
                echo "GATEWAY="
363
                echo "DNS1="
364
                echo "DNS1="
364
                echo "DNS2="
365
                echo "DNS2="
365
                echo "ONBOOT=yes"
366
                echo "ONBOOT=yes"
366
                exit 1
367
                exit 1
367
        fi
368
        fi
368
        echo -n "."
369
        echo -n "."
369
# Test if default GW is set on EXTIF (router or ISP provider equipment)
370
# Test if default GW is set on EXTIF (router or ISP provider equipment)
370
        if [ `/usr/sbin/ip route list|grep " $EXTIF "|grep -c '^default '` -ne 1 ] ; then
371
        if [ "$(/usr/sbin/ip route list|grep " $EXTIF "|grep -c '^default ')" -ne 1 ] ; then
371
                if [ $Lang == "fr" ]
372
                if [ $Lang == "fr" ]
372
                then
373
                then
373
                        echo -e "\nÉchec"
374
                        echo -e "\nÉchec"
374
                        echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
375
                        echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
375
                        echo "Réglez ce problème puis relancez ce script."
376
                        echo "Réglez ce problème puis relancez ce script."
376
                else
377
                else
377
                        echo -e "\nFailed"
378
                        echo -e "\nFailed"
378
                        echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
379
                        echo "You haven't configured Internet access or Internet link is on the wrong Ethernet card"
379
                        echo "Resolv this problem, then restart this script."
380
                        echo "Resolv this problem, then restart this script."
380
                fi
381
                fi
381
                exit 1
382
                exit 1
382
        fi
383
        fi
383
        echo -n "."
384
        echo -n "."
384
# Test if default GW is alive
385
# Test if default GW is alive
385
        arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $PUBLIC_GATEWAY|grep response|cut -d" " -f2`
386
        arp_reply=`/usr/sbin/arping -b -I$EXTIF -c1 -w2 $PUBLIC_GATEWAY|grep response|cut -d" " -f2`
386
        if [ $(expr $arp_reply) -eq 0 ]
387
        if [ "$(expr $arp_reply)" -eq 0 ]
387
                then
388
                then
388
                if [ $Lang == "fr" ]
389
                if [ $Lang == "fr" ]
389
                then
390
                then
390
                        echo -e "\nÉchec"
391
                        echo -e "\nÉchec"
391
                        echo "Le routeur de sortie ou la Box Internet ($PUBLIC_GATEWAY) ne répond pas."
392
                        echo "Le routeur de sortie ou la Box Internet ($PUBLIC_GATEWAY) ne répond pas."
392
                        echo "Réglez ce problème puis relancez ce script."
393
                        echo "Réglez ce problème puis relancez ce script."
393
                else
394
                else
394
                        echo -e "\nFailed"
395
                        echo -e "\nFailed"
395
                        echo "The Internet gateway or the ISP equipment ($PUBLIC_GATEWAY) doesn't answered."
396
                        echo "The Internet gateway or the ISP equipment ($PUBLIC_GATEWAY) doesn't answered."
396
                        echo "Resolv this problem, then restart this script."
397
                        echo "Resolv this problem, then restart this script."
397
                fi
398
                fi
398
                exit 1
399
                exit 1
399
        fi
400
        fi
400
        echo -n "."
401
        echo -n "."
401
# Test Internet connectivity
402
# Test Internet connectivity
402
        domainTested='www.google.com'
403
        domainTested='www.google.com'
403
        /usr/bin/curl -s --head "$domainTested" &>/dev/null
404
        /usr/bin/curl -s --head "$domainTested" &>/dev/null
404
        if [ $? -ne 0 ]; then
405
        if [ $? -ne 0 ]; then
405
                if [ $Lang == "fr" ]
406
                if [ $Lang == "fr" ]
406
                then
407
                then
407
                        echo -e "\nLa tentative de connexion vers Internet a échoué ($domainTested)."
408
                        echo -e "\nLa tentative de connexion vers Internet a échoué ($domainTested)."
408
                        echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
409
                        echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
409
                        echo "Vérifiez la validité des adresses IP des DNS."
410
                        echo "Vérifiez la validité des adresses IP des DNS."
410
                else
411
                else
411
                        echo -e "\nThe Internet connection try failed ($domainTested)."
412
                        echo -e "\nThe Internet connection try failed ($domainTested)."
412
                        echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
413
                        echo "Please, verify that the $EXTIF card is connected with the Internet gateway."
413
                        echo "Verify the DNS IP addresses"
414
                        echo "Verify the DNS IP addresses"
414
                fi
415
                fi
415
                exit 1
416
                exit 1
416
        fi
417
        fi
417
        echo ". : ok"
418
        echo ". : ok"
418
} # end of testing ()
419
} # end of testing ()
419
 
420
 
420
#######################################################################
421
#######################################################################
421
##                    Function "init"                                ##
422
##                    Function "init"                                ##
422
## - Creation of ALCASAR conf file "/usr/local/etc/alcasar.conf      ##
423
## - Creation of ALCASAR conf file "/usr/local/etc/alcasar.conf      ##
423
## - Creation of random password for GRUB, mariadb (admin and user)  ##
424
## - Creation of random password for GRUB, mariadb (admin and user)  ##
424
#######################################################################
425
#######################################################################
425
init ()
426
init ()
426
{
427
{
427
        if [ "$mode" != "update" ]
428
        if [ "$mode" != "update" ]
428
        then
429
        then
429
# On affecte le nom d'organisme
430
# On affecte le nom d'organisme
430
                header_install
431
                header_install
431
                ORGANISME=!
432
                ORGANISME=!
432
                PTN='^[a-zA-Z0-9-]*$'
433
                PTN='^[a-zA-Z0-9-]*$'
433
                until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
434
                until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
434
                do
435
                do
435
                        if [ $Lang == "fr" ]
436
                        if [ $Lang == "fr" ]
436
                                then echo -n "Entrez le nom de votre organisme : "
437
                                then echo -n "Entrez le nom de votre organisme : "
437
                                else echo -n "Enter the name of your organism : "
438
                                else echo -n "Enter the name of your organism : "
438
                        fi
439
                        fi
439
                        read ORGANISME
440
                        read ORGANISME
440
                        if [ "$ORGANISME" == "" ]
441
                        if [ "$ORGANISME" == "" ]
441
                                then
442
                        then
442
                                ORGANISME=!
443
                                ORGANISME=!
443
                        fi
444
                        fi
444
                done
445
                done
445
        fi
446
        fi
446
# On crée aléatoirement les mots de passe et les secrets partagés
447
# On crée aléatoirement les mots de passe et les secrets partagés
447
# We create random passwords and shared secrets
448
# We create random passwords and shared secrets
448
        rm -f $PASSWD_FILE
449
        rm -f $PASSWD_FILE
449
        echo "#####  ALCASAR ($ORGANISME) security passwords  #####" > $PASSWD_FILE
450
        echo "#####  ALCASAR ($ORGANISME) security passwords  #####" > $PASSWD_FILE
450
        grub2pwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`
451
        grub2pwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c8`
451
        pbkdf2=`( echo $grub2pwd ; echo $grub2pwd ) | \
452
        pbkdf2=`( echo $grub2pwd ; echo $grub2pwd ) | \
452
                LC_ALL=C /usr/bin/grub2-mkpasswd-pbkdf2 | \
453
                LC_ALL=C /usr/bin/grub2-mkpasswd-pbkdf2 | \
453
                grep -v '[eE]nter password:' | \
454
                grep -v '[eE]nter password:' | \
454
                sed -e "s/PBKDF2 hash of your password is //"`
455
                sed -e "s/PBKDF2 hash of your password is //"`
455
        echo "GRUB2_PASSWORD=$pbkdf2" > /boot/grub2/user.cfg
456
        echo "GRUB2_PASSWORD=$pbkdf2" > /boot/grub2/user.cfg
456
        [ -e /root/grub.default ] || cp /etc/grub.d/10_linux /root/grub.default
457
        [ -e /root/grub.default ] || cp /etc/grub.d/10_linux /root/grub.default
457
        cp -f $DIR_CONF/grub-10_linux /etc/grub.d/10_linux  # Request password only on menu editing attempts (not when selecting an entry)
458
        cp -f $DIR_CONF/grub-10_linux /etc/grub.d/10_linux  # Request password only on menu editing attempts (not when selecting an entry)
458
        chmod 0600 /boot/grub2/user.cfg
459
        chmod 0600 /boot/grub2/user.cfg
459
        echo "# Login name and password to protect GRUB2 boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
460
        echo "# Login name and password to protect GRUB2 boot menu (!!!qwerty keyboard) : " > $PASSWD_FILE
460
        echo "GRUB2_user=root" >> $PASSWD_FILE
461
        echo "GRUB2_user=root" >> $PASSWD_FILE
461
        echo "GRUB2_password=$grub2pwd" >> $PASSWD_FILE
462
        echo "GRUB2_password=$grub2pwd" >> $PASSWD_FILE
462
        mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c16`
463
        mysqlpwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
463
        echo "# Login name and Password of MariaDB administrator:" >> $PASSWD_FILE
464
        echo "# Login name and Password of MariaDB administrator:" >> $PASSWD_FILE
464
        echo "db_root=$mysqlpwd" >> $PASSWD_FILE
465
        echo "db_root=$mysqlpwd" >> $PASSWD_FILE
465
        radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c16`
466
        radiuspwd=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
466
        echo "# Login name and password of MariaDB user:" >> $PASSWD_FILE
467
        echo "# Login name and password of MariaDB user:" >> $PASSWD_FILE
467
        echo "db_user=$DB_USER" >> $PASSWD_FILE
468
        echo "db_user=$DB_USER" >> $PASSWD_FILE
468
        echo "db_password=$radiuspwd" >> $PASSWD_FILE
469
        echo "db_password=$radiuspwd" >> $PASSWD_FILE
469
        secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c16`
470
        secretuam=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
470
        echo "# Shared secret between the script 'intercept.php' and coova-chilli:" >> $PASSWD_FILE
471
        echo "# Shared secret between the script 'intercept.php' and coova-chilli:" >> $PASSWD_FILE
471
        echo "secret_uam=$secretuam" >> $PASSWD_FILE
472
        echo "secret_uam=$secretuam" >> $PASSWD_FILE
472
        secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c16`
473
        secretradius=`cat /dev/urandom | tr -dc '[:alnum:]' | head -c16`
473
        echo "# Shared secret between coova-chilli and FreeRadius:" >> $PASSWD_FILE
474
        echo "# Shared secret between coova-chilli and FreeRadius:" >> $PASSWD_FILE
474
        echo "secret_radius=$secretradius" >> $PASSWD_FILE
475
        echo "secret_radius=$secretradius" >> $PASSWD_FILE
475
        chmod 640 $PASSWD_FILE
476
        chmod 640 $PASSWD_FILE
476
#  copy scripts in in /usr/local/bin
477
#  copy scripts in in /usr/local/bin
477
        cp -fr $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown -R root:root $DIR_DEST_BIN/alcasar* ; chmod -R 740 $DIR_DEST_BIN/alcasar*
478
        cp -fr $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown -R root:root $DIR_DEST_BIN/alcasar* ; chmod -R 740 $DIR_DEST_BIN/alcasar*
478
#  copy conf files in /usr/local/etc
479
#  copy conf files in /usr/local/etc
479
        cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown -R root:apache $DIR_DEST_ETC ; chmod 770 $DIR_DEST_ETC ; chmod 660 $DIR_DEST_ETC/alcasar*
480
        cp -f $DIR_CONF/etc/alcasar* $DIR_DEST_ETC/. ; chown -R root:apache $DIR_DEST_ETC ; chmod 770 $DIR_DEST_ETC ; chmod 660 $DIR_DEST_ETC/alcasar*
480
        $SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_BIN/alcasar-mysql.sh
481
        $SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_BIN/alcasar-mysql.sh
481
# generate central conf file
482
# generate central conf file
482
        cat <<EOF > $CONF_FILE
483
        cat <<EOF > $CONF_FILE
483
##########################################
484
##########################################
484
##                                      ##
485
##                                      ##
485
##          ALCASAR Parameters          ##
486
##          ALCASAR Parameters          ##
486
##                                      ##
487
##                                      ##
487
##########################################
488
##########################################
488
 
489
 
489
INSTALL_DATE=$DATE
490
INSTALL_DATE=$DATE
490
VERSION=$VERSION
491
VERSION=$VERSION
491
ORGANISM=$ORGANISME
492
ORGANISM=$ORGANISME
492
HOSTNAME=$HOSTNAME
493
HOSTNAME=$HOSTNAME
493
DOMAIN=$DOMAIN
494
DOMAIN=$DOMAIN
494
EOF
495
EOF
495
        chmod o-rwx $CONF_FILE
496
        chmod o-rwx $CONF_FILE
496
} # End of init ()
497
} # End of init ()
497
 
498
 
498
#########################################################
499
#########################################################
499
##                    Function "network"               ##
500
##                    Function "network"               ##
500
## - Define the several network address                ##
501
## - Define the several network address                ##
501
## - Define the DNS naming                             ##
502
## - Define the DNS naming                             ##
502
## - INTIF parameters (consultation network)           ##
503
## - INTIF parameters (consultation network)           ##
503
## - Write "/etc/hosts" file                           ##
504
## - Write "/etc/hosts" file                           ##
504
## - write "hosts.allow" & "hosts.deny" files          ##
505
## - write "hosts.allow" & "hosts.deny" files          ##
505
#########################################################
506
#########################################################
506
network ()
507
network ()
507
{
508
{
508
        header_install
509
        header_install
509
        if [ "$mode" != "update" ]
510
        if [ "$mode" != "update" ]
510
                then
511
                then
511
                if [ $Lang == "fr" ]
512
                if [ $Lang == "fr" ]
512
                        then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
513
                        then echo "Par défaut, l'adresse IP d'ALCASAR sur le réseau de consultation est : $DEFAULT_PRIVATE_IP_MASK"
513
                        else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
514
                        else echo "The default ALCASAR IP address on consultation network is : $DEFAULT_PRIVATE_IP_MASK"
514
                fi
515
                fi
515
                response=0
516
                response=0
516
                PTN='^[oOyYnN]$'
517
                PTN='^[oOyYnN]$'
517
                until [[ $(expr $response : $PTN) -gt 0 ]]
518
                until [[ $(expr $response : $PTN) -gt 0 ]]
518
                do
519
                do
519
                        if [ $Lang == "fr" ]
520
                        if [ $Lang == "fr" ]
520
                                then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
521
                                then echo -n "Voulez-vous utiliser cette adresse et ce plan d'adressage (recommandé) (O/n)? : "
521
                                else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
522
                                else echo -n "Do you want to use this IP address and this IP addressing plan (recommanded) (Y/n)? : "
522
                        fi
523
                        fi
523
                        read response
524
                        read response
524
                done
525
                done
525
                if [ "$response" = "n" ] || [ "$response" = "N" ]
526
                if [ "$response" = "n" ] || [ "$response" = "N" ]
526
                then
527
                then
527
                        PRIVATE_IP_MASK="0"
528
                        PRIVATE_IP_MASK="0"
528
                        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:]]$'
529
                        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:]]$'
529
                        until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
530
                        until [[ $(expr $PRIVATE_IP_MASK : $PTN) -gt 0 ]]
530
                        do
531
                        do
531
                                if [ $Lang == "fr" ]
532
                                if [ $Lang == "fr" ]
532
                                        then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
533
                                        then echo -n "Entrez l'adresse IP d'ALCASAR au format CIDR (a.b.c.d/xx) : "
533
                                        else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
534
                                        else echo -n "Enter ALCASAR IP address in CIDR format (a.b.c.d/xx) : "
534
                                fi
535
                                fi
535
                                read PRIVATE_IP_MASK
536
                                read PRIVATE_IP_MASK
536
                        done
537
                        done
537
                else
538
                else
538
                                PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
539
                        PRIVATE_IP_MASK=$DEFAULT_PRIVATE_IP_MASK
539
                fi
540
                fi
540
        else
541
        else
541
                PRIVATE_IP_MASK=`grep ^PRIVATE_IP= conf/etc/alcasar.conf|cut -d"=" -f2`
542
                PRIVATE_IP_MASK=`grep ^PRIVATE_IP= conf/etc/alcasar.conf|cut -d"=" -f2`
542
                rm -rf conf/etc/alcasar.conf
543
                rm -rf conf/etc/alcasar.conf
543
        fi
544
        fi
544
# Define LAN side global parameters
545
# Define LAN side global parameters
545
        hostnamectl set-hostname $HOSTNAME.$DOMAIN
546
        hostnamectl set-hostname $HOSTNAME.$DOMAIN
546
        PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`                               # private network address (ie.: 192.168.182.0)
547
        PRIVATE_NETWORK=`/bin/ipcalc -n $PRIVATE_IP_MASK | cut -d"=" -f2`                               # private network address (ie.: 192.168.182.0)
547
        private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f4`                                  # last octet of LAN address
548
        private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f4`                                  # last octet of LAN address
548
        PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`                               # private network mask (ie.: 255.255.255.0)
549
        PRIVATE_NETMASK=`/bin/ipcalc -m $PRIVATE_IP_MASK | cut -d"=" -f2`                               # private network mask (ie.: 255.255.255.0)
549
        PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`                                 # network prefix (ie. 24)
550
        PRIVATE_PREFIX=`/bin/ipcalc -p $PRIVATE_IP_MASK |cut -d"=" -f2`                                 # network prefix (ie. 24)
550
        PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`                                              # ALCASAR private ip address (consultation LAN side)
551
        PRIVATE_IP=`echo $PRIVATE_IP_MASK | cut -d"/" -f1`                                              # ALCASAR private ip address (consultation LAN side)
551
        if [ $PRIVATE_IP == $PRIVATE_NETWORK ]                                                          # when entering network address instead of ip address
552
        if [ $PRIVATE_IP == $PRIVATE_NETWORK ]                                                          # when entering network address instead of ip address
552
                then
553
        then
553
                PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`
554
                PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1`
554
                PRIVATE_IP_MASK=`echo $PRIVATE_IP/$PRIVATE_PREFIX`
555
                PRIVATE_IP_MASK=`echo $PRIVATE_IP/$PRIVATE_PREFIX`
555
        fi
556
        fi
556
        private_ip_ending=`echo $PRIVATE_IP | cut -d"." -f4`                                            # last octet of LAN address
557
        private_ip_ending=`echo $PRIVATE_IP | cut -d"." -f4`                                            # last octet of LAN address
557
        PRIVATE_SECOND_IP=`echo $PRIVATE_IP | cut -d"." -f1-3`"."`expr $private_ip_ending + 1`          # second network address (ex.: 192.168.182.2)
558
        PRIVATE_SECOND_IP=`echo $PRIVATE_IP | cut -d"." -f1-3`"."`expr $private_ip_ending + 1`          # second network address (ex.: 192.168.182.2)
558
        PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX                                           # ie.: 192.168.182.0/24
559
        PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$PRIVATE_PREFIX                                           # ie.: 192.168.182.0/24
559
        classe=$((PRIVATE_PREFIX/8))                                                                    # ie.: 2=classe B, 3=classe C
560
        classe=$((PRIVATE_PREFIX/8))                                                                    # ie.: 2=classe B, 3=classe C
560
        PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.                          # compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
561
        PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.                          # compatibility with hosts.allow et hosts.deny (ie.: 192.168.182.)
561
        PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`                        # private network broadcast (ie.: 192.168.182.255)
-
 
562
        private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f4`                              # last octet of LAN broadcast
-
 
563
        PRIVATE_FIRST_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_ending + 1` # First network address (ex.: 192.168.182.1)
-
 
564
        PRIVATE_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_ending - 1`      # last network address (ex.: 192.168.182.254)
-
 
565
        PRIVATE_MAC=`/usr/sbin/ip link show $INTIF | grep ether | cut -d" " -f6| sed 's/:/-/g'| awk '{print toupper($0)}'`      # MAC address of INTIF
562
        PRIVATE_MAC=`/usr/sbin/ip link show $INTIF | grep ether | cut -d" " -f6| sed 's/:/-/g'| awk '{print toupper($0)}'`      # MAC address of INTIF
566
# Define Internet parameters
563
# Define Internet parameters
567
        if [ "$mode" != "update" ]
564
        if [ "$mode" != "update" ]
568
        then
565
        then
569
                DNS1=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS1='| cut -d"=" -f2`   # 1st DNS server
566
                DNS1=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS1='| cut -d"=" -f2`   # 1st DNS server
570
                DNS2=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`  # 2nd DNS server
567
                DNS2=`cat /etc/sysconfig/network-scripts/ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`  # 2nd DNS server
571
        else
568
        else
572
                DNS1=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS1=' | cut -d"=" -f2`  # 1st DNS server
569
                DNS1=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS1=' | cut -d"=" -f2`  # 1st DNS server
573
                DNS2=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`  # 2nd DNS server
570
                DNS2=`cat /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF | grep '^DNS2=' | cut -d"=" -f2`  # 2nd DNS server
574
        fi
571
        fi
575
        if [ "$DNS1" == "" ]
572
        if [ "$DNS1" == "" ]
576
        then
573
        then
577
                if [ $Lang == "fr" ]
574
                if [ $Lang == "fr" ]
578
                then
575
                then
579
                        echo "L'adresse IP des serveurs DNS ne sont pas corrects"
576
                        echo "L'adresse IP des serveurs DNS ne sont pas corrects"
580
                        echo "Vérifiez la configuration de la carte réseau externe ($EXTIF)"
577
                        echo "Vérifiez la configuration de la carte réseau externe ($EXTIF)"
581
                else
578
                else
582
                        echo "The IP address of DNS servers are not set correctly"
579
                        echo "The IP address of DNS servers are not set correctly"
583
                        echo "Check the extern network card configuration ($EXTIF)"
580
                        echo "Check the extern network card configuration ($EXTIF)"
584
                fi
581
                fi
585
                exit 0
582
                exit 0
586
        fi
583
        fi
587
        DNS1=${DNS1:=208.67.220.220}
584
        DNS1=${DNS1:=208.67.220.220}
588
        DNS2=${DNS2:=208.67.222.222}
585
        DNS2=${DNS2:=208.67.222.222}
589
        PUBLIC_NETMASK=`/bin/ipcalc -m $PUBLIC_IP_MASK | cut -d"=" -f2`
586
        PUBLIC_NETMASK=`/bin/ipcalc -m $PUBLIC_IP_MASK | cut -d"=" -f2`
590
        PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
587
        PUBLIC_PREFIX=`/bin/ipcalc -p $PUBLIC_IP $PUBLIC_NETMASK|cut -d"=" -f2`
591
        PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
588
        PUBLIC_NETWORK=`/bin/ipcalc -n $PUBLIC_IP/$PUBLIC_PREFIX|cut -d"=" -f2`
592
# Write network parameters in the conf file
589
# Write network parameters in the conf file
593
        echo "EXTIF=$EXTIF" >> $CONF_FILE
590
        echo "EXTIF=$EXTIF" >> $CONF_FILE
594
        echo "INTIF=$INTIF" >> $CONF_FILE
591
        echo "INTIF=$INTIF" >> $CONF_FILE
595
        ######## Récupération des interfaces du ou des réseaux de consultation supplémentaires #################
592
        ######## Récupération des interfaces du ou des réseaux de consultation supplémentaires #################
596
        INTERFACES=`/usr/sbin/ip link|grep '^[[:digit:]]:'|grep -v "^lo\|$EXTIF\|tun0"|cut -d " " -f2|tr -d ":"`
593
        INTERFACES=`/usr/sbin/ip link|grep '^[[:digit:]]:'|grep -v "^lo\|$EXTIF\|tun0"|cut -d " " -f2|tr -d ":"`
597
        for i in $INTERFACES
594
        for i in $INTERFACES
598
        do
595
        do
599
                SUB=`echo ${i:0:2}`
596
                SUB=`echo ${i:0:2}`
600
                if [ $SUB = "wl" ]
597
                if [ $SUB = "wl" ]
601
                        then WIFIF=$i
598
                        then WIFIF=$i
602
                elif [ "$i" != "$INTIF" ] && [ $SUB != "ww" ]
599
                elif [ "$i" != "$INTIF" ] && [ $SUB != "ww" ]
603
                        then LANIF=$i
600
                        then LANIF=$i
604
                fi
601
                fi
605
        done
602
        done
606
        if [ -n "$WIFIF" ]
603
        if [ -n "$WIFIF" ]
607
                then echo "WIFIF=$WIFIF" >> $CONF_FILE
604
                then echo "WIFIF=$WIFIF" >> $CONF_FILE
608
        elif [ -n "$LANIF" ]
605
        elif [ -n "$LANIF" ]
609
                then echo "LANIF=$LANIF" >> $CONF_FILE
606
                then echo "LANIF=$LANIF" >> $CONF_FILE
610
        fi
607
        fi
611
        #########################################################################################################
608
        #########################################################################################################
612
        IP_SETTING=`grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2` # test static or dynamic
609
        IP_SETTING=`grep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-$EXTIF|cut -d"=" -f2` # test static or dynamic
613
        if [ $IP_SETTING == "dhcp" ]
610
        if [ $IP_SETTING == "dhcp" ]
614
                then
611
        then
615
                echo "PUBLIC_IP=dhcp" >> $CONF_FILE
612
                echo "PUBLIC_IP=dhcp" >> $CONF_FILE
616
                echo "GW=dhcp" >> $CONF_FILE
613
                echo "GW=dhcp" >> $CONF_FILE
617
        else
614
        else
618
                echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
615
                echo "PUBLIC_IP=$PUBLIC_IP/$PUBLIC_PREFIX" >> $CONF_FILE
619
                echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE
616
                echo "GW=$PUBLIC_GATEWAY" >> $CONF_FILE
620
        fi
617
        fi
621
        echo "DNS1=$DNS1" >> $CONF_FILE
618
        echo "DNS1=$DNS1" >> $CONF_FILE
622
        echo "DNS2=$DNS2" >> $CONF_FILE
619
        echo "DNS2=$DNS2" >> $CONF_FILE
623
        echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
620
        echo "PUBLIC_MTU=$MTU" >> $CONF_FILE
624
        echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
621
        echo "PRIVATE_IP=$PRIVATE_IP_MASK" >> $CONF_FILE
625
        echo "DHCP=on" >> $CONF_FILE
622
        echo "DHCP=on" >> $CONF_FILE
626
        echo "EXT_DHCP_IP=none" >> $CONF_FILE
623
        echo "EXT_DHCP_IP=none" >> $CONF_FILE
627
        echo "RELAY_DHCP_IP=none" >> $CONF_FILE
624
        echo "RELAY_DHCP_IP=none" >> $CONF_FILE
628
        echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
625
        echo "RELAY_DHCP_PORT=none" >> $CONF_FILE
629
        echo "INT_DNS_DOMAIN=none" >> $CONF_FILE
626
        echo "INT_DNS_DOMAIN=none" >> $CONF_FILE
630
        echo "INT_DNS_IP=none" >> $CONF_FILE
627
        echo "INT_DNS_IP=none" >> $CONF_FILE
631
        echo "INT_DNS_ACTIVE=off" >> $CONF_FILE
628
        echo "INT_DNS_ACTIVE=off" >> $CONF_FILE
632
# network default
629
# network default
633
        [ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
630
        [ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
634
        cat <<EOF > /etc/sysconfig/network
631
        cat <<EOF > /etc/sysconfig/network
635
NETWORKING=yes
632
NETWORKING=yes
636
FORWARD_IPV4=true
633
FORWARD_IPV4=true
637
EOF
634
EOF
638
# write "/etc/hosts"
635
# write "/etc/hosts"
639
        [ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
636
        [ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
640
        cat <<EOF > /etc/hosts
637
        cat <<EOF > /etc/hosts
641
127.0.0.1       localhost
638
127.0.0.1       localhost
642
$PRIVATE_IP     $HOSTNAME
639
$PRIVATE_IP     $HOSTNAME
643
EOF
640
EOF
644
# write EXTIF (Internet) config
641
# write EXTIF (Internet) config
645
        [ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
642
        [ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
646
        if [ $IP_SETTING == "dhcp" ]
643
        if [ $IP_SETTING == "dhcp" ]
647
                then
644
        then
648
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
645
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
649
DEVICE=$EXTIF
646
DEVICE=$EXTIF
650
BOOTPROTO=dhcp
647
BOOTPROTO=dhcp
651
DNS1=127.0.0.1
648
DNS1=127.0.0.1
652
PEERDNS=no
649
PEERDNS=no
653
RESOLV_MODS=yes
650
RESOLV_MODS=yes
654
ONBOOT=yes
651
ONBOOT=yes
655
NOZEROCONF=yes
652
NOZEROCONF=yes
656
METRIC=10
653
METRIC=10
657
MII_NOT_SUPPORTED=yes
654
MII_NOT_SUPPORTED=yes
658
IPV6INIT=no
655
IPV6INIT=no
659
IPV6TO4INIT=no
656
IPV6TO4INIT=no
660
ACCOUNTING=no
657
ACCOUNTING=no
661
USERCTL=no
658
USERCTL=no
662
MTU=$MTU
659
MTU=$MTU
663
EOF
660
EOF
664
                else
661
        else
665
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
662
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
666
DEVICE=$EXTIF
663
DEVICE=$EXTIF
667
BOOTPROTO=static
664
BOOTPROTO=static
668
IPADDR=$PUBLIC_IP
665
IPADDR=$PUBLIC_IP
669
NETMASK=$PUBLIC_NETMASK
666
NETMASK=$PUBLIC_NETMASK
670
GATEWAY=$PUBLIC_GATEWAY
667
GATEWAY=$PUBLIC_GATEWAY
671
DNS1=127.0.0.1
668
DNS1=127.0.0.1
672
RESOLV_MODS=yes
669
RESOLV_MODS=yes
673
ONBOOT=yes
670
ONBOOT=yes
674
METRIC=10
671
METRIC=10
675
NOZEROCONF=yes
672
NOZEROCONF=yes
676
MII_NOT_SUPPORTED=yes
673
MII_NOT_SUPPORTED=yes
677
IPV6INIT=no
674
IPV6INIT=no
678
IPV6TO4INIT=no
675
IPV6TO4INIT=no
679
ACCOUNTING=no
676
ACCOUNTING=no
680
USERCTL=no
677
USERCTL=no
681
MTU=$MTU
678
MTU=$MTU
682
EOF
679
EOF
683
        fi
680
        fi
684
# write INTIF (consultation LAN) in normal mode
681
# write INTIF (consultation LAN) in normal mode
685
        cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
682
        cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
686
DEVICE=$INTIF
683
DEVICE=$INTIF
687
BOOTPROTO=static
684
BOOTPROTO=static
688
ONBOOT=yes
685
ONBOOT=yes
689
NOZEROCONF=yes
686
NOZEROCONF=yes
690
MII_NOT_SUPPORTED=yes
687
MII_NOT_SUPPORTED=yes
691
IPV6INIT=no
688
IPV6INIT=no
692
IPV6TO4INIT=no
689
IPV6TO4INIT=no
693
ACCOUNTING=no
690
ACCOUNTING=no
694
USERCTL=no
691
USERCTL=no
695
EOF
692
EOF
696
        cp -f /etc/sysconfig/network-scripts/ifcfg-$INTIF /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
693
        cp -f /etc/sysconfig/network-scripts/ifcfg-$INTIF /etc/sysconfig/network-scripts/default-ifcfg-$INTIF
697
# write INTIF in bypass mode (see "alcasar-bypass.sh")
694
# write INTIF in bypass mode (see "alcasar-bypass.sh")
698
        cat <<EOF > /etc/sysconfig/network-scripts/bypass-ifcfg-$INTIF
695
        cat <<EOF > /etc/sysconfig/network-scripts/bypass-ifcfg-$INTIF
699
DEVICE=$INTIF
696
DEVICE=$INTIF
700
BOOTPROTO=static
697
BOOTPROTO=static
701
IPADDR=$PRIVATE_IP
698
IPADDR=$PRIVATE_IP
702
NETMASK=$PRIVATE_NETMASK
699
NETMASK=$PRIVATE_NETMASK
703
ONBOOT=yes
700
ONBOOT=yes
704
METRIC=10
701
METRIC=10
705
NOZEROCONF=yes
702
NOZEROCONF=yes
706
MII_NOT_SUPPORTED=yes
703
MII_NOT_SUPPORTED=yes
707
IPV6INIT=no
704
IPV6INIT=no
708
IPV6TO4INIT=no
705
IPV6TO4INIT=no
709
ACCOUNTING=no
706
ACCOUNTING=no
710
USERCTL=no
707
USERCTL=no
711
EOF
708
EOF
712
######### Config WIFIF (consultation WIFI) ou LANIF (consultation LAN) in normal mode #################
709
######### Config WIFIF (consultation WIFI) ou LANIF (consultation LAN) in normal mode #################
713
        if [ -n "$WIFIF" ] && [ "$WIFIF" != "$INTIF" ]
710
        if [ -n "$WIFIF" ] && [ "$WIFIF" != "$INTIF" ]
714
        then
711
        then
715
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$WIFIF
712
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$WIFIF
716
DEVICE=$WIFIF
713
DEVICE=$WIFIF
717
BOOTPROTO=static
714
BOOTPROTO=static
718
ONBOOT=yes
715
ONBOOT=yes
719
NOZEROCONF=yes
716
NOZEROCONF=yes
720
MII_NOT_SUPPORTED=yes
717
MII_NOT_SUPPORTED=yes
721
IPV6INIT=no
718
IPV6INIT=no
722
IPV6TO4INIT=no
719
IPV6TO4INIT=no
723
ACCOUNTING=no
720
ACCOUNTING=no
724
USERCTL=no
721
USERCTL=no
725
EOF
722
EOF
726
        elif [ -n "$LANIF" ]
723
        elif [ -n "$LANIF" ]
727
        then
724
        then
728
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$LANIF
725
                cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$LANIF
729
DEVICE=$LANIF
726
DEVICE=$LANIF
730
BOOTPROTO=static
727
BOOTPROTO=static
731
ONBOOT=yes
728
ONBOOT=yes
732
NOZEROCONF=yes
729
NOZEROCONF=yes
733
MII_NOT_SUPPORTED=yes
730
MII_NOT_SUPPORTED=yes
734
IPV6INIT=no
731
IPV6INIT=no
735
IPV6TO4INIT=no
732
IPV6TO4INIT=no
736
ACCOUNTING=no
733
ACCOUNTING=no
737
USERCTL=no
734
USERCTL=no
738
EOF
735
EOF
739
        fi
736
        fi
740
        #########################################################################################################
737
        #########################################################################################################
741
# write hosts.allow & hosts.deny
738
# write hosts.allow & hosts.deny
742
        [ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
739
        [ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
743
        cat <<EOF > /etc/hosts.allow
740
        cat <<EOF > /etc/hosts.allow
744
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
741
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
745
sshd: ALL
742
sshd: ALL
746
ntpd: $PRIVATE_NETWORK_SHORT
743
ntpd: $PRIVATE_NETWORK_SHORT
747
EOF
744
EOF
748
        [ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
745
        [ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
749
        cat <<EOF > /etc/hosts.deny
746
        cat <<EOF > /etc/hosts.deny
750
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
747
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
751
EOF
748
EOF
752
        chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
749
        chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
753
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
750
# create the ip_blocked file with a first line (LAN between ALCASAR and the Internet GW)
754
        echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
751
        echo "#$PUBLIC_NETWORK/$PUBLIC_PREFIX LAN-ALCASAR-BOX" > $DIR_DEST_ETC/alcasar-ip-blocked
755
# load conntrack ftp module
752
# load conntrack ftp module
756
        [ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
753
        [ -e /etc/modprobe.preload.default ] || cp /etc/modprobe.preload /etc/modprobe.preload.default
757
        echo "nf_conntrack_ftp" >>  /etc/modprobe.preload
754
        echo "nf_conntrack_ftp" >>  /etc/modprobe.preload
758
# load ipt_NETFLOW module
755
# load ipt_NETFLOW module
759
        echo "ipt_NETFLOW" >>  /etc/modprobe.preload
756
        echo "ipt_NETFLOW" >>  /etc/modprobe.preload
760
# modify iptables service files (start with "alcasar-iptables.sh" and stop with flush)
757
# modify iptables service files (start with "alcasar-iptables.sh" and stop with flush)
761
[ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
758
        [ -e /lib/systemd/system/iptables.service.default ] || cp /lib/systemd/system/iptables.service /lib/systemd/system/iptables.service.default
762
$SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
759
        $SED 's/ExecStart=\/usr\/libexec\/iptables.init start/ExecStart=\/usr\/local\/bin\/alcasar-iptables.sh/' /lib/systemd/system/iptables.service
763
[ -e /usr/libexec/iptables.init.default ] || cp /usr/libexec/iptables.init /usr/libexec/iptables.init.default
760
        [ -e /usr/libexec/iptables.init.default ] || cp /usr/libexec/iptables.init /usr/libexec/iptables.init.default
764
$SED "s?\[ -f \$IPTABLES_CONFIG \] .*?#&?" /usr/libexec/iptables.init # comment the test (flush all rules & policies)
761
        $SED "s?\[ -f \$IPTABLES_CONFIG \] .*?#&?" /usr/libexec/iptables.init # comment the test (flush all rules & policies)
765
#
762
#
766
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
763
# the script "$DIR_DEST_BIN/alcasar-iptables.sh" is launched at the end in order to allow update via ssh
767
} # End of network ()
764
} # End of network ()
768
 
765
 
769
###################################################
766
###################################################
770
##                  Function "ACC"               ##
767
##                  Function "ACC"               ##
771
## - copy ALCASAR Control Center (ACC) files     ##
768
## - copy ALCASAR Control Center (ACC) files     ##
772
## - configuration of the web server (Lighttpd)  ##
769
## - configuration of the web server (Lighttpd)  ##
773
## - creation of the first ACC admin account     ##
770
## - creation of the first ACC admin account     ##
774
## - secure the ACC access                       ##
771
## - secure the ACC access                       ##
775
###################################################
772
###################################################
776
ACC ()
773
ACC ()
777
{
774
{
778
        [ -d $DIR_WEB ] && rm -rf $DIR_WEB
775
        [ -d $DIR_WEB ] && rm -rf $DIR_WEB
779
        mkdir $DIR_WEB
776
        mkdir $DIR_WEB
780
# Copy & adapt ACC files
777
# Copy & adapt ACC files
781
        cp -rf $DIR_INSTALL/web/* $DIR_WEB/
778
        cp -rf $DIR_INSTALL/web/* $DIR_WEB/
782
        $SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
779
        $SED "s?99/99/9999?$DATE_SHORT?g" $DIR_ACC/menu.php
783
        $SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
780
        $SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
784
        $SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
781
        $SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
785
        $SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
782
        $SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_ACC/phpsysinfo/includes/xml/portail.php
786
        chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
783
        chmod 640 $DIR_ACC/phpsysinfo/includes/xml/portail.php
787
        chown -R apache:apache $DIR_WEB/*
784
        chown -R apache:apache $DIR_WEB/*
788
# copy & adapt "freeradius-web" files
785
# copy & adapt "freeradius-web" files
789
        cp -rf $DIR_CONF/freeradius-web/ /etc/
786
        cp -rf $DIR_CONF/freeradius-web/ /etc/
790
        [ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
787
        [ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
791
        $SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
788
        $SED "s?^general_domain:.*?general_domain: $DOMAIN?g" /etc/freeradius-web/admin.conf
792
        $SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
789
        $SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
793
        $SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
790
        $SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
794
        cat <<EOF > /etc/freeradius-web/naslist.conf
791
        cat <<EOF > /etc/freeradius-web/naslist.conf
795
nas1_name: alcasar-$ORGANISME
792
nas1_name: alcasar-$ORGANISME
796
nas1_model: Network Access Controler
793
nas1_model: Network Access Controler
797
nas1_ip: $PRIVATE_IP
794
nas1_ip: $PRIVATE_IP
798
nas1_port_num: 0
795
nas1_port_num: 0
799
nas1_community: public
796
nas1_community: public
800
EOF
797
EOF
801
        chown -R apache:apache /etc/freeradius-web/
798
        chown -R apache:apache /etc/freeradius-web/
802
# create the log & backup structure :
799
# create the log & backup structure :
803
# - base = users database
800
# - base = users database
804
# - archive = tarball of "base + http firewall + netflow"
801
# - archive = tarball of "base + http firewall + netflow"
805
# - security = watchdog log
802
# - security = watchdog log
806
        for i in base archive security activity_report;
803
        for i in base archive security activity_report;
807
        do
804
        do
808
                [ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
805
                [ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
809
        done
806
        done
810
        chown -R root:apache $DIR_SAVE
807
        chown -R root:apache $DIR_SAVE
811
# Configuring & securing php
808
# Configuring & securing php
812
        [ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
809
        [ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
813
        timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
810
        timezone=`cat /etc/sysconfig/clock|grep ZONE|cut -d"=" -f2`
814
        $SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
811
        $SED "s?^;date.timezone =.*?date.timezone = $timezone?g" /etc/php.ini
815
        $SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
812
        $SED "s?^upload_max_filesize.*?upload_max_filesize = 100M?g" /etc/php.ini
816
        $SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
813
        $SED "s?^post_max_size.*?post_max_size = 100M?g" /etc/php.ini
817
        $SED "s?^display_errors.*?display_errors = Off?" /etc/php.ini
814
        $SED "s?^display_errors.*?display_errors = Off?" /etc/php.ini
818
        $SED "s?^display_startup_errors.*?display_startup_errors = Off?" /etc/php.ini
815
        $SED "s?^display_startup_errors.*?display_startup_errors = Off?" /etc/php.ini
819
        $SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
816
        $SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
820
        $SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
817
        $SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
821
        $SED "s?^allow_url_fopen.*?allow_url_fopen = Off?" /etc/php.ini
818
        $SED "s?^allow_url_fopen.*?allow_url_fopen = Off?" /etc/php.ini
822
# Configuring & securing Lighttpd
819
# Configuring & securing Lighttpd
823
        rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
820
        rm -rf /var/www/cgi-bin/* /var/www/perl/* /var/www/icons/README* /var/www/error/README*
824
        [ -e /etc/lighttpd/lighttpd.conf.default ] || cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.default
821
        [ -e /etc/lighttpd/lighttpd.conf.default ] || cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.default
825
        $SED "s?^server\.use-ipv6.*?server\.use-ipv6 = \"disable\"?g" /etc/lighttpd/lighttpd.conf
822
        $SED "s?^server\.use-ipv6.*?server\.use-ipv6 = \"disable\"?g" /etc/lighttpd/lighttpd.conf
826
        $SED "s?^#server\.bind.*?server\.bind = \"$HOSTNAME.$DOMAIN\"?g" /etc/lighttpd/lighttpd.conf
823
        $SED "s?^#server\.bind.*?server\.bind = \"$PRIVATE_IP\"?g" /etc/lighttpd/lighttpd.conf
827
        $SED "s?^server\.bind.*?server\.bind = \"$HOSTNAME.$DOMAIN\"?g" /etc/lighttpd/lighttpd.conf
824
        $SED "s?^server\.bind.*?server\.bind = \"$PRIVATE_IP\"?g" /etc/lighttpd/lighttpd.conf
828
        $SED "s?^#server\.tag.*?server\.tag = \"\"?g" /etc/lighttpd/lighttpd.conf
825
        $SED "s?^#server\.tag.*?server\.tag = \"\"?g" /etc/lighttpd/lighttpd.conf
829
        echo "include \"vhosts.d/alcasar.conf\"" >> /etc/lighttpd/lighttpd.conf
826
        echo "include \"vhosts.d/alcasar.conf\"" >> /etc/lighttpd/lighttpd.conf
830
 
827
 
831
        [ -e /etc/lighttpd/modules.conf.default ] || cp /etc/lighttpd/modules.conf /etc/lighttpd/modules.conf.default
828
        [ -e /etc/lighttpd/modules.conf.default ] || cp /etc/lighttpd/modules.conf /etc/lighttpd/modules.conf.default
832
        $SED "s?^#[ ]*\"mod_auth\",.*? \"mod_auth\",?g" /etc/lighttpd/modules.conf
829
        $SED "s?^#[ ]*\"mod_auth\",.*? \"mod_auth\",?g" /etc/lighttpd/modules.conf
833
        $SED "s?^#[ ]*\"mod_alias\",.*? \"mod_alias\",?g" /etc/lighttpd/modules.conf
830
        $SED "s?^#[ ]*\"mod_alias\",.*? \"mod_alias\",?g" /etc/lighttpd/modules.conf
834
        $SED "s?^#[ ]*\"mod_redirect\",.*? \"mod_redirect\",?g" /etc/lighttpd/modules.conf
831
        $SED "s?^#[ ]*\"mod_redirect\",.*? \"mod_redirect\",?g" /etc/lighttpd/modules.conf
835
        $SED "s?^#include \"conf.d/fastcgi.conf\".*?include \"conf.d/fastcgi.conf\"?g" /etc/lighttpd/modules.conf
832
        $SED "s?^#include \"conf.d/fastcgi.conf\".*?include \"conf.d/fastcgi.conf\"?g" /etc/lighttpd/modules.conf
836
 
833
 
837
        [ -e /etc/lighttpd/conf.d/fastcgi.conf.default ] || cp /etc/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf.default
834
        [ -e /etc/lighttpd/conf.d/fastcgi.conf.default ] || cp /etc/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf.default
838
 
835
 
839
        [ -e /etc/php-fpm.conf.default ] || cp /etc/php-fpm.conf /etc/php-fpm.conf.default
836
        [ -e /etc/php-fpm.conf.default ] || cp /etc/php-fpm.conf /etc/php-fpm.conf.default
840
        $SED "s?^;listen\.owner.*?listen\.owner = apache?g" /etc/php-fpm.conf
837
        $SED "s?^;listen\.owner.*?listen\.owner = apache?g" /etc/php-fpm.conf
841
        $SED "s?^;listen\.group.*?listen\.group = apache?g" /etc/php-fpm.conf
838
        $SED "s?^;listen\.group.*?listen\.group = apache?g" /etc/php-fpm.conf
842
        $SED "s?^;listen\.mode.*?listen\.mode = 0660?g" /etc/php-fpm.conf
839
        $SED "s?^;listen\.mode.*?listen\.mode = 0660?g" /etc/php-fpm.conf
843
 
840
 
844
        cp $DIR_CONF/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf
841
        cp $DIR_CONF/lighttpd/conf.d/fastcgi.conf /etc/lighttpd/conf.d/fastcgi.conf
845
 
842
 
846
        [ -d /etc/lighttpd/vhosts.d ] || mkdir /etc/lighttpd/vhosts.d
843
        [ -d /etc/lighttpd/vhosts.d ] || mkdir /etc/lighttpd/vhosts.d
847
        cp $DIR_CONF/lighttpd/vhosts.d/* /etc/lighttpd/vhosts.d/
844
        cp $DIR_CONF/lighttpd/vhosts.d/* /etc/lighttpd/vhosts.d/
848
        $SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$HOSTNAME.$DOMAIN"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
845
        $SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$PRIVATE_IP"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
849
        $SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$HOSTNAME.$DOMAIN"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
846
        $SED 's/^$SERVER\["socket"\] == ".*:443.*/$SERVER\["socket"\] == "'"$PRIVATE_IP"':443" {/g' /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
850
        $SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$HOSTNAME.$DOMAIN\"/g" /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
847
        $SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$PRIVATE_IP\"/g" /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf
851
        $SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$HOSTNAME.$DOMAIN\"/g" /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
848
        $SED "s/^\([\t ]*\)var.server_name.*/\1var.server_name = \"$PRIVATE_IP\"/g" /etc/lighttpd/vhosts.d/alcasar-without-ssl.conf
852
        ln -s /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf /etc/lighttpd/vhosts.d/alcasar.conf
849
        ln -s /etc/lighttpd/vhosts.d/alcasar-with-ssl.conf /etc/lighttpd/vhosts.d/alcasar.conf
853
 
850
 
854
        [ -d /var/log/lighttpd ] || mkdir /var/log/lighttpd
851
        [ -d /var/log/lighttpd ] || mkdir /var/log/lighttpd
855
        [ -e /var/log/lighttpd/access.log ] || touch /var/log/lighttpd/access.log
852
        [ -e /var/log/lighttpd/access.log ] || touch /var/log/lighttpd/access.log
856
        [ -e /var/log/lighttpd/error.log ] || touch /var/log/lighttpd/error.log
853
        [ -e /var/log/lighttpd/error.log ] || touch /var/log/lighttpd/error.log
-
 
854
 
857
        chown -R apache:apache /var/log/lighttpd
855
        chown -R apache:apache /var/log/lighttpd
858
        /usr/bin/systemctl start lighttpd
856
        /usr/bin/systemctl start lighttpd
859
        /usr/bin/systemctl start php-fpm
857
        /usr/bin/systemctl start php-fpm
860
 
858
 
861
# Creation of the first account (in 'admin' profile)
859
# Creation of the first account (in 'admin' profile)
862
        if [ "$mode" = "install" ]
860
        if [ "$mode" = "install" ]
863
                then
861
        then
864
                        header_install
862
                header_install
865
# Creation of keys file for the admin account ("admin")
863
# Creation of keys file for the admin account ("admin")
866
                        [ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
864
                [ -d $DIR_DEST_ETC/digest ] && rm -rf $DIR_DEST_ETC/digest
867
                        mkdir -p $DIR_DEST_ETC/digest
865
                mkdir -p $DIR_DEST_ETC/digest
868
                        chmod 755 $DIR_DEST_ETC/digest
866
                chmod 755 $DIR_DEST_ETC/digest
869
                        until [ -s $DIR_DEST_ETC/digest/key_admin ]
867
                until [ -s $DIR_DEST_ETC/digest/key_admin ]
870
                        do
868
                do
871
                                $DIR_DEST_BIN/alcasar-profil.sh --add admin
869
                        $DIR_DEST_BIN/alcasar-profil.sh --add admin
872
                        done
870
                done
873
        fi
871
        fi
874
 
872
 
875
        # Run after coova (in order to wait tun0 to be up)
873
        # Run after coova (in order to wait tun0 to be up)
876
        $SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/lighttpd.service
874
        $SED "s?^After=.*?After=network.target remote-fs.target nss-lookup.target chilli.service?g" /lib/systemd/system/lighttpd.service
877
        # Log file for ACC access imputability
875
        # Log file for ACC access imputability
878
        [ -e /var/Save/security/acc_access.log ] || touch /var/Save/security/acc_access.log
876
        [ -e /var/Save/security/acc_access.log ] || touch /var/Save/security/acc_access.log
879
        chown root:apache /var/Save/security/acc_access.log
877
        chown root:apache /var/Save/security/acc_access.log
880
        chmod 664 /var/Save/security/acc_access.log
878
        chmod 664 /var/Save/security/acc_access.log
881
} # End of ACC ()
879
} # End of ACC ()
882
 
880
 
883
##################################################################
881
##################################################################
884
##                               Fonction "CA"                  ##
882
##                               Fonction "CA"                  ##
885
## - Creating the CA and the server certificate (lighttpd)      ##
883
## - Creating the CA and the server certificate (lighttpd)      ##
886
##################################################################
884
##################################################################
887
CA ()
885
CA ()
888
{
886
{
889
        $DIR_DEST_BIN/alcasar-CA.sh
887
        $DIR_DEST_BIN/alcasar-CA.sh
890
        chown -R root:apache /etc/pki
888
        chown -R root:apache /etc/pki
891
        chmod -R 750 /etc/pki
889
        chmod -R 750 /etc/pki
892
} # End of CA ()
890
} # End of CA ()
893
 
891
 
894
#############################################################
892
#############################################################
895
##               Function "time_server"                    ##
893
##               Function "time_server"                    ##
896
## - Configuring NTP server                                ##
894
## - Configuring NTP server                                ##
897
#############################################################
895
#############################################################
898
time_server ()
896
time_server ()
899
{
897
{
900
# Set the Internet time server
898
# Set the Internet time server
901
        [ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
899
        [ -e /etc/ntp/step-tickers.default ] || cp /etc/ntp/step-tickers /etc/ntp/step-tickers.default
902
        cat <<EOF > /etc/ntp/step-tickers
900
        cat <<EOF > /etc/ntp/step-tickers
903
0.fr.pool.ntp.org       # adapt to your country
901
0.fr.pool.ntp.org       # adapt to your country
904
1.fr.pool.ntp.org
902
1.fr.pool.ntp.org
905
2.fr.pool.ntp.org
903
2.fr.pool.ntp.org
906
EOF
904
EOF
907
        [ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
905
        [ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
908
        cat <<EOF > /etc/ntp.conf
906
        cat <<EOF > /etc/ntp.conf
909
server 0.fr.pool.ntp.org        # adapt to your country
907
server 0.fr.pool.ntp.org        # adapt to your country
910
server 1.fr.pool.ntp.org
908
server 1.fr.pool.ntp.org
911
server 2.fr.pool.ntp.org
909
server 2.fr.pool.ntp.org
912
server 127.127.1.0              # local clock si NTP internet indisponible ...
910
server 127.127.1.0              # local clock si NTP internet indisponible ...
913
fudge 127.127.1.0 stratum 10
911
fudge 127.127.1.0 stratum 10
914
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
912
restrict $PRIVATE_NETWORK mask $PRIVATE_NETMASK nomodify notrap
915
restrict 127.0.0.1
913
restrict 127.0.0.1
916
driftfile /var/lib/ntp/drift
914
driftfile /var/lib/ntp/drift
917
logfile /var/log/ntp.log
915
logfile /var/log/ntp.log
918
disable monitor
916
disable monitor
919
EOF
917
EOF
920
        chown -R ntp:ntp /var/lib/ntp
918
        chown -R ntp:ntp /var/lib/ntp
921
# Synchronize now
919
# Synchronize now
922
        ntpd -q -g &
920
        ntpd -4 -q -g &
923
} # End of time_server ()
921
} # End of time_server ()
924
 
922
 
925
#####################################################################
923
#####################################################################
926
##                     Function "init_db"                          ##
924
##                     Function "init_db"                          ##
927
## - Mysql initialization                                          ##
925
## - Mysql initialization                                          ##
928
## - Set admin (root) password                                     ##
926
## - Set admin (root) password                                     ##
929
## - Remove unused users & databases                               ##
927
## - Remove unused users & databases                               ##
930
## - Radius database creation                                      ##
928
## - Radius database creation                                      ##
931
## - Copy of accounting tables (mtotacct, totacct) & userinfo      ##
929
## - Copy of accounting tables (mtotacct, totacct) & userinfo      ##
932
#####################################################################
930
#####################################################################
933
init_db ()
931
init_db ()
934
{
932
{
935
        if [ `systemctl is-active mysqld` == "active" ]
933
        if [ "`systemctl is-active mysqld`" == "active" ]
936
        then
934
        then
937
                systemctl stop mysqld
935
                systemctl stop mysqld
938
        fi
936
        fi
939
        rm -rf /var/lib/mysql # to be sure that there is no former installation
937
        rm -rf /var/lib/mysql # to be sure that there is no former installation
940
        [ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
938
        [ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
941
        $SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
939
        $SED "s?^tmpdir.*?tmpdir=/tmp?g" /etc/my.cnf
942
        $SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
940
        $SED "s?^port.*?#&?g" /etc/my.cnf # we use unix socket only
943
        $SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf
941
        $SED "s?^;collation_server =.*?collation_server = utf8_unicode_ci?g" /etc/my.cnf
944
        $SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf  # accentuated user names are allowed
942
        $SED "s?^;character_set_server =.*?character_set_server = utf8?g" /etc/my.cnf  # accentuated user names are allowed
945
        [ -e /etc/my.cnf.d/feedback.cnf ] && $SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/feedback.cnf # remove the feedback plugin (ALCASAR doesn't report anything !)
943
        [ -e /etc/my.cnf.d/feedback.cnf ] && $SED "s?^plugin-load.*?#&?g" /etc/my.cnf.d/feedback.cnf # remove the feedback plugin (ALCASAR doesn't report anything !)
946
        /usr/sbin/mysqld-prepare-db-dir > /dev/null 2>&1
944
        /usr/sbin/mysqld-prepare-db-dir > /dev/null 2>&1
947
        /usr/bin/systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
945
        /usr/bin/systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
948
        /usr/bin/systemctl start mysqld
946
        /usr/bin/systemctl start mysqld
949
        nb_round=1
947
        nb_round=1
950
        while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
948
        while [ ! -S /var/lib/mysql/mysql.sock ] && [ $nb_round -lt 10 ] # we wait until mariadb is on
951
        do
949
        do
952
                nb_round=`expr $nb_round + 1`
950
                nb_round=`expr $nb_round + 1`
953
                sleep 2
951
                sleep 2
954
        done
952
        done
955
        if [ ! -S /var/lib/mysql/mysql.sock ]
953
        if [ ! -S /var/lib/mysql/mysql.sock ]
956
        then
954
        then
957
                echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
955
                echo "Problème : la base données 'MariaDB' ne s'est pas lancée !"
958
                exit
956
                exit
959
        fi
957
        fi
960
        MYSQL="/usr/bin/mysql --execute"
-
 
961
# Secure the server
958
# Secure the server
962
        $MYSQL="GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '$mysqlpwd';"
959
        /usr/bin/mysql --execute "GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY '$mysqlpwd';"
-
 
960
 
963
        MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --execute"
961
        MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --execute"
964
        $MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
962
        $MYSQL "DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;"
965
        $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;"
963
        $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;"
966
# Create 'radius' database
964
# Create 'radius' database
967
        $MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
965
        $MYSQL "CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES;"
968
# Add an empty radius database structure
966
# Add an empty radius database structure
969
        mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
967
        /usr/bin/mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIR_CONF/empty-radiusd-db.sql
970
# modify the start script in order to close accounting connexion when the system is comming down or up
968
# modify the start script in order to close accounting connexion when the system is comming down or up
971
        [ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
969
        [ -e /lib/systemd/system/mysqld.service.default ] || cp /lib/systemd/system/mysqld.service /lib/systemd/system/mysqld.service.default
972
        $SED "/^ExecStart=/a ExecStop=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
970
        $SED "/^ExecStart=/a ExecStop=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /usr/lib/systemd/system/mysqld.service
973
        $SED "/^ExecStop=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
971
        $SED "/^ExecStop=/a ExecStartPost=$DIR_DEST_BIN/alcasar-mysql.sh -acct_stop" /lib/systemd/system/mysqld.service
974
        /usr/bin/systemctl unset-environment MYSQLD_OPTS
972
        /usr/bin/systemctl unset-environment MYSQLD_OPTS
975
        /usr/bin/systemctl daemon-reload
973
        /usr/bin/systemctl daemon-reload
976
} # End of init_db ()
974
} # End of init_db ()
977
 
975
 
978
###################################################################
976
###################################################################
979
##                       Function "freeradius"                   ##
977
##                       Function "freeradius"                   ##
980
## - Set the configuration files                                 ##
978
## - Set the configuration files                                 ##
981
## - Set the shared secret between coova-chilli and freeradius   ##
979
## - Set the shared secret between coova-chilli and freeradius   ##
982
## - Adapt the Mysql conf file and counters                      ##
980
## - Adapt the Mysql conf file and counters                      ##
983
###################################################################
981
###################################################################
984
freeradius ()
982
freeradius ()
985
{
983
{
986
        cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
984
        cp -f $DIR_CONF/empty-radiusd-db.sql /etc/raddb/
987
        chown -R radius:radius /etc/raddb
985
        chown -R radius:radius /etc/raddb
988
        [ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
986
        [ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
989
# Set radius global parameters (radius.conf)
987
# Set radius global parameters (radius.conf)
990
        $SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
988
        $SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
991
        $SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
989
        $SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
992
        $SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
990
        $SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
993
        $SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf # remove the proxy function
991
        $SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf # remove the proxy function
994
        $SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf # remove the proxy function
992
        $SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf # remove the proxy function
995
 
993
 
996
# Add ALCASAR dictionary
994
# Add ALCASAR dictionary
997
        cp $DIR_CONF/radius/dictionary.alcasar /usr/share/freeradius/dictionary.alcasar
995
        cp $DIR_CONF/radius/dictionary.alcasar /usr/share/freeradius/dictionary.alcasar
998
        echo -e '\n$INCLUDE dictionary.alcasar' >> /usr/share/freeradius/dictionary
996
        echo -e '\n$INCLUDE dictionary.alcasar' >> /usr/share/freeradius/dictionary
999
# Add CoovaChilli dictionary
997
# Add CoovaChilli dictionary
1000
        cp /usr/share/doc/coova-chilli/dictionary.coovachilli /usr/share/freeradius/dictionary.coovachilli
998
        cp /usr/share/doc/coova-chilli/dictionary.coovachilli /usr/share/freeradius/dictionary.coovachilli
1001
        echo -e '\n$INCLUDE dictionary.coovachilli' >> /usr/share/freeradius/dictionary
999
        echo -e '\n$INCLUDE dictionary.coovachilli' >> /usr/share/freeradius/dictionary
1002
# Set "client.conf" to describe radius clients (coova on 127.0.0.1)
1000
# Set "client.conf" to describe radius clients (coova on 127.0.0.1)
1003
        [ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1001
        [ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
1004
        cat << EOF > /etc/raddb/clients.conf
1002
        cat << EOF > /etc/raddb/clients.conf
1005
client localhost {
1003
client localhost {
1006
        ipaddr = 127.0.0.1
1004
        ipaddr = 127.0.0.1
1007
        secret = $secretradius
1005
        secret = $secretradius
1008
        shortname = chilli
1006
        shortname = chilli
1009
        nas_type = other
1007
        nas_type = other
1010
}
1008
}
1011
EOF
1009
EOF
1012
# Set Virtual server (remvove all except "alcasar virtual site")
1010
# Set Virtual server (remvove all except "alcasar virtual site")
1013
        rm -f /etc/raddb/sites-enabled/*
1011
        rm -f /etc/raddb/sites-enabled/*
1014
        cp $DIR_CONF/radius/alcasar /etc/raddb/sites-available/alcasar
1012
        cp $DIR_CONF/radius/alcasar /etc/raddb/sites-available/alcasar
1015
        cp $DIR_CONF/radius/alcasar-with-ldap /etc/raddb/sites-available/alcasar-with-ldap
1013
        cp $DIR_CONF/radius/alcasar-with-ldap /etc/raddb/sites-available/alcasar-with-ldap
1016
        chown radius:apache /etc/raddb/sites-available/alcasar*
1014
        chown radius:apache /etc/raddb/sites-available/alcasar*
1017
        chmod 660 /etc/raddb/sites-available/alcasar*
1015
        chmod 660 /etc/raddb/sites-available/alcasar*
1018
        ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1016
        ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
1019
# INFO : To connect from outside (EAP), add the EAP virtual server (link in sites-enabled) and inner-tunnel modules (link in mods-enabled)
1017
# INFO : To connect from outside (EAP), add the EAP virtual server (link in sites-enabled) and inner-tunnel modules (link in mods-enabled)
1020
 
1018
 
1021
# Set modules
1019
# Set modules
1022
# Add custom LDAP "available module"
1020
# Add custom LDAP "available module"
1023
        cp -f $DIR_CONF/radius/ldap-alcasar /etc/raddb/mods-available/
1021
        cp -f $DIR_CONF/radius/ldap-alcasar /etc/raddb/mods-available/
1024
        chown -R radius:radius /etc/raddb/mods-available/ldap-alcasar
1022
        chown -R radius:radius /etc/raddb/mods-available/ldap-alcasar
1025
# Set only usefull modules for ALCASAR (ldap is enabled only via ACC)
1023
# Set only usefull modules for ALCASAR (ldap is enabled only via ACC)
1026
        rm -rf  /etc/raddb/mods-enabled/*
1024
        rm -rf  /etc/raddb/mods-enabled/*
1027
        for mods in sql sqlcounter attr_filter expiration logintime pap expr always
1025
        for mods in sql sqlcounter attr_filter expiration logintime pap expr always
1028
        do
1026
        do
1029
                ln -s /etc/raddb/mods-available/$mods /etc/raddb/mods-enabled/$mods
1027
                ln -s /etc/raddb/mods-available/$mods /etc/raddb/mods-enabled/$mods
1030
        done
1028
        done
1031
# Configure SQL mod
1029
# Configure SQL mod
1032
        [ -e /etc/raddb/mods-available/sql.default ] || cp /etc/raddb/mods-available/sql /etc/raddb/mods-available/sql.default
1030
        [ -e /etc/raddb/mods-available/sql.default ] || cp /etc/raddb/mods-available/sql /etc/raddb/mods-available/sql.default
1033
        $SED "s?^[\t ]*driver =.*?driver = \"rlm_sql_mysql\"?g" /etc/raddb/mods-available/sql
1031
        $SED "s?^[\t ]*driver =.*?driver = \"rlm_sql_mysql\"?g" /etc/raddb/mods-available/sql
1034
        $SED "s?^[\t ]*dialect =.*?dialect = \"mysql\"?g" /etc/raddb/mods-available/sql
1032
        $SED "s?^[\t ]*dialect =.*?dialect = \"mysql\"?g" /etc/raddb/mods-available/sql
1035
        $SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/mods-available/sql
1033
        $SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/mods-available/sql
1036
        $SED "s?^#[\t ]*server =.*?server = \"localhost\"?g" /etc/raddb/mods-available/sql
1034
        $SED "s?^#[\t ]*server =.*?server = \"localhost\"?g" /etc/raddb/mods-available/sql
1037
        $SED "s?^#[\t ]*port =.*?port = \"3306\"?g" /etc/raddb/mods-available/sql
1035
        $SED "s?^#[\t ]*port =.*?port = \"3306\"?g" /etc/raddb/mods-available/sql
1038
        $SED "s?^#[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/mods-available/sql
1036
        $SED "s?^#[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/mods-available/sql
1039
        $SED "s?^#[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/mods-available/sql
1037
        $SED "s?^#[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/mods-available/sql
1040
# queries.conf modifications : case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.
1038
# queries.conf modifications : case sensitive for username, check simultaneous use, patch on 'postauth' table, etc.
1041
        [ -e /etc/raddb/mods-config/sql/main/mysql/queries.conf.default ] || cp /etc/raddb/mods-config/sql/main/mysql/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf.default
1039
        [ -e /etc/raddb/mods-config/sql/main/mysql/queries.conf.default ] || cp /etc/raddb/mods-config/sql/main/mysql/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf.default
1042
        cp -f $DIR_CONF/radius/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf
1040
        cp -f $DIR_CONF/radius/queries.conf /etc/raddb/mods-config/sql/main/mysql/queries.conf
1043
        chown -R radius:radius /etc/raddb/mods-config/sql/main/mysql/queries.conf
1041
        chown -R radius:radius /etc/raddb/mods-config/sql/main/mysql/queries.conf
1044
# sqlcounter modifications
1042
# sqlcounter modifications
1045
        [ -e /etc/raddb/mods-available/sqlcounter.default ] || cp /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-available/sqlcounter.default
1043
        [ -e /etc/raddb/mods-available/sqlcounter.default ] || cp /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-available/sqlcounter.default
1046
        cp -f $DIR_CONF/radius/sqlcounter /etc/raddb/mods-available/sqlcounter
1044
        cp -f $DIR_CONF/radius/sqlcounter /etc/raddb/mods-available/sqlcounter
1047
        chown -R radius:radius /etc/raddb/mods-available/sqlcounter
1045
        chown -R radius:radius /etc/raddb/mods-available/sqlcounter
1048
# make certain that mysql is up before freeradius start
1046
# make certain that mysql is up before freeradius start
1049
        [ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
1047
        [ -e /lib/systemd/system/radiusd.service.default ] || cp /lib/systemd/system/radiusd.service /lib/systemd/system/radiusd.service.default
1050
        $SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1048
        $SED "s?^After=.*?After=syslog.target network.target mysqld.service?g" /lib/systemd/system/radiusd.service
1051
        /usr/bin/systemctl daemon-reload
1049
        /usr/bin/systemctl daemon-reload
1052
# Allow apache to change some conf files (ie : ldap on/off)
1050
# Allow apache to change some conf files (ie : ldap on/off)
1053
        chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1051
        chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/mods-available
1054
 
-
 
1055
} # End freeradius ()
1052
} # End freeradius ()
1056
 
1053
 
1057
#############################################################################
1054
#############################################################################
1058
##                           Function "chilli"                             ##
1055
##                           Function "chilli"                             ##
1059
## - Creation of the conf file and init file (systemd) for coova-chilli    ##
1056
## - Creation of the conf file and init file (systemd) for coova-chilli    ##
1060
## - Adapt the authentication web page (intercept.php)                     ##
1057
## - Adapt the authentication web page (intercept.php)                     ##
1061
#############################################################################
1058
#############################################################################
1062
chilli ()
1059
chilli ()
1063
{
1060
{
1064
# chilli unit for systemd
1061
# chilli unit for systemd
1065
        cat << EOF > /lib/systemd/system/chilli.service
1062
        cat << EOF > /lib/systemd/system/chilli.service
1066
#  This file is part of systemd.
1063
#  This file is part of systemd.
1067
#
1064
#
1068
#  systemd is free software; you can redistribute it and/or modify it
1065
#  systemd is free software; you can redistribute it and/or modify it
1069
#  under the terms of the GNU General Public License as published by
1066
#  under the terms of the GNU General Public License as published by
1070
#  the Free Software Foundation; either version 2 of the License, or
1067
#  the Free Software Foundation; either version 2 of the License, or
1071
#  (at your option) any later version.
1068
#  (at your option) any later version.
1072
[Unit]
1069
[Unit]
1073
Description=chilli is a captive portal daemon
1070
Description=chilli is a captive portal daemon
1074
After=network.target
1071
After=network.target
1075
 
1072
 
1076
[Service]
1073
[Service]
1077
Type=forking
1074
Type=forking
1078
ExecStart=/usr/libexec/chilli start
1075
ExecStart=/usr/libexec/chilli start
1079
ExecStop=/usr/libexec/chilli stop
1076
ExecStop=/usr/libexec/chilli stop
1080
ExecReload=/usr/libexec/chilli reload
1077
ExecReload=/usr/libexec/chilli reload
1081
PIDFile=/var/run/chilli.pid
1078
PIDFile=/var/run/chilli.pid
1082
 
1079
 
1083
[Install]
1080
[Install]
1084
WantedBy=multi-user.target
1081
WantedBy=multi-user.target
1085
EOF
1082
EOF
1086
# init file creation
1083
# init file creation
1087
        [ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1084
        [ -e /etc/init.d/chilli.default ] || mv /etc/init.d/chilli /etc/init.d/chilli.default
1088
        cat <<EOF > /etc/init.d/chilli
1085
        cat <<EOF > /etc/init.d/chilli
1089
#!/bin/sh
1086
#!/bin/sh
1090
#
1087
#
1091
# chilli CoovaChilli init
1088
# chilli CoovaChilli init
1092
#
1089
#
1093
# chkconfig: 2345 65 35
1090
# chkconfig: 2345 65 35
1094
# description: CoovaChilli
1091
# description: CoovaChilli
1095
### BEGIN INIT INFO
1092
### BEGIN INIT INFO
1096
# Provides:       chilli
1093
# Provides:       chilli
1097
# Required-Start: network
1094
# Required-Start: network
1098
# Should-Start:
1095
# Should-Start:
1099
# Required-Stop:  network
1096
# Required-Stop:  network
1100
# Should-Stop:
1097
# Should-Stop:
1101
# Default-Start:  2 3 5
1098
# Default-Start:  2 3 5
1102
# Default-Stop:
1099
# Default-Stop:
1103
# Description:    CoovaChilli access controller
1100
# Description:    CoovaChilli access controller
1104
### END INIT INFO
1101
### END INIT INFO
1105
 
1102
 
1106
[ -f /usr/sbin/chilli ] || exit 0
1103
[ -f /usr/sbin/chilli ] || exit 0
1107
. /etc/init.d/functions
1104
. /etc/init.d/functions
1108
CONFIG=/etc/chilli.conf
1105
CONFIG=/etc/chilli.conf
1109
pidfile=/var/run/chilli.pid
1106
pidfile=/var/run/chilli.pid
1110
[ -f \$CONFIG ] || {
1107
[ -f \$CONFIG ] || {
1111
        echo "\$CONFIG Not found"
1108
        echo "\$CONFIG Not found"
1112
        exit 0
1109
        exit 0
1113
}
1110
}
1114
current_users_file="/var/tmp/havp/current_users.txt"    # file containing active users
1111
current_users_file="/var/tmp/havp/current_users.txt"    # file containing active users
1115
RETVAL=0
1112
RETVAL=0
1116
prog="chilli"
1113
prog="chilli"
1117
case \$1 in
1114
case \$1 in
1118
        start)
1115
        start)
1119
                if [ -f \$pidfile ] ; then
1116
                if [ -f \$pidfile ] ; then
1120
                        gprintf "chilli is already running"
1117
                        gprintf "chilli is already running"
1121
                else
1118
                else
1122
                        gprintf "Starting \$prog: "
1119
                        gprintf "Starting \$prog: "
1123
                        echo '' > \$current_users_file && chown apache:apache \$current_users_file
1120
                        echo '' > \$current_users_file && chown apache:apache \$current_users_file
1124
                        rm -f /var/run/chilli* # cleaning
1121
                        rm -f /var/run/chilli* # cleaning
1125
                        /usr/sbin/modprobe tun >/dev/null 2>&1
1122
                        /usr/sbin/modprobe tun >/dev/null 2>&1
1126
                        echo 1 > /proc/sys/net/ipv4/ip_forward
1123
                        echo 1 > /proc/sys/net/ipv4/ip_forward
1127
                        [ -e /dev/net/tun ] || {
1124
                        [ -e /dev/net/tun ] || {
1128
                                (cd /dev;
1125
                                (cd /dev;
1129
                                mkdir net;
1126
                                mkdir net;
1130
                                cd net;
1127
                                cd net;
1131
                                mknod tun c 10 200)
1128
                                mknod tun c 10 200)
1132
                        }
1129
                        }
1133
                        ifconfig $INTIF 0.0.0.0
1130
                        ifconfig $INTIF 0.0.0.0
1134
                        /usr/sbin/ethtool -K $INTIF gro off
1131
                        /usr/sbin/ethtool -K $INTIF gro off
1135
                        daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1132
                        daemon /usr/sbin/chilli -c \$CONFIG --pidfile=\$pidfile &
1136
                        RETVAL=\$?
1133
                        RETVAL=\$?
1137
                fi
1134
                fi
1138
                ;;
1135
                ;;
1139
 
1136
 
1140
        reload)
1137
        reload)
1141
                killall -HUP chilli
1138
                killall -HUP chilli
1142
                ;;
1139
                ;;
1143
 
1140
 
1144
        restart)
1141
        restart)
1145
                \$0 stop
1142
                \$0 stop
1146
                sleep 2
1143
                sleep 2
1147
                \$0 start
1144
                \$0 start
1148
                ;;
1145
                ;;
1149
 
1146
 
1150
        status)
1147
        status)
1151
                status chilli
1148
                status chilli
1152
                RETVAL=0
1149
                RETVAL=0
1153
                ;;
1150
                ;;
1154
 
1151
 
1155
        stop)
1152
        stop)
1156
                if [ -f \$pidfile ] ; then
1153
                if [ -f \$pidfile ] ; then
1157
                        gprintf "Shutting down \$prog: "
1154
                        gprintf "Shutting down \$prog: "
1158
                        killproc /usr/sbin/chilli
1155
                        killproc /usr/sbin/chilli
1159
                        RETVAL=\$?
1156
                        RETVAL=\$?
1160
                        [ \$RETVAL = 0 ] && rm -f \$pidfile
1157
                        [ \$RETVAL = 0 ] && rm -f \$pidfile
1161
                        [ -e \$current_users_file ] && rm -f \$current_users_file
1158
                        [ -e \$current_users_file ] && rm -f \$current_users_file
1162
                else
1159
                else
1163
                        gprintf "chilli is not running"
1160
                        gprintf "chilli is not running"
1164
                fi
1161
                fi
1165
                ;;
1162
                ;;
1166
 
1163
 
1167
        *)
1164
        *)
1168
                echo "Usage: \$0 {start|stop|restart|reload|status}"
1165
                echo "Usage: \$0 {start|stop|restart|reload|status}"
1169
                exit 1
1166
                exit 1
1170
esac
1167
esac
1171
echo
1168
echo
1172
EOF
1169
EOF
1173
        chmod a+x /etc/init.d/chilli
1170
        chmod a+x /etc/init.d/chilli
1174
        ln -s /etc/init.d/chilli /usr/libexec/chilli
1171
        ln -s /etc/init.d/chilli /usr/libexec/chilli
1175
# conf file creation
1172
# conf file creation
1176
        [ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1173
        [ -e /etc/chilli.conf.default ] || cp /etc/chilli.conf /etc/chilli.conf.default
1177
        #NTP Option configuration for DHCP
1174
        #NTP Option configuration for DHCP
1178
        #DHCP Options : rfc2132
1175
        #DHCP Options : rfc2132
1179
                #dhcp option value will be convert in hexa.
1176
                #dhcp option value will be convert in hexa.
1180
                #NTP option (or 'option 42') is like :
1177
                #NTP option (or 'option 42') is like :
1181
                #
1178
                #
1182
                #    Code   Len         Address 1               Address 2
1179
                #    Code   Len         Address 1               Address 2
1183
                #   +-----+-----+-----+-----+-----+-----+-----+-----+--
1180
                #   +-----+-----+-----+-----+-----+-----+-----+-----+--
1184
                #   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1181
                #   |  42 |  n  |  a1 |  a2 |  a3 |  a4 |  a1 |  a2 |  ...
1185
                #   +-----+-----+-----+-----+-----+-----+-----+-----+--
1182
                #   +-----+-----+-----+-----+-----+-----+-----+-----+--
1186
                #
1183
                #
1187
                #Code : 42 => 2a
1184
                #Code : 42 => 2a
1188
                #Len : 4 => 04
1185
                #Len : 4 => 04
1189
        PRIVATE_IP_HEXA=$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f1))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f2))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f3))$(printf "%02x\n" $(echo $PRIVATE_IP | cut -d'.' -f4))
1186
        PRIVATE_IP_HEXA=$(printf "%02x\n" "$(echo $PRIVATE_IP | cut -d'.' -f1)")$(printf "%02x\n" "$(echo $PRIVATE_IP | cut -d'.' -f2)")$(printf "%02x\n" "$(echo $PRIVATE_IP | cut -d'.' -f3)")$(printf "%02x\n" "$(echo $PRIVATE_IP | cut -d'.' -f4)")
1190
        cat <<EOF > /etc/chilli.conf
1187
        cat <<EOF > /etc/chilli.conf
1191
# coova config for ALCASAR
1188
# coova config for ALCASAR
1192
cmdsocket       /var/run/chilli.sock
1189
cmdsocket       /var/run/chilli.sock
1193
unixipc         chilli.$INTIF.ipc
1190
unixipc         chilli.$INTIF.ipc
1194
pidfile         /var/run/chilli.pid
1191
pidfile         /var/run/chilli.pid
1195
net             $PRIVATE_NETWORK_MASK
1192
net             $PRIVATE_NETWORK_MASK
1196
dhcpif          $INTIF
1193
dhcpif          $INTIF
1197
ethers          $DIR_DEST_ETC/alcasar-ethers
1194
ethers          $DIR_DEST_ETC/alcasar-ethers
1198
#nodynip
1195
#nodynip
1199
#statip
1196
#statip
1200
dynip           $PRIVATE_NETWORK_MASK
1197
dynip           $PRIVATE_NETWORK_MASK
1201
domain          $DOMAIN
1198
domain          $DOMAIN
1202
dns1            $PRIVATE_IP
1199
dns1            $PRIVATE_IP
1203
dns2            $PRIVATE_IP
1200
dns2            $PRIVATE_IP
1204
uamlisten       $PRIVATE_IP
1201
uamlisten       $PRIVATE_IP
1205
uamport         3990
1202
uamport         3990
1206
uamuiport       3991
1203
uamuiport       3991
1207
macauth
1204
macauth
1208
macpasswd       password
1205
macpasswd       password
1209
strictmacauth
1206
strictmacauth
1210
locationname    $HOSTNAME.$DOMAIN
1207
locationname    $HOSTNAME.$DOMAIN
1211
radiusserver1   127.0.0.1
1208
radiusserver1   127.0.0.1
1212
radiusserver2   127.0.0.1
1209
radiusserver2   127.0.0.1
1213
radiussecret    $secretradius
1210
radiussecret    $secretradius
1214
radiusauthport  1812
1211
radiusauthport  1812
1215
radiusacctport  1813
1212
radiusacctport  1813
1216
uamserver       https://$HOSTNAME.$DOMAIN/intercept.php
1213
uamserver       https://$HOSTNAME.$DOMAIN/intercept.php
1217
redirurl
1214
redirurl
1218
radiusnasid     $HOSTNAME.$DOMAIN
1215
radiusnasid     $HOSTNAME.$DOMAIN
1219
uamsecret       $secretuam
1216
uamsecret       $secretuam
1220
uamallowed      $HOSTNAME,$HOSTNAME.$DOMAIN
1217
uamallowed      $HOSTNAME,$HOSTNAME.$DOMAIN
1221
coaport         3799
1218
coaport         3799
1222
conup           $DIR_DEST_BIN/alcasar-conup.sh
1219
conup           $DIR_DEST_BIN/alcasar-conup.sh
1223
condown         $DIR_DEST_BIN/alcasar-condown.sh
1220
condown         $DIR_DEST_BIN/alcasar-condown.sh
1224
macup           $DIR_DEST_BIN/alcasar-macup.sh
1221
macup           $DIR_DEST_BIN/alcasar-macup.sh
1225
include         $DIR_DEST_ETC/alcasar-uamallowed
1222
include         $DIR_DEST_ETC/alcasar-uamallowed
1226
include         $DIR_DEST_ETC/alcasar-uamdomain
1223
include         $DIR_DEST_ETC/alcasar-uamdomain
1227
dhcpopt         2a04$PRIVATE_IP_HEXA
1224
dhcpopt         2a04$PRIVATE_IP_HEXA
1228
#dhcpgateway            none
1225
#dhcpgateway            none
1229
#dhcprelayagent         none
1226
#dhcprelayagent         none
1230
#dhcpgatewayport        none
1227
#dhcpgatewayport        none
1231
sslkeyfile      /etc/pki/tls/private/alcasar.key
1228
sslkeyfile      /etc/pki/tls/private/alcasar.key
1232
sslcertfile     /etc/pki/tls/certs/alcasar.crt
1229
sslcertfile     /etc/pki/tls/certs/alcasar.crt
1233
redirssl
1230
redirssl
1234
uamuissl
1231
uamuissl
1235
EOF
1232
EOF
1236
# create files for "DHCP static ip" and "DHCP static ip info". Reserve the second IP address for INTIF (the first one is for tun0)
1233
# create files for "DHCP static ip" and "DHCP static ip info". Reserve the second IP address for INTIF (the first one is for tun0)
1237
        echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1234
        echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers
1238
        echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers-info
1235
        echo "$PRIVATE_MAC $PRIVATE_SECOND_IP" > $DIR_DEST_ETC/alcasar-ethers-info
1239
# create files for trusted domains and urls
1236
# create files for trusted domains and urls
1240
        touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1237
        touch $DIR_DEST_ETC/alcasar-uamallowed $DIR_DEST_ETC/alcasar-uamdomain
1241
        chown root:apache $DIR_DEST_ETC/alcasar-*
1238
        chown root:apache $DIR_DEST_ETC/alcasar-*
1242
        chmod 660 $DIR_DEST_ETC/alcasar-*
1239
        chmod 660 $DIR_DEST_ETC/alcasar-*
1243
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1240
# Configuration des fichier WEB d'interception (secret partagé avec coova-chilli)
1244
        $SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1241
        $SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
1245
# user 'chilli' creation (in order to run conup/off and up/down scripts
1242
# user 'chilli' creation (in order to run conup/off and up/down scripts
1246
        chilli_exist=`grep -c ^chilli: /etc/passwd`
1243
        chilli_exist=`grep -c ^chilli: /etc/passwd`
1247
        if [ "$chilli_exist" == "1" ]
1244
        if [ "$chilli_exist" == "1" ]
1248
        then
1245
        then
1249
                userdel -r chilli 2>/dev/null
1246
                userdel -r chilli 2>/dev/null
1250
        fi
1247
        fi
1251
        groupadd -f chilli
1248
        groupadd -f chilli
1252
        useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1249
        useradd -r -g chilli -s /bin/false -c "system user for coova-chilli" chilli
1253
}  # End of chilli ()
1250
}  # End of chilli ()
1254
 
1251
 
1255
################################################################
1252
################################################################
1256
##                   Function "e2guardian"                    ##
1253
##                   Function "e2guardian"                    ##
1257
## - Set the parameters of this HTML proxy (as controler)     ##
1254
## - Set the parameters of this HTML proxy (as controler)     ##
1258
################################################################
1255
################################################################
1259
e2guardian ()
1256
e2guardian ()
1260
{
1257
{
1261
        mkdir -p /var/e2guardian /var/log/e2guardian
1258
        mkdir -p /var/e2guardian /var/log/e2guardian
1262
        chown -R e2guardian /var/e2guardian /var/log/e2guardian
1259
        chown -R e2guardian /var/e2guardian /var/log/e2guardian
1263
        $SED "s?^ExecStart=.*?ExecStart=/usr/sbin/e2guardian -c /etc/e2guardian/e2guardian.conf?g" /lib/systemd/system/e2guardian.service
1260
        $SED "s?^ExecStart=.*?ExecStart=/usr/sbin/e2guardian -c /etc/e2guardian/e2guardian.conf?g" /lib/systemd/system/e2guardian.service
1264
        $SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/e2guardian.service
1261
        $SED "s?^After=.*?After=network.target chilli.service?g" /lib/systemd/system/e2guardian.service
1265
        [ -e $DIR_DG/e2guardian.conf.default ] || cp $DIR_DG/e2guardian.conf $DIR_DG/e2guardian.conf.default
1262
        [ -e $DIR_DG/e2guardian.conf.default ] || cp $DIR_DG/e2guardian.conf $DIR_DG/e2guardian.conf.default
1266
# By default the filter is off
1263
# By default the filter is off
1267
        $SED "s/^reportinglevel =.*/reportinglevel = 3/g" $DIR_DG/e2guardian.conf
1264
        $SED "s/^reportinglevel =.*/reportinglevel = 3/g" $DIR_DG/e2guardian.conf
1268
# French deny HTML page
1265
# French deny HTML page
1269
        $SED "s?^language =.*?language = french?g" $DIR_DG/e2guardian.conf
1266
        $SED "s?^language =.*?language = french?g" $DIR_DG/e2guardian.conf
1270
# Listen only on LAN side
1267
# Listen only on LAN side
1271
        $SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/e2guardian.conf
1268
        $SED "s?^filterip.*?filterip = $PRIVATE_IP?g" $DIR_DG/e2guardian.conf
1272
# DG send its flow to HAVP
1269
# DG send its flow to HAVP
1273
        $SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/e2guardian.conf
1270
        $SED "s?^proxyport.*?proxyport = 8090?g" $DIR_DG/e2guardian.conf
1274
# replace the default deny HTML page
1271
# replace the default deny HTML page
1275
        cp -f $DIR_CONF/template.html /usr/share/e2guardian/languages/ukenglish/
1272
        cp -f $DIR_CONF/template.html /usr/share/e2guardian/languages/ukenglish/
1276
        cp -f $DIR_CONF/template-fr.html /usr/share/e2guardian/languages/french/template.html
1273
        cp -f $DIR_CONF/template-fr.html /usr/share/e2guardian/languages/french/template.html
1277
# Don't log
1274
# Don't log
1278
        $SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/e2guardian.conf
1275
        $SED "s?^loglevel =.*?loglevel = 0?g" $DIR_DG/e2guardian.conf
1279
# # Change the default report page
1276
# # Change the default report page
1280
        $SED "s?^accessdeniedaddress =.*?accessdeniedaddress = http://$HOSTNAME.$DOMAIN?g" $DIR_DG/e2guardian.conf
1277
        $SED "s?^accessdeniedaddress =.*?accessdeniedaddress = http://$HOSTNAME.$DOMAIN?g" $DIR_DG/e2guardian.conf
1281
# Disable HTML content control
1278
# Disable HTML content control
1282
        $SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/e2guardian.conf
1279
        $SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" $DIR_DG/e2guardian.conf
1283
        cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1280
        cp $DIR_DG/lists/bannedphraselist $DIR_DG/lists/bannedphraselist.default
1284
        $SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1281
        $SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedphraselist # (on commente ce qui ne l'est pas)
1285
# Disable URL control with regex
1282
# Disable URL control with regex
1286
        cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1283
        cp $DIR_DG/lists/bannedregexpurllist $DIR_DG/lists/bannedregexpurllist.default
1287
        $SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1284
        $SED "s?^[^#]?#&?g" $DIR_DG/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
1288
# Configure E2guardian for large site
1285
# Configure E2guardian for large site
1289
# Minimum number of processus to handle connections
1286
# Minimum number of processus to handle connections
1290
        $SED "s?^minchildren =.*?minchildren = 15?g" $DIR_DG/e2guardian.conf
1287
        $SED "s?^minchildren =.*?minchildren = 15?g" $DIR_DG/e2guardian.conf
1291
# Maximum number of processus to handle connections
1288
# Maximum number of processus to handle connections
1292
        $SED "s?^maxchildren =.*?maxchildren = 200?g" $DIR_DG/e2guardian.conf
1289
        $SED "s?^maxchildren =.*?maxchildren = 200?g" $DIR_DG/e2guardian.conf
1293
# Run at least 8 daemons
1290
# Run at least 8 daemons
1294
        $SED "s?^minsparechildren =.*?minsparechildren = 8?g" $DIR_DG/e2guardian.conf
1291
        $SED "s?^minsparechildren =.*?minsparechildren = 8?g" $DIR_DG/e2guardian.conf
1295
# minimum number of processes to spawn
1292
# minimum number of processes to spawn
1296
        $SED "s?^preforkchildren =.*?preforkchildren = 10?g" $DIR_DG/e2guardian.conf
1293
        $SED "s?^preforkchildren =.*?preforkchildren = 10?g" $DIR_DG/e2guardian.conf
1297
# maximum age of a child process before it croaks it
1294
# maximum age of a child process before it croaks it
1298
        $SED "s?^maxagechildren =.*?maxagechildren = 1000?g" $DIR_DG/e2guardian.conf
1295
        $SED "s?^maxagechildren =.*?maxagechildren = 1000?g" $DIR_DG/e2guardian.conf
1299
# Disable download files control
1296
# Disable download files control
1300
        [ -e $DIR_DG/e2guardianf1.conf.default ] || cp $DIR_DG/e2guardianf1.conf $DIR_DG/e2guardianf1.conf.default
1297
        [ -e $DIR_DG/e2guardianf1.conf.default ] || cp $DIR_DG/e2guardianf1.conf $DIR_DG/e2guardianf1.conf.default
1301
        $SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/e2guardianf1.conf
1298
        $SED "s?^blockdownloads =.*?blockdownloads = off?g" $DIR_DG/e2guardianf1.conf
1302
        [ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1299
        [ -e $DIR_DG/lists/bannedextensionlist.default ] || mv $DIR_DG/lists/bannedextensionlist $DIR_DG/lists/bannedextensionlist.default
1303
        [ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1300
        [ -e $DIR_DG/lists/bannedmimetypelist.default ] || mv $DIR_DG/lists/bannedmimetypelist $DIR_DG/lists/bannedmimetypelist.default
1304
        touch $DIR_DG/lists/bannedextensionlist
1301
        touch $DIR_DG/lists/bannedextensionlist
1305
        touch $DIR_DG/lists/bannedmimetypelist
1302
        touch $DIR_DG/lists/bannedmimetypelist
1306
# 'Safesearch' regex actualisation
1303
# 'Safesearch' regex actualisation
1307
        $SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1304
        $SED "s?images?search?g" $DIR_DG/lists/urlregexplist
1308
# empty LAN IP list that won't be WEB filtered
1305
# empty LAN IP list that won't be WEB filtered
1309
        [ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1306
        [ -e $DIR_DG/lists/exceptioniplist.default ] || mv $DIR_DG/lists/exceptioniplist $DIR_DG/lists/exceptioniplist.default
1310
        touch $DIR_DG/lists/exceptioniplist
1307
        touch $DIR_DG/lists/exceptioniplist
1311
# Keep a copy of URL & domain filter configuration files
1308
# Keep a copy of URL & domain filter configuration files
1312
        [ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1309
        [ -e $DIR_DG/lists/bannedsitelist.default ] || mv $DIR_DG/lists/bannedsitelist $DIR_DG/lists/bannedsitelist.default
1313
        [ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1310
        [ -e $DIR_DG/lists/bannedurllist.default ] || mv $DIR_DG/lists/bannedurllist $DIR_DG/lists/bannedurllist.default
1314
} # End of e2guardian ()
1311
} # End of e2guardian ()
1315
 
1312
 
1316
##################################################################
1313
##################################################################
1317
##                     Function "antivirus"                     ##
1314
##                     Function "antivirus"                     ##
1318
## - Set the parameters of havp, libclamav and freshclam        ##
1315
## - Set the parameters of havp, libclamav and freshclam        ##
1319
##################################################################
1316
##################################################################
1320
antivirus ()
1317
antivirus ()
1321
{
1318
{
1322
# create 'havp' user
1319
# create 'havp' user
1323
        havp_exist=`grep -c ^havp: /etc/passwd`
1320
        havp_exist=`grep -c ^havp: /etc/passwd`
1324
        if [ "$havp_exist" == "1" ]
1321
        if [ "$havp_exist" == "1" ]
1325
        then
1322
        then
1326
                userdel -r havp 2>/dev/null
1323
                userdel -r havp 2>/dev/null
1327
                groupdel havp 2>/dev/null
1324
                groupdel havp 2>/dev/null
1328
        fi
1325
        fi
1329
        groupadd -f havp
1326
        groupadd -f havp
1330
        useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1327
        useradd -r -g havp -s /bin/false -c "system user for havp (antivirus proxy)" havp
1331
        mkdir -p /var/tmp/havp /var/log/havp /var/run/havp /var/log/clamav /var/lib/clamav
1328
        mkdir -p /var/tmp/havp /var/log/havp /var/run/havp /var/log/clamav /var/lib/clamav
1332
        chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1329
        chown -R havp:havp /var/tmp/havp /var/log/havp /var/run/havp
1333
        chown -R clamav:clamav /var/log/clamav /var/lib/clamav
1330
        chown -R clamav:clamav /var/log/clamav /var/lib/clamav
1334
        [ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1331
        [ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
1335
        $SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1332
        $SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
1336
        $SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config    # pidfile
1333
        $SED "s?^# PIDFILE.*?PIDFILE /var/run/havp/havp.pid?g" /etc/havp/havp.config    # pidfile
1337
        $SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config             # transparent mode
1334
        $SED "s?^# TRANSPARENT.*?TRANSPARENT false?g" /etc/havp/havp.config             # transparent mode
1338
        $SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config       # we listen only on loopback
1335
        $SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config       # we listen only on loopback
1339
        $SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config                            # datas come on port 8090 (on loopback)
1336
        $SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config                            # datas come on port 8090 (on loopback)
1340
        $SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config   # Log format
1337
        $SED "s?^# TIMEFORMAT.*?TIMEFORMAT %Y %b %d %H:%M:%S?g" /etc/havp/havp.config   # Log format
1341
        $SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config            # active libclamav AV
1338
        $SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config            # active libclamav AV
1342
        $SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config                     # log only when malware matches
1339
        $SED "s?^# LOG_OKS.*?LOG_OKS false?g" /etc/havp/havp.config                     # log only when malware matches
1343
        $SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config              # 10 daemons are started simultaneously
1340
        $SED "s?^# SERVERNUMBER.*?SERVERNUMBER 10?g" /etc/havp/havp.config              # 10 daemons are started simultaneously
1344
        $SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config               # doesn't scan image files
1341
        $SED "s?^# SCANIMAGES.*?SCANIMAGES false?g" /etc/havp/havp.config               # doesn't scan image files
1345
        $SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1342
        $SED "s?^# SKIPMIME.*?SKIPMIME image\/\* video\/\* audio\/\*?g" /etc/havp/havp.config # doesn't scan some multimedia files
1346
# skip checking of youtube flow (too heavy load / risk too low)
1343
# skip checking of youtube flow (too heavy load / risk too low)
1347
        [ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1344
        [ -e /etc/havp/whitelist.default ] || cp /etc/havp/whitelist /etc/havp/whitelist.default
1348
        echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1345
        echo "# Whitelist youtube flow" >> /etc/havp/whitelist
1349
        echo "*.youtube.com/*" >> /etc/havp/whitelist
1346
        echo "*.youtube.com/*" >> /etc/havp/whitelist
1350
# adapt init script and systemd unit
1347
# adapt init script and systemd unit
1351
        [ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1348
        [ -e /etc/init.d/havp.default ] || cp /etc/init.d/havp /etc/init.d/havp.default
1352
        cp -f $DIR_CONF/havp-init /etc/init.d/havp
1349
        cp -f $DIR_CONF/havp-init /etc/init.d/havp
1353
        [ -e /lib/systemd/system/havp.service.default ] || cp /lib/systemd/system/havp.service /lib/systemd/system/havp.service.default
1350
        [ -e /lib/systemd/system/havp.service.default ] || cp /lib/systemd/system/havp.service /lib/systemd/system/havp.service.default
1354
        $SED "/^PIDFile/i ExecStartPre=/bin/mkdir -p /var/run/havp" /lib/systemd/system/havp.service
1351
        $SED "/^PIDFile/i ExecStartPre=/bin/mkdir -p /var/run/havp" /lib/systemd/system/havp.service
1355
        $SED "/^PIDFile/i ExecStartPre=/bin/chown -R havp:havp /var/run/havp /var/log/havp" /lib/systemd/system/havp.service
1352
        $SED "/^PIDFile/i ExecStartPre=/bin/chown -R havp:havp /var/run/havp /var/log/havp" /lib/systemd/system/havp.service
1356
# replace of the intercept page (template)
1353
# replace of the intercept page (template)
1357
        cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1354
        cp -f $DIR_CONF/virus-fr.html /etc/havp/templates/fr/virus.html
1358
        cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1355
        cp -f $DIR_CONF/virus-en.html /etc/havp/templates/en/virus.html
1359
# update virus database every 4 hours (24h/6)
1356
# update virus database every 4 hours (24h/6)
1360
        [ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1357
        [ -e /etc/freshclam.conf.default ] || cp /etc/freshclam.conf /etc/freshclam.conf.default
1361
        $SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1358
        $SED "s?^Checks.*?Checks 6?g" /etc/freshclam.conf
1362
        $SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1359
        $SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
1363
        $SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1360
        $SED "/^DatabaseMirror/i DatabaseMirror db.fr.clamav.net" /etc/freshclam.conf
1364
        $SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1361
        $SED "/^DatabaseMirror db.fr.clamav.net/i DatabaseMirror switch.clamav.net" /etc/freshclam.conf
1365
        $SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1362
        $SED "s?MaxAttempts.*?MaxAttempts 3?g" /etc/freshclam.conf
1366
# update now
1363
# update now
1367
        /usr/bin/freshclam --no-warnings
1364
        /usr/bin/freshclam --no-warnings
1368
} # End of antivirus ()
1365
} # End of antivirus ()
1369
 
1366
 
1370
################################################################################
1367
################################################################################
1371
##                           Function "tinyproxy"                             ##
1368
##                           Function "tinyproxy"                             ##
1372
## - Set the parameters of tinyproxy (proxy between filtered users and havp)  ##
1369
## - Set the parameters of tinyproxy (proxy between filtered users and havp)  ##
1373
################################################################################
1370
################################################################################
1374
tinyproxy ()
1371
tinyproxy ()
1375
{
1372
{
1376
        tinyproxy_exist=`grep -c ^tinyproxy: /etc/passwd`
1373
        tinyproxy_exist=`grep -c ^tinyproxy: /etc/passwd`
1377
        if [ "$tinyproxy_exist" == "1" ]
1374
        if [ "$tinyproxy_exist" == "1" ]
1378
        then
1375
        then
1379
                userdel -r tinyproxy 2>/dev/null
1376
                userdel -r tinyproxy 2>/dev/null
1380
                groupdel tinyproxy 2>/dev/null
1377
                groupdel tinyproxy 2>/dev/null
1381
        fi
1378
        fi
1382
        groupadd -f tinyproxy
1379
        groupadd -f tinyproxy
1383
        useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" tinyproxy
1380
        useradd -r -g tinyproxy -s /bin/false -c "system user for tinyproxy" tinyproxy
1384
        mkdir -p /var/run/tinyproxy /var/log/tinyproxy
1381
        mkdir -p /var/run/tinyproxy /var/log/tinyproxy
1385
        chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1382
        chown -R tinyproxy.tinyproxy /var/run/tinyproxy /var/log/tinyproxy
1386
        [ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
1383
        [ -e /etc/tinyproxy/tinyproxy.conf.default ] || cp /etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf.default
1387
        $SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1384
        $SED "s?^User.*?User tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1388
        $SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1385
        $SED "s?^Group.*?Group tinyproxy?g" /etc/tinyproxy/tinyproxy.conf
1389
        $SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf                      # Listen Port
1386
        $SED "s?^Port.*?Port 8090?g" /etc/tinyproxy/tinyproxy.conf                      # Listen Port
1390
        $SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf          # Listen NIC (only intif)
1387
        $SED "s?^#Listen.*?Listen $PRIVATE_IP?g" /etc/tinyproxy/tinyproxy.conf          # Listen NIC (only intif)
1391
        $SED "s?^#LogFile.*?LogFile \"/var/log/tinyproxy/tinyproxy.log\"?g" /etc/tinyproxy/tinyproxy.conf
1388
        $SED "s?^#LogFile.*?LogFile \"/var/log/tinyproxy/tinyproxy.log\"?g" /etc/tinyproxy/tinyproxy.conf
1392
        $SED "s?^#PidFile.*?PidFile \"/var/run/tinyproxy/tinyproxy.pid\"?g" /etc/tinyproxy/tinyproxy.conf
1389
        $SED "s?^#PidFile.*?PidFile \"/var/run/tinyproxy/tinyproxy.pid\"?g" /etc/tinyproxy/tinyproxy.conf
1393
        $SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf             # Only errors are logged
1390
        $SED "s?^LogLevel.*?LogLevel Error?g" /etc/tinyproxy/tinyproxy.conf             # Only errors are logged
1394
        $SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf   # forward to HAVP
1391
        $SED "s?^#Upstream.*?Upstream 127.0.0.1:8090?g" /etc/tinyproxy/tinyproxy.conf   # forward to HAVP
1395
        $SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf      # Stealth mode
1392
        $SED "s?^#DisableViaHeader.*?DisableViaHeader Yes?g" /etc/tinyproxy/tinyproxy.conf      # Stealth mode
1396
        $SED "s?^Allow.*?Allow $PRIVATE_NETWORK_MASK?g" /etc/tinyproxy/tinyproxy.conf   # Allow from LAN
1393
        $SED "s?^Allow.*?Allow $PRIVATE_NETWORK_MASK?g" /etc/tinyproxy/tinyproxy.conf   # Allow from LAN
1397
# Create the systemd unit
1394
# Create the systemd unit
1398
cat << EOF > /lib/systemd/system/tinyproxy.service
1395
cat << EOF > /lib/systemd/system/tinyproxy.service
1399
#  This file is part of systemd.
1396
#  This file is part of systemd.
1400
#
1397
#
1401
#  systemd is free software; you can redistribute it and/or modify it
1398
#  systemd is free software; you can redistribute it and/or modify it
1402
#  under the terms of the GNU General Public License as published by
1399
#  under the terms of the GNU General Public License as published by
1403
#  the Free Software Foundation; either version 2 of the License, or
1400
#  the Free Software Foundation; either version 2 of the License, or
1404
#  (at your option) any later version.
1401
#  (at your option) any later version.
1405
 
1402
 
1406
# This unit launches tinyproxy (a very light proxy).
1403
# This unit launches tinyproxy (a very light proxy).
1407
# The "sleep 2" is needed because the pid file isn't ready for systemd
1404
# The "sleep 2" is needed because the pid file isn't ready for systemd
1408
[Unit]
1405
[Unit]
1409
Description=Tinyproxy Web Proxy Server
1406
Description=Tinyproxy Web Proxy Server
1410
After=network.target iptables.service
1407
After=network.target iptables.service
1411
 
1408
 
1412
[Service]
1409
[Service]