first commit
This commit is contained in:
commit
e46461326d
10 changed files with 632 additions and 0 deletions
118
authelia.nix
Normal file
118
authelia.nix
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
let host = "stuce.ch";
|
||||
in {
|
||||
services.authelia.instances."main" = {
|
||||
enable = true;
|
||||
secrets = {
|
||||
oidcHmacSecretFile = "/var/lib/authelia-main/hmac";
|
||||
oidcIssuerPrivateKeyFile = "/var/lib/authelia-main/rsa.2048.key";
|
||||
jwtSecretFile = "/var/lib/authelia-main/jwtSecret";
|
||||
storageEncryptionKeyFile =
|
||||
"/var/lib/authelia-main/storageEncryptionKeyFile";
|
||||
};
|
||||
environmentVariables = {
|
||||
AUTHELIA_AUTHENTICATION_BACKEND_LDAP_PASSWORD_FILE =
|
||||
"/var/lib/authelia-main/ldap_password";
|
||||
AUTHELIA_NOTIFIER_SMTP_PASSWORD_FILE =
|
||||
"/var/lib/authelia-main/smtp_password";
|
||||
};
|
||||
settings = {
|
||||
authentication_backend = {
|
||||
password_reset = { disable = false; };
|
||||
refresh_interval = "1m";
|
||||
ldap = {
|
||||
implementation = "lldap";
|
||||
address = "ldap://localhost:3890";
|
||||
base_dn = "dc=stuce,dc=ch";
|
||||
user = "uid=bind_user,ou=people,dc=stuce,dc=ch";
|
||||
additional_users_dn = "ou=people";
|
||||
};
|
||||
};
|
||||
storage = { local = { path = "/var/lib/authelia-main/db.sqlite3"; }; };
|
||||
session = {
|
||||
cookies = [{
|
||||
domain = "${host}";
|
||||
authelia_url = "https://auth.${host}";
|
||||
default_redirection_url = "https://${host}";
|
||||
}];
|
||||
};
|
||||
|
||||
notifier = {
|
||||
# disable_startup_check = false;
|
||||
# filesystem = { filename = "/var/lib/authelia-main/notification.txt"; };
|
||||
smtp = {
|
||||
address = "submissions://mail.infomaniak.com:465";
|
||||
username = "no-reply@stuce.ch";
|
||||
sender = "no-reply@stuce.ch";
|
||||
};
|
||||
};
|
||||
|
||||
identity_providers = {
|
||||
oidc = {
|
||||
jwks = { };
|
||||
clients = [{
|
||||
client_id =
|
||||
"uZzbagYr2RZqyVFsOZ23XJktE9tjllwuMnxiicfT5Ykcx6pX9JZDXlYahdg.DRq5guobvv0k";
|
||||
client_name = "Forgejo";
|
||||
# TODO: find a way to remove this secret from here
|
||||
client_secret =
|
||||
"$pbkdf2-sha512$310000$xmkdkyjsCmFEi2U.exnetg$UYnG78UZhBY/6Fb8ztGsKdJDtJdIRUrki4bngIPnsOfKxddzQovCDZ8AWETFim0Nar5AhbecJJTEM1kf2lG3WQ";
|
||||
public = false;
|
||||
authorization_policy = "two_factor";
|
||||
require_pkce = true;
|
||||
pkce_challenge_method = "S256";
|
||||
redirect_uris =
|
||||
[ "https://git.stuce.ch/user/oauth2/authelia/callback" ];
|
||||
scopes = [ "openid" "email" "profile" ];
|
||||
response_types = [ "code" ];
|
||||
grant_types = [ "authorization_code" ];
|
||||
access_token_signed_response_alg = "none";
|
||||
userinfo_signed_response_alg = "none";
|
||||
token_endpoint_auth_method = "client_secret_basic";
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
access_control = {
|
||||
default_policy = "deny";
|
||||
rules = [
|
||||
{
|
||||
domain = "todo.Stuce.ch";
|
||||
policy = "one_factor";
|
||||
# resources = ["^/.*"];
|
||||
subject = [ "group:maison" ];
|
||||
}
|
||||
{
|
||||
domain = "armee.stuce.ch";
|
||||
policy = "one_factor";
|
||||
resources = [ "^/todo.*" ];
|
||||
subject = [ "user:sgt" ];
|
||||
}
|
||||
{
|
||||
domain = "vault.stuce.ch";
|
||||
policy = "two_factor";
|
||||
resources = [ "^/admin.*" ];
|
||||
subject = [ "user:stuce" ];
|
||||
}
|
||||
{
|
||||
domain = "ldap.stuce.ch";
|
||||
policy = "two_factor";
|
||||
subject = [ "user:stuce" ];
|
||||
}
|
||||
{
|
||||
domain = "armee.stuce.ch";
|
||||
policy = "one_factor";
|
||||
resources = [ "^/notes.*" ];
|
||||
subject = [ "group:ada" "group:cader" ];
|
||||
}
|
||||
{
|
||||
domain = "armee.stuce.ch";
|
||||
policy = "one_factor";
|
||||
resources = [ "^/plans.*" ];
|
||||
subject = [ "user:lt" ];
|
||||
}
|
||||
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
89
configuration.nix
Normal file
89
configuration.nix
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
./nginx.nix
|
||||
./forgejo.nix
|
||||
./authelia.nix
|
||||
./lldap.nix
|
||||
./vaultwarden.nix
|
||||
./radicale.nix
|
||||
];
|
||||
# Add flake support
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
# Use the GRUB 2 boot loader.
|
||||
networking.usePredictableInterfaceNames = true;
|
||||
users.users.stuce = {
|
||||
isNormalUser = true;
|
||||
home = "/home/stuce";
|
||||
description = "Stuce";
|
||||
extraGroups = [ "wheel" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBcOyttPiox/YITnjSXzUXkuaeOySy6D+wzBiqSwE9AL lefabricesaucy@outlook.com"
|
||||
];
|
||||
};
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
# boot.loader.grub.efiSupport = true;
|
||||
# boot.loader.grub.efiInstallAsRemovable = true;
|
||||
# boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
||||
# Define on which hard drive you want to install Grub.
|
||||
boot.loader.grub.device = "/dev/sda"; # or "nodev" for efi only
|
||||
|
||||
networking.hostName = "nixos"; # Define your hostname.
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Amsterdam";
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
# Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
wget
|
||||
sqlite
|
||||
git
|
||||
htop
|
||||
];
|
||||
programs.neovim.enable = true;
|
||||
programs.neovim.defaultEditor = true;
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
services.fail2ban.enable = true;
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
startWhenNeeded = true;
|
||||
settings = {
|
||||
PasswordAuthentication = false;
|
||||
UsePAM = false;
|
||||
PrintMotd = true;
|
||||
PermitRootLogin = "no";
|
||||
KbdInteractiveAuthentication = false;
|
||||
};
|
||||
};
|
||||
|
||||
# Open ports in the firewall.
|
||||
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||
# networking.firewall.allowedUDPPorts = [ ];
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
|
||||
environment.etc."motd" = {
|
||||
text = ''
|
||||
Successfully connected so stuce's vps !
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
||||
40
flake.nix
Normal file
40
flake.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
description = "Config flake";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||
|
||||
# nvf = {
|
||||
# url = "github:notashelf/nvf";
|
||||
# inputs.nixpkgs.follows = "nixpkgs";
|
||||
# };
|
||||
|
||||
# home-manager = {
|
||||
# url = "github:nix-community/home-manager";
|
||||
# inputs.nixpkgs.follows = "nixpkgs";
|
||||
# };
|
||||
# sTodo = {
|
||||
# url = "git+https://git.stuce.ch/stuce/sTodo";
|
||||
# };
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs,
|
||||
# home-manager,
|
||||
# nvf,
|
||||
sTodo, ... }: {
|
||||
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = nixpkgs;
|
||||
modules = [
|
||||
./configuration.nix
|
||||
# nvf.nixosModules.default
|
||||
sTodo.nixosModules.sTodo
|
||||
# home-manager.nixosModules.home-manager
|
||||
# {
|
||||
# home-manager.useGlobalPkgs = true;
|
||||
# home-manager.users.stuce.imports = [./home.nix];
|
||||
# }
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
20
forgejo.nix
Normal file
20
forgejo.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
services.forgejo = {
|
||||
enable = true;
|
||||
settings = {
|
||||
server = { ROOT_URL = "https://git.stuce.ch"; };
|
||||
openid = {
|
||||
ENABLE_OPENID_SIGNIN = false;
|
||||
ENABLE_OPENID_SIGNUP = true;
|
||||
WHITELISTED_URIS = "auth.stuce.ch";
|
||||
};
|
||||
service = {
|
||||
DISABLE_REGISTRATION = false;
|
||||
ALLOW_ONLY_EXTERNAL_REGISTRATION = true;
|
||||
SHOW_REGISTRATION_BUTTON = false;
|
||||
};
|
||||
session = { COOKIE_SECURE = true; };
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
35
hardware-configuration.nix
Normal file
35
hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||
|
||||
boot.initrd.availableKernelModules =
|
||||
[ "ata_piix" "virtio_pci" "virtio_scsi" "sr_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/25df457a-21d0-41ab-9de5-88ffc00e3469";
|
||||
fsType = "btrfs";
|
||||
};
|
||||
|
||||
fileSystems."/efi" = {
|
||||
device = "systemd-1";
|
||||
fsType = "autofs";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.eth0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
||||
23
lldap.nix
Normal file
23
lldap.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
services.lldap = {
|
||||
enable = true;
|
||||
settings = {
|
||||
ldap_base_dn = "dc=stuce,dc=ch";
|
||||
# forces localhost only !
|
||||
ldap_host = "127.0.0.1";
|
||||
http_host = "127.0.0.1";
|
||||
ldap_user_email = "admin@example.com";
|
||||
ldap_user_dn = "stuce_admin";
|
||||
ldap_key = ""; # so warning shuts up !
|
||||
# NOTE: this is in case of oopsies !
|
||||
force_ldap_user_pass_reset = false;
|
||||
# TODO: jwt file + user password + key seed script to gen
|
||||
|
||||
};
|
||||
environment = {
|
||||
LLDAP_JWT_SECRET_FILE = "/var/lib/lldap/jwt_secret";
|
||||
LLDAP_LDAP_USER_PASS_FILE = "/var/lib/lldap/user_password";
|
||||
LLDAP_KEY_SEED = "/var/lib/lldap/key_seed";
|
||||
};
|
||||
};
|
||||
}
|
||||
265
nginx.nix
Normal file
265
nginx.nix
Normal file
|
|
@ -0,0 +1,265 @@
|
|||
{ config, pkgs, ... }:
|
||||
let host = "stuce.ch";
|
||||
in {
|
||||
security.acme = {
|
||||
acceptTerms = true;
|
||||
defaults.email = "lefabricesaucy@outlook.com";
|
||||
};
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
# Use recommended settings
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
# Only allow PFS-enabled ciphers with AES256
|
||||
sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
|
||||
|
||||
virtualHosts."cal.${host}" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
extraConfig =
|
||||
" rewrite ^/.well-known/carddav / redirect;\n rewrite ^/.well-known/caldav / redirect;\n ";
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:5232";
|
||||
# extraConfig = ''
|
||||
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
# proxy_set_header X-Forwarded-Host $host;
|
||||
# proxy_set_header X-Forwarded-Port $server_port;
|
||||
# proxy_set_header X-Forwarded-Proto $scheme;
|
||||
# proxy_set_header Host $http_host;
|
||||
# proxy_pass_header Authorization;
|
||||
# '';
|
||||
};
|
||||
};
|
||||
virtualHosts."eink.${host}" = {
|
||||
forceSSL = true;
|
||||
sslCertificateKey = "/etc/nginx/certs/ca.key";
|
||||
sslCertificate = "/etc/nginx/certs/ca.crt";
|
||||
extraConfig = "ssl_client_certificate /etc/nginx/certs/client.crt;";
|
||||
locations."/" = {
|
||||
# TODO fastcgi to the script
|
||||
extraConfig = "return 200 'handshake worked !!!';";
|
||||
};
|
||||
};
|
||||
|
||||
virtualHosts."vault.${host}" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
extraConfig = "include /etc/nginx/snippets/authelia-location.conf;";
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:${
|
||||
toString config.services.vaultwarden.config.ROCKET_PORT
|
||||
}";
|
||||
};
|
||||
locations."/admin" = {
|
||||
extraConfig = ''
|
||||
include /etc/nginx/snippets/proxy.conf;
|
||||
include /etc/nginx/snippets/authelia-authrequest.conf;
|
||||
'';
|
||||
proxyPass = "http://127.0.0.1:${
|
||||
toString config.services.vaultwarden.config.ROCKET_PORT
|
||||
}";
|
||||
};
|
||||
};
|
||||
|
||||
virtualHosts."armee.${host}" = {
|
||||
root = "/var/www/armee";
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
extraConfig = "include /etc/nginx/snippets/authelia-location.conf;";
|
||||
|
||||
locations."/plans" = {
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
include /etc/nginx/snippets/proxy.conf;
|
||||
include /etc/nginx/snippets/authelia-authrequest.conf;
|
||||
'';
|
||||
};
|
||||
locations."/notes" = {
|
||||
extraConfig = ''
|
||||
include /etc/nginx/snippets/proxy.conf;
|
||||
include /etc/nginx/snippets/authelia-authrequest.conf;
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
virtualHosts."auth.${host}" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:9091";
|
||||
proxyWebsockets = true;
|
||||
extraConfig = "include /etc/nginx/snippets/proxy.conf;";
|
||||
};
|
||||
locations."/api/verify" = { proxyPass = "http://localhost:9091"; };
|
||||
locations."/api/authz" = { proxyPass = "http://localhost:9091"; };
|
||||
};
|
||||
|
||||
virtualHosts."ldap.${host}" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
extraConfig = "include /etc/nginx/snippets/authelia-location.conf;";
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:17170";
|
||||
extraConfig = "include /etc/nginx/snippets/proxy.conf;";
|
||||
};
|
||||
};
|
||||
|
||||
virtualHosts."git.${host}" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations."/" = {
|
||||
extraConfig = ''
|
||||
client_max_body_size 512M;
|
||||
proxy_pass http://localhost:3000;
|
||||
proxy_set_header Connection $http_connection;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# TODO: make a simple script around here that lets you regenerate or update every value when needed
|
||||
# NOTE: does not work as expected
|
||||
# systemd.services.authelia-main.preStart = ''
|
||||
# [ -f /var/lib/authelia-main/jwt-secret ] || {
|
||||
# "${pkgs.openssl}/bin/openssl" rand -base64 32 > /var/lib/authelia-main/jwtSecret
|
||||
# }
|
||||
# [ -f /var/lib/authelia-main/storage-encryption-file ] || {
|
||||
# "${pkgs.openssl}/bin/openssl" rand -base64 32 > /var/lib/authelia-main/storageEncryptionKeyFile
|
||||
# }
|
||||
# [ -f /var/lib/authelia-main/session-secret-file ] || {
|
||||
# "${pkgs.openssl}/bin/openssl" rand -base64 32 > /var/lib/authelia-main/sessionSecretFile
|
||||
# }
|
||||
# [ -f /var/lib/authelia-main/hmac ] || {
|
||||
# "${pkgs.openssl}/bin/openssl" rand -base64 64 > /var/lib/authelia-main/hmac
|
||||
# }
|
||||
# [ -f /var/lib/authelia-main/rsa.2048.key ] || {
|
||||
# "${pkgs.openssl}/bin/openssl" genpkey -algorithm RSA -out /var/lib/authelia-main/rsa.2048.key -pkeyopt rsa_keygen_bits:2048
|
||||
# }
|
||||
# '';
|
||||
|
||||
environment.etc."nginx/snippets/authelia-location.conf" = {
|
||||
user = "nginx";
|
||||
group = "nginx";
|
||||
text = ''
|
||||
set $upstream_authelia http://localhost:9091/api/authz/auth-request;
|
||||
|
||||
## Virtual endpoint created by nginx to forward auth requests.
|
||||
location /internal/authelia/authz {
|
||||
## Essential Proxy Configuration
|
||||
internal;
|
||||
proxy_pass $upstream_authelia;
|
||||
|
||||
## Headers
|
||||
## The headers starting with X-* are required.
|
||||
proxy_set_header X-Original-Method $request_method;
|
||||
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header Content-Length "";
|
||||
proxy_set_header Connection "";
|
||||
|
||||
## Basic Proxy Configuration
|
||||
proxy_pass_request_body off;
|
||||
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; # Timeout if the real server is dead
|
||||
proxy_redirect http:// $scheme://;
|
||||
#proxy_http_version 1.1;
|
||||
proxy_cache_bypass $cookie_session;
|
||||
proxy_no_cache $cookie_session;
|
||||
proxy_buffers 4 32k;
|
||||
client_body_buffer_size 128k;
|
||||
|
||||
## Advanced Proxy Configuration
|
||||
send_timeout 5m;
|
||||
proxy_read_timeout 240;
|
||||
proxy_send_timeout 240;
|
||||
proxy_connect_timeout 240;
|
||||
}
|
||||
'';
|
||||
};
|
||||
environment.etc."nginx/snippets/authelia-authrequest.conf" = {
|
||||
user = "nginx";
|
||||
group = "nginx";
|
||||
text = ''
|
||||
## Send a subrequest to Authelia to verify if the user is authenticated and has permission to access the resource.
|
||||
auth_request /internal/authelia/authz;
|
||||
|
||||
## Save the upstream metadata response headers from Authelia to variables.
|
||||
auth_request_set $user $upstream_http_remote_user;
|
||||
auth_request_set $groups $upstream_http_remote_groups;
|
||||
auth_request_set $name $upstream_http_remote_name;
|
||||
auth_request_set $email $upstream_http_remote_email;
|
||||
|
||||
## Inject the metadata response headers from the variables into the request made to the backend.
|
||||
proxy_set_header Remote-User $user;
|
||||
proxy_set_header Remote-Groups $groups;
|
||||
proxy_set_header Remote-Email $email;
|
||||
proxy_set_header Remote-Name $name;
|
||||
|
||||
## Configure the redirection when the authz failure occurs. Lines starting with 'Modern Method' and 'Legacy Method'
|
||||
## should be commented / uncommented as pairs. The modern method uses the session cookies configuration's authelia_url
|
||||
## value to determine the redirection URL here. It's much simpler and compatible with the mutli-cookie domain easily.
|
||||
|
||||
## Modern Method: Set the $redirection_url to the Location header of the response to the Authz endpoint.
|
||||
auth_request_set $redirection_url $upstream_http_location;
|
||||
|
||||
## Modern Method: When there is a 401 response code from the authz endpoint redirect to the $redirection_url.
|
||||
error_page 401 =302 $redirection_url;
|
||||
|
||||
## Legacy Method: Set $target_url to the original requested URL.
|
||||
## This requires http_set_misc module, replace 'set_escape_uri' with 'set' if you don't have this module.
|
||||
# set_escape_uri $target_url $scheme://$http_host$request_uri;
|
||||
|
||||
## Legacy Method: When there is a 401 response code from the authz endpoint redirect to the portal with the 'rd'
|
||||
## URL parameter set to $target_url. This requires users update 'auth.stuce.com/' with their external authelia URL.
|
||||
# error_page 401 =302 https://auth.stuce.com/?rd=$target_url;
|
||||
'';
|
||||
};
|
||||
|
||||
environment.etc."nginx/snippets/proxy.conf" = {
|
||||
user = "nginx";
|
||||
group = "nginx";
|
||||
text = ''
|
||||
## Headers
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-Forwarded-Host $http_host;
|
||||
proxy_set_header X-Forwarded-URI $request_uri;
|
||||
proxy_set_header X-Forwarded-Ssl on;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
|
||||
## Basic Proxy Configuration
|
||||
client_body_buffer_size 128k;
|
||||
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; ## Timeout if the real server is dead.
|
||||
proxy_redirect http:// $scheme://;
|
||||
#proxy_http_version 1.1;
|
||||
proxy_cache_bypass $cookie_session;
|
||||
proxy_no_cache $cookie_session;
|
||||
proxy_buffers 64 256k;
|
||||
|
||||
## Trusted Proxies Configuration
|
||||
## Please read the following documentation before configuring this:
|
||||
## https://www.authelia.com/integration/proxies/nginx/#trusted-proxies
|
||||
# set_real_ip_from 10.0.0.0/8;
|
||||
# set_real_ip_from 172.16.0.0/12;
|
||||
# set_real_ip_from 192.168.0.0/16;
|
||||
# set_real_ip_from fc00::/7;
|
||||
real_ip_header X-Forwarded-For;
|
||||
real_ip_recursive on;
|
||||
|
||||
## Advanced Proxy Configuration
|
||||
send_timeout 5m;
|
||||
proxy_read_timeout 360;
|
||||
proxy_send_timeout 360;
|
||||
proxy_connect_timeout 360;
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
||||
19
radicale.nix
Normal file
19
radicale.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{...}:{
|
||||
services.radicale = {
|
||||
enable = true;
|
||||
settings = {
|
||||
server.hosts = [ "0.0.0.0:5232" ];
|
||||
auth = {
|
||||
type = "ldap";
|
||||
ldap_uri = "ldap://localhost:3890";
|
||||
ldap_base = "dc=stuce,dc=ch";
|
||||
ldap_reader_dn = "uid=bind_user_radicale,ou=people,dc=stuce,dc=ch";
|
||||
ldap_secret_file = "/var/lib/radicale/ldap_password";
|
||||
ldap_filter = "(&(objectClass=person)(uid={0})(memberOf=cn=calendrier,ou=groups,dc=stuce,dc=ch))";
|
||||
# ldap_filter = "(&(objectClass=person)(uid={0}))";
|
||||
lc_username = true;
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
0
sTodo.nix
Normal file
0
sTodo.nix
Normal file
23
vaultwarden.nix
Normal file
23
vaultwarden.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
services.vaultwarden = {
|
||||
enable = true;
|
||||
config = {
|
||||
DOMAIN = "https://vault.stuce.ch";
|
||||
SIGNUPS_ALLOWED = false;
|
||||
INVITATIONS_ALLOWED = false;
|
||||
|
||||
SMTP_HOST = "mail.infomaniak.com";
|
||||
SMTP_PORT = "465";
|
||||
SMTP_FROM = "no-reply@stuce.ch";
|
||||
SMTP_FROM_NAME = "Stuce's vaultwarden";
|
||||
SMTP_USERNAME = "no-reply@stuce.ch";
|
||||
SMTP_PASSWORD_FILE = "/var/lib/vaultwarden/smtp_password";
|
||||
SMTP_SECURITY = "force_tls";
|
||||
ADMIN_TOKEN =
|
||||
"$argon2id$v=19$m=65540,t=3,p=4$Ic844Ym+XKWlEcj5mVjk9WsWO13bF+iWTbqWlTRESzo$DPncN5oYnFXfea57zBdVC80dEzNQkkKMqdzGRIAAb/o";
|
||||
|
||||
ROCKET_PORT = 8222;
|
||||
};
|
||||
backupDir = "/var/backup/vaultwarden";
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue