Aller au contenu principal

Messages

Cette espace vous permet de voir toutes les Messages réalisées par ce membre. Vous ne pouvez voir que les Messages réalisées dans les espaces auxquels vous avez accès.

Messages - squid-f

271
Sécurité / Re : Ransomware crypte les données sur les serveurs Linux NextCloud
Oui Sogal, tu as raison, mon passage en 7.3 est lié à une compatibilité avec une application  de Nextcloud.
Par contre, j’étais déjà passé en 7.2.24 via un dépôt home car je n’étais pas au courant que bien que restant en 7.2.5, un patch de sécurité s’appliquait.
Je n’ai pas de doute quant à la qualité du suivi de OpenSuse mais, sans Alionet, je ne m’en serais pas aperçu du fait de mes connaissances limitées.

A+
272
Sécurité / Re : Ransomware crypte les données sur les serveurs Linux NextCloud
Bonjour

Vous l’avez probablement vu mais, au cas où, il faut aussi mettre à jour le fichier de configuration nginx :
https://nextcloud.com/blog/urgent-security-issue-in-nginx-php-fpm/

Merci chalu pour l’information sur le patch opensuse. C’est rassurant. Par contre, moi qui ne suis pas vraiment dans les détails de la boucle de mise à jour, j’avais été plus rassuré par une mise à jour vers les dernières versions recommandées de PHP-FPM.

A+
273
Général / Re : Documentation sur openSUSE
Bonjour

Je ne sais pas s’il faut poster ma question ici mais vous pourrez l’enlever au besoin :
Comment se porter volontaire pour aider à la traduction anglais vers français (dans la mesure de mes connaissances informatiques bien sûr) ?

A+
276
Sécurité / Re : Ransomware crypte les données sur les serveurs Linux NextCloud
Merci pour l’info.

Il semble que la faille de sécurité liée à NGINX et PHP-FPM soit exploitée.
Cette faille a été annoncée  sur le forum de Nextcloud il y a quelques semaines et il est recommandé de mettre à jour PHP-FPM
C’est pour cela que j’avais demandé de l’aide sur Alionet et Sogal m’a aidé à passer en 7.3.11 avec Leap 15.1
J’explique aussi cette mise à jour dans mon post / tuto.

A+
278
Internet, réseaux et serveurs / Re : Tuto d'installation serveur Nextcloud sous Leap 15.1
Merci sogal.

Pour les headers, j'ai bien ceux que tu préconises. Il y a juste l'option preload qui n'est pas présente pour Strict-Transport-Security.
En fait, tous les headers étaient activés dans le fichier fourni par la documentation NEXTCLOUD. Le Strict-Transport-Security a lui été mis en place par CERTBOT dans le fichier NGINX de mon hôte Nextcloud ; et donc sans l'option preload.
Cette option preload semble controversée et j'avoue humblement que je ne sais pas quoi en penser...

Pour la liste blanche, effectivement, j'ai trouvé cela dans la doc de FAIL2BAN et c'est bien cohérent avec ce que tu suggères.

Je vais regarder ce que je peux faire pour mettre au "format" Markdown. Y a-t-il aussi une limite de 20000 caractères comme pour un post sur le forum ? Je te passe cela comment ? Par MP ?

A+
279
Internet, réseaux et serveurs / Re : Tuto d'installation serveur Nextcloud sous Leap 15.1
Bonjour et merci Sogal

Je vais regarder l'histoire des entêtes. Effectivement, j'ai pris le fichier recommandé dans le manuel Nextcloud.

Pour fail2ban, je vais regarder aussi la liste blanche ; je n'ai pas réalisé que cela existait.

J'ai désactivé l'extension Force Brute de Nextcloud car j'ai lu quelques part que FAIL2BAN bloquerait ce type d'attaque. Ai-je bien fait ?

Tu mentionnes en intro un format Markdown pour ce post. Si cela peut aider, je veux bien regarder. Par contre, je ne sais pas du tout ce que c'est :-[
Il faudrait m'indiquer au moins une doc à regarder.

A bientôt

280
Internet, réseaux et serveurs / Tuto d'installation serveur Nextcloud sous Leap 15.1
Bonjour à toutes et à tous.

Grâce à l’aide reçue sur ce forum, j’ai pu finaliser l’installation de mon serveur Nextcloud.
En fait, il y a beaucoup de tutos pour ubuntu mais très peu pour Opensuse. D’ailleurs, je n’ai rien trouvé pour Leap 15.x
Donc, sans prétentions, je poste ce tuto car j’ai passé beaucoup de temps à adapter les tutos des autres distributions à Opensuse (je ne suis pas un pro!). Si cela peut aider d’autres personnes, j’en serai ravi.
De plus, si les experts de ce forum ont des idées d’améliorations ou si j’ai fait des choses qui exposent mon serveur à la malveillance, je suis preneur de toute remarque.

Avant de commencer, voici les sources qui m’ont bien aidé :
https://www.c-rieger.de/nextcloud-installation-guide-ubuntu-18-04/
https://decatec.de/home-server/nextcloud-auf-ubuntu-server-18-04-lts-mit-nginx-mariadb-php-lets-encrypt-redis-und-fail2ban/
https://www.howtoforge.com/tutorial/owncloud-nginx-opensuse-leap-42.1/
https://nextcloud.com/support/
et notre cher sogal sur Alionet !

Installation de NGINX et PHP
J’ai choisi d’installer une autre version de php-fpm que celle d’origine de Leap 15.1 car le module password de Nextcloud ne va bientôt plus supporter php-fpm7.2.
La version 7.3 sera installée grâce à (php7-apcu et imagick sont dans extensions) :
zypper addrepo https://download.opensuse.org/repositories/devel:languages:php:php73/openSUSE_Leap_15.1/devel:languages:php:php73.repo
zypper addrepo https://download.opensuse.org/repositories/server:php:extensions:php7/php7_openSUSE_Leap_15.1/server:php:extensions:php7.repo
zypper refresh

Je garde les versions par défaut de nginx et mariadb car, d’après sogal, Opensuse Leap recevra les mises à jour de sécurité.

Installation de nginx
zypper in nginx 

Installation de PHP
En disséquant la documentation de Nextcloud, j’ai abouti à la liste et l’installation des modules suivants :
sudo zypper in php7 php7-APCu php7-bz2 php7-ctype php7-curl php7-dom php7-exif php7-fileinfo php7-fpm php7-gd php7-gmp php7-iconv php7-imagick php7-intl php7-json php7-ldap php7-mbstring php7-mysql php7-opcache php7-openssl php7-pcntl php7-pdo php7-posix php7-tokenizer php7-xmlreader php7-xmlwriter php7-zip  php7-zlib ffmpeg-3 

Tests initiaux NGINX et PHP-FPM
Test de NGINX
Créer  /srv/www/htdocs/index.html avec
<html>
<body>
<h1> NGINX fonctionne </h1>
</body>
</html>

Modifier /etc/nginx/nginx.conf
Ajouter index.php dans la ligne ci-dessous vers le début du fichier :
        
index  index.html index.htm index.php;

enlever les symboles # de commentaire pour la bloc ci-dessous :
location ~ \.php$ {
    root           /srv/www/htdocs/;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
 }

Tester la syntaxe des modifications avec la commande ci-dessous qui ne doit pas renvoyer d’erreur :
sudo nginx -t
Démarrer le service
sudo systemctl enable nginx
sudo systemctl start nginx

Dans navigateur taper : localhost et le message « NGINX fonctionne » doit apparaître

Test PHP-FPM
 Créer /srv/www/htdocs/info.php avec
<?php
phpinfo();
?>

Initialiser les fichiers de configuration
sudo cp /etc/php7/fpm/php-fpm.conf.default  /etc/php7/fpm/php-fpm.conf
sudo cp /etc/php7/fpm/php-fpm/php-fpm.d/www.conf.default /etc/php7/fpm/php-fpm/php-fpm.d/www.conf

modifier php-fpm.conf en enlevant le symbole # de la ligne ci-dessous :
error_log = log/php-fpm.log

modifier www.conf  comme ci-dessous, en changeant user et group, et en enlevant le symbole de commentaire qui est cette fois ; pour d’autres:
user = nginx
group = nginx

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

pour améliorer la performance, modifier www.conf de façon à écouter un socket et non un port. Pour cela, commenter la ligne listen = 127.0.0.1:9000 et ajouter une ligne pour pointer vers un socket :
;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

Revenir sur /etc/nginx/nginx.conf et modifier comme suit le bloc location ~ \.php$ en ajoutant la ligne fastcgi_pass pointant le même socket que dans www.conf :
 location ~ \.php$ {
             root           /srv/www/htdocs/;
             #fastcgi_pass   127.0.0.1:9000;
             fastcgi_pass   unix:/var/run/php-fpm.sock;
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
             include        fastcgi_params;
         }

Initialiser le service :
sudo systemctl enable php-fpm
sudo systemctl start php-fpm

Taper localhost/info.php pour avoir des informations sur la configuration php installée.
https://www.alionet.org/index.php?action=dlattach;sa=tmpattach;attach=post_tmp_33_2337f2e0a91756b5c1bf10c2d55698d9;topic=0

Maintenant que nous nous sommes assurés que NGINX et PHP-FPM fonctionnent, nous allons avancer dans leur optimisation et finir l’installation de NEXTCLOUD

Optimisation de NGINX

Modification du fichier /etc/nginx/nginx.conf
    • user : utilisateur du serveur web : nginx
    • worker_processes : nombre de coeurs du CPU : auto
    • pid : j’ai décommenté la ligne mais je n’ai pas trouvé d’explication. Je suis preneur d’information !
    • server_tokens : mettre à off pour la sécurité en limitant les informations fournies par nginx.
    • TCP_NOPUCH, TCP_NODELAY, SENDFILE : en les combinant on peut gagner jusqu’à 0,2s lors de l’envoi des données.

En repartant du fichier nginx.conf juste modifié, ajuster les lignes comme suit :
user  nginx;
worker_processes  auto;

pid        /var/run/nginx.pid;

tcp_nopush     on;
tcp_nodelay     on;

server_tokens off;

Test & Restart NGINX
sudo nginx -t 
sudo systemctl restart nginx

Optimisation de PHP
Modification de /etc/php7/fpm/php-fpm.d/www.conf

J’ai limité pm.max_children à 150 en utilisant la formule ci-dessous :
Total Max Processes = (Total Ram - (Used Ram + Buffer)) / (Memory per php process)
En allouant 5Go de ram à mon serveur et avec une taille de 35Mo par requête PHP, cela donne : (1024*5) / 35 = 146.
    • user / group : à mettre en consistence avec le serveur = nginx
    • Listen : pointer vers le même socket que les autres fichiers = /run/php/php-fpm.sock
    • Environment Variables: NEXTCLOUD à besoin de ces variables = bloc à décommenter.
    • Prévention d’un timeout de nextcloud à l’installation avec request_terminate_timeout = 300
     
Ajuster les lignes du fichier comme suit :
user = nginx
group = nginx

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

pm.max_children = 150

pm.start_servers = 20

pm.min_spare_servers = 10

pm.max_spare_servers = 20

pm.max_requests = 500

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

;ajout de la ligne ci-dessous
request_terminate_timeout = 300

modification de /etc/php7/cli/php.ini
    • cgi.fix_pathinfo : pour améliorer la sécurité = 0
    • expose_php = off évite d’avoir accès à la version de php depuis l’extérieur
    • Plus d’autres paramètres d’optimisation de fonctionnement (memory_limit = 512M est demandé par NEXTCLOUD).

Le fichier php.ini existe déjà dans le répertoire /etc/php7/cli ; ajuster les lignes du fichier comme suit :
 
implicit_flush = Off

expose_php = Off

max_execution_time = 1800

max_input_time = 3600
 
memory_limit = 512M
 
html_errors = On
 
register_argc_argv = Off

post_max_size = 10240M
 
cgi.fix_pathinfo=0
 
upload_max_filesize = 10240M
 
max_file_uploads = 100
 
date.timezone = Europe/Paris

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1


Création de /etc/php7/fpm/php.ini
A l’installation, ce fichier n’existe pas. J’ai donc juste copié le fichier php.ini du répertoire /etc/php7/cli que nous venons de modifier.
sudo cp /etc/php7/cli/php.ini /etc/php7/fpm

Modification de /etc/php7/fpm/php-fpm.conf
Pour faire redémarrer FPM en cas d’erreurs répétées dans un laps de temps.
Ajuster les lignes du fichier comme suit :
pid = /var/run/php-fpm.pid

error_log = /var/log/php-fpm.log
 
emergency_restart_threshold = 10
 
emergency_restart_interval = 1m
 
process_control_timeout = 10s

Mise à jour permission
Important car a empêché la connexion dans Nextcloud malgré les bons nom d’utilisateur et mot de passe.
sudo chown nginx:nginx /var/lib/php7

Création hôte virtuel Nextcloud dans NGINX
A noter que mon serveur nextcloud sera appelé par un sous-répertoire de mon nom domaine : https://mon_domaine/nextcloud
Mon fournisseur internet (free) me permet de créer gratuitement un nom de domaine (avec extension hd.free.fr) qui pointe vers mon serveur. Il ne faudra pas oublier sur la freebox de faire un transfert de port vers l’adresse IP de la machine qui sert de serveur.
Créer le fichier /etc/nginx/vhosts.d/nextcloud.conf (c’est une version sans certificat SSL car certbot s’en chargera ensuite) comme suit et en modifiant mon_domaine par votre nom de domaine :

https://www.alionet.org/index.php?action=dlattach;sa=tmpattach;attach=post_tmp_33_83030c2fc6f295c1024556022389228a;topic=0

Pare-feu
Avec Yast, autoriser http et https

Install Letsencrypt avec Certbot
On peut obtenir un certificat SSL gratuitement grâce à Let’s Encrypt.
Installation du client certbot conseillé par Let’s Encrypt. J’installe aussi le plugin nginx qui fera la modification du fichier nextcloud.conf
sudo zypper in python3-certbot-nginx

Pour obtenir le certificat, lancer la commande suivante et en remplaçant mon_email et mon_domaine par les vôtres :
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email[color=red] mon_email[/color] -d [color=red]mon_domaine[/color] --rsa-key-size 4096

Modification du ficher SSL créé par CERTBOT
Recommendation de sites comme SSLAB d’arrêter d’utiliser TLSv1
sudo nano /etc/letsencrypt/options-ssl-nginx.conf

remplacer :
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
par :
ssl_protocols TLSv1.3 TLSv1.2;

cron de renouvellement des certificats
En effet, au bout de 3 mois le certificat expire. Il faut le renouveler et pour cela un script cron est créé (source : sogal)
Créer script cron certbot à placer dans /etc/cron.weekly/

sudo nano /etc/cron.weekly/certbot

#!/bin/sh
# Stop nginx first
systemctl stop nginx
# Renew certs
certbot --standalone renew
# Restart nginx
systemctl start nginx

Penser à le rendre exécutable:
chmod +x /etc/cron.weekly/certbot

MariaDB

Installation par :
zypper in mariadb

puis initialiser par :
sudo rcmysql start

Securisation de MariaDB
sudo mysql_secure_installation
Vous allez devoir répondre aux questions comme suit :
Switch to unix_socket authentication [Y/n] N
Enter current password for root (enter for none): <ENTER>
Set root password? [Y/n] Y
[i]Entrer votre mot de passe et s’en rappeler[color=red][/color][/i]
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Création de la base de données
    • Nom de la base de données : nextcloud
    • Son administrateur nextcloud_admin
    • le mot de passe associé admin_password

sudo mysql -uroot -p
> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER nextcloud_admin@localhost IDENTIFIED BY 'admin_password'; GRANT ALL PRIVILEGES on nextcloud.* to nextcloud_admin@localhost; FLUSH privileges; quit;

Installation serveur Nextcloud
    • Télécharger l’archive depuis le site de Nextcloud et la décompresser
    • Copier le répertoire nextcloud dans /srv/www (ATTENTION : l’archive décompressée contient un sous-répertoire avant celui de nextcloud…)
    • Puis donner le bon propriétaire (nginx) :
       
chown -R nginx:nginx /var/www/nextcloud

J’ai placé la base de données nextcloud dans un répertoire en-dehors de /srv/www/nextcloud
J’ai créé le répertoire /data/nextcloud_data   pour cela :
sudo mkdir /data/nextcloud_data
puis   
sudo chown -R nginx:nginx /data/nextcloud_data

Lancer ensuite un navigateur internet (firefox par exemple) et taper l’adresse : https://mon_domaine/nextcloud

Vous obtiendrez l’interface de configuration de nextcloud.
Il faut créer l’utilisateur administrateur et entrer les informations de la configuration de la base de données mysql créée précédemment dans la section mariadb.

Ajout d’un cronjob pour Nextcloud
   
su -
crontab -u nginx -e
et taper :
*/5 * * * * php -f /srv/www/nextcloud/cron.php > /dev/null 2>&1

APCU cache pour Nextcloud
Pour améliorer les performances, ajouter dans le fichier /srv/nextcloud/config/config.php :
'memcache.local' => '\OC\Memcache\APCu',

FAIL2BAN
C’est pour bannir les adresses IP de personnes malveillantes qui tenteraient de s’identifier sur le serveur.
Au bout de 3 tentatives infructueuses de connexion, l’adresse IP sera bannie.

Installation de fail2ban :
zypper in fail2ban

(7 paquets d'installés :  ed fail2ban libgamin-1-0 python2-pyinotify python2-systemd python-gamin whois)

Ajouter des lignes suivantes dans /etc/fail2ban/filter.d/nextcloud.conf

[Definition]
failregex=^{"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)","level":2,"time":".*"}$
            ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","app":"core".*","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)".*}$
            ^.*\"remoteAddr\":\"<HOST>\".*Trusted domain error.*$

Création d’un nouveau fichier prison pour nextcloud :
nano /etc/fail2ban/jail.d/nextcloud.local

et y copier les lignes suivantes :
[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 36000
findtime = 36000
logpath = /data/nextcloud_data/nextcloud.log
[nginx-http-auth]
enabled = true 

Redémarrer fail2ban-service et vérifier son statut :
sudo systemclt restart fail2ban
sudo fail2ban-client status nextcloud
Qui donne le résultat suivant :
Status for the jail: nextcloud
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list: /data/nextcloud_data/nextcloud.log
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list:

Pour contrôler les IP bannies
sudo fail2ban-client status nextcloud 

Pour autoriser à nouveau une IP
sudo fail2ban-client set nextcloud unbanip ip_address

Vous pouvez aussi par la suite faire en sorte que fail2ban vous envoie un email en cas de blocage (configurer postfix pour cela).

Et voilà. Pour moi cela fonctionne du tonnerre.  8)
J’espère que cela pourra aider quelqu’un à se lancer !
N’oublier pas de faire des sauvegardes régulières de vos données et serveurs (voir documentation sur nextcloud.com).
Bien entendu, comme dit la maxime de nos jours, je me dois de décliner toute responsabilité en cas de perte de données ou de réinstallation du système...

A bientôt !

Christian
282
Internet, réseaux et serveurs / Re : Mise à jour de Leap 15.1 vers PHP7.3.11
Me revoilà  ;D

En fait, sogal avait la solution mais j'ai dû mal m'y prendre.

Voilà ce qui a fonctionné :

zypper rm -u php*
zypper ar -f http://download.opensuse.org/repositories/devel:/languages:/php/openSUSE_Leap_15.1/ php-devel
zypper addrepo https://download.opensuse.org/repositories/server:php:extensions:php7/php7_openSUSE_Leap_15.1/server:php:extensions:php7.repo
zypper in php7 php7-APCu php7-bz2 php7-ctype php7-curl php7-dom php7-exif php7-fileinfo php7-fpm php7-gd php7-gmp php7-iconv php7-imagick php7-intl php7-json php7-ldap php7-mbstring php7-mysql php7-opcache php7-openssl php7-pcntl php7-pdo php7-posix php7-tokenizer php7-xmlreader php7-xmlwriter php7-zip  php7-zlib

Attention de bien sauvegarder ses fichiers de configuration PHP. Dans la manœuvre, le fichier /etc/php7/cli/php.ini a été remplacé par un nouveau.

Et me voici donc avec un serveur NEXTCLOUD en PHP7.3.11 !  8)

MERCI SOGAL

A+

PS : si je veux garder NGINX et MARIADB à jour, quelqu'un aurait-il un suggestion de dépôts comme ceux de "devel" ci-dessus ?
284
Internet, réseaux et serveurs / Re : Projet Spamhaus
Merci sogal!

J'ai effectivement FAIL2BAN d'installé et juste ouvert les ports dont tu parles (+NFS et Samba).
Mais, de l'extérieur, cela passe par mon router qui ne forward que les ports 80 et 443. Le serveur n'est accessible qu'en HTTPS mais j'ai laissé le port 80 car CERTBOT doit en avoir besoin pour renouveler le certificat LETSENCRYPT (correct ??).

Mes respects pour tout le support que tu apportes. ;)
285
Internet, réseaux et serveurs / Re : Mise à jour de Leap 15.1 vers PHP7.3.11
Merci. J'ai ajouté ce dépôt mais j'ai toujours le même problème  :'(

php -v me renvoie les erreurs par rapport aux modules apcu et imagick

zypper dup pour les 2 nouveaux dépôts n'aboutit pas car requiert php(api) = 20170718

D'ailleurs, c'est quoi ce php(api) 20170718 ??  >:(

D'autres idées de quelqu'un ? (ne te décourage pas sogal !  :)) )