diff --git a/hosts/terre-neuvas/configuration.nix b/hosts/terre-neuvas/configuration.nix index 6910c19..d7dc8f4 100644 --- a/hosts/terre-neuvas/configuration.nix +++ b/hosts/terre-neuvas/configuration.nix @@ -11,6 +11,7 @@ [ # Include the results of the hardware scan. ./hardware.nix ../../profiles/server-selfhosted.nix + ../../modules/services/ftp.nix ../../modules/services/forgejo.nix ]; diff --git a/modules/services/ftp.nix b/modules/services/ftp.nix new file mode 100644 index 0000000..ce983bf --- /dev/null +++ b/modules/services/ftp.nix @@ -0,0 +1,59 @@ +{ config, pkgs, lib, ... }: { + # ------------------------------------------------- + # 1️⃣ Création de l’utilisateur système dédié FTP + # ------------------------------------------------- + users.users.ftpuser = { + isSystemUser = true; # pas de login shell + description = "Compte FTP dédié"; + home = "/srv/ftp/ftpuser"; + createHome = true; + group = "ftpuser"; + shell = "/usr/sbin/nologin"; + }; + users.groups.ftpuser = {}; + + # ------------------------------------------------- + # 2️⃣ Permissions du répertoire home (méthode A) + # ------------------------------------------------- + system.activationScripts.setupFtp = '' + # Répertoire racine du chroot – lecture‑seule + chmod a-w /srv/ftp/ftpuser + # Sous‑répertoire où l’on peut écrire + mkdir -p /srv/ftp/ftpuser/upload + chown ftpuser:ftpuser /srv/ftp/ftpuser/upload + chmod 755 /srv/ftp/ftpuser/upload + ''; + + # ------------------------------------------------- + # 3️⃣ Configuration du serveur vsftpd + # ------------------------------------------------- + services.vsftpd = { + enable = true; + + # Autoriser les comptes locaux (system users) + localUsers = false; + + # Refuser l’accès anonyme (sécurité renforcée) + anonymousUser = false; + + # Chroot chaque utilisateur local dans son $HOME + chrootlocalUser = true; + allowWriteableChroot = true ; + +extraConfig = '' + pasv_min_port=40000 + pasv_max_port=40004 + ''; + + }; + + # ------------------------------------------------- + # 4️⃣ Ouverture des ports dans le firewall NixOS + # ------------------------------------------------- + networking.firewall = { + allowedTCPPorts = [ 21 40000 40001 40002 40003 40004 ]; + # Si vous utilisez FTPS implicite (port 990) : + # allowedTCPPorts = [ 21 990 40000 40001 40002 40003 40004 ]; + }; +} + diff --git a/modules/sites/levr.porzh.me.nix b/modules/sites/levr.porzh.me.nix new file mode 100644 index 0000000..fc27389 --- /dev/null +++ b/modules/sites/levr.porzh.me.nix @@ -0,0 +1,45 @@ +{ config, pkgs, ... }: +{ + # ----------------------------------------------------------------- + # 1️⃣ Caddy (reverse‑proxy / serveur web statique) + # ----------------------------------------------------------------- + services.caddy = { + enable = true; + + # Caddy démarre en tant qu’utilisateur « caddy ». + # On lui donne accès au répertoire du blog via les ACL créées plus haut. + # (Pas besoin de config supplémentaire côté OS.) + + # ----------------------------------------------------------------- + # 2️⃣ Sites gérés par Caddy (Caddyfile intégré) + # ----------------------------------------------------------------- + virtualHosts = { + "levr.porzh.me" = { + # Le domaine sera automatiquement provisionné avec TLS via ACME + # (Let's Encrypt) grâce à l’option `autoHTTPS = true` (défaut). + # Aucun certificat manuel n’est requis. + + # Le répertoire contenant les fichiers générés par Hugo + + # (Optionnel) Rediriger HTTP → HTTPS – Caddy le fait déjà, + # mais on le rend explicite pour la clarté. + extraConfig = '' + @http { + protocol http + } + redir @http https://{host}{uri} permanent + root * /srv/blog/public + file_server + ''; + }; + }; + }; + + # ----------------------------------------------------------------- + # 3️⃣ Ouverture du firewall (ports 80 et 443) + # ----------------------------------------------------------------- + networking.firewall.allowedTCPPorts = [ + 80 # HTTP (pour la redirection ACME) + 443 # HTTPS (site final) + ]; +} diff --git a/profiles/server-selfhosted.nix b/profiles/server-selfhosted.nix index a6f6e5f..7bf19c9 100644 --- a/profiles/server-selfhosted.nix +++ b/profiles/server-selfhosted.nix @@ -5,6 +5,7 @@ ../modules/common/networking.nix ../modules/services/printing.nix ../modules/sites/porzh.me.nix + ../modules/sites/levr.porzh.me.nix ]; services.openssh.enable = true;