Subversion Repositories ALCASAR

Rev

Rev 2711 | Rev 2728 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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