mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-01-11 22:30:25 +01:00
108 lines
3.7 KiB
Nix
108 lines
3.7 KiB
Nix
{ config, ... }:
|
|
let
|
|
user = "sftpgo";
|
|
dataDir = "/data/apps/sftpgo";
|
|
in
|
|
{
|
|
# Read SFTPGO_DEFAULT_ADMIN_USERNAME and SFTPGO_DEFAULT_ADMIN_PASSWORD from a file
|
|
systemd.services.sftpgo.serviceConfig.EnvironmentFile = config.age.secrets."sftpgo.env".path;
|
|
|
|
# Create Directories
|
|
# https://www.freedesktop.org/software/systemd/man/latest/tmpfiles.d.html#Type
|
|
systemd.tmpfiles.rules = [
|
|
"d ${dataDir} 0755 ${user} ${user}"
|
|
];
|
|
|
|
services.sftpgo = {
|
|
enable = true;
|
|
inherit user dataDir;
|
|
extraArgs = [
|
|
"--log-level"
|
|
"info"
|
|
];
|
|
# https://github.com/drakkan/sftpgo/blob/2.5.x/docs/full-configuration.md
|
|
settings = {
|
|
common = {
|
|
# Auto-blocking policy for SFTPGo and thus helps to prevent DoS (Denial of Service) and brute force password guessing.
|
|
defender = {
|
|
enable = true;
|
|
};
|
|
};
|
|
# Where to store stfpgo's data
|
|
data_provider = {
|
|
driver = "sqlite";
|
|
name = "sftpgo.db";
|
|
password_hashing = {
|
|
algo = "argon2id";
|
|
# options for argon2id hashing algorithm.
|
|
# The memory and iterations parameters control the computational cost of hashing the password.
|
|
argon2_options = {
|
|
memory = 65536; # KiB
|
|
iterations = 2; # The number of iterations over the memory.
|
|
parallelism = 2; # The number of threads (or lanes) used by the algorithm.
|
|
};
|
|
};
|
|
password_validation = {
|
|
# What Entropy Value Should I Use?
|
|
# somewhere in the 50-70 range seems "reasonable".
|
|
# https://github.com/wagslane/go-password-validator#what-entropy-value-should-i-use
|
|
admins.min_entropy = 60;
|
|
users.min_entropy = 60;
|
|
};
|
|
# Cache passwords in memory to avoid hashing the same password multiple times(it costs).
|
|
password_caching = true;
|
|
# create the default admin user via environment variables
|
|
# SFTPGO_DEFAULT_ADMIN_USERNAME and SFTPGO_DEFAULT_ADMIN_PASSWORD
|
|
create_default_admin = true;
|
|
};
|
|
|
|
# WebDAV is a popular protocol for file sharing, better than CIFS/SMB, NFS, etc.
|
|
# it's save to use WebDAV over HTTPS on public networks.
|
|
webdavd.bindings = [
|
|
{
|
|
address = "127.0.0.1";
|
|
port = 3303;
|
|
}
|
|
];
|
|
# HTTP Server provides a simple web interface to manage the server.
|
|
httpd.bindings = [
|
|
{
|
|
address = "127.0.0.1";
|
|
enable_https = false;
|
|
port = 3302;
|
|
client_ip_proxy_header = "X-Forwarded-For";
|
|
# a basic built-in web interface that allows you to manage users,
|
|
# virtual folders, admins and connections.
|
|
# url: http://127.0.0.1:8080/web/admin
|
|
enable_web_admin = true;
|
|
# A basic front-end web interface for your users.
|
|
# It allows end-users to browse and manage their files and change their credentials.
|
|
enable_web_client = true;
|
|
enable_rest_api = true;
|
|
}
|
|
];
|
|
# prometheus metrics
|
|
telemetry = {
|
|
bind_port = 10000;
|
|
bind_address = "0.0.0.0";
|
|
# auth_user_file = "";
|
|
};
|
|
# multi-factor authentication settings
|
|
mfa.totp = [
|
|
{
|
|
# Unique configuration name, not visible to the authentication apps.
|
|
# Should not to be changed after the first user has been created.
|
|
name = "SFTPGo";
|
|
# Name of the issuing Organization/Company
|
|
issuer = "SFTPGo";
|
|
# Algorithm to use for HMAC
|
|
# Currently Google Authenticator app on iPhone seems to only support sha1
|
|
algo = "sha1";
|
|
}
|
|
];
|
|
# SMTP configuration enables SFTPGo email sending capabilities
|
|
# smtp = {};
|
|
};
|
|
};
|
|
}
|