Outils pour utilisateurs

Outils du site


amipo_weekend_reboot

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
amipo_weekend_reboot [2019/12/14 17:18] bigMaxamipo_weekend_reboot [2019/12/19 20:10] – [Technique] Jérémy
Ligne 1: Ligne 1:
 ====== Weekend reboot de l'AMIPO ====== ====== Weekend reboot de l'AMIPO ======
  
 +Pad: https://pad.lobotomie.org/p/amipo
 ===== Décisions ===== ===== Décisions =====
-==== Audiance cible ==== +==== L'audiance cible de l'AMIPO ==== 
-Tous public / ex: framasoft+Tous public / ex: framasoft, pas besoin d'adhérer à l'association.
  
 ==== Premier service à héberger ==== ==== Premier service à héberger ====
-Un service à heberger et blinder au cours des prochains mois :  Agenda & Contacts partagés via Nextcloud+Un service à héberger et blinder au cours des prochains mois :  Agenda & Contacts partagés. Nous essayerons d'administrer un serveur Nextcloud pour remplir cette tâche.
  
 +==== Actions du weekend ====
 +Nous nous motivons pour néttoyer la VM de production AMIPO pour y installer :
 +  * Debian 10 (buster)
 +  * nginx
 +  * postgresql
 +  * nextcloud
  
-===== Work done =====+Nous commençons en même temps à travailler sur : 
 +  * une refonte de la page d'accueil https://amipo.fr 
 +  * les divers documents légaux à présenter aux utilisateurs. 
 + 
 +===== TODOs ===== 
 +==== Technique ==== 
 + 
 +La TODO liste des choses à faire et en cours est sur le dépôt [[https://framagit.org/amipo/amipo-plante/-/boards|AMIPO Plante]] 
 + 
 +  - [x] Configuration de DMARC et SPF sur le DNS amipo.fr 
 +  - [x] Créer compte Benjamin 
 +  - [x] Renforcer la configuration de nginx (bonnes pratiques de sécurité, php, ...) 
 +  - [x] Configuration du cron Nextcloud 
 +  - [x] Configuration du serveur SMTP 
 +  - [x] Mettre en place un backup automatisé des data sur le serveur (nextcloud, l'éventuel CMS, ...) 
 +  - [x] Finaliser la configuration nginx (redirection, ...) 
 +  - [x] Fix warnings install Nextcloud 
 + 
 +==== Organisationnel ==== 
 +  * [_] Quand se revoit-on ? 
 +  * [_] Comment travail t-on ? Tout le monde à un accès admin pour se connecter depuis chez lui ? 
 + 
 +===== Revue / Tests ===== 
 +==== Ce qui fonctionne ==== 
 +  * Création de compte sur Nextcloud 
 +  * Création d'un agenda 
 +  * Import d'un agenda exterieur dans nextcloud 
 +  * Récupération d'un agenda nextcloud sur mon smartphone avec [[ https://f-droid.org/en/packages/at.bitfire.davdroid/ | l'appli DAVx5 ]] 
 +  * La réception des emails envoyés par le serveur 
 + 
 +==== Ce qui ne fonctionne pas ==== 
 +  * Mon compte nextcloud n'est dans aucun groupe à la création. 
 +  * Je peux envoyer de gros fichiers sur nextcloud 
 +  * Certains fichiers que j'envoie sont "en erreur" 
 +  * Il y a beaucoup d'options disponibles dans nextcloud ce qui fait que je m'y perd un peu. 
 +  * L'email de logs envoyé par le cronjob de backup contient en titre le MDP de la BD. 
 +  * Le script de backup à un problème avec une table : il n'a pas les droits pour la verrouillé. Cette table à été ajouté par l'installation du plugin pico cms et il faut donc les droits à l'utilisateur de backup de faire des select sur cette table. 
 +  * Les fichiers copiés par le script de backup ne semble être que les fichiers de jchatard. 
 +  * Une URL qu'il faudrait interdire d’accès: https://amipo.fr/nuage/ocs/v2.php/apps/serverinfo/api/v1/info 
 +  * L'upload de fichier fonctionne mal. Quand je tente d'importer mon agenda qui pese 500 kB, mon firefox effectue 1300 requêtes PUT pour envoyer le fichier, ce qui DDOS le serveur. Problème au niveau de l'import fichiers ics du calendrier https://github.com/nextcloud/calendar/issues/445 https://github.com/nextcloud/calendar/issues/871 
 + 
 +==== Actions ==== 
 +  * [2019-12-19] Modification de la cronjob pour envoyer un email sans password dans le subject. (en cours de test) 
 +  * [2019-12-19] Ajout des privileges manquant sur la table public.oc_cms_pico_websites pour l'utilisateur de backup. (en cours de test) 
 +  * [2019-12-19] Configuration des politiques SPF et DMARC 
 +  *  
 + 
 +===== Work log =====
 ==== Mise à jour de l'OS du serveur ==== ==== Mise à jour de l'OS du serveur ====
 Passage de Debian Stretch à Buster : [[ https://www.cyberciti.biz/faq/update-upgrade-debian-9-to-debian-10-buster/ ]] Passage de Debian Stretch à Buster : [[ https://www.cyberciti.biz/faq/update-upgrade-debian-9-to-debian-10-buster/ ]]
Ligne 19: Ligne 73:
   * sudo apt --purge autoremove   * sudo apt --purge autoremove
  
 +==== Paramétrage php.ini ====
 +<file ini /etc/php/7.3/fpm/php.ini>
 +opcache.enable = 1
 +opcache.enable_cli = 1
 +opcache.interned_strings_buffer = 8
 +opcache.max_accelerated_files = 10000
 +opcache.memory_consumption = 128
 +opcache.save_comments = 1
 +opcache.revalidate_freq = 1
 +max_execution_time=128M
 +max_input_time = 20M
 +</file>
 +==== Nginx ====
 +=== Installation ===
 +  sudo apt install nginx
 +  
 +=== Configuration ===
 +  - Par défaut on utilise le domaine amipo.fr
 +  - Toutes les requêtes sur un vhost différent de https://amipo.fr son redirigés vers https://amipo.fr[requête_originale]
 +  - Si la requête match un fichier dans /var/www/default le sert tout de même.
 +  - php n'est interprété nulle part si pas explicité.
  
 +=== Renforcement ===
 +[[ https://www.ssllabs.com/ssltest/analyze.html?d=amipo.fr&latest | Test ssl ]]
  
-==== Générer une clé SSH ====+[[ https://www.acunetix.com/blog/articles/nginx-server-security-hardening-configuration-1/ | Guide de configuration renforcée ]] 
 +<file conf /etc/nginx/conf.d/hardening.conf> 
 +# Remove version 
 +server_tokens off;
  
 +# Control Buffer Overflow Attacks
 +client_body_buffer_size 1k;
 +client_header_buffer_size 1k;
 +client_max_body_size 1k;
 +large_client_header_buffers 4 1k;
  
-ssh-keygen -t rsa -b 4096 -C "identifiant_cle"+# Prevent Clickjacking Attack (disable frame and iframe from other domain) 
 +add_header X-Frame-Options "SAMEORIGIN";
  
 +# Add X-XSS Protection
 +add_header X-XSS-Protection "1; mode=block";
 +</file>
  
-==== Installation de Nginx ==== 
-  sudo apt install nginx 
-   
 ==== Installation de certbot (letsencrypt) ==== ==== Installation de certbot (letsencrypt) ====
 +  sudo apt-get install certbot python-certbot-nginx
 +  certbot certonly -d amipo.fr -d www.amipo.fr --webroot --webroot-path "/var/www/default/" --dry-run
 +  certbot certonly -d amipo.fr -d www.amipo.fr --webroot --webroot-path "/var/www/default/"
 +==== Postgresql ====
 +
 +=== Installation ===
 +  sudo apt-get install postgresql-11
 +  sudo apt install php7.3-pgsql
 + 
 +
 +=== Ajout d'un utilisateur pour les backups ===
 +  create role nextcloud_backup;
 +  alter role nextcloud_backup encrypted password '_-ihTobM_*Bd6pTFNDhM';
 +  alter role nextcloud_backup login;
 +  grant connect on nextcloud to nextcloud_backup;
 +  grant usage on schema public to nextcloud_backup;
 +  grant select on all tables in schema public to nextcloud_backup;
 +  grant select on all sequences in schema public to nextcloud_backup;
 +  
 +==== Cron jobs ====
 +
 +Exécution du cron de Nextcloud toutes les 5 minutes, penser à cocher l'option **Cron** dans la page [[https://amipo.fr/nuage/settings/admin|Paramètres de NextCloud]].
 +
 +  $ sudo crontab -u www-data -e
 +
 +   */ *  *  *  * php -f /var/www/nuage/cron.php
 +  
 +==== Backup ====
 +
 +Un backup des fichiers et de la base est créé tous les jours à 2h du matin via le cron de www-data:
 +
 +  sudo crontab -l -u www-data
 +  
 +Le script utilisé est /var/nextcloud/backup_nextcloud.sh et sauvegarde dans /var/nextcloud/backups.
 +
 +Script :
 +
 +  #!/usr/bin/env bash
 +  
 +  # exec 3>&1 4>&2
 +  # trap 'exec 2>&4 1>&3' 0 1 2 3
 +  # exec 1>backup-nextcloud.log 2>&1
 +  # Everything below will go to the file 'backup-nextcloud.log':
 +  
 +  echo "------------"
 +  DATE_START=`date`
 +  echo "[STARTING] Backup of NextCloud ${DATE_START}"
 +  
 +  echo "Create backup directory..."
 +  mkdir -p /var/nextcloud/backups/`date +"%Y%m%d"`
 +  
 +  echo "Maintenance mode: ON"
 +  php /var/www/nuage/occ maintenance:mode --on
 +  
 +  echo "Backing up database..."
 +  pg_dump --username=nextcloud_backup -d nextcloud -h localhost | gzip > /var/nextcloud/backups/`date +"%Y%m%d"`/nextcloud.psql.gz
 +  
 +  echo "Copying config files..."
 +  
 +  rsync -Aavx /var/www/nuage/config/ /var/nextcloud/backups/`date +"%Y%m%d"`/config/
 +  rsync -Aavx /var/nextcloud/data/ /var/nextcloud/backups/`date +"%Y%m%d"`/data/
 +  rsync -Aavx /var/www/nuage/themes/ /var/nextcloud/backups/`date +"%Y%m%d"`/themes/
 +  
 +  echo "Maintenance mode: ON"
 +  php /var/www/nuage/occ maintenance:mode --off
 +  echo "Nextcloud should be running: ON"
 +  DATE_END=`date`
 +  echo "[ENDING] Backup of NextCloud finished on ${DATE_END}"
 +==== Configurer l'envoi d'email ====
 +
 + $ sudo dpkg-reconfigure exim4-config
 +
 +Choisir le type de configuration : **internet site; mail is sent and received directly using SMTP**
 +
 +Répondre aux questions suivantes avec le choix par défaut. S'assurer de n'accepter que l'envoi d'email depuis localhost.
 +
 +Configuration de Nextcloud via le fichier /var/www/nuage/config/config.php :
 +
 +  'mail_smtpmode' => 'sendmail',
 +  'mail_sendmailmode' => 'smtp',
 +  'mail_from_address' => 'ne_pas_repondre',
 +  'mail_domain' => 'amipo.fr',
 +
 +==== Renforcer notre serveur email avec une politique DMARC et SPF ====
 +
 +  * [[ https://mxtoolbox.com/SuperTool.aspx?action=dmarc%3aamipo.fr&run=networktools | Test DMARC ]]
 +  * [[ https://mxtoolbox.com/SuperTool.aspx?action=spf%3aamipo.fr&run=networktools | Test SPF ]]
 +
 +Utilisations des generateurs :
 +  * [[ https://mxtoolbox.com/DMARCRecordGenerator.aspx | Generateur DMARC ]]
 +  * [[ https://mxtoolbox.com/SPFRecordGenerator.aspx | Generateur SPF ]]
 +
 +Dans notre DNS ajouter 2 entry :
 +
 +  Type: TXT
 +  Host/Name: _DMARC.amipo.fr
 +  Value: v=DMARC1; p=none; rua=mailto:admin@amipo.fr; ruf=mailto:admin@amipo.fr; fo=1 
 +
 +et
 +
 +  Type: TXT
 +  Host/Name: amipo.fr
 +  Value: v=spf1 a ~all 
 +  
 +
  
 ==== Ressources installation Nextcloud ==== ==== Ressources installation Nextcloud ====
Ligne 36: Ligne 227:
 https://www.c-rieger.de/nextcloud-installation-guide-debian-9-10/ https://www.c-rieger.de/nextcloud-installation-guide-debian-9-10/
  
-===== Ajouter la clef ssh sur le serveur ===== +===== Création d'un compte et d'un jeu de clef ssh pour un nouvel administrateur ===== 
-Créer préalablement un compte pour l'utilisateur bobpuis+ 
 +Générer une clé SSH sur le poste de l'administrateur 
 +  ssh-keygen -t rsa -b 4096 -C "identifiant_cle" 
 + 
 +Créer préalablement un compte pour l'utilisateur bob 
 +  sudo adduser --disabled-password bob 
 + 
 +puis créer pour l'utilisateur un repertoire .ssh
   sudo mkdir /home/bob/.ssh   sudo mkdir /home/bob/.ssh
-Copier - coller la clef publique dans le fichier authorized_keys+   
 +Copier - coller la clef publique dans le fichier /home/bob/.ssh/authorized_keys
   sudo nano /home/bob/.ssh/authorized_keys   sudo nano /home/bob/.ssh/authorized_keys
 +  
 Changer le propriétaire du répertoire et du fichier Changer le propriétaire du répertoire et du fichier
-  sudo chown -R jchatard:jchatard /home/bob/.ssh/ +  sudo chown -R bob:bob /home/bob/.ssh/ 
-Ajouter éventuellement l'utilisateur au groupe sudo+   
 +Ajouter éventuellement l'utilisateur au groupe sudo si il est administrateur
   sudo usermod -a -G sudo bob   sudo usermod -a -G sudo bob
      
-==== Installer PrettyNoemieCMS ===== 
-=== Installer tout d'abord Composer === 
-  php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
-  php -r "if (hash_file('sha384', 'composer-setup.php') === 'baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" 
-  php composer-setup.php 
-  php -r "unlink('composer-setup.php');" 
-Pour installer Composer globalement 
-  sudo mv composer.phar /usr/local/bin/composer 
- 
-=== Installer le CMS === 
-Le serveur doit disposer d'un serveur webn Nginx en l'occurence 
  
  
amipo_weekend_reboot.txt · Dernière modification : 2020/10/09 07:08 de serge