added old config files and started moving stuff to seperate modules.
This commit is contained in:
parent
7a5af0638a
commit
74518dbefa
|
@ -0,0 +1,5 @@
|
|||
# ignore all unencrypted secrets files in this directory
|
||||
./secrets/secrets.priv.yaml
|
||||
./secrets/secrets.yaml.priv
|
||||
./secrets/secrets.priv.yaml.gpg
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# things to setup on new headscale server
|
||||
### setup nixos
|
||||
1. get nixos running (preferably 22.11 or later)
|
||||
2. get a way to paste the config file from this repo to /etc/nixos/configuration.nix (like over ssh)
|
||||
|
||||
### domain provider
|
||||
1. setup domain and domain and domain with wildcard to point to new server ip.
|
||||
2. make sure any other domains that require this ingress points to it.
|
||||
3. create a api key or similar to fit in a file like this. https://go-acme.github.io/lego/dns
|
||||
4. create api kay file in /ver/lib/secrets/cert.secret, you can drop the \ and the last config line in the example from lego as this is not needed with nixos
|
||||
|
||||
|
||||
|
||||
|
||||
### setup tailscale headscale
|
||||
1. create a namespace in headscale.
|
||||
2. add tailscale to headscale with ```sudo tailscale up --login-server https://vpn.example.domain ``` (could be localhost)
|
||||
3. follow link in a browser, copy result command on this server, but replace USERNAME in --user USERNAME with namespace name (might be that headscale has updated and only uses namespaces as term now?)
|
||||
4. add all other clients needed to tailscale again with the same process
|
||||
|
||||
### done
|
||||
|
||||
# add a new remote or nated service
|
||||
1. add the machine running the service to the tailscale/headscale network like in install process
|
||||
2. get the headscale name with ``` headscale nodes list ```
|
||||
3. go to configuration.nix with vim or another editor
|
||||
4. add a virtual host to nginx for proxy, can copy one and change subdomain and proxy to machine + port, might remove basic auth if the service is intendend for everyone.
|
||||
|
||||
|
||||
#Other solutions
|
||||
might end in the situation where nixos is not an option and docker containers with diffrent things is my backup solution.
|
||||
nothing is created yet but plan to use headscale with headscale-ui docker container in addition to something like nginxproxymanager,træfik or caddy. In this case use certbot or acme for certs i think.
|
||||
|
||||
NGINX alternative: Caddy seems promising with tailscale integrated in the future.
|
||||
|
||||
Tailscale/headscale alternative: plain wireguard, openvpn or
|
||||
|
|
@ -0,0 +1,197 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
../profiles/base.nix
|
||||
../services/ssh.nix
|
||||
];
|
||||
|
||||
# Use the GRUB 2 boot loader.
|
||||
boot.loader.grub.enable = true;
|
||||
#boot.loader.grub.version = 2; #Depreciated
|
||||
boot.loader.grub.efiSupport = true;
|
||||
boot.loader.grub.device = "/dev/vda"; # or "nodev" for efi only # Define on which hard drive you want to install Grub.
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Oslo";
|
||||
|
||||
|
||||
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
|
||||
# Per-interface useDHCP will be mandatory in the future, so this generated config
|
||||
# replicates the default behaviour.
|
||||
networking.useDHCP = false;
|
||||
networking.interfaces.ens18.useDHCP = true;
|
||||
networking.hostName = "addictedmaker"; # Define your hostname.
|
||||
networking.domain = "addictedmaker.eu"; # Define your domain.
|
||||
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.conf.all.forwarding" = true;
|
||||
"net.ipv6.conf.all.forwarding" = true;
|
||||
};
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
console = {
|
||||
font = "Lat2-Terminus16";
|
||||
keyMap = "no";
|
||||
|
||||
};
|
||||
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
git
|
||||
wget
|
||||
tailscale
|
||||
config.services.headscale.package
|
||||
kanidm
|
||||
];
|
||||
|
||||
users.users.gunalx = { # Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||
initialPassword = "pw123"; # this is changed imedeately.
|
||||
};
|
||||
|
||||
|
||||
#add proxyserver to acme
|
||||
users.users.kanidm.extraGroups = [ "acme" ];
|
||||
|
||||
#sequrity managment through kanidm
|
||||
systemd.services.kanidm = let
|
||||
certName = config.services.nginx.virtualHosts.${config.services.kanidm.serverSettings.domain}.useACMEHost;
|
||||
in {
|
||||
requires = [ "acme-finished-${certName}.target" ];
|
||||
serviceConfig.LoadCredential = let
|
||||
certDir = config.security.acme.certs.${certName}.directory;
|
||||
in [
|
||||
"fullchain.pem:${certDir}/fullchain.pem"
|
||||
"key.pem:${certDir}/key.pem"
|
||||
];
|
||||
};
|
||||
|
||||
services.kanidm = {
|
||||
enableServer = true;
|
||||
#enablePam = true;
|
||||
serverSettings = let
|
||||
credsDir = "/run/credentials/kanidm.service";
|
||||
#credsDir = "/var/lib/acme/${config.networking.domain}"; #the files are here but not readable
|
||||
in {
|
||||
origin = "https://${config.services.kanidm.serverSettings.domain}";
|
||||
domain = "auth.${config.networking.domain}";
|
||||
tls_chain = "${credsDir}/fullchain.pem";
|
||||
tls_key = "${credsDir}/key.pem";
|
||||
bindaddress = "localhost:8300";
|
||||
};
|
||||
|
||||
clientSettings = {
|
||||
# This should be at /etc/kanidm/config or ~/.config/kanidm, and configures the kanidm command line tool
|
||||
uri = "${config.services.kanidm.serverSettings.bindaddress}";
|
||||
verify_ca = true;
|
||||
verify_hostnames = true;
|
||||
};
|
||||
};
|
||||
|
||||
#environment = {
|
||||
# etc."kanidm/config".text = ''
|
||||
# uri="https://auth.${config.networking.domain}"
|
||||
# '';
|
||||
#};
|
||||
|
||||
|
||||
#vpn stuff
|
||||
#need to run at fresh install to create namespace: headscale namespaces create <namespace_name>
|
||||
services.headscale = {
|
||||
enable = true;
|
||||
user = "headscale";
|
||||
address = "127.0.0.1";
|
||||
port = 8080;
|
||||
settings = {
|
||||
logtail.enabled = false;
|
||||
metrics_listen_addr = "127.0.0.1:9090";
|
||||
server_url = "https://${"vpn."+config.networking.domain}";
|
||||
dns_config = {
|
||||
base_domain = "${config.networking.domain}";
|
||||
magic_dns = true;
|
||||
nameservers = [
|
||||
"1.1.1.1"
|
||||
];
|
||||
};
|
||||
|
||||
##should really implement with fex github and kanidm
|
||||
#oidc = {
|
||||
# issuer = "{config.services.kanidm.serverSettings.origin}";
|
||||
# allowed_domains = Domains;
|
||||
#};
|
||||
};
|
||||
};
|
||||
|
||||
#tailscale
|
||||
services.tailscale.enable = true;
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
services.openssh.settings.UseDns = true;
|
||||
services.openssh.settings.PermitRootLogin = "prohibit-password";
|
||||
services.openssh.startWhenNeeded = true;
|
||||
services.openssh.ports = [ 6969 ];
|
||||
services.endlessh.enable = true; #ssh honeypot
|
||||
services.endlessh.port = 22;
|
||||
services.endlessh.openFirewall = true;
|
||||
services.sshguard.enable = true; #protection against brute force attacks like fail2ban
|
||||
|
||||
users.users."root".openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTExYoT3+flrd2wPYiT7sFFDmAUqi2YAz0ldQg7WMop"
|
||||
];
|
||||
users.users."gunalx".openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHTExYoT3+flrd2wPYiT7sFFDmAUqi2YAz0ldQg7WMop"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEj+Y0RUrSaF8gUW8m2BY6i8e7/0bUWhu8u8KW+AoHDh gunalx@nixos"
|
||||
];
|
||||
|
||||
#fail2ban
|
||||
services.fail2ban = {
|
||||
enable = true;
|
||||
maxretry = 5;
|
||||
ignoreIP = [
|
||||
"127.0.0.0/8"
|
||||
"10.0.0.0/8"
|
||||
"100.64.0.0/8"
|
||||
"172.16.0.0/12"
|
||||
"192.168.0.0/16"
|
||||
"8.8.8.8"
|
||||
];
|
||||
};
|
||||
|
||||
#firewall options
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
checkReversePath = "loose";
|
||||
trustedInterfaces = [ "tailscale0" ];
|
||||
allowedUDPPorts = [
|
||||
8096
|
||||
80
|
||||
443
|
||||
#config.services.openssh.ports
|
||||
config.services.tailscale.port
|
||||
config.services.headscale.port
|
||||
];
|
||||
allowedTCPPorts = config.networking.firewall.allowedUDPPorts;
|
||||
};
|
||||
|
||||
# not needed in this config but should sty in default configuration.nix
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
#system.stateVersion = "20.09"; # Did you read the comment?
|
||||
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
gitserver with gitea
|
||||
webserver with homepage
|
||||
|
||||
webserver implementation is in works
|
||||
thinking of doing something like
|
|
@ -0,0 +1,9 @@
|
|||
services
|
||||
jellyfin
|
||||
|
||||
services in need of configuration
|
||||
transmission
|
||||
sonarr
|
||||
|
||||
to be implemented
|
||||
calibre
|
|
@ -0,0 +1,181 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
./vim.nix
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
boot.loader.grub.useOSProber = true;
|
||||
|
||||
networking.hostName = "galadriel"; # Define your hostname.
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Enable networking
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Oslo";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver = {
|
||||
layout = "no";
|
||||
xkbVariant = "";
|
||||
};
|
||||
|
||||
# Configure console keymap
|
||||
console.keyMap = "no";
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.gunalx = {
|
||||
isNormalUser = true;
|
||||
description = "gunalx";
|
||||
extraGroups = [ "networkmanager" "wheel" ];
|
||||
packages = with pkgs; [];
|
||||
};
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||
wget
|
||||
git
|
||||
rsync
|
||||
nfs-utils
|
||||
cifs-utils
|
||||
tailscale
|
||||
jellyfin
|
||||
jellyfin-web
|
||||
jellyfin-mpv-shim
|
||||
jftui
|
||||
sonixd
|
||||
sonarr
|
||||
bazarr
|
||||
unpackerr
|
||||
freshrss
|
||||
];
|
||||
|
||||
# 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:
|
||||
|
||||
##productivity
|
||||
services.tandoor-recipes.enable = true;
|
||||
|
||||
##media
|
||||
services.jellyfin.enable = true;
|
||||
services.komga.enable = true;
|
||||
|
||||
services.polaris.enable = true;
|
||||
services.navidrome.enable = true;
|
||||
|
||||
services.podgrab.enable = true;
|
||||
services.podgrab.port = 4242;
|
||||
|
||||
|
||||
services.calibre-web.enable = true;
|
||||
#services.calibre-server.enable = true;
|
||||
|
||||
services.freshrss.enable = true; #rss aggregator
|
||||
services.freshrss.baseUrl = "http://127.0.0.1";
|
||||
services.freshrss.passwordFile = "/run/secrets/freshrss";
|
||||
|
||||
##downloading
|
||||
#autodownload
|
||||
services.sonarr.enable = true;
|
||||
services.radarr.enable = true;
|
||||
services.lidarr.enable = true;
|
||||
services.bazarr.enable = true;
|
||||
|
||||
#indexing
|
||||
services.prowlarr.enable = true;
|
||||
services.jackett.enable = true;
|
||||
|
||||
#torrent managment
|
||||
services.transmission.enable = true;
|
||||
|
||||
##networking
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
|
||||
#tailscale
|
||||
services.tailscale.enable = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
networking.firewall.enable = false;
|
||||
|
||||
##storage
|
||||
|
||||
|
||||
#autofs
|
||||
#services.autofs.enable = true;
|
||||
|
||||
#smb share
|
||||
|
||||
#nfs share
|
||||
#services.nfs.server = {
|
||||
# enable = true;
|
||||
# # fixed rpc.statd port; for firewall
|
||||
# lockdPort = 4001;
|
||||
# mountdPort = 4002;
|
||||
# statdPort = 4000;
|
||||
# extraNfsdConfig = '''';
|
||||
#};
|
||||
|
||||
|
||||
#zfs stuff if needed
|
||||
|
||||
|
||||
#mounts
|
||||
fileSystems."/mnt/nas" = {
|
||||
device = "192.168.1.137:/mnt/Main/Home";
|
||||
fsType = "nfs";
|
||||
|
||||
options = [
|
||||
#"nfsvers=4.2"
|
||||
"x-systemd.automount" "noauto"
|
||||
"x-systemd.idle-timeout=600"
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#default scary stuff
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "22.11"; # Did you read the comment?
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
defaultEditor = true;
|
||||
|
||||
configure = {
|
||||
customRC = ''
|
||||
" your custom vimrc
|
||||
set nocompatible
|
||||
set backspace=indent,eol,start
|
||||
" Turn on syntax highlighting by default
|
||||
syntax on
|
||||
set autoindent
|
||||
" ...
|
||||
'';
|
||||
packages.myplugins = with pkgs.vimPlugins; {
|
||||
start = [ vim-nix vim-lastplace vim-yaml ];
|
||||
opt = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
defaultEditor = true;
|
||||
|
||||
configure = {
|
||||
customRC = ''
|
||||
" your custom vimrc
|
||||
set nocompatible
|
||||
set backspace=indent,eol,start
|
||||
" Turn on syntax highlighting by default
|
||||
syntax on
|
||||
" ...
|
||||
'';
|
||||
packages.myplugins = with pkgs.vimPlugins; {
|
||||
start = [ vim-nix vim-lastplace vim-yaml ];
|
||||
opt = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
imports =
|
||||
[
|
||||
../packages/vim.nix
|
||||
./sops.nix
|
||||
];
|
||||
|
||||
#nix stuff
|
||||
nix.gc.automatic = true;
|
||||
system.autoUpgrade.enable = true;
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
{ config, pkgs, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.ssh-to-age
|
||||
pkgs.sops
|
||||
];
|
||||
|
||||
imports = [ "${builtins.fetchTarball "https://github.com/Mic92/sops-nix/archive/master.tar.gz"}/modules/sops" ];
|
||||
|
||||
# This will add secrets.yml to the nix store
|
||||
# You can avoid this by adding a string to the full path instead, i.e.
|
||||
# sops.defaultSopsFile = "/root/.sops/secrets/example.yaml";
|
||||
sops.defaultSopsFile = ./secrets.yaml;
|
||||
# This will automatically import SSH keys as age keys
|
||||
sops.age.sshKeyPaths = [ "/etc/ssh/nixos" "/$HOME/.ssh/nixos" "/home/gunalx/.ssh/nixos" ];
|
||||
# This is using an age key that is expected to already be in the filesystem
|
||||
# sops.age.keyFile = "/var/lib/sops-nix/key.txt";
|
||||
# This will generate a new key if the key specified above does not exist
|
||||
sops.age.generateKey = true
|
||||
|
||||
# This is the actual specification of the secrets.
|
||||
#sops.secrets."myservice/my_subdir/my_secret" = {};
|
||||
sops.secrets."acme/creds/domeneshop" = {
|
||||
|
||||
};
|
||||
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEj+Y0RUrSaF8gUW8m2BY6i8e7/0bUWhu8u8KW+AoHDh gunalx@nixos
|
|
@ -0,0 +1,24 @@
|
|||
#ENC[AES256_GCM,data:D56rhkcdzYvGA391Yd/xtA==,iv:7a7XGF/5Am07S6GIH97dae8bZ14kBN/hST1DK2QkVbc=,tag:cAFYNF6AScu2SCECMiNpaw==,type:comment]
|
||||
#ENC[AES256_GCM,data:whBqc+AeZpCDo/caKJQm3Wan3RiAvQwQ0v4fgmdZhMTu+5QeTTqb1L1M6ZUnNnQS1tc9wjaWfXby/2T0zLDM+Yl3yuHSfK1rkBbC4GwL83tSM4lbDE7+spSKxb2VrOZqozKpL6zQnWJB0COJfC5KqlHJCiM=,iv:M1KPhEQS/l4OFwAClqr7L2Jf73/tkpBBmXEPjGI7faU=,tag:A5x4nCDbnOLplGh7xqdN2Q==,type:comment]
|
||||
acme:
|
||||
certs: ENC[AES256_GCM,data:glU5Kl4wiChxuQJq2ppCP4sJlutJkK1RgV0FloMNe/W8rV/mHcg8FcffotNYVZw87mqWz3N4jMgMVwnmXU0uObhV+W6L0mMb9U7akhXIuJQfiwaTeHZV48DPzDBzIDHUrsPZfxm6vfBlJltk9dH/43lytyMJqSeV3nWW4rA=,iv:Nz2pDdPdVbZK6BuYJrPcZ/LnnruvuMlhMJeowUPADj0=,tag:YNtlgq04iJxnZL76ESsQaQ==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age14cpm59h7hx8gr54hrn4uxu4xnrp9wy3f2kdxvy6xwuyxsfg8g9zs8z5e77
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxczVMVEROU0k1TFAwcDhZ
|
||||
YlVwOVpSYVhjT0oveGlLMUhJak40Q3E0UzFRCjFlV1h4ektaSTdvdnBLTjdYQ0pz
|
||||
VVFWbFFYODVBNzdCRkw4Q3pKYzZ6RjAKLS0tIGxtbWR6MnFVZUNyWHl3T0lBSXQz
|
||||
Vmg2SkZBdjFYM1MzdVhmRVVNYjg3MlkKPbXkDdChq+GqqZuwQ2rj5LIP1gA44Qxn
|
||||
gI66sDKkBwkAx7EkvUejGXK4pqPPvRwDUZFoSowIOSGaxF7CKdayBA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2023-09-24T01:30:23Z"
|
||||
mac: ENC[AES256_GCM,data:4ji9jVU4oILYTr3Hfd3Ic1XsxFrOnKTyTY88p9WCO8SaWDqzu2e/W3O8tiMgeZChTLLi0pK6t2hUgLI9XAQFQswMi56Ues1XdR+a8SsQmsMb0oGDzd6/Nhe39G0Q9raAy0XC+j9lBapOgKPKLGlDXRlllA050nFkTWEhKCQJmg8=,iv:FPYTaoDZjsbu6Oc0qu35jHq/AUhbfbnirutmcKDuUG8=,tag:JeQB+Fs2WOdlV7XoBFi3ag==,type:str]
|
||||
pgp: []
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.8.0
|
|
@ -0,0 +1,76 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
let
|
||||
basicAuthUser = "guest";
|
||||
basicAuthPass = "12345678";
|
||||
in
|
||||
{
|
||||
|
||||
#acme and certs helpful blog https://carjorvaz.com/posts/
|
||||
security.acme = {
|
||||
acceptTerms = true;
|
||||
defaults.email = "adrian+acme@lauterer.it";
|
||||
|
||||
certs."${config.networking.domain}" = {
|
||||
domain = "${config.networking.domain}";
|
||||
extraDomainNames = [ "*.${config.networking.domain}" "lauterer.it" "*.lauterer.it" "*.256.no" "*.256.no"];
|
||||
dnsProvider = "domeneshop"; # from here according to privider https://go-acme.github.io/lego/dns/
|
||||
dnsPropagationCheck = true;
|
||||
credentialsFile = config.sops.secrets."acme/creds/domeneshop".path; #need to manually create this file according to dnsprovider secrets, and format of key according to lego in privider and add to secrets.yaml
|
||||
};
|
||||
};
|
||||
|
||||
#add proxyserver to acme
|
||||
users.users.nginx.extraGroups = [ "acme" ];
|
||||
users.users.root.extraGroups = [ "acme" ];
|
||||
|
||||
#TODO add oauth2 proxy to auth
|
||||
# services.oauth2_proxy = {
|
||||
# enable = true;
|
||||
# }
|
||||
|
||||
|
||||
#proxy stuff
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
statusPage = true;
|
||||
enableReload = true;
|
||||
recommendedTlsSettings = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
|
||||
virtualHosts.${"vpn."+config.networking.domain} = {
|
||||
forceSSL = true;
|
||||
useACMEHost = "${config.networking.domain}";
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "http://localhost:${toString config.services.headscale.port}";
|
||||
};
|
||||
};
|
||||
|
||||
virtualHosts.${config.services.kanidm.serverSettings.domain} = { # (auth.)
|
||||
forceSSL = true;
|
||||
useACMEHost = "${config.networking.domain}";
|
||||
locations."/" = {
|
||||
proxyWebsockets = true;
|
||||
proxyPass = "${"https://"+config.services.kanidm.serverSettings.bindaddress}";
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
virtualHosts.${"jellyfin."+config.networking.domain} = {
|
||||
forceSSL = true;
|
||||
#enableACME = true;
|
||||
useACMEHost = "${config.networking.domain}";
|
||||
locations."/" = {
|
||||
proxyPass = "http://jellyfin.galadriel";
|
||||
proxyWebsockets = true;
|
||||
basicAuth = {
|
||||
guest = basicAuthPass;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
environment.systemPackages = [
|
||||
pkgs.openssh
|
||||
pkgs.endlessh
|
||||
pkgs.sshguard
|
||||
];
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
settings.UseDns = true;
|
||||
settings.PermitRootLogin = "prohibit-password";
|
||||
startWhenNeeded = true;
|
||||
UseDns = true;
|
||||
ports = [ 25264 ];
|
||||
openFirewall = true;
|
||||
Ciphers = [
|
||||
"chacha20-poly1305@openssh.com"
|
||||
"aes256-gcm@openssh.com"
|
||||
"aes128-gcm@openssh.com"
|
||||
"aes256-ctr"
|
||||
# remove some weaker ciphers
|
||||
]
|
||||
}
|
||||
endlessh = {
|
||||
enable = true;
|
||||
port = 22;
|
||||
openFirewall = true;
|
||||
};
|
||||
sshguard.enable = true; #protection against brute force attacks like fail2ban
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue