Debian/Ubuntu: installation de Proftpd avec sftp et tls

Installation de base


Nous allons configurer un serveur ftp avec le support sftp et tls. Pour cela, nous allons installer les paquets suivants:

apt install proftpd proftpd-mod-crypto

Ensuite nous nous rendons dans le répertoire /etc/proftpd. Les fichiers de configuration sont très bien documentés, cependant, nous allons créer nos propres fichiers de configuration dans le répertoire conf.d.

Créons le fichier /etc/proftpd/conf.d/00-extra.conf:

ServerName "My FTP Server"
RequireValidShell on
AuthOrder mod_auth_pam.c* mod_auth_unix.c
DefaultRoot ~

Configuration du SFTP


Nous allons générer le fichier dhparams4096.pem (ou 2048 si vous le souhaitez), attention cela prend un certain temps !

openssl dhparam -out /etc/proftpd/dhparams4096.pem 4096

Passons maintenant au fichier /etc/proftpd/conf.d/01-sftp.conf:

LoadModule mod_sftp.c
LoadModule mod_sftp_pam.c
­<IfModule mod_sftp.c>
	<VirtualHost 0.0.0.0>
		SFTPEngine on
		Port 2233
		SFTPLog /var/log/proftpd/sftp.log

		# On utilise les même clefs ssh que celles du serveur openssh
		SFTPHostKey /etc/ssh/ssh_host_rsa_key
		SFTPHostKey /etc/ssh/ssh_host_dsa_key
		SFTPDHParamFile /etc/proftpd/dhparams4096.pem
		SFTPAuthMethods password
		RequireValidShell off
		SFTPCompression delayed
	</VirtualHost>
</IfModule>

Configuration du TLS


Pour pouvoir utiliser le TLS, nous devons disposer de certificats ssl. Soit vous disposez déjà de vos propres certificats (via letsencrypt par exemple), soit vous créez vos certificats auto-signés, c’est ce que nous allons faire ici:

openssl req -x509 -newkey rsa:4096 -sha256 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 3650

On modifie les droits sur ces fichiers:

chmod 600 /etc/ssl/private/proftpd.key
chmod 600 /etc/ssl/certs/proftpd.crt

Intéressons nous enfin à la configuration du TLS, pour cela, créons le fichier /etc/proftpd/conf.d/02-tls.conf:

LoadModule mod_tls.c
LoadModule mod_tls_fscache.c
LoadModule mod_tls_shmcache.c
LoadModule mod_tls_memcache.c

<IfModule mod_tls.c>
	TLSEngine on
	TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
	TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
	TLSLog /var/log/proftpd/tls.log
	TLSRequired on
	TLSOptions  EnableDiags NoSessionReuseRequired
	TLSVerifyClient off
</IfModule>

Modification SSH


Si vous avez déjà un serveur openssh qui tourne sur votre config, il est nécessaire de désactiver/commenter la ligne suivante dans le fichier /etc/ssh/sshd_config:

# override default of no subsystem
# Subsystem sftp /usr/lib/openssh/sftp-server

Redémarrage des services


Il ne reste plus qu’à redémarrer les services proftpd et ssh:

service ssh restart
service proftpd restart

et de contrôler le bon fonctionnement:

journalctl -xeu proftpd.service

Reste à tester cette configuration en sftp et ftp explicite sur TLS avec votre client ftp favori.

Debian squid 5.7, squidGuard et apparmor

Après avoir migré les packages mysql vers mysql-openssl et avoir configuré un proxy transparent avec squidGuard, il s’avère que squid ne se lance pas par défaut à cause du profil apparmor usr.sbin.squid qui n’autorise pas l’accès à l’éxécutable squidGuard:

audit[2214270]: AVC apparmor="DENIED" operation="exec" class="file" profile="/usr/sbin/squid" name="/usr/bin/squidGuard" pid=2214270 comm="squid" requested_mask="x" denied_mask="x" fsuid=13 ouid=0
ipcCreate: /usr/bin/squidGuard: (13) Permission denied

Aussi, afin de résoudre ce problème, il vous suffit d’éditer le fichier /etc/apparmor.d/usr.sbin.squid et d’ajouter la ligne suivante dans la section # squid configuration:

usr/bin/squidGuard rix,

Il vous reste alors à charger le profil modifié:

apparmor_parser -r /etc/apparmor.d/usr.sbin.squid

et enfin à relancer squid:

service squid restart

Vous n’avez plus qu’à vérifier que le service s’est bien exécuté et que le redirector se charge bien:

service squid status
 squid.service - Squid Web Proxy Server
Loaded: loaded (/lib/systemd/system/squid.service; enabled; preset: enabled)
Active: active (running) since Mon 2023-08-28 12:33:03 CEST; 7h ago
Docs: man:squid(8)
Process: 3922596 ExecStartPre=/usr/sbin/squid --foreground -z (code=exited, status=0/SUCCESS)
Main PID: 3922601 (squid)
Tasks: 22 (limit: 154421)
Memory: 178.2M
CPU: 43.065s
CGroup: /system.slice/squid.service
├─3922601 /usr/sbin/squid --foreground -sYC
├─3922608 "(squid-1)" --kid squid-1 --foreground -sYC
├─3922613 "(security_file_certgen)" -s /var/spool/squid/ssl_db -M 8MB
├─3922614 "(security_file_certgen)" -s /var/spool/squid/ssl_db -M 8MB
├─3922615 "(security_file_certgen)" -s /var/spool/squid/ssl_db -M 8MB
├─3922616 "(security_file_certgen)" -s /var/spool/squid/ssl_db -M 8MB
├─3922617 "(security_file_certgen)" -s /var/spool/squid/ssl_db -M 8MB
├─3922618 "(logfile-daemon)" /var/log/squid/access.log
├─3922619 "(unlinkd)"
├─3922620 "(pinger)"
├─3922621 "(squidGuard)" -c /etc/squidguard/squidGuard.conf
├─3922622 "(squidGuard)" -c /etc/squidguard/squidGuard.conf
├─3922644 "(squidGuard)" -c /etc/squidguard/squidGuard.conf
├─3923047 "(squidGuard)" -c /etc/squidguard/squidGuard.conf
├─3923048 "(squidGuard)" -c /etc/squidguard/squidGuard.conf
├─3923049 "(squidGuard)" -c /etc/squidguard/squidGuard.conf

Lexar NM790 et linux

Edite du 26/09/2023: le patch définitif a été intégré aux derniers kernel (6.5.5). Tout est rentré dans l’ordre.

Edit du 12/09/2023: un fil de discussion est disponible ici apportant une réponse officielle au problème, et devrait être très prochainement intégré au kernel.

Article original:
Actuellement (au 24/08/2023), si vous avez l’intention d’utiliser le NVME Lexar NM790 sous linux, cela s’avère très compliqué car il ne s’initialise tout simplement pas au démarrage.

Je viens d’en faire l’expérience en clonant mon système sur ce nvme:

NVMe: Device not ready; aborting initialisation, CSTS=0x0

Après plusieurs recherches sur internet (notamment ce lien), il s’agit bien d’un problème connu, mais rassurez-vous il peut tout a fait se résoudre. Cependant inutile d’utiliser le premier patch proposé, car il ne correspond pas à notre nvme:

Non-Volatile memory controller: Shenzhen Longsys Electronics Co., Ltd. Device 1602 (rev 01)
PCI_DEVICE(0x1d97, 0x1602)

Le patch proposant  de modifier drivers/nvme/host/core.c permet de booter correctement sur ce nvme. La modification proposée évite d’avoir NVME_CSTS_RDY à 0.

Cependant j’ai modifié la ligne:

(timeout + 1) / 2, « initialisation »);

en

((timeout + 1) / 2) + 1, « initialisation »);

De fait voici le patch définitif:

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 3ec38e2b9173..ab2583cb42aa 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -2408,6 +2408,7 @@ int nvme_enable_ctrl(struct nvme_ctrl *ctrl)
	} else {
	        timeout = NVME_CAP_TIMEOUT(ctrl->cap);
	}
+	dev_info(ctrl->device, "[PATCH] nvme core got timeout %u\n",timeout);

	ctrl->ctrl_config |= (NVME_CTRL_PAGE_SHIFT - 12) << NVME_CC_MPS_SHIFT;
	ctrl->ctrl_config |= NVME_CC_AMS_RR | NVME_CC_SHN_NONE;
@@ -2425,8 +2426,9 @@ int nvme_enable_ctrl(struct nvme_ctrl *ctrl)
	ret = ctrl->ops->reg_write32(ctrl, NVME_REG_CC, ctrl->ctrl_config);
	if (ret)
	        return ret;
+	dev_info(ctrl->device, "[PATCH] nvme_wait_ready now wait for %u, previously %u\n",((timeout + 1) / 2) + 1, (timeout + 1) / 2);
	return nvme_wait_ready(ctrl, NVME_CSTS_RDY, NVME_CSTS_RDY,
-			    (timeout + 1) / 2, "initialisation");
+			    ((timeout + 1) / 2) + 1, "initialisation");
}
EXPORT_SYMBOL_GPL(nvme_enable_ctrl);

Il ne vous reste plus qu’à compiler votre propre kernel avec cette modif.

Je vous propose également ma compilation du dernier xanmod 6.4.12 en x64v4 intégrant ce patch: lien cloud

Tuning apache 2.4: OPcache, SSL, MemCached …

 
 

Après s'être attelé à avoir un apache 2.4 fonctionnel sur notre serveur debian, on peut pousser un peu plus loin la configuration, notamment sur deux points:

  • la sécurité SSL
  • la gestion du cache OPCache
  • La mise en cache mémoire avec memcached

 

SECURITE SSL

Je considère ici que vous avez déjà un site opérationnel et que le mode SSL est déjà actif.
Afin d'assurer une sécurité correcte de votre site, il est nécessaire d'autoriser/interdire certains protocoles devenus obsolètes/dangeureux ainsi que certains cryptages. Dans votre VirtualHost, vous pouvez alors ajouter les lignes suivantes:

SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;

  • La première lignes autorise tous les protocoles SSL/TLS sauf les versions 2 et 3. Si vous le souhaitez, vous pouvez interdire aussi le TLSv1, à voir avec les visites effectuées sur votre site (plusieurs versions d'android et d'internet explorer ne pourront plus accéder à votre site!)
  • La seconde ligne demande de respecter l'ordre de la Suite Cipher en ligne 4.
  • La troisième ligne parle d'elle même
  • La quatrième ligne correspond la liste des cryptages autorisés/interdits pour notre site.

Il est également possible d'ajouter deux commandes supplémentaires, tout en n'oubliant pas d'activer le module header a2enmod headers:

Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
Header always set X-Frame-Options DENY

 

OPCACHE

La bonne nouvelle, c'est qu'OPcache est activé par défaut par debian lors de l'installation d'apache 2.4 / php 5.6.
Pour le vérifier je me suis inspiré d'un lien dans l'article de ce site pour le vérifier:

cd /var/www
wget https://raw.githubusercontent.com/rlerdorf/opcache-status/master/opcache.php

Il ne vous reste plus qu'à aller sur l'adresse suivante http://adresse_de_mon_serveur/opcache.php pour vérifier qu'OPcache est fonctionnel.

On peut encore améliorer les choses en ajoutant les lignes suivantes au fichier /etc/php5/mods-available/opcache.ini:

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=1
opcache.fast_shutdown=1
opcache.enable_cli=1

Ne pas oublier de relancer le service lié: service php5-fpm restart

 

MEMCACHED

Si ce n'est déjà fait, installez les paquets suivants:

apt-get install memcached php5-memcached

On peut maintenant éditer le fichier /etc/memcached.conf et modifier/ajouter les paramètres suivants:

-m 128
# Custom – decrease wasted slab space
-f 1.05 -I 128k

Reste à redémarrer le serveur apache, service apache2 restart

Sources:

 
 

Gestion des permaliens WordPress avec apache

 
 

Les permaliens correspondent à une réécriture d'adresse internet rendant plus facile la gestion des liens d'un site.
Wordpress gère les permaliens et permet plusieurs choix de "présentation" pour l'utilisateur.
Si votre site wordpress est situé dans le dossier /var/www/blog, il suffit d'ajouter dans la section virtualhost de votre site (N'oubliez pas la partie ssl si vous l'utilisez aussi !)

<Directory /var/www/blog>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
</Directory>

Si toutefois votre wordpress est à la racine (/var/www), il faut alors modifier votre configuration de site apache

    <Directory />
            Options FollowSymLinks Indexes
            AllowOverride FileInfo
    </Directory>

Il vous suffit ensuite de recharger apache:

service apache2 reload

Enfin, dans l'interface d'administration de wordpress (Réglages – Permaliens), vous n'avez plus qu'à choisir le permalien qui vous convient le mieux, et le tour est joué.

 

 

Migration apache 2.2 vers 2.4 sous debian wheezy (stable)

 
 

Voilà un sujet brûlant et qui demande un peu de concentration et de patience. En effet, il ne s'agit pas que d'effectuer une mise à jour des packages pour que tout fonctionne.

En effet, les modifications sont telles que certains autres packages comme munin, owncloud, et plus généralement le php ne fonctionneront pas nativement.

De plus, vous devez savoir que:

  • le répertoire /etc/apache2/conf.d n'est plus utilisé. A la place, deux dossiers conf-available et conf-enabled sont créés, sur le même mode de fonctionnement que mods et sites. Pensez à copier vos fichiers dans conf-available avec l'extension .conf, vous pourrez ensuite les activer/désactiver avec a2enconf a2disconf/a2enconf.
  • Vous devrez renommer tous vos fichiers/sites présents dans sites-available/sites-enabled avec l'extension .conf sinon ils ne seront pas pris en compte.
  • Il est nécessaire d'effectuer une configuration supplémentaire pour le php, ainsi que pour les scripts cgi.
  • Ne pas oublier la mise à jour de openssl en lien avec celle d'apache !

Allez, maintenant que l'on sait cela, passons aux choses sérieuses. Et comme je n'ai peur de rien, voici comment j'ai procédé:

  1. Ajouter les dépots testing. Oui, autant utiliser les packages debian, les dépendances seront correctement gérées et le moindre conflit pourra être facilement résolu. Ajoutons alors à /etc/apt/souces.list la ligne suivante:

    deb http://ftp.fr.debian.org/debian/ testing main contrib non-free

  2. Après avoir mis à jours la liste des paquets avec apt-get update, il reste à installer les packages suivants:

    apt-get -t testing install apache2 openssl libapache2-mod-fastcgi php5-fpm libssl1.0.0 openssl-blacklist openssl-blacklist-extra memcached php5-memcached

    Vous pourrez remarquer qu'un bon nombre de paquets seront mis à jour, de façon à satisfaire les dépendances, le plus important est de constater que apache2.2-bin apache2.2-common et libapache2-mod-php5 font partie des paquets marqués en suppression.
    Vérifiez que tout se passe bien lors du processus de mise à jour, notamment si vous n'avez pas des messages du genre:

    dpkg: warning: unable to delete old directory '/etc/php5/conf.d': Directory not empty
    [warn] The apache2 configtest failed (ce qui est normal vu que pas mal de fichiers de configuration sont encore écrits pour apache 2.2, munin, phpmyadmin …)

  3. Vérifier que le fichier /etc/php5/fpm/pool.d/www.conf contient la ligne suivante:

    listen = /var/run/php5-fpm.sock

    Si ce n'est pas le cas, modifiez le fichier en conséquence, et redémarrez le service: service php5-pfm restart

  4. Nous allons maintenant configurer le module fastcgi pour qu'il puisse se connecter à php5-pfm. Pour cela, il est nécessaire d'éditer le fichier /etc/apache2/mods-enabled/fastcgi.conf et contenir:

    <IfModule mod_fastcgi.c>
            AddType application/x-httpd-fastphp5 .php
            Action application/x-httpd-fastphp5 /php5-fcgi
            Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
            FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
            <Directory /usr/lib/cgi-bin>
                    Require all granted
            </Directory>
    </IfModule>

    On avance bien, non ?

  5. Il faut maintenant passer à une phase de renommage de vos fichiers de configuration de sites pour qu'ils soient pris en compte par apache.
    Pour cela, rendez vous dans le dossier /etc/apache2/sites-available et ajouter l'extension .conf à tous vos sites.
    Ensuite, il faudra effacer tous vos liens symboliques situés dans /etc/apache2/sites-enabled et activer de nouveau ces derniers avec la commande a2ensite. Exemple:

    cd /etc/apache2/sites-available
    mv 01mysite 01mysite.conf
    mv 01mysite-ssl 01mysite-ssl.conf
    rm /etc/apache2/sites-enabled/*
    a2ensite 01mysite.conf
    a2ensite 01mysite-ssl.conf

  6. On pourrait presque redémarrer le serveur apache, mais si vous aviez déjà une configuration en place, il est pratiquement sûr que l'on rencontrera des erreurs. On va maintenant s'intéresser aux scripts cgi.
    Pour cela, rien de plus simple, un fichier de configuration est présent dans /etc/apache2/conf-available:
    Vous avez alors deux possibilités:
    – ajouter dans les virtualhost concernés la ligne suivante: Include conf-available/serve-cgi-bin.conf
    – activer par défault pour tous vos sites la config cgi: a2enconf serve-cgi-bin.conf
    Attention ! Pensez à éditer tous vos fichiers sites utilisés et supprimez les lignes ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ et blocks <Directory "/usr/lib/cgi-bin">
  7. Il va falloir maintenant basculer certains fichiers présents dans /etc/apache2/conf.d dans /etc/apache2/conf-available avec l'extension .conf, et les activer avec la commande a2enconf. Exemple:

    cd /etc/apache2/conf.d
    cp cp backuppc.conf ../conf-available/
    cp munin.conf ../conf-available/
    cp phpmyadmin.conf ../conf-available/
    cp phpsysinfo ../conf-available/phpsysinfo.conf
    a2enconf backuppc munin phpmyadmin phpsysinfo
    Il nous restera à adapter ces fichiers pour pouvoir accéder aux services concernés.

  8. Nous allons activer le module actions:

    a2enmod actions

  9. On regarde les éventuelles erreurs de configuration. Vous pouvez alors utiliser 2 commandes:
    apache2 -t
    apache2ctl configtest
    Si vous obtenez Syntax OK à cette dernière, c'est que l'on a déjà fait un grand pas !
  10. Allez, on redémarre le serveur apache !
    service apache2 restart
    Allez on croise les doigts pour avoir [ ok ] ! Mais çà ne veut pas dire que tout est accessible !
  11. Vérifier le fonctionnement du php. Pour cela, il faut créer un fichier dans /var/www (ou votre dossier racine de site web) nommé phpinfo.php contenant:

    <?php
    phpinfo();
    ?>

    Maintenant dans un navigateur, il suffit de taper:

    http://ip_de_mon_serveur/phpinfo.php

    vous devriez voir afficher l'écran suivant:phpinfo

  12. Reste à corriger les problèmes des applications "tierces". Normalement, les applications web telles que phpmyadmin, backuppc fonctionneront sna problème. Pour munin, il est nécessaire de modifier le fichier /etc/apache2/conf-available/munin.conf:
    Remplacer les lignes suivantes (pensez à adapter à votre config):

    Order allow,deny
    Allow from localhost 127.0.0.0/8 ::1 192.168.x.x/24

    Par:

    Require local
    Require ip 127.0.0.0/8 ::1 192.168.x.x/24

    Recharger la nouvelle configuration par service apache2 reload et munin fonctionnera de nouveau.

  13. Retirer les dépôts testing, inutile de tenter le diable pour l'instant.
  14. Pour le fun, on peut enfin passer à un module différent de celui activé par défaut avec la version 2.2

    a2dismod mpm-prefork
    a2dismod mpm-worker
    a2enmod mpm-event
    service apache2 restart

Cà y est, on a un apache 2.4 fonctionnel ! Une migration toute simple, non ?

sources: https://www.linode.com/docs/websites/apache/running-fastcgi-php-fpm-on-debian-7-with-apache

 

Redirection apache root folder vers un répertoire

Objectif: toutes les demandes qui arrivent sur mondomaine.com sont redirigées vers le répertoire « blog ».

Pour cela, rien de plus simple, il suffit:

  1. d’ajouter dans la partie VirtualHost de /etc/apache2/sites-enabled/default (ou autre suivant votre config):

    RedirectMatch ^/$ /blog/

  2. de recharcher le serveur apache: service apache2 reload

Voilà le tour est joué !

Redirection apache et owncloud sur un serveur local

Cette manipulation consiste à rendre disponible au web un serveur owncloud présent sur une machine en local, qui n’est pas le serveur web par défaut.

Exemple de Configuration:

Serveur A: serveur web, avec apache accessible depuis internet. Adresse locale: 192.168.x.1
Serveur B: serveur web, apache uniquement accessible en intranet, avec owncloud fonctionnel. Adresse locale: 192.168.x.2

  1. Connectez vous sur le serveur A en ssh; passez en root (su ou sudo)
  2. Editez le fichier /etc/apache2/sites-enabled/default (ou le fichier correspondant au site principal actif)
  3. Ajoutez les lignes suivantes dans votre VirtualHost:

    ProxyRequests off
    ProxyPreserveHost On
    ProxyPass /owncloud http://192.168.x.2/owncloud
    ProxyPassReverse /owncloud http://192.168.x.2/owncloud
    SetOutputFilter INFLATE;proxy-html;DEFLATE
    ProxyHTMLURLMap http://192.168.x.2/owncloud /owncloud

  4. Effectuez les mêmes modifications si nécessaire pour la partie ssl
  5. Attention! il se peut qu’en mode sécurisé, la redirection ne se fasse pas, pensez alors à décocher l’option « Force SSL » dans l’interface admin d’owncloud sur le serveur B.
  6. il ne reste plus qu’à recharger apache: service apache2 reload