Subversion Repositories ALCASAR

Rev

Rev 286 | Rev 288 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
1 root 1
#!/bin/sh
57 franck 2
#  $Id: alcasar.sh 287 2010-09-27 20:34:54Z richard $ 
1 root 3
 
4
# alcasar.sh
5
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
8
# Install script for ALCASAR (a secured and authenticated Internet access control captive portal)
9
# Script d'installation d'ALCASAR (Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau)
10
 
11
# ALCASAR is based on a stripped Mandriva (LSB) with the following open source softwares :
12
# ALCASAR est architecturé autour d'une distribution Linux Mandriva minimaliste et les logiciels libres suivants :
5 franck 13
# Coovachilli (a fork of chillispot), freeradius, mysql, apache, netfilter, squid, dansguardian, mondo, mindi, dialupadmin, awstat, ntpd, dhcpd, openssl bind and firewalleyes
1 root 14
 
15
# Options :
5 franck 16
#       -install
17
#       -uninstall
1 root 18
 
19
# Funtions :
29 richard 20
#       testing         : Tests de connectivité et de téléchargement avant installation
1 root 21
#       init            : Installation des RPM et des scripts
22
#       network         : Paramètrage du réseau
23
#       gestion         : Installation de l'interface de gestion
24
#       AC              : Initialisation de l'autorité de certification. Création des certificats
25
#       init_db         : Création de la base 'radius' sur le serveur MySql
26
#       param_radius    : Configuration du serveur d'authentification FreeRadius
27
#       param_web_radius: Configuration de l'interface de gestion de FreeRadius (dialupadmin)
28
#       param_chilli    : Configuration du daemon 'coova-chilli' et de la page d'authentification
29
#       param_squid     : Configuration du proxy squid en mode 'cache'
30
#       param_dansguardian : Configuration de l'analyseur de contenu DansGuardian
159 franck 31
#       antivirus       : Installation havp + clamav
1 root 32
#       firewall        : Mise en place des règles du parefeu et de l'interface WEB FirewallEyes
33
#       param_awstats   : Configuration de l'interface des statistiques de consultation WEB
34
#       bind            : Configuration du serveur de noms
35
#       cron            : Mise en place des exports de logs (+ chiffrement)
36
 
37
 
95 franck 38
VERSION=`cat VERSION`
219 jeremy 39
MDV_NEEDED="2010.1"
1 root 40
DATE=`date '+%d %B %Y - %Hh%M'`
41
DATE_SHORT=`date '+%d/%m/%Y'`
42
# ******* Files parameters - paramètres fichiers *********
43
DIR_INSTALL=`pwd`                               # répertoire d'installation
44
DIR_GESTION="$DIR_INSTALL/gestion"              # répertoire d'installation contenant l'interface de gestion
45
DIR_CONF="$DIR_INSTALL/conf"                    # répertoire d'installation contenant les fichiers de configuration
46
DIR_SCRIPTS="$DIR_INSTALL/scripts"              # répertoire d'installation contenant les scripts
47
DIR_SAVE="/var/Save"                            # répertoire de sauvegarde (ISO, backup, etc.)
48
DIR_WEB="/var/www/html"                         # répertoire du centre de gestion
49
DIR_DEST_BIN="/usr/local/bin"                   # répertoire des scripts
50
DIR_DEST_SBIN="/usr/local/sbin"                 # répertoire des scripts d'admin
51
DIR_DEST_ETC="/usr/local/etc"                   # répertoire des fichiers de conf
52
FIC_PARAM="/root/ALCASAR-parameters.txt"        # fichier texte résumant les paramètres d'installation
53
FIC_PASSWD="/root/ALCASAR-passwords.txt"        # fichier texte contenant les mots de passe et secrets partagés 
54
# ******* DBMS parameters - paramètres SGBD ********
55
DB_RADIUS="radius"                              # nom de la base de données utilisée par le serveur FreeRadius
56
DB_USER="radius"                                # nom de l'utilisateur de la base de données
57
# ******* Network parameters - paramètres réseau *******
58
DOMAIN="localdomain"                            # domaine local
59
EXTIF="eth0"                                    # ETH0 est l'interface connectée à Internet (Box FAI)
60
INTIF="eth1"                                    # ETH1 est l'interface connectée au réseau local de consultation
61
CUSTOM_PRIVATE_NETWORK_MASK="192.168.182.0/24"  # adresse du réseau de consultation proposée par défaut
62
SQUID_PORT="3128"                               # Port d'écoute du proxy Squid
63
UAMPORT="3990"
64
# ****** Paths - chemin des commandes *******
65
SED="/bin/sed -i"
66
# ****** Alcasar needed RPMS - paquetages nécessaires au fonctionnement d'Alcasar ******
235 richard 67
PACKAGES="freeradius freeradius-mysql freeradius-ldap freeradius-web apache-mpm-prefork apache-mod_ssl apache-mod_php squid dansguardian postfix MySQL logwatch ntp awstats mondo cdrecord buffer vim-enhanced bind-utils wget arpscan ulogd dhcp-server openssh-server php-xml coova-chilli pam_ccreds rng-utils lsb-release dnsmasq clamav sudo cronie-anacron"
1 root 68
# ****************** End of global parameters *********************
69
 
70
header_install ()
71
{
72
        clear
73
        echo "-----------------------------------------------------------------------------"
74
        echo "                     Installation d'ALCASAR V$VERSION"
75
        echo "Application Libre pour le Contrôle d'Accès Sécurisé et Authentifié au Réseau"
76
        echo "-----------------------------------------------------------------------------"
77
} # End of header_install ()
78
 
79
##################################################################
29 richard 80
##                      Fonction TESTING                        ##
81
## - Test de la connectivité Internet                          ##
82
## - Test la mise à jour système                              ##
83
## - Test l'installation des RPM additionnels                   ##
84
##################################################################
85
testing ()
86
{
87
        echo -n "Tests des paramètres réseau : "
88
# On teste l'état du lien des interfaces réseau
89
        for i in $EXTIF $INTIF
90
        do
91
                /sbin/ifconfig $i up
92
                sleep 2
93
                if [ "`/usr/sbin/ethtool $i|grep Link|cut -d' ' -f3`" != "yes" ]
94
                        then
95
                        echo "Échec"
96
                        echo "Le lien réseau de la carte $i n'est pas actif."
97
                        echo "Réglez ce problème avant de poursuivre l'installation d'ALCASAR."
98
                        exit 0
99
                fi
100
        done
101
# On teste la présence d'un routeur par défaut (Box FAI)
102
        if [ `/sbin/route -n|grep -c ^0.0.0.0` -ne "1" ] ; then
103
                echo "Échec"
104
                echo "Vous n'avez pas configuré l'accès à Internet ou le câble réseau n'est pas sur la bonne carte."
105
                echo "Réglez ce problème avant de poursuivre."
106
                exit 0
107
        fi
108
# On traite le cas où l'interface configurée lors de l'installation est "eth1" au lieu de "eth0" (mystère sur certains BIOS et sur VirtualBox)
109
        if [ `/sbin/route -n|grep ^0.0.0.0|grep -c eth1` -eq "1" ] ; then
110
                echo "Échec. La configuration des cartes réseau va être corrigée."
111
                /etc/init.d/network stop
112
                mv -f /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/sysconfig/network-scripts/ifcfg-eth0
113
                $SED "s?eth1?eth0?g" /etc/sysconfig/network-scripts/ifcfg-eth0
114
                /etc/init.d/network start
115
                echo 0 > /proc/sys/net/ipv4/conf/all/log_martians
116
                sleep 2
117
                echo "Configuration corrigée"
118
                sleep 2
119
                echo "Vous pouvez relancer ce script (sh alcasar.sh -install)."
120
                exit 0
121
        fi
122
# On teste la connectivité Internet
123
        rm -rf /tmp/con_ok.html
124
        /usr/bin/curl www.google.fr -# -o /tmp/con_ok.html
125
        if [ ! -e /tmp/con_ok.html ]
126
        then
127
                echo "La tentative de connexion vers Internet a échoué (google.fr)."
128
                echo "Vérifiez que la carte $EXTIF est bien connectée au routeur du FAI."
129
                echo "Vérifiez la validité des adresses DNS."
130
                exit 0
131
        fi
132
        echo "Tests de connectivité Internet corrects"
133
        rm -rf /tmp/con_ok.html
134
# On configure les dépots et on les teste 
148 franck 135
        echo "Configuration des dépôts de paquetages Internet (repository)"
29 richard 136
        chmod u+x $DIR_SCRIPTS/alcasar-urpmi.sh
137
        $DIR_SCRIPTS/alcasar-urpmi.sh >/dev/null
138
        if [ "$?" != "0" ]
139
        then
140
                echo
148 franck 141
                echo "Une erreur s'est produite lors de la synchronisation avec les dépôts Internet"
142
                echo "Relancez l'installation ultérieurement."
139 richard 143
               echo "Si vous rencontrez de nouveau ce problème, changez de dépôt en modifiant le fichier 'scripts/alcasar-urpmi.sh'"
29 richard 144
                exit 0
145
        fi
73 franck 146
# On teste la mise à jour du système
72 franck 147
        echo "Récupération des paquetages de mise à jour. Veuillez patienter ..."
287 richard 148
        urpmi --auto --auto-update --quiet --test --retry 2
29 richard 149
        if [ "$?" != "0" ]
150
        then
151
                echo
148 franck 152
                echo "Une erreur  a été détectée lors de la récupération des paquetages de mise à jour."
153
                echo "Relancez l'installation ultérieurement."
139 richard 154
               echo "Si vous rencontrez de nouveau ce problème, changez de dépôt en modifiant le fichier 'scripts/alcasar-urpmi.sh'"
29 richard 155
                exit 0
156
        fi
73 franck 157
# On teste l'installation des paquetages complémentaires
72 franck 158
        echo "Récupération des paquetages complémentaires. Veuillez patienter ..."
29 richard 159
        urpmi --auto $PACKAGES --quiet --test
160
        if [ "$?" != "0" ]
161
        then
162
                echo
148 franck 163
                echo "Une erreur a été détectée lors de la récupération des paquetages complémentaires."
164
                echo "Relancez l'installation ultérieurement."
139 richard 165
               echo "Si vous rencontrez de nouveau ce problème, changez de dépôt en modifiant le fichier 'scripts/alcasar-urpmi.sh'"
29 richard 166
                exit 0
167
        fi
168
} # end of testing
169
 
170
##################################################################
1 root 171
##                      Fonction INIT                           ##
172
## - Création du fichier "/root/ALCASAR_parametres.txt"                ##
173
## - Installation et modification des scripts du portail        ##
29 richard 174
## - Mise à jour système                                      ##
1 root 175
## - Installation des paquetages complémentaires               ##
176
##################################################################
177
init ()
178
{
5 franck 179
        if [ ! "$mode" = "update" ]
1 root 180
        then
181
                header_install
5 franck 182
# On affecte le nom d'organisme
1 root 183
                header_install
184
                ORGANISME=!
214 richard 185
                PTN='^[a-zA-Z0-9-]*$'
1 root 186
                until [[ $(expr $ORGANISME : $PTN) -gt 0 ]]
187
                do
188
                        echo -n "Entrez le nom de votre organisme : "
189
                        read ORGANISME
190
                        if [ "$ORGANISME" = "" ]
191
                                then
192
                                ORGANISME=!
193
                        fi
194
                done
5 franck 195
        fi
29 richard 196
# On mets à jour le système
197
        urpmi --auto --auto-update
198
# On installe les paquetages complémentaires
199
        urpmi --auto $PACKAGES
287 richard 200
# On supprime les paquetages, les services et les utilisateurs inutiles
259 richard 201
        for rm_rpm in avahi mandi shorewall libc-icap0 cyrus-sasl
5 franck 202
        do
287 richard 203
                /usr/sbin/urpme --auto $rm_rpm --auto-orphans
5 franck 204
        done
235 richard 205
        for svc in alsa sound dm atd dc_server
5 franck 206
        do
207
                /sbin/chkconfig --del $svc
208
        done
287 richard 209
        for rm_users in avahi avahi-autoipd icapd
210
        do
211
                $user=`cat /etc/passwd|grep $rm_user`
212
                if [ "$user" = "$rm-user" ]
213
                then
214
                        /usr/sbin/userdel -f $rm_user
215
                fi
216
        done
217
 
80 richard 218
# On installe les RPMs spécifiques à la version
219
        fic=`cat /etc/product.id`
220
        old="$IFS"
221
        IFS=","
222
        set $fic
223
        for i in $*
224
        do
225
                if [ "`echo $i|grep arch|cut -d'=' -f1`" == "arch" ]
226
                then
227
                        ARCH=`echo $i|cut -d"=" -f2`
228
                fi
229
        done
230
        IFS="$old"
231
        urpmi --no-verify --auto $DIR_CONF/rpms/$ARCH/*.rpm
29 richard 232
# On vide le répertoire temporaire
233
        urpmi --clean
1 root 234
# On crée aléatoirement les mots de passe et les secrets partagés
235
        rm -f $FIC_PASSWD
59 richard 236
        grubpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`        # mot de passe de protection du menu Grub
237
        echo -n "mot de passe de protection du menu de démarrage (GRUB) : " > $FIC_PASSWD
238
        echo "$grubpwd" >> $FIC_PASSWD
239
        md5_grubpwd=`/usr/bin/md5pass $grubpwd`
240
        sed -i "/^password.*/d" /boot/grub/menu.lst
241
        sed -i "1ipassword --md5 $md5_grubpwd" /boot/grub/menu.lst
1 root 242
        mysqlpwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`       # mot de passe de l'administrateur Mysqld
59 richard 243
        echo -n "compte et mot de passe de l'administrateur Mysqld : " >> $FIC_PASSWD
1 root 244
        echo "root / $mysqlpwd" >> $FIC_PASSWD
245
        radiuspwd=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`      # mot de passe de l'utilisateur Mysqld (utilisé par freeradius)
246
        echo -n "compte et mot de passe de l'utilisateur Mysqld : " >> $FIC_PASSWD
247
        echo "$DB_USER / $radiuspwd" >> $FIC_PASSWD
248
        secretuam=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`      # secret partagé entre intercept.php et coova-chilli
249
        echo -n "secret partagé entre le script 'intercept.php' et coova-chilli : " >> $FIC_PASSWD
250
        echo "$secretuam" >> $FIC_PASSWD
251
        secretradius=`cat /dev/urandom | tr -dc [:alnum:] | head -c8`   # secret partagé entre coova-chilli et FreeRadius
252
        echo -n "secret partagé entre coova-chilli et FreeRadius : " >> $FIC_PASSWD
253
        echo "$secretradius" >> $FIC_PASSWD
254
        chmod 640 $FIC_PASSWD
255
# On installe et on modifie les scripts d'Alcasar
5 franck 256
        cp -f $DIR_SCRIPTS/alcasar* $DIR_DEST_BIN/. ; chown root:root $DIR_DEST_BIN/alcasar* ; chmod 740 $DIR_DEST_BIN/alcasar*
257
        cp -f $DIR_SCRIPTS/sbin/alcasar* $DIR_DEST_SBIN/. ; chown root:root $DIR_DEST_SBIN/alcasar* ; chmod 740 $DIR_DEST_SBIN/alcasar*
258
        cp -f $DIR_SCRIPTS/etc/alcasar* $DIR_DEST_ETC/. ; chown root:apache $DIR_DEST_ETC/alcasar* ; chmod 660 $DIR_DEST_ETC/alcasar*
1 root 259
        $SED "s?^radiussecret.*?radiussecret=\"$secretradius\"?g" $DIR_DEST_SBIN/alcasar-logout.sh
260
        $SED "s?^DB_RADIUS=.*?DB_RADIUS=\"$DB_RADIUS\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh
5 franck 261
        $SED "s?^DB_USER=.*?DB_USER=\"$DB_USER\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
262
        $SED "s?^radiuspwd=.*?radiuspwd=\"$radiuspwd\"?g" $DIR_DEST_SBIN/alcasar-mysql.sh $DIR_DEST_BIN/alcasar-conf.sh
1 root 263
# On génère le début du fichier récapitulatif
264
        cat <<EOF > $FIC_PARAM
265
########################################################
266
##                                                    ##
267
##   Fichier récapitulatif des paramètres d'ALCASAR   ##
268
##                                                    ##
269
########################################################
270
 
271
- Date d'installation : $DATE
272
- Version istallée : $VERSION
273
- Organisme : $ORGANISME
274
EOF
275
        chmod o-rwx $FIC_PARAM
276
} # End of init ()
277
 
278
##################################################################
279
##                      Fonction network                        ##
280
## - Définition du plan d'adressage du réseau de consultation ##
281
##  (merci à Alexandre Trias pour le calcul de masque et RegEx) ##
282
## - Nommage DNS du système (portail + nom d'organisme)                ##
283
## - Configuration de l'interface eth1 (réseau de consultation)        ##
284
## - Modification du fichier /etc/hosts                         ##
285
## - Configuration du serveur de temps (NTP)                    ##
286
## - Renseignement des fichiers hosts.allow et hosts.deny       ##
287
##################################################################
288
network ()
289
{
290
        header_install
291
        echo "Par défaut, le plan d'adressage du réseau de consultation est : $CUSTOM_PRIVATE_NETWORK_MASK"
292
        response=0
293
        PTN='^[oOnN]$'
294
        until [[ $(expr $response : $PTN) -gt 0 ]]
295
                do
296
                        echo -n "Voulez-vous utiliser ce plan d'adressage (recommandé) (O/n)? : "
297
                        read response
298
                done
299
        if [ "$response" = "n" ] || [ "$response" = "N" ]
300
        then
301
                CUSTOM_PRIVATE_NETWORK_MASK="0"
302
                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:]]$'
303
                until [[ $(expr $CUSTOM_PRIVATE_NETWORK_MASK : $PTN) -gt 0 ]]
304
                        do
305
                                echo -n "Entrez un plan d'adressage au format CIDR (a.b.c.d/xx) : "
306
                                read CUSTOM_PRIVATE_NETWORK_MASK
307
 
308
                        done
309
        fi
14 richard 310
# Récupération de la config réseau côté "LAN de consultation"
1 root 311
        HOSTNAME=alcasar-$ORGANISME
312
        hostname $HOSTNAME
313
        echo "- Nom du système : $HOSTNAME" >> $FIC_PARAM
314
        PRIVATE_NETWORK=`/bin/ipcalc -n $CUSTOM_PRIVATE_NETWORK_MASK | cut -d"=" -f2`           # @ réseau de consultation (ex.: 192.168.182.0)
5 franck 315
        private_prefix=`/bin/ipcalc -p $CUSTOM_PRIVATE_NETWORK_MASK |cut -d"=" -f2`             # prefixe du réseau (ex. 24)
1 root 316
        PRIVATE_NETWORK_MASK=$PRIVATE_NETWORK/$private_prefix                                   # @ réseau + masque (x.0.0.0/8 ou x.y.0.0/16 ou x.y.z.0/24)
317
        classe=$((private_prefix/8));                                                           # classe de réseau (ex.: 2=classe B, 3=classe C)
318
        PRIVATE_NETWORK_SHORT=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`.                  # @ compatible hosts.allow et hosts.deny (ex.: 192.168.182.)
319
        PRIVATE_MASK=`/bin/ipcalc -m $PRIVATE_NETWORK_MASK | cut -d"=" -f2`                     # masque réseau de consultation (ex.: 255.255.255.0)
320
        PRIVATE_BROADCAST=`/bin/ipcalc -b $PRIVATE_NETWORK_MASK | cut -d"=" -f2`                # @ broadcast réseau de consultation (ex.: 192.168.182.255)
321
        TMP_MASK=`echo $PRIVATE_NETWORK_MASK|cut -d"/" -f2`; HALF_MASK=`expr $TMP_MASK + 1`     # masque du 1/2 réseau de consultation (ex.: 25)
322
        PRIVATE_STAT_IP=$PRIVATE_NETWORK/$HALF_MASK                                             # plage des adresses statiques (ex.: 192.168.182.0/25)
323
        PRIVATE_STAT_MASK=`/bin/ipcalc -m $PRIVATE_STAT_IP/$HALF_MASK | cut -d"=" -f2`          # masque des adresses statiques (ex.: 255.255.255.128)
324
        classe_sup=`expr $classe + 1`
325
        classe_sup_sup=`expr $classe + 2`
326
        private_network_ending=`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup`
327
        private_broadcast_ending=`echo $PRIVATE_BROADCAST | cut -d"." -f$classe_sup`
328
        private_plage=`expr $private_broadcast_ending - $private_network_ending + 1`
329
        private_half_plage=`expr $private_plage / 2`
330
        private_dyn=`expr $private_half_plage + $private_network_ending`
331
        private_dyn_ip_network=`echo $PRIVATE_NETWORK | cut -d"." -f1-$classe`"."$private_dyn"."`echo $PRIVATE_NETWORK | cut -d"." -f$classe_sup_sup-5`
332
        PRIVATE_DYN_IP=`echo $private_dyn_ip_network | cut -d"." -f1-4`/$HALF_MASK              # plage des adresses dynamiques (ex.: 192.168.182.128/25)
333
        PRIVATE_DYN_MASK=`/bin/ipcalc -m $PRIVATE_DYN_IP/$HALF_MASK | cut -d"=" -f2`            # masque des adresses dynamiques (ex.: 255.255.255.128)
334
        private_dyn_ip_network=`echo $PRIVATE_DYN_IP | cut -d"/" -f1`                           # plage des adresses dynamiques sans le masque (ex.: 192.168.182.0)
335
        private_dyn_ip_end=`echo $private_dyn_ip_network | cut -d"." -f4`                       # dernier octet de la plage des adresses dynamiques (ex.: 128)
336
        PRIVATE_DYN_FIRST_IP=`echo $private_dyn_ip_network | cut -d"." -f1-3`"."`expr $private_dyn_ip_end + 1`  # 1ère adresse de la plage dynamique (ex.: 192.168.182.129)
337
        private_broadcast_end=`echo $PRIVATE_BROADCAST | cut -d"." -f4`
338
        PRIVATE_DYN_LAST_IP=`echo $PRIVATE_BROADCAST | cut -d"." -f1-3`"."`expr $private_broadcast_end - 1`     # dernière adresse de la plage dynamique (ex.: 192.168.182.254)
14 richard 339
        PRIVATE_IP=`echo $PRIVATE_NETWORK | cut -d"." -f1-3`"."`expr $private_network_end + 1`  # @ip du portail (côté réseau de consultation)
340
# Récupération de la config réseau côté "Internet"
341
        [ -e /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF ] || cp /etc/sysconfig/network-scripts/ifcfg-$EXTIF /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF
342
        EXT_IP=`grep IPADDR /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`  # @ip du portail (côté Internet)
1 root 343
        [ -e /etc/sysconfig/network.default ] || cp /etc/sysconfig/network /etc/sysconfig/network.default
14 richard 344
        DNS1=`grep DNS1 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`      # @ip 1er DNS
345
        DNS2=`grep DNS2 /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`      # @ip 2ème DNS
70 franck 346
        DNS1=${DNS1:=208.67.220.220}
347
        DNS2=${DNS2:=208.67.222.222}
14 richard 348
        EXT_NETMASK=`grep NETMASK /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
349
        EXT_GATEWAY=`grep GATEWAY /etc/sysconfig/network-scripts/default-ifcfg-$EXTIF|cut -d"=" -f2`
350
        echo "- Adresse IP 'côté Internet' ($EXTIF) : $EXT_IP / $EXT_NETMASK" >> $FIC_PARAM
351
        echo "- Serveurs DNS renseignés : $DNS1 et $DNS2" >> $FIC_PARAM
352
        echo "- Routeur de sortie : $EXT_GATEWAY" >> $FIC_PARAM
353
# Configuration réseau
1 root 354
        cat <<EOF > /etc/sysconfig/network
355
NETWORKING=yes
356
HOSTNAME="$HOSTNAME"
357
FORWARD_IPV4=true
358
EOF
359
# Modif /etc/hosts
360
        [ -e /etc/hosts.default ] || cp /etc/hosts /etc/hosts.default
361
        cat <<EOF > /etc/hosts
362
127.0.0.1       $HOSTNAME localhost.localdomain localhost
363
$PRIVATE_IP     $HOSTNAME alcasar portail
364
EOF
14 richard 365
        echo "- Adresse IP 'côté réseau de consultation' ($INTIF) : $PRIVATE_IP / $PRIVATE_NETWORK_MASK" >> $FIC_PARAM
366
        echo "    - plage d'adresses statiques : $PRIVATE_STAT_IP" >> $FIC_PARAM
367
        echo "    - plage d'adresses dynamiques (via DHCP) : $PRIVATE_DYN_IP" >> $FIC_PARAM
368
# Configuration de l'interface eth0 (Internet)
369
        cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$EXTIF
370
DEVICE=$EXTIF
371
BOOTPROTO=static
372
IPADDR=$EXT_IP
373
NETMASK=$EXT_NETMASK
374
GATEWAY=$EXT_GATEWAY
375
DNS1=127.0.0.1
376
ONBOOT=yes
377
METRIC=10
378
NOZEROCONF=yes
379
MII_NOT_SUPPORTED=yes
380
IPV6INIT=no
381
IPV6TO4INIT=no
382
ACCOUNTING=no
383
USERCTL=no
384
EOF
1 root 385
# Configuration de l'interface eth1 (réseau de consultation)
386
        cat <<EOF > /etc/sysconfig/network-scripts/ifcfg-$INTIF
387
DEVICE=$INTIF
388
BOOTPROTO=static
389
IPADDR=$PRIVATE_IP
390
NETMASK=$PRIVATE_MASK
391
ONBOOT=yes
392
METRIC=10
393
NOZEROCONF=yes
394
MII_NOT_SUPPORTED=yes
14 richard 395
IPV6INIT=no
396
IPV6TO4INIT=no
397
ACCOUNTING=no
398
USERCTL=no
1 root 399
EOF
400
# Configuration du serveur de temps
401
        [ -e /etc/ntp.conf.default ] || cp /etc/ntp.conf /etc/ntp.conf.default
402
        cat <<EOF > /etc/ntp.conf
403
server 0.fr.pool.ntp.org
404
server 1.fr.pool.ntp.org
405
server 2.fr.pool.ntp.org
406
restrict default nomodify notrap noquery
407
restrict $PRIVATE_NETWORK mask $PRIVATE_MASK
408
restrict 127.0.0.1
409
driftfile /etc/ntp/drift
410
logfile /var/log/ntp.log
411
EOF
412
        chown -R ntp:ntp /etc/ntp
120 franck 413
# Configuration du serveur dhcpd
1 root 414
        [ -e /etc/dhcpd.conf.default ] || cp /etc/dhcpd.conf /etc/dhcpd.conf.default 2> /dev/null
415
        cat <<EOF > /etc/dhcpd.conf
416
ddns-update-style interim;
417
subnet $PRIVATE_NETWORK netmask $PRIVATE_MASK {
123 franck 418
  option routers $PRIVATE_IP;
419
  option subnet-mask $PRIVATE_MASK;
420
  option domain-name-servers $PRIVATE_IP;
421
  option domain-name "localdomain";
422
  range dynamic-bootp $PRIVATE_DYN_LAST_IP $PRIVATE_DYN_FIRST_IP;
423
  default-lease-time 21600;
424
  max-lease-time 43200;
1 root 425
}
123 franck 426
log-facility    local3;
427
## Exemple reservation @IP fixe sur @MAC
428
# host MACHINE1  {
429
#      hardware ethernet 00:06:9a:f3:07:01;
430
#      fixed-address 192.168.182.140;
431
# }
1 root 432
EOF
433
# écoute côté LAN seulement
434
        [ -e /etc/sysconfig/dhcpd.default ] || cp /etc/sysconfig/dhcpd /etc/sysconfig/dhcpd.default 2> /dev/null
435
        $SED "s?^#INTERFACES=.*?INTERFACES=\"$INTIF\"?g" /etc/sysconfig/dhcpd
234 richard 436
        /sbin/chkconfig --level 345 dhcpd off
1 root 437
# Renseignement des fichiers hosts.allow et hosts.deny
438
        [ -e /etc/hosts.allow.default ]  || cp /etc/hosts.allow /etc/hosts.allow.default
439
        cat <<EOF > /etc/hosts.allow
440
ALL: LOCAL, 127.0.0.1, localhost, $PRIVATE_IP
441
sshd: $PRIVATE_NETWORK_SHORT
442
ntpd: $PRIVATE_NETWORK_SHORT
443
EOF
444
        [ -e /etc/host.deny.default ]  || cp /etc/hosts.deny /etc/hosts.deny.default
445
        cat <<EOF > /etc/hosts.deny
446
ALL: ALL: spawn ( /bin/echo "service %d demandé par %c" | /bin/mail -s "Tentative d'accès au service %d par %c REFUSE !!!" security ) &
447
EOF
448
} # End of network ()
449
 
450
##################################################################
451
##                      Fonction gestion                        ##
452
## - installation du centre de gestion                          ##
453
## - configuration du serveur web (Apache)                      ##
454
## - définition du 1er comptes de gestion                      ##
455
## - sécurisation des accès                                   ##
456
##################################################################
457
gestion()
458
{
459
# Suppression des CGI et des pages WEB installés par défaut
460
        rm -rf /var/www/cgi-bin/*
461
        [ -d $DIR_WEB ] && rm -rf $DIR_WEB
462
        mkdir $DIR_WEB
463
# Copie et configuration des fichiers du centre de gestion
464
        cp -rf $DIR_GESTION/* $DIR_WEB/
465
        echo "$VERSION du $DATE" > $DIR_WEB/VERSION
466
        $SED "s?99/99/9999?$DATE_SHORT?g" $DIR_WEB/menu.php
467
        $SED "s?\$DB_RADIUS = .*?\$DB_RADIUS = \"$DB_RADIUS\"\;?g" $DIR_WEB/phpsysinfo/includes/xml/portail.php
468
        $SED "s?\$DB_USER = .*?\$DB_USER = \"$DB_USER\"\;?g" $DIR_WEB/phpsysinfo/includes/xml/portail.php
469
        $SED "s?\$radiuspwd = .*?\$radiuspwd = \"$radiuspwd\"\;?g" $DIR_WEB/phpsysinfo/includes/xml/portail.php
470
        chmod 640 $DIR_WEB/phpsysinfo/includes/xml/portail.php
5 franck 471
        chown -R apache:apache $DIR_WEB/*
1 root 472
        for i in ISO base logs/firewall logs/httpd logs/squid ;
473
        do
474
                [ -d $DIR_SAVE/$i ] || mkdir -p $DIR_SAVE/$i
475
        done
5 franck 476
        chown -R root:apache $DIR_SAVE
71 richard 477
# Configuration et sécurisation php
478
        [ -e /etc/php.ini.default ] || cp /etc/php.ini /etc/php.ini.default
1 root 479
        $SED "s?^upload_max_filesize.*?upload_max_filesize = 20M?g" /etc/php.ini
480
        $SED "s?^post_max_size.*?post_max_size = 20M?g" /etc/php.ini
71 richard 481
        $SED "s?^html_errors.*?html_errors = Off?g" /etc/php.ini
482
        $SED "s?^expose_php.*?expose_php = Off?g" /etc/php.ini
483
# Configuration et sécurisation Apache
1 root 484
        [ -e /etc/httpd/conf/httpd.conf.default ] || cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default
485
        $SED "s?^#ServerName.*?ServerName $PRIVATE_IP?g" /etc/httpd/conf/httpd.conf
486
        $SED "s?^Listen.*?#Listen 127.0.0.1:80?g" /etc/httpd/conf/httpd.conf
487
        $SED "s?^ServerTokens.*?ServerTokens Prod?g" /etc/httpd/conf/httpd.conf
488
        $SED "s?^ServerSignature.*?ServerSignature Off?g" /etc/httpd/conf/httpd.conf
489
        $SED "s?^#ErrorDocument 404 /missing.html.*?ErrorDocument 404 /index.html?g" /etc/httpd/conf/httpd.conf
490
        FIC_MOD_SSL=`find /etc/httpd/modules.d/ -type f -name *mod_ssl.conf`
491
        $SED "s?^Listen.*?Listen $PRIVATE_IP:443?g" $FIC_MOD_SSL # On écoute en SSL que sur INTIF
492
        $SED "s?background-color.*?background-color: #EFEFEF; }?g" /var/www/error/include/top.html
493
        [ -e /var/www/error/include/bottom.html.default ] || mv /var/www/error/include/bottom.html /var/www/error/include/bottom.html.default
494
        cat <<EOF > /var/www/error/include/bottom.html
495
</body>
496
</html>
497
EOF
498
        echo "- URL d'accès au centre de gestion : https://$PRIVATE_IP" >> $FIC_PARAM
499
# Définition du premier compte lié au profil 'admin'
500
        if [ "$mode" = "install" ]
501
        then
502
                header_install
503
                echo "Pour administrer Alcasar via le centre de gestion WEB, trois profils de comptes ont été définis :"
504
                echo " - le profil 'admin' capable de réaliser toutes les opérations"
505
                echo " - le profil 'backup' lié uniquement aux fonctions d'archivage"
506
                echo " - le profil 'manager' lié uniquement aux fonctions de gestion des usagers"
507
                echo ""
508
                echo "Définissez le premier compte du profil 'admin' :"
509
                echo
510
                echo -n "Nom : "
511
                read admin_portail
512
                echo "- Nom du premier compte lié au profil 'admin' : $admin_portail" >> $FIC_PARAM
513
# Création du fichier de clés de ce compte dans le profil "admin"
514
                [ -d $DIR_WEB/digest ] && rm -rf $DIR_WEB/digest
515
                mkdir -p $DIR_WEB/digest
516
                chmod 755 $DIR_WEB/digest
517
                until [ -s $DIR_WEB/digest/key_admin ]
518
                        do
519
                                /usr/sbin/htdigest -c $DIR_WEB/digest/key_admin $HOSTNAME $admin_portail
520
                        done
521
# Création des fichiers de clés des deux autres profils (backup + manager) contenant ce compte
522
                $DIR_DEST_SBIN/alcasar-profil.sh -list
523
        fi
109 richard 524
# synchronisation horaire
525
        ntpd -q -g &
1 root 526
# Sécurisation du centre
527
        rm -f /etc/httpd/conf/webapps.d/*
528
        cat <<EOF > /etc/httpd/conf/webapps.d/alcasar.conf
529
<Directory $DIR_WEB/digest>
530
        AllowOverride none
531
        Order deny,allow
532
        Deny from all
533
</Directory>
534
<Directory $DIR_WEB/admin>
535
        SSLRequireSSL
536
        AllowOverride None
537
        Order deny,allow
538
        Deny from all
539
        Allow from 127.0.0.1
540
        Allow from $PRIVATE_NETWORK_MASK
541
        require valid-user
542
        AuthType digest
543
        AuthName $HOSTNAME
544
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
545
        AuthUserFile $DIR_WEB/digest/key_admin
546
        ErrorDocument 404 https://$PRIVATE_IP/
547
</Directory>
548
<Directory $DIR_WEB/manager/htdocs>
549
        SSLRequireSSL
550
        AllowOverride None
551
        Order deny,allow
552
        Deny from all
553
        Allow from 127.0.0.1
554
        Allow from $PRIVATE_NETWORK_MASK
555
        require valid-user
556
        AuthType digest
557
        AuthName $HOSTNAME
558
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
559
        AuthUserFile $DIR_WEB/digest/key_manager
560
        ErrorDocument 404 https://$PRIVATE_IP/
561
</Directory>
562
<Directory $DIR_WEB/manager/html>
563
        SSLRequireSSL
564
        AllowOverride None
565
        Order deny,allow
566
        Deny from all
567
        Allow from 127.0.0.1
568
        Allow from $PRIVATE_NETWORK_MASK
569
        require valid-user
570
        AuthType digest
571
        AuthName $HOSTNAME
572
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
573
        AuthUserFile $DIR_WEB/digest/key_manager
574
        ErrorDocument 404 https://$PRIVATE_IP/
575
</Directory>
576
<Directory $DIR_WEB/backup>
577
        SSLRequireSSL
578
        AllowOverride None
579
        Order deny,allow
580
        Deny from all
581
        Allow from 127.0.0.1
582
        Allow from $PRIVATE_NETWORK_MASK
583
        require valid-user
584
        AuthType digest
585
        AuthName $HOSTNAME
586
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
587
        AuthUserFile $DIR_WEB/digest/key_backup
588
        ErrorDocument 404 https://$PRIVATE_IP/
589
</Directory>
590
Alias /save/ "$DIR_SAVE/"
591
<Directory $DIR_SAVE>
592
        SSLRequireSSL
593
        Options Indexes
594
        Order deny,allow
595
        Deny from all
596
        Allow from 127.0.0.1
597
        Allow from $PRIVATE_NETWORK_MASK
598
        require valid-user
599
        AuthType digest
600
        AuthName $HOSTNAME
601
        AuthUserFile $DIR_WEB/digest/key_backup
602
        ErrorDocument 404 https://$PRIVATE_IP/
603
        ReadmeName      /readmeSave.html
604
</Directory>
605
EOF
606
} # End of gestion ()
607
 
608
##########################################################################################
609
##                              Fonction AC()                                           ##
610
## - Création d'une Autorité de Certification et du certificat serveur pour apache    ##
611
##########################################################################################
612
AC ()
613
{
614
        $SED "s?ifcfg-eth.?ifcfg-$INTIF?g" $DIR_DEST_BIN/alcasar-CA.sh
615
        $DIR_DEST_BIN/alcasar-CA.sh $mode
616
        MOD_SSL=`find /etc/httpd/conf -type f -name *default_ssl*`
617
        $SED "s?localhost.crt?alcasar.crt?g" $MOD_SSL
618
        $SED "s?localhost.key?alcasar.key?g" $MOD_SSL
5 franck 619
        chown -R root:apache /etc/pki
1 root 620
        chmod -R 750 /etc/pki
621
} # End AC ()
622
 
623
##########################################################################################
624
##                      Fonction init_db()                                              ##
625
## - Initialisation de la base Mysql                                                    ##
626
## - Affectation du mot de passe de l'administrateur (root)                             ##
627
## - Suppression des bases et des utilisateurs superflus                                ##
628
## - Création de la base 'radius'                                                      ##
629
## - Installation du schéma de cette base                                              ##
630
## - Import des tables de comptabilité (mtotacct, totacct) et info_usagers (userinfo)  ##
631
##       ces table proviennent de 'dialupadmin' (paquetage freeradius-web)              ##
632
##########################################################################################
633
init_db ()
634
{
635
        mkdir -p /var/lib/mysql/.tmp
636
        chown mysql:mysql /var/lib/mysql/.tmp
227 franck 637
        [ -e /etc/my.cnf.rpmnew ] && mv /etc/my.cnf.rpmnew /etc/my.cnf          # prend en compte les migrations de MySQL
1 root 638
        [ -e /etc/my.cnf.default ] || cp /etc/my.cnf /etc/my.cnf.default
639
        $SED "s?^#bind-address.*?bind-address=127.0.0.1?g" /etc/my.cnf
640
        /etc/init.d/mysqld start
641
        sleep 4
642
        mysqladmin -u root password $mysqlpwd
643
        MYSQL="/usr/bin/mysql -uroot -p$mysqlpwd --exec"
644
# On supprime les tables d'exemple
645
        $MYSQL="DROP DATABASE IF EXISTS test;DROP DATABASE IF EXISTS tmp;CONNECT mysql;DELETE from user where user='';FLUSH PRIVILEGES;"
646
        # On crée la base 'radius'
647
        $MYSQL="CREATE DATABASE IF NOT EXISTS $DB_RADIUS;GRANT ALL ON $DB_RADIUS.* TO $DB_USER@localhost IDENTIFIED BY '$radiuspwd';FLUSH PRIVILEGES"
648
        FICSQL_LIBFREERADIUS=`find /etc/raddb/sql/mysql -type f -name schema.sql`
649
        mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $FICSQL_LIBFREERADIUS
650
        $MYSQL="connect $DB_RADIUS;ALTER table radpostauth DROP column pass;"
651
# Ajout des tables de comptabilité journalière et mensuelle (accounting)
652
        DIRSQL_FREERADIUS=`find /usr/share/doc/freeradius-web* -type d -name mysql`
653
        mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/mtotacct.sql
654
        mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/totacct.sql
655
# correction d'un bug sur la table 'userinfo' avant import
656
        $SED "s?^  id int(10).*?  id int(10) NOT NULL auto_increment,?g" $DIRSQL_FREERADIUS/userinfo.sql
657
        mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/userinfo.sql
658
# correction d'un bug sur la table 'badusers' avant import (elle reste inutilisée par Alcasar pour l'instant)
659
        #$SED "s?^  id int(10).*?  id int(10) NOT NULL auto_increment,?g" $DIRSQL_FREERADIUS/badusers.sql
660
        #mysql -u$DB_USER -p$radiuspwd $DB_RADIUS < $DIRSQL_FREERADIUS/badusers.sql
661
} # End init_db ()
662
 
663
##########################################################################
664
##                      Fonction param_radius                           ##
665
## - Paramètrage des fichiers de configuration FreeRadius              ##
666
## - Affectation du secret partagé entre coova-chilli et freeradius    ##
667
## - Modification de fichier de conf pour l'accès à Mysql             ##
668
##########################################################################
669
param_radius ()
670
{
671
        cp -f $DIR_CONF/radiusd-db-vierge.sql /etc/raddb/
672
        chown -R radius:radius /etc/raddb
673
        [ -e /etc/raddb/radiusd.conf.default ] || cp /etc/raddb/radiusd.conf /etc/raddb/radiusd.conf.default
674
# paramètrage radius.conf
675
        $SED "s?^[\t ]*#[\t ]*user =.*?user = radius?g" /etc/raddb/radiusd.conf
676
        $SED "s?^[\t ]*#[\t ]*group =.*?group = radius?g" /etc/raddb/radiusd.conf
677
        $SED "s?^[\t ]*status_server =.*?status_server = no?g" /etc/raddb/radiusd.conf
678
# suppression de la fonction proxy
679
        $SED "s?^[\t ]*proxy_requests.*?proxy_requests = no?g" /etc/raddb/radiusd.conf
680
        $SED "s?^[\t ]*\$INCLUDE proxy.conf.*?#\$INCLUDE proxy.conf?g" /etc/raddb/radiusd.conf
681
# écoute sur loopback uniquement (à modifier plus tard pour l'EAP)
682
        $SED "s?^[\t ]*ipaddr =.*?ipaddr = 127.0.0.1?g" /etc/raddb/radiusd.conf
683
# prise en compte du module SQL et des compteurs SQL
684
        $SED "s?^[\t ]*#[\t ]*\$INCLUDE sql.conf.*?\$INCLUDE sql.conf?g" /etc/raddb/radiusd.conf
685
        $SED "s?^[\t ]*#[\t ]*\$INCLUDE sql/mysql/counter.conf?\$INCLUDE sql/mysql/counter.conf?g" /etc/raddb/radiusd.conf
686
        $SED "s?^[\t ]*\$INCLUDE policy.conf?#\$INCLUDE policy.conf?g" /etc/raddb/radiusd.conf
687
# purge du répertoire des serveurs virtuels et copie du fichier de configuration d'Alcasar
688
        rm -f /etc/raddb/sites-enabled/*
689
        cp $DIR_CONF/alcasar-radius /etc/raddb/sites-available/alcasar
690
        chown radius:apache /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap # droits rw pour apache (module ldap)
691
        chmod 660 /etc/raddb/sites-available/alcasar /etc/raddb/modules/ldap
692
        chgrp apache /etc/raddb /etc/raddb/sites-available /etc/raddb/modules
693
        ln -s /etc/raddb/sites-available/alcasar /etc/raddb/sites-enabled/alcasar
694
        # Inutile dans notre fonctionnement mais les liens sont recrés par un update de radius ... donc là forcé en tant que fichier
695
        touch /etc/raddb/sites-enabled/{inner-tunnel,control-socket,default}
696
# configuration du fichier client.conf (127.0.0.1 suffit mais on laisse le deuxième client pour la future gestion de l'EAP)
697
        [ -e /etc/raddb/clients.conf.default ] || cp -f /etc/raddb/clients.conf /etc/raddb/clients.conf.default
698
        cat << EOF > /etc/raddb/clients.conf
699
client 127.0.0.1 {
700
        secret = $secretradius
701
        shortname = localhost
702
}
703
client $PRIVATE_NETWORK_MASK {
704
        secret = $secretradius
705
        shortname = localhost
706
}
707
EOF
708
# modif sql.conf
709
        [ -e /etc/raddb/sql.conf.default ] || cp /etc/raddb/sql.conf /etc/raddb/sql.conf.default
710
        $SED "s?^[\t ]*login =.*?login = \"$DB_USER\"?g" /etc/raddb/sql.conf
711
        $SED "s?^[\t ]*password =.*?password = \"$radiuspwd\"?g" /etc/raddb/sql.conf
712
        $SED "s?^[\t ]*radius_db =.*?radius_db = \"$DB_RADIUS\"?g" /etc/raddb/sql.conf
713
        $SED "s?^[\t ]*sqltrace =.*?sqltrace = no?g" /etc/raddb/sql.conf
714
# modif dialup.conf
715
        [ -e /etc/raddb/sql/mysql/dialup.conf.default ] || cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup.conf.default
716
        cp -f $DIR_CONF/dialup.conf /etc/raddb/sql/mysql/dialup.conf
717
} # End param_radius ()
718
 
719
##########################################################################
720
##                      Fonction param_web_radius                       ##
721
## - Import, modification et paramètrage de l'interface "dialupadmin"  ##
722
## - Création du lien vers la page de changement de mot de passe        ##
723
##########################################################################
724
param_web_radius ()
725
{
726
# copie de l'interface d'origine dans la structure Alcasar
727
        [ -d /usr/share/freeradius-web ] && cp -rf /usr/share/freeradius-web/* $DIR_WEB/manager/
728
# copie des fichiers modifiés et suppression des fichiers inutiles
729
        cp -rf $DIR_GESTION/manager/* $DIR_WEB/manager/
730
        rm -f $DIR_WEB/manager/index.html $DIR_WEB/manager/readme
731
        rm -f $DIR_WEB/manager/htdocs/about.html $DIR_WEB/manager/htdocs/index.html $DIR_WEB/manager/htdocs/content.html
5 franck 732
        chown -R apache:apache $DIR_WEB/manager/
1 root 733
# Modification du fichier de configuration
734
        [ -e /etc/freeradius-web/admin.conf.default ] || cp /etc/freeradius-web/admin.conf /etc/freeradius-web/admin.conf.default
5 franck 735
        $SED "s?^general_domain:.*?general_domain: $ORGANISME.$DOMAIN?g" /etc/freeradius-web/admin.conf
1 root 736
        $SED "s?^sql_username:.*?sql_username: $DB_USER?g" /etc/freeradius-web/admin.conf
737
        $SED "s?^sql_password:.*?sql_password: $radiuspwd?g" /etc/freeradius-web/admin.conf
738
        $SED "s?^sql_debug:.*?sql_debug: false?g" /etc/freeradius-web/admin.conf
739
        $SED "s?^sql_usergroup_table: .*?sql_usergroup_table: radusergroup?g" /etc/freeradius-web/admin.conf
740
        $SED "s?^sql_password_attribute:.*?sql_password_attribute: Crypt-Password?g" /etc/freeradius-web/admin.conf
741
        $SED "s?^general_finger_type.*?# general_finger_type: snmp?g" /etc/freeradius-web/admin.conf
742
        $SED "s?^general_stats_use_totacct.*?general_stats_use_totacct: yes?g" /etc/freeradius-web/admin.conf
131 richard 743
        cat <<EOF > /etc/freeradius-web/naslist.conf
1 root 744
nas1_name: alcasar.%{general_domain}
745
nas1_model: Portail captif
746
nas1_ip: $PRIVATE_IP
747
nas1_port_num: 0
748
nas1_community: public
749
EOF
750
# Modification des attributs visibles lors de la création d'un usager ou d'un groupe
751
        [ -e /etc/freeradius-web/user_edit.attrs.default ] || mv /etc/freeradius-web/user_edit.attrs /etc/freeradius-web/user_edit.attrs.default
752
        cp -f $DIR_CONF/user_edit.attrs /etc/freeradius-web/user_edit.attrs
114 richard 753
# Ajout du mappage des attributs chillispot
754
        [ -e /etc/freeradius-web/sql.attrmap.default ] || mv /etc/freeradius-web/sql.attrmap /etc/freeradius-web/sql.attrmap.default
755
        cp -f $DIR_CONF/sql.attrmap /etc/freeradius-web/sql.attrmap
1 root 756
# Modification des attributs visibles sur les pages des statistiques (suppression NAS_IP et NAS_port)
757
        [ -e /etc/freeradius-web/sql.attrs.default ] || cp /etc/freeradius-web/sql.attrs /etc/freeradius-web/user_edit.attrs.default
758
        $SED "s?^NASIPAddress.*?NASIPAddress\tNas IP Address\tno?g" /etc/freeradius-web/sql.attrs
759
        $SED "s?^NASPortId.*?NASPortId\tNas Port\tno?g" /etc/freeradius-web/sql.attrs
5 franck 760
        chown -R apache:apache /etc/freeradius-web
1 root 761
# Ajout de l'alias vers la page de "changement de mot de passe usager"
762
        cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
763
Alias /pass/ "$DIR_WEB/manager/pass/"
764
<Directory $DIR_WEB/manager/pass>
765
        SSLRequireSSL
766
        AllowOverride None
767
        Order deny,allow
768
        Deny from all
769
        Allow from 127.0.0.1
770
        Allow from $PRIVATE_NETWORK_MASK
771
        ErrorDocument 404 https://$PRIVATE_IP
772
</Directory>
773
EOF
774
        echo "- URL pour le changement du mot de passe usager : https://$PRIVATE_IP/pass/" >> $FIC_PARAM
775
} # End of param_web_radius ()
776
 
777
##########################################################################
778
##                      Fonction param_chilli                           ##
779
## - Paramètrage du fichier de configuration de coova-chilli           ##
780
## - Paramètrage de la page d'authentification (intercept.php)         ##
781
##########################################################################
782
param_chilli ()
783
{
784
# modification du générateur du fichier de conf 
785
        [ -e /etc/chilli/functions.default ] || cp /etc/chilli/functions /etc/chilli/functions.default
142 richard 786
        # suppression du domaine "coova.org" dans la primitive uamallowed
14 richard 787
        $SED "s?www.coova.org,??g" /etc/chilli/functions
142 richard 788
        # suppression de la primitive "uamanydns"
1 root 789
        $SED "s?uamanydns??g" /etc/chilli/functions
142 richard 790
        # on fixe la socket de commande local (/var/run/chilli.sock)
112 richard 791
        $SED "s?^CMDSOCK=.*?CMDSOCK=\$RUN_D/chilli.sock?g" /etc/chilli/functions
142 richard 792
# modification du fichier d'initialisation
1 root 793
        [ -e /etc/init.d/chilli.default ] || cp /etc/init.d/chilli /etc/init.d/chilli.default
235 richard 794
        # configuration d'eth1 (utile pour dnsmasq))
142 richard 795
        $SED "s?ifconfig.*?ifconfig \$HS_LANIF $PRIVATE_IP?g" /etc/init.d/chilli
796
        # ajout de la fontion 'status' (utile pour la gestion du process)
797
        $SED "/^[\t ]*stop)/i\    status)\n        status chilli\n        RETVAL=$?\n        ;;\n" /etc/init.d/chilli
235 richard 798
        # insertion d'une tempo sur le 'restart' pour permettre à tun0 d'être libérée
799
        $SED "/^[\t ]*\$0 start/i\        sleep 2" /etc/init.d/chilli
1 root 800
# création du fichier de conf
801
        cp /etc/chilli/defaults /etc/chilli/config
802
        $SED "s?^# HS_WANIF=.*?HF_WANIF=$EXTIF?g" /etc/chilli/config
803
        $SED "s?^HS_LANIF=.*?HS_LANIF=$INTIF?g" /etc/chilli/config
804
        $SED "s?^HS_NETWORK=.*?HS_NETWORK=$PRIVATE_NETWORK?g" /etc/chilli/config
805
        $SED "s?^HS_NETMASK=.*?HS_NETMASK=$PRIVATE_MASK?g" /etc/chilli/config
806
        $SED "s?^HS_UAMLISTEN=.*?HS_UAMLISTEN=$PRIVATE_IP?g" /etc/chilli/config
807
        $SED "s?^HS_UAMPORT=.*?HS_UAMPORT=$UAMPORT?g" /etc/chilli/config
808
        $SED "s?^# HS_DYNIP=.*?HS_DYNIP=$PRIVATE_DYN_IP?g" /etc/chilli/config
809
        $SED "s?^# HS_DYNIP_MASK=.*?HS_DYNIP_MASK=$PRIVATE_DYN_MASK?g" /etc/chilli/config
810
        $SED "s?^# HS_STATIP=.*?HS_STATIP=$PRIVATE_STAT_IP?g" /etc/chilli/config
811
        $SED "s?^# HS_STATIP_MASK.*?HS_STATIP_MASK=$PRIVATE_STAT_MASK?g" /etc/chilli/config
812
        $SED "s?^# HS_DNS_DOMAIN=.*?HS_DNS_DOMAIN=$DOMAIN?g" /etc/chilli/config
5 franck 813
        $SED "s?^HS_DNS1=.*?HS_DNS1=$PRIVATE_IP?g" /etc/chilli/config
814
        $SED "s?^HS_DNS2=.*?HS_DNS2=$PRIVATE_IP?g" /etc/chilli/config
1 root 815
        $SED "s?^HS_UAMSECRET=.*?HS_UAMSECRET=$secretuam?g" /etc/chilli/config
816
        $SED "s?^HS_RADIUS=.*?HS_RADIUS=127.0.0.1?g" /etc/chilli/config
817
        $SED "s?^HS_RADIUS2=.*?HS_RADIUS2=127.0.0.1?g" /etc/chilli/config
818
        $SED "s?^HS_RADSECRET=.*?HS_RADSECRET=$secretradius?g" /etc/chilli/config
819
        $SED "s?^HS_UAMALLOW=.*?# HS_UAMALLOW?g" /etc/chilli/config
820
        $SED "s?^HS_UAMSERVER=.*?HS_UAMSERVER=$PRIVATE_IP?g" /etc/chilli/config
821
        $SED "s?^HS_UAMFORMAT=.*?HS_UAMFORMAT=https://\$HS_UAMSERVER/intercept.php?g" /etc/chilli/config
822
        $SED "s?^HS_UAMHOMEPAGE=.*?HS_UAMHOMEPAGE=?g" /etc/chilli/config
823
        $SED "s?^HS_UAMSERVICE=.*?# HS_UAMSERVICE?g" /etc/chilli/config
824
        $SED "s?^# HS_ANYIP=.*?HS_ANYIP=on?g" /etc/chilli/config
825
        $SED "s?^# HS_DNSPARANOIA=.*?HS_DNSPARANOIA=on?g" /etc/chilli/config
826
        $SED "s?^HS_LOC_NAME=.*?HS_LOC_NAME=\"$HOSTNAME\"?g" /etc/chilli/config
827
        $SED "s?^HS_WWWDIR.*?# HS_WWWDIR?g" /etc/chilli/config
828
        $SED "s?^HS_WWWBIN.*?# HS_WWWBIN?g" /etc/chilli/config
829
        $SED "s?^HS_PROVIDER_LINK.*?HS_PROVIDER_LINK=https://\$HS_UAMSERVER/?g" /etc/chilli/config
830
        echo "HS_COAPORT=3799" >> /etc/chilli/config
112 richard 831
        echo "HS_ADMINTERVAL=0" >> /etc/chilli/config
259 richard 832
#       cat <<EOF >> /etc/chilli/config 
833
## Usage d'un DHCPD externe a coova  (dhcpd local ou extérieur)
834
#HS_USE_DHCPD_EXT="on"
835
#HS_DHCP_GATEWAY_IP=127.0.0.1
836
#HS_DHCP_GATEWAY_PORT=67
837
#HS_DHCP_RELAY_AGENT_IP=127.0.0.1
838
#HS_USE_DHCP_RADIUS="no"
839
#EOF
1 root 840
# création des fichiers de sites, d'urls et d'adresses MAC de confiance
841
        echo -e "HS_UAMALLOW=\"\"" > /etc/chilli/alcasar-uamallowed
842
        echo -e "HS_UAMDOMAINS=\"\"" > /etc/chilli/alcasar-uamdomain
843
        $SED "s?^# HS_MACAUTHMODE=.*?HS_MACAUTHMODE=local?g" /etc/chilli/config
139 richard 844
        echo -e "HS_MACALLOW=\"\"" > /etc/chilli/alcasar-macallowed
1 root 845
        chown root:apache /etc/chilli/alcasar-*
846
        chmod 660 /etc/chilli/alcasar-*
847
        echo ". /etc/chilli/alcasar-uamallowed" >> /etc/chilli/config
848
        echo ". /etc/chilli/alcasar-uamdomain" >> /etc/chilli/config
849
        echo ". /etc/chilli/alcasar-macallowed" >> /etc/chilli/config
850
        echo "- URL de deconnexion du portail : http://$PRIVATE_IP:$UAMPORT/logoff" >> $FIC_PARAM
851
# Définition du secret partagé entre coova-chilli et la page d'authentification (intercept.php)
852
        $SED "s?^\$uamsecret =.*?\$uamsecret = \"$secretuam\";?g" $DIR_WEB/intercept.php
853
        $SED "s?^\$userpassword=1.*?\$userpassword=1;?g" $DIR_WEB/intercept.php
854
        $SED "s?^\$organisme = .*?\$organisme = \"$ORGANISME\";?g" $DIR_WEB/intercept.php
855
# Suppression des modifications "iptables" effectuées lors du lancement du daemon coova
856
        $SED "s?^    iptables \$opt \$\*?#   iptables \$opt \$\*?g" /etc/chilli/up.sh
857
}  # End of param_chilli ()
858
 
859
##########################################################
860
##                      Fonction param_squid            ##
861
## - Paramètrage du proxy 'squid' en mode 'cache'      ##
862
## - Initialisation de la base de données              ##
863
##########################################################
864
param_squid ()
865
{
866
# paramètrage de Squid (connecté en série derrière Dansguardian)
867
        [ -e /etc/squid/squid.conf.default  ] || cp /etc/squid/squid.conf /etc/squid/squid.conf.default
868
# suppression des références 'localnet', 'icp', 'htcp' et 'always_direct'
869
        $SED "/^acl localnet/d" /etc/squid/squid.conf
870
        $SED "/^icp_access allow localnet/d" /etc/squid/squid.conf
871
        $SED "/^icp_port 3130/d" /etc/squid/squid.conf
872
        $SED "/^http_access allow localnet/d" /etc/squid/squid.conf
873
        $SED "/^htcp_access allow localnet/d" /etc/squid/squid.conf
874
        $SED "/^always_direct allow localnet/d" /etc/squid/squid.conf
875
# mode 'proxy transparent local'
876
        $SED "s?^http_port.*?http_port 127.0.0.1:$SQUID_PORT transparent?g" /etc/squid/squid.conf
877
# compatibilité des logs avec awstats
878
        $SED "s?^# emulate_httpd_log.*?emulate_httpd_log on?g" /etc/squid/squid.conf
879
        $SED "s?^access_log.*?access_log /var/log/squid/access.log?g" /etc/squid/squid.conf
880
# Initialisation du cache de Squid
881
        /usr/sbin/squid -z
882
}  # End of param_squid ()
883
 
884
##################################################################
885
##              Fonction param_dansguardian                     ##
886
## - Paramètrage du gestionnaire de contenu Dansguardian       ##
887
## - Copie de la blacklist de toulouse                          ##
888
##################################################################
889
param_dansguardian ()
890
{
891
# modification du fichier d'initialisation (correction de la procédure d'arret)
892
        [ -e /etc/init.d/dansguardian.default ] || cp /etc/init.d/dansguardian /etc/init.d/dansguardian.default
893
        cp -f $DIR_CONF/dansguardian-init /etc/init.d/dansguardian
894
        mkdir /var/dansguardian
895
        chown dansguardian /var/dansguardian
896
        [ -e /etc/dansguardian/dansguardian.conf.default ] || cp /etc/dansguardian/dansguardian.conf /etc/dansguardian/dansguardian.conf.default
897
# par défaut, le filtrage WEB est désactivé
898
        $SED "s/^reportinglevel =.*/reportinglevel = -1/g" /etc/dansguardian/dansguardian.conf
899
# la page d'interception est en français
900
        $SED "s?^language =.*?language = french?g" /etc/dansguardian/dansguardian.conf
901
# on limite l'écoute de Dansguardian côté LAN
902
        $SED "s?^filterip =.*?filterip = $PRIVATE_IP?g" /etc/dansguardian/dansguardian.conf
75 richard 903
# on chaîne Dansguardian au proxy antivirus HAVP
80 richard 904
        $SED "s?^proxyport.*?proxyport = 8090?g" /etc/dansguardian/dansguardian.conf
1 root 905
# on remplace la page d'interception (template)
906
        cp -f $DIR_CONF/template.html /usr/share/dansguardian/languages/ukenglish/
907
        cp -f $DIR_CONF/template-fr.html /usr/share/dansguardian/languages/french/template.html
908
# on ne loggue que les deny (pour le reste, on a squid)
909
        $SED "s?^loglevel =.*?loglevel = 1?g" /etc/dansguardian/dansguardian.conf
910
# on désactive par défaut le controle de contenu des pages html
911
        $SED "s?^weightedphrasemode =.*?weightedphrasemode = 0?g" /etc/dansguardian/dansguardian.conf
912
        cp /etc/dansguardian/lists/bannedphraselist /etc/dansguardian/lists/bannedphraselist.default
913
        $SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedphraselist # (on commente ce qui ne l'est pas)
914
# on désactive par défaut le contrôle d'URL par expressions régulières
915
        cp /etc/dansguardian/lists/bannedregexpurllist /etc/dansguardian/lists/bannedregexpurllist.default
916
        $SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedregexpurllist # (on commente ce qui ne l'est pas)
917
# on désactive par défaut le contrôle de téléchargement de fichiers
918
        [ -e /etc/dansguardian/dansguardianf1.conf.default ] || cp /etc/dansguardian/dansguardianf1.conf /etc/dansguardian/dansguardianf1.conf.default
919
        $SED "s?^blockdownloads =.*?blockdownloads = off?g" /etc/dansguardian/dansguardianf1.conf
920
        [ -e /etc/dansguardian/lists/bannedextensionlist.default ] || mv /etc/dansguardian/lists/bannedextensionlist /etc/dansguardian/lists/bannedextensionlist.default
921
        [ -e /etc/dansguardian/lists/bannedmimetypelist.default ] || mv /etc/dansguardian/lists/bannedmimetypelist /etc/dansguardian/lists/bannedmimetypelist.default
922
        touch /etc/dansguardian/lists/bannedextensionlist
923
        touch /etc/dansguardian/lists/bannedmimetypelist
924
# on vide la liste des @IP du Lan ne subissant pas le filtrage WEB
925
        [ -e /etc/dansguardian/lists/exceptioniplist.default ] || mv /etc/dansguardian/lists/exceptioniplist /etc/dansguardian/lists/exceptioniplist.default
926
        touch /etc/dansguardian/lists/exceptioniplist
927
# on copie les fichiers de la BL de toulouse
928
        [ -d /etc/dansguardian/lists/blacklists ] && mv /etc/dansguardian/lists/blacklists /etc/dansguardian/lists/blacklists.default
929
        tar zxvf $DIR_CONF/blacklists.tar.gz --directory=/etc/dansguardian/lists/ 2>&1 >/dev/null
930
        cp -f $DIR_CONF/VERSION-BL $DIR_WEB/
931
        chown apache:apache $DIR_WEB/VERSION-BL
932
# on crée la BL secondaire
933
        mkdir /etc/dansguardian/lists/blacklists/ossi
934
        touch /etc/dansguardian/lists/blacklists/ossi/domains
935
        touch /etc/dansguardian/lists/blacklists/ossi/urls
936
# On crée une WhiteList vide
937
        [ -e /etc/dansguardian/lists/exceptionsitelist.default ] || mv /etc/dansguardian/lists/exceptionsitelist  /etc/dansguardian/lists/exceptionsitelist.default
938
        [ -e /etc/dansguardian/lists/exceptionurllist.default ] || mv /etc/dansguardian/lists/exceptionurllist  /etc/dansguardian/lists/exceptionurllist.default
939
        touch /etc/dansguardian/lists/exceptionsitelist
940
        touch /etc/dansguardian/lists/exceptionurllist
941
# on configure le filtrage de site
942
        [ -e /etc/dansguardian/lists/bannedsitelist.default ] || cp /etc/dansguardian/lists/bannedsitelist /etc/dansguardian/lists/bannedsitelist.default
943
        $SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedsitelist # (on commente ce qui ne l'est pas)
944
# on bloque les sites ne possédant pas de nom de domaine (ex: http://12.13.14.15)
945
        $SED "s?^#\*ip?\*ip?g" /etc/dansguardian/lists/bannedsitelist
946
# on bloque le ssl sur port 80
947
        $SED "s?^#\*\*s?\*\*s?g" /etc/dansguardian/lists/bannedsitelist
948
# on configure la BL de toulouse
949
        cat $DIR_CONF/bannedsitelist >> /etc/dansguardian/lists/bannedsitelist
950
[ -e /etc/dansguardian/lists/bannedurllist.default ] || cp /etc/dansguardian/lists/bannedurllist /etc/dansguardian/lists/bannedurllist.default
951
        $SED "s?^[^#]?#&?g" /etc/dansguardian/lists/bannedurllist # (on commente ce qui ne l'est pas)
952
        cat $DIR_CONF/bannedurllist >> /etc/dansguardian/lists/bannedurllist
5 franck 953
        chown -R dansguardian:apache /etc/dansguardian/
1 root 954
        chmod -R g+rw /etc/dansguardian
955
} # End of param_dansguardian ()
956
 
71 richard 957
##################################################################
958
##                      Fonction antivirus                      ##
109 richard 959
## - configuration havp + clamav                                ##
71 richard 960
##################################################################
961
antivirus ()           
962
{
963
# création de la partition de stockage temporaire (100Mo)
109 richard 964
        dd if=/dev/zero of=/tmp/havp-disk bs=1024k count=30
965
        mkfs.ext4 -qF /tmp/havp-disk
966
        mkdir /var/tmp/havp
967
        echo "# Entry for havp tmp files scan partition" >> /etc/fstab
968
        echo "/tmp/havp-disk /var/tmp/havp ext4 loop,mand,noatime,async" >> /etc/fstab
969
        mount /var/tmp/havp
110 richard 970
        chown -R havp /var/tmp/havp /var/log/havp
109 richard 971
# configuration d'HAVP
972
        [ -e /etc/havp/havp.config.default ] || cp /etc/havp/havp.config /etc/havp/havp.config.default
973
        $SED "/^REMOVETHISLINE/d" /etc/havp/havp.config
974
        $SED "s?^# PARENTPROXY.*?PARENTPROXY 127.0.0.1?g" /etc/havp/havp.config
975
        $SED "s?^# PARENTPORT.*?PARENTPORT 3128?g" /etc/havp/havp.config
976
        $SED "s?^# PORT.*?PORT 8090?g" /etc/havp/havp.config
977
        $SED "s?^# BIND_ADDRESS.*?BIND_ADDRESS 127.0.0.1?g" /etc/havp/havp.config
978
        $SED "s?^ENABLECLAMLIB.*?ENABLECLAMLIB true?g" /etc/havp/havp.config
979
# mise à jour de la base antivirale de clamav toutes les 2 heures
980
        $SED "s?^Checks.*?Checks 12?g" /etc/freshclam.conf
981
        $SED "s?^NotifyClamd.*?# NotifyClamd /etc/clamd.conf?g" /etc/freshclam.conf
71 richard 982
}
983
 
1 root 984
##################################################################################
985
##                              Fonction firewall                               ##
986
## - adaptation des scripts du parefeu                                          ##
987
## - mise en place des règles et sauvegarde pour un lancement automatique      ##
988
## - configuration Ulogd                                                        ##
989
##################################################################################
990
firewall ()
991
{
992
        $SED "s?^EXTIF=.*?EXTIF=\"$EXTIF\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
993
        $SED "s?^INTIF=.*?INTIF=\"$INTIF\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
994
        $SED "s?^PRIVATE_NETWORK_MASK=.*?PRIVATE_NETWORK_MASK=\"$PRIVATE_NETWORK_MASK\"?g" $DIR_DEST_BIN/alcasar-iptables.sh  $DIR_DEST_BIN/alcasar-iptables-bypass.sh
995
        $SED "s?^PRIVATE_IP=.*?PRIVATE_IP=\"$PRIVATE_IP\"?g" $DIR_DEST_BIN/alcasar-iptables.sh $DIR_DEST_BIN/alcasar-iptables-bypass.sh
996
        chmod o+r $DIR_DEST_BIN/alcasar-iptables.sh #lecture possible pour apache (interface php du filtrage réseau)
997
        [ -d /var/log/firewall ] || mkdir -p /var/log/firewall
998
        [ -e /var/log/firewall/firewall.log ] || touch /var/log/firewall/firewall.log
5 franck 999
        chown -R root:apache /var/log/firewall
1 root 1000
        chmod 750 /var/log/firewall
1001
        chmod 640 /var/log/firewall/firewall.log
1002
        $SED "s?^file=\"/var/log/ulogd.syslogemu\"?file=\"/var/log/firewall/firewall.log\"?g" /etc/ulogd.conf
1003
        sh $DIR_DEST_BIN/alcasar-iptables.sh
1004
}  # End of firewall ()
1005
 
1006
##################################################################################
1007
##                              Fonction param_awstats                          ##
1008
## - configuration de l'interface des logs de consultation WEB (AWSTAT)         ##
1009
##################################################################################
1010
param_awstats()
1011
{
1012
        ln -s /var/www/awstats $DIR_WEB/awstats
1013
        cp /etc/awstats/awstats.conf /etc/awstats/awstats.conf.default
1014
        $SED "s?^LogFile=.*?LogFile=\"/var/log/squid/access.log\"?g" /etc/awstats/awstats.conf
1015
        $SED "s?^LogFormat=.*?LogFormat=4?g" /etc/awstats/awstats.conf
1016
        $SED "s?^SiteDomain=.*?SiteDomain=\"$HOSTNAME\"?g" /etc/awstats/awstats.conf
1017
        $SED "s?^HostAliases=.*?HostAliases=\"$PRIVATE_IP\"?g" /etc/awstats/awstats.conf
1018
        $SED "s?^DNSLookup=.*?DNSLookup=0?g" /etc/awstats/awstats.conf
1019
        $SED "s?^DirData=.*?DirData=\"/var/lib/awstats\"?g" /etc/awstats/awstats.conf   # corrige le fichier de config awstats natif ...
1020
        $SED "s?^StyleSheet=.*?StyleSheet=\"/css/style.css\"?g" /etc/awstats/awstats.conf
1021
        $SED "s?^BuildReportFormat=.*?BuildReportFormat=xhtml?g" /etc/awstats/awstats.conf
59 richard 1022
        $SED "s?^UseFramesWhenCGI=.*?UseFramesWhenCGI=0?g" /etc/awstats/awstats.conf
1 root 1023
        cat <<EOF >> /etc/httpd/conf/webapps.d/alcasar.conf
1024
<Directory $DIR_WEB/awstats>
1025
        SSLRequireSSL
1026
        Options ExecCGI
1027
        AddHandler cgi-script .pl
1028
        DirectoryIndex awstats.pl
1029
        Order deny,allow
1030
        Deny from all
1031
        Allow from 127.0.0.1
1032
        Allow from $PRIVATE_NETWORK_MASK
1033
        require valid-user
1034
        AuthType digest
1035
        AuthName $HOSTNAME
1036
        BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
1037
        AuthUserFile $DIR_WEB/digest/key_admin
1038
        ErrorDocument 404 https://$PRIVATE_IP/
1039
</Directory>
1040
SetEnv PERL5LIB /usr/share/awstats/lib:/usr/share/awstats/plugins
1041
EOF
1042
} # End of param_awstats ()
1043
 
1044
##########################################################
235 richard 1045
##              Fonction param_dnsmasq                  ##
1 root 1046
##########################################################
219 jeremy 1047
param_dnsmasq ()
1048
{
1049
        [ -d /etc/dnsmasq.d ] || mkdir /etc/dnsmasq.d
1050
        [ -d /var/log/dnsmasq ] || mkdir /var/log/dnsmasq
1051
        [ -e /etc/dnsmasq.conf ] || cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default
259 richard 1052
        $SED "s?^[^#]?#&?g" /etc/dnsmasq.conf                                   # (on commente ce qui ne l'est pas)
1053
        $SED "s?^#conf-dir=.*?conf-dir=/etc/dnsmasq.d?g" /etc/dnsmasq.conf      # les fichiers de config se trouvent dans /etc/dnsmasq.d/*
1054
        $SED "s?^DHCP_LEASE=.*?DHCP_LEASE=/var/log/dnsmasq/lease.log?g" /etc/sysconfig/dnsmasq # fichier contenant les baux
1055
# on crée le fichier de conf spécifique pour Alcasar
1056
        cat << EOF > /etc/dnsmasq.d/alcasar-dnsmasq.conf
1057
# Inclusion de la blacklist <domains> de Toulouse dans la configuration
1058
conf-dir=/usr/local/etc/alcasar-dnsfilter-enabled
1059
 
1060
listen-address=$PRIVATE_IP
1061
listen-address=127.0.0.1
286 richard 1062
no-dhcp-interface=$INTIF
259 richard 1063
bind-interfaces
1064
 
1065
cache-size=256
1066
domain=$DOMAIN
1067
domain-needed
1068
expand-hosts
1069
bogus-priv
1070
filterwin2k
1071
server=$DNS1
1072
server=$DNS2
1073
 
1074
dhcp-range=$ORGANISME,$PRIVATE_DYN_FIRST_IP,$PRIVATE_DYN_LAST_IP,$PRIVATE_MASK,12h
1075
#dhcp-option=3,1.2.3.4
1076
#dhcp-option=option:router,1.2.3.4
1077
#dhcp-option=42,0.0.0.0
1078
#dhcp-option=option:ntp-server,192.168.0.4,10.10.0.5
1079
 
1080
# Exemple de configuration statique
1081
#dhcp-host=11:22:33:44:55:66,ssic-test,192.168.10.20,255.255.255.0,45m
1082
EOF
249 franck 1083
        mkdir /usr/local/etc/{alcasar-dnsfilter-available,alcasar-dnsfilter-enabled}
1084
        chown -R 770 /usr/local/etc/{alcasar-dnsfilter-available,alcasar-dnsfilter-enabled}
1085
        chown -R root:apache /usr/local/etc/{alcasar-dnsfilter-available,alcasar-dnsfilter-enabled}
1086
        /usr/local/bin/alcasar-dnsfilter-import.sh
1087
        /usr/local/bin/alcasar-dnsfilter-activate.sh
254 franck 1088
} # End dnsmasq
219 jeremy 1089
 
1 root 1090
##########################################################
1091
##              Fonction cron                           ##
1092
## - Mise en place des différents fichiers de cron     ##
1093
##########################################################
1094
cron ()
1095
{
1096
# Modif du fichier 'crontab' pour passer les cron à minuit au lieu de 04h00
1097
        [ -e /etc/crontab.default ] || cp /etc/crontab /etc/crontab.default
1098
        cat <<EOF > /etc/crontab
1099
SHELL=/bin/bash
1100
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1101
MAILTO=root
1102
HOME=/
1103
 
1104
# run-parts
1105
01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly
1106
02 0 * * * root nice -n 19 run-parts --report /etc/cron.daily
1107
22 0 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly
1108
42 0 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
1109
EOF
1110
        [ -e /etc/anacrontab.default ] || cp /etc/anacrontab /etc/anacrontab.default
1111
        cat <<EOF >> /etc/anacrontab
1112
7       10      cron.logExport          nice /etc/cron.d/export_log
1113
7       15      cron.logClean           nice /etc/cron.d/clean_log
168 franck 1114
7       20      cron.importClean        nice /etc/cron.d/clean_import
1 root 1115
EOF
1116
# suppression des fichiers de logs de plus d'un an (tous les lundi à 4h30)
1117
        cat <<EOF > /etc/cron.d/clean_log
1118
30 4 * * 1 root $DIR_DEST_BIN/alcasar-log-clean.sh
1119
EOF
1120
# export de la base des usagers (tous les lundi à 4h45)
1121
        cat <<EOF > /etc/cron.d/mysql
1122
45 4 * * 1 root $DIR_DEST_SBIN/alcasar-mysql.sh -dump
1123
EOF
1124
# export des log squid, firewall et apache (tous les lundi à 5h00)
1125
        cat <<EOF > /etc/cron.d/export_log
1126
#!/bin/sh
1127
00 5 * * 1 root $DIR_DEST_BIN/alcasar-log-export.sh
1128
EOF
1129
# mise à jour des stats de consultation WEB toutes les 30'  ## existe en double pour le daily sans l'@IP
1130
# sans mèl ( > /dev/null 2>&1)
1131
        cat << EOF > /etc/cron.d/awstats
1132
*/30 * * * * root /var/www/awstats/awstats.pl -config=localhost -update >/dev/null 2>&1
1133
EOF
219 jeremy 1134
# suppression des fichiers de mots de passe lors d'imports massifs par fichier de plus de 24h
168 franck 1135
        cat << EOF > /etc/cron.d/clean_import
1136
30 * * * *  root /usr/local/bin/alcasar-import-clean.sh
1137
EOF
1 root 1138
# mise à jour des stats de connexion (accounting). Scripts provenant de "dialupadmin" (rpm freeradius-web) (cf. wiki.freeradius.org/Dialup_admin).
1139
# on écrase le crontab d'origine installé par le RPM "freeradius-web" (bug remonté à qa.mandriva.com : 46739).
1140
# 'tot_stats' (tout les jours à 01h01) : aggrégat des connexions journalières par usager (renseigne la table 'totacct') 
1141
# 'monthly_tot_stat' (tous les jours à 01h05) : aggrégat des connexions mensuelles par usager (renseigne la table 'mtotacct')
1142
# 'truncate_raddact' (tous les 1er du mois à 01h10) : supprime les entrées journalisées plus vieilles que '$back_days' jours (défini ci-après)
1143
# 'clean_radacct' (tous les 1er du mois à 01h15) : ferme les session ouvertes de plus de '$back_days' jours (défini ci-après)
1144
        $SED "s?^\$back_days.*?\$back_days = 365;?g" /usr/bin/truncate_radacct
1145
        $SED "s?^\$back_days.*?\$back_days = 30;?g" /usr/bin/clean_radacct
1146
        rm -f /etc/cron.daily/freeradius-web
1147
        rm -f /etc/cron.monthly/freeradius-web
1148
        cat << EOF > /etc/cron.d/freeradius-web
1149
1 1 * * * root /usr/bin/tot_stats > /dev/null 2>&1
1150
5 1 * * * root /usr/bin/monthly_tot_stats > /dev/null 2>&1
1151
10 1 1 * * root /usr/bin/truncate_radacct > /dev/null 2>&1
1152
15 1 1 * * root /usr/bin/clean_radacct > /dev/null 2>&1
1153
EOF
1154
# activation du "chien de garde" (watchdog) toutes les 3' afin de déconnecter les usagers authentifiés dont la station est usurpée ou ne répond plus
1155
        cat << EOF > /etc/cron.d/watchdog
1156
*/3 * * * * root $DIR_DEST_BIN/alcasar-watchdog.sh > /dev/null 2>&1
1157
EOF
1158
} # End cron
1159
 
1160
##################################################################
1161
##                      Fonction post_install                   ##
1162
## - Modification des bannières (locales et ssh) et des prompts ##
1163
## - Installation de la structure de chiffrement pour root      ##
1164
## - Mise en place du sudoers et de la sécurité sur les fichiers##
1165
## - Mise en place du la rotation des logs                      ##
5 franck 1166
## - Configuration dans le cas d'une mise à jour               ##
1 root 1167
##################################################################
1168
post_install()
1169
{
1170
# adaptation du script "chien de garde" (watchdog)
1171
        $SED "s?^PRIVATE_IP=.*?PRIVATE_IP=\"$PRIVATE_IP\"?g" $DIR_DEST_BIN/alcasar-watchdog.sh
1172
# création de la bannière locale
1173
        [ -e /etc/mandriva-release.default ]  || cp /etc/mandriva-release /etc/mandriva-release.default
1174
cat <<EOF > /etc/mandriva-release
1175
 Bienvenue sur $HOSTNAME
1176
 
1177
EOF
1178
# création de la bannière SSH
1179
        cp /etc/mandriva-release /etc/ssh/alcasar-banner-ssh
5 franck 1180
        chmod 644 /etc/ssh/alcasar-banner-ssh ; chown root:root /etc/ssh/alcasar-banner-ssh
1 root 1181
        [ -e /etc/ssh/sshd_config.default ] || cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
1182
        $SED "s?^Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1183
        $SED "s?^#Banner.*?Banner /etc/ssh/alcasar-banner-ssh?g" /etc/ssh/sshd_config
1184
# sshd écoute côté LAN
1185
        $SED "s?^#ListenAddress 0\.0\.0\.0?ListenAddress $PRIVATE_IP?g" /etc/ssh/sshd_config
1186
# sshd n'est pas lancé automatiquement au démarrage
1187
        /sbin/chkconfig --del sshd
1188
# Coloration des prompts
1189
        [ -e /etc/bashrc.default ]  || cp /etc/bashrc /etc/bashrc.default
5 franck 1190
        cp -f $DIR_CONF/bashrc /etc/. ; chmod 644 /etc/bashrc ; chown root:root /etc/bashrc
1 root 1191
# Droits d'exécution pour utilisateur apache et sysadmin
1192
        [ -e /etc/sudoers.default ]  || cp /etc/sudoers /etc/sudoers.default
5 franck 1193
        cp -f $DIR_CONF/sudoers /etc/. ; chmod 440 /etc/sudoers ; chown root:root /etc/sudoers
1 root 1194
        $SED "s?^Host_Alias.*?Host_Alias        LAN_ORG=$PRIVATE_NETWORK_MASK,localhost         #réseau de l'organisme?g" /etc/sudoers
132 franck 1195
# prise en compte de la rotation des logs sur 1 an (concerne mysql, httpd, dansguardian, squid, radiusd, ulogd)
1 root 1196
        cp -f $DIR_CONF/logrotate.d/* /etc/logrotate.d/
1197
        chmod 644 /etc/logrotate.d/*
1198
# processus lancés par défaut au démarrage
110 richard 1199
        $SED "s?^# Default-Start.*?# Default-Start: 3 4 5?g" /etc/init.d/mysqld
132 franck 1200
        $SED "s?^# Default-Stop.*?# Default-Stop: 0 1 2?g" /etc/init.d/mysqld   # pour éviter les alertes de dépendance de services (netfs)
219 jeremy 1201
        $SED "s?^# chkconfig:.*?# chkconfig: 23 61 40?g" /etc/init.d/dnsmasq    # pour démarrer dnsmasq avec eth1 up avant chilli - utile ??
1202
#       for i in netfs ntpd iptables ulogd dhcpd squid named chilli httpd radiusd mysqld dansguardian havp freshclam
1203
        for i in netfs ntpd iptables ulogd dnsmasq squid chilli httpd radiusd mysqld dansguardian havp freshclam
1 root 1204
        do
1205
                /sbin/chkconfig --add $i
1206
        done
235 richard 1207
# On affecte le niveau de sécurité "fileserver" (c'est pas mal) ...
1208
        $SED "s?BASE_LEVEL=.*?BASE_LEVEL=fileserver?g" /etc/security/msec/security.conf
132 franck 1209
# On supprime la vérification périodique du mode promiscious des interfaces réseaux ( nombreuses alertes sur eth1 dû à Tun0 de coova-chilli )
235 richard 1210
        $SED "s?CHECK_PROMISC=.*?CHECK_PROMISC=no?g" /etc/security/msec/level.fileserver
1211
# On supprime les log_martians
1212
        $SED "s?^ENABLE_LOG_STRANGE_PACKETS=.*?ENABLE_LOG_STRANGE_PACKETS=no?g" /etc/security/msec/level.fileserver
1 root 1213
# On mets en place la sécurité sur les fichiers
1214
# des modif par rapport à radius update
1215
        cat <<EOF > /etc/security/msec/perm.local
1216
/var/log/firewall/                      root.apache     750
1217
/var/log/firewall/*                     root.apache     640
1218
/etc/security/msec/perm.local           root.root       640
1219
/etc/security/msec/level.local          root.root       640
1220
/etc/freeradius-web                     root.apache     750
1221
/etc/freeradius-web/admin.conf          root.apache     640
1222
/etc/freeradius-web/config.php          root.apache     640
1223
/etc/raddb/dictionnary                  root.radius     640
1224
/etc/raddb/ldap.attrmap                 root.radius     640
1225
/etc/raddb/hints                        root.radius     640
1226
/etc/raddb/huntgroups                   root.radius     640
1227
/etc/raddb/attrs.access_reject          root.radius     640
1228
/etc/raddb/attrs.accounting_response    root.radius     640
1229
/etc/raddb/acct_users                   root.radius     640
1230
/etc/raddb/preproxy_users               root.radius     640
1231
/etc/raddb/modules/ldap                 radius.apache   660
1232
/etc/raddb/sites-available/alcasar      radius.apache   660
1233
/etc/pki/*                              root.apache     750
1234
EOF
1235
        /usr/sbin/msec
59 richard 1236
# modification /etc/inittab
1237
        [ -e /etc/inittab.default ] || cp /etc/inittab /etc/inittab.default
60 richard 1238
# On ne garde que 3 terminaux
59 richard 1239
        $SED "s?^4.*?#&?g" /etc/inittab
1240
        $SED "s?^5.*?#&?g" /etc/inittab
1241
        $SED "s?^6.*?#&?g" /etc/inittab
139 richard 1242
# dans le cas d'une mise à jour, on charge la conf d'une version précédente
5 franck 1243
if [ "$mode" = "update" ]
1244
then
1245
        $DIR_DEST_BIN/alcasar-conf.sh -load
1246
fi
1 root 1247
        cd $DIR_INSTALL
5 franck 1248
        echo ""
1 root 1249
        echo "#############################################################################"
1250
        echo "#                        Fin d'installation d'ALCASAR                       #"
1251
        echo "#                                                                           #"
1252
        echo "#         Application Libre pour le Contrôle Authentifié et Sécurisé        #"
1253
        echo "#                     des Accès au Réseau ( ALCASAR )                       #"
1254
        echo "#                                                                           #"
1255
        echo "#############################################################################"
1256
        echo
1257
        echo "- ALCASAR sera fonctionnel après redémarrage du système"
1258
        echo
1259
        echo "- Lisez attentivement la documentation d'exploitation"
1260
        echo
1261
        echo "- L'interface de gestion est consultable à partir de n'importe quel poste"
1262
        echo "  situé sur le réseau de consultation à l'URL https://$PRIVATE_IP "
235 richard 1263
        echo "                                   ou à l'URL https://alcasar "
1 root 1264
        echo
1265
        echo "                   Appuyez sur 'Entrée' pour continuer"
1266
        read a
1267
        clear
1268
        reboot
1269
} # End post_install ()
1270
 
1271
#################################
1272
#  Boucle principale du script  #
1273
#################################
5 franck 1274
usage="Usage: alcasar.sh -install | -uninstall"
1 root 1275
nb_args=$#
1276
args=$1
1277
if [ $nb_args -eq 0 ]
1278
then
1279
        nb_args=1
1280
        args="-h"
1281
fi
1282
case $args in
1283
        -\? | -h* | --h*)
1284
                echo "$usage"
1285
                exit 0
1286
                ;;
29 richard 1287
        -install)
5 franck 1288
                header_install
29 richard 1289
                testing
5 franck 1290
# On teste la présence d'une version déjà installée
29 richard 1291
                header_install
5 franck 1292
                if [ -e $DIR_WEB/VERSION ]
1 root 1293
                then
5 franck 1294
                        echo -n "La version "; echo -n `cat $DIR_WEB/VERSION`; echo " d'ALCASAR est déjà installée";
1295
                        response=0
1296
                        PTN='^[oOnN]$'
1297
                        until [[ $(expr $response : $PTN) -gt 0 ]]
1298
                        do
1299
                                echo -n "Voulez-vous effectuer une mise à jour (O/n)? ";
1300
                                read response
1301
                        done
1302
                        if [ "$response" = "o" ] || [ "$response" = "O" ]
1303
                        then
1304
# On crée le fichier de conf de la version actuelle
1305
                                chmod u+x $DIR_SCRIPTS/alcasar-conf.sh
1306
                                $DIR_SCRIPTS/alcasar-conf.sh -create
1307
                        fi
1308
# On désinstalle la version actuelle
65 richard 1309
                $DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1 root 1310
                fi
29 richard 1311
# On teste la version du système
1312
                fic=`cat /etc/product.id`
1313
                old="$IFS"
1314
                IFS=","
1315
                set $fic
1316
                for i in $*
1317
                do
1318
                        if [ "`echo $i|grep version|cut -d'=' -f1`" == "version" ]
1319
                        then
1320
                                version=`echo $i|cut -d"=" -f2`
1321
                        fi
1322
                done
1323
                IFS="$old"
1324
                if [ ! "$version" = "$MDV_NEEDED" ]
1325
                then
131 richard 1326
                        echo "Vous devez installer une des versions suivantes de Linux Mandriva ($MDV_NEEDED). Pour cela, vous pouvez suivre la procédure suivante :"
132 franck 1327
                        echo "- copiez sur clé USB le fichier de configuration de la version actuelle d'ALCASAR ('/tmp/alcasar-conf.tar.gz');"
131 richard 1328
                        echo "- installez le nouveau système 'Linux Mandriva';"
1329
                        echo "- copiez le fichier de configuration d'ALCASAR dans le répertoire '/tmp';"
1330
                        echo "- installez la nouvelle version d'ALCASAR."
230 franck 1331
                        echo " Souhaitez-vous migrer la version du système automatiquement via Internet ? [O/n]"
1332
                        read response
1333
                        if [ "$reponse" = "o" ] || [ "$reponse" = "O" ]
1334
                        then
1335
                              $DIR_SCRIPT/sbin/alcasar-dist-upgrade.sh
234 richard 1336
                        else
1337
                              exit 0
230 franck 1338
                        fi
29 richard 1339
                fi
5 franck 1340
                if [ -e /tmp/alcasar-conf.tar.gz ]
1 root 1341
                then
14 richard 1342
                echo "#### Installation avec mise à jour ####"
5 franck 1343
# On récupère le nom d'organisme à partir de fichier de conf
1344
                        tar -xvf /tmp/alcasar-conf.tar.gz conf/hostname
1345
                        ORGANISME=`cat $DIR_CONF/hostname|cut -b 9-`
1346
                        hostname `cat $DIR_CONF/hostname`
1347
                        mode="update"
1348
                else
1349
                        mode="install"
1 root 1350
                fi
220 jeremy 1351
                for func in init network gestion AC init_db param_radius param_web_radius param_chilli param_squid param_dansguardian antivirus firewall param_awstats param_dnsmasq cron post_install
1352
 
5 franck 1353
                do
1354
                        $func
93 richard 1355
# echo "*** 'debug' : end of function $func ***"; read a
14 richard 1356
                done
5 franck 1357
                ;;
1358
        -uninstall)
1359
                if [ ! -e $DIR_DEST_SBIN/alcasar-uninstall.sh ]
1 root 1360
                then
5 franck 1361
                        echo "Aucune version d'ALCASAR n'a été trouvée.";
1 root 1362
                        exit 0
1363
                fi
5 franck 1364
                response=0
1365
                PTN='^[oOnN]$'
1366
                until [[ $(expr $response : $PTN) -gt 0 ]]
1367
                do
1368
                        echo -n "Voulez-vous créer le fichier de conf de la version actuelle (0/n)? "
1369
                        read response
1370
                done
1371
                if [ "$reponse" = "o" ] || [ "$reponse" = "O" ]
1 root 1372
                then
5 franck 1373
                        $DIR_SCRIPT/alcasar-conf.sh -create
1 root 1374
                fi
5 franck 1375
# On désinstalle la version actuelle
65 richard 1376
                $DIR_SCRIPTS/sbin/alcasar-uninstall.sh
1 root 1377
                ;;
1378
        *)
1379
                echo "Argument inconnu :$1";
1380
                echo "$usage"
1381
                exit 1
1382
                ;;
1383
esac
10 franck 1384
# end of script