# SPDX-Version: 3.0
# SPDX-CreationInfo: 2025-06-17; WEIDNER, Marc S.; <msw@coresecret.dev>
# SPDX-ExternalRef: GIT https://git.coresecret.dev/msw/CISS.debian.installer.git
# SPDX-FileContributor: WEIDNER, Marc S.; Centurion Intelligence Consulting Agency
# SPDX-FileCopyrightText: 2024-2025; WEIDNER, Marc S.; <msw@coresecret.dev>
# SPDX-FileType: SOURCE
# SPDX-License-Identifier: EUPL-1.2 OR LicenseRef-CCLA-1.0
# SPDX-LicenseComment: This file is part of the CISS.debian.installer.secure framework.
# SPDX-PackageName: CISS.debian.installer
# SPDX-Security-Contact: security@coresecret.eu
%YAML 1.2
---
### This file contains configurations for the CISS.debian.installer
### Master V8.00.000.2025.06.17
### YAML specification: 1.2

installer:
  name: "CISS.debian.installer"
  version: "V8.00.000.2025.06.17"
  log: "info"

################################################################################################################################
# APT settings
################################################################################################################################
apt:
  contrib: true                # Optionally, install contrib software.
  deb_sources: true            # Optionally includes deb-src entries for source repositories.
  default_list: true           # By default, source repositories are listed in '/etc/apt/sources.list'. This MUST be "true".
  full_upgrade: true           # Whether to upgrade packages after debootstrap.
  install_recommends: true     # Configure APT to not install recommended packages by default.
  non_free: true               # Optionally, install non-free software.
  non_free_firmware: true      # Optionally, install non-free firmware. MUST be "true" for microcode updates.
  sec: "security.debian.org"   # Debian Security Updates Archive.

  ##############################################################################################################################
  # A network mirror MUST be used to supplement the software not included on the installation media. This may also make newer
  # versions of software available.
  ##############################################################################################################################
  mirror:
    activate: true             # MUST be "true".
    country: "US"              # Country code of mirror destination.
    directory: "/debian/"      # Debian archive mirror directory in which the mirror of the Debian archive is located.
    hostname: "deb.debian.org" # Debian archive mirror hostname.
    https-country: "US"        # Debian archive mirror country.
    protocol: "https"          # Protocol to be used for downloading files, where "https" is RECOMMENDED.
    proxy: ""                  # HTTP proxy information (blank for none) or "http://[[user][:pass]@]host[:port]/"

  ##############################################################################################################################
  # Debian has the following services that provide updates.
  #
  # Backported software is adapted from the development version to work with this release. Although this software has not gone
  # through such complete testings as that contained in the release, it includes newer versions of some applications that may
  # provide useful features. Enabling backports here does not cause any of them to be installed by default; it only allows you
  # to manually select backports to use.
  #
  # Release updates provide more current versions for software that changes relatively frequently and where not having the
  # latest version could reduce the usability of the software. It also provides regression fixes. This service is only
  # available for stable and oldstable releases.
  #
  # Security updates help to keep your system secured against attacks. Enabling this service is strongly recommended.
  #
  # Applying updates on a frequent basis is an important part of keeping the system secure. By default, security updates are not
  # automatically installed, as security advisories should be reviewed before manual installation of the updates using standard
  # package management tools.
  #
  # Alternatively, the unattended-upgrades package can be installed, which will install security updates automatically. Note,
  # however, that automatic installation of updates may occasionally cause unexpected downtime of services provided by this
  # machine in the rare cases where the update is not fully backward-compatible, or where the security advisory requires the
  # administrator to perform some other manual operation. Possible choices: "none", "security", "unattended" (RECOMMENDED)
  ##############################################################################################################################
  updates:
    backports: true
    release: true
    security: true
    policy: "unattended"

################################################################################################################################
# Basic settings
################################################################################################################################
architecture: "amd64"          # MUST be one of "amd64" or "arm64".
debootstrap:                   # Provide a mirror for downloading the Debian packages for debootstrap.
                               # Specify the packages to be included in the debootstrapping process. Include a comma-separated
                               # list of official Debian packages.
  mirror: "https://deb.debian.org/debian"
                               # The following packages MUST be included in the debootstrap.
  includes: "busybox,ca-certificates,locales,openssl,tzdata,zstd"
distribution: "bookworm"       # MUST be "bookworm".
debian_suite: "stable"         # MUST be "stable". Not supported yet: "testing", "experimental".
exit:
  halt: false                  # This is how to make the installer shutdown when finished, but not reboot.
  poweroff: true               # This will power off the machine instead of just halting it (RECOMMENDED).
  reboot: false                # This will reboot the machine.
firmware:
  install: true                # If non-free firmware is needed for the network or other hardware, autoinstall it.
  lookup: "missing"            # - "never"   Completely disables the firmware search.
                               # - "missing" Searches only when the firmware is needed. (default)
                               # - "always"  Always searches and asks for any firmware that could be useful for the hardware.
image: "linux-image-amd64"     # Could be a meta-package or a specific image like:
                               # "linux-image-amd64" || "linux-image-arm64"
                               # "linux-image-cloud-amd64" || "linux-image-cloud-arm64"
                               # "linux-image-rt-amd64" || "linux-image-rt-arm64"
                               # "linux-image-6.12.30+bpo-amd64"
needrun: false                 # Static linking to "${TARGET}/run" can cause problems if this data is "burned" into the target.

################################################################################################################################
# Dropbear settings
################################################################################################################################
dropbear:
  boot: true                   # Dropbear initramfs integration.
  dhcp: true                   # Whether the '/etc/initramfs-tools/conf.d/ip' file should be configured statically or via DHCP.
  firewall: false              # Yet not implemented. MUST be "false".
                               # Additional ultra hardening of the dropbear initramfs environment via firewall.
                               # The "bastion_ipv4" MUST be provided.
  port: 42137                  # SSH Port dropbear initramfs should listen.

################################################################################################################################
# Grub Bootparameter
################################################################################################################################
grub_parameter:
  ##############################################################################################################################
  # Audit events need to be captured on processes that start up prior to auditd, so that potential malicious activity cannot go
  # undetected. During boot if audit=1, then the backlog will hold 64 records. If more than 64 records are created during boot,
  # auditd records will be lost, and potential malicious activity could go undetected.
  ##############################################################################################################################
  - "audit=1"
  - "audit_backlog_limit=8192"

  ##############################################################################################################################
  # Distrusts CPU bootloader for initial entropy at boot. Distrusts the CPU for initial entropy at boot, as it is not possible
  # to audit, may contain weaknesses or a backdoor.
  # https://en.wikipedia.org/wiki/RDRAND#Reception
  # https://twitter.com/pid_eins/status/1149649806056280069
  # https://archive.nytimes.com/www.nytimes.com/interactive/2013/09/05/us/documents-reveal-nsa-campaign-against-encryption.html
  # https://forums.whonix.org/t/entropy-config-random-trust-cpu-yes-or-no-rng-core-default-quality/8566
  # https://lkml.org/lkml/2022/6/5/271
  ##############################################################################################################################
  - "random.trust_cpu=off"

  ##############################################################################################################################
  # Distrusts the bootloader for initial entropy at boot.
  # https://lkml.org/lkml/2022/6/5/271
  ##############################################################################################################################
  - "random.trust_bootloader=off"

  ##############################################################################################################################
  # ASLR (Address Space Layout Randomization) causes central areas of memory to be assigned random addresses each time a program
  # is started. These include: Stack, Heap, Shared libraries (e.g., libc), mmap regions, VDSO/VSyscall. The executable itself
  # (only with PIE binaries). The aim is to make it more difficult for attackers to predict memory addresses, thereby preventing
  # classic exploits that rely on known addresses from succeeding.
  # 0: disabled Fixed memory addresses – insecure, testable.
  # 1: Partial ASLR Heap, mmap are randomized, stack only partially randomized.
  # 2: Full ASLR (default) Stack, mmap, heap, VDSO, shared libraries all randomized.
  ##############################################################################################################################
  - "randomize_va_space=2"

  ##############################################################################################################################
  # Enables IOMMU to prevent DMA attacks. intel_iommu=on amd_iommu=force_isolation iommu=force
  # Multiple IOMMU switches are redundant; iommu=force is usually sufficient. Forces an IOMMU to be initialized and used
  # completely, even if the BIOS or ACPI wanted to disable it. It activates the basic DMA remapping function. However, it does
  # not say anything about how restrictive the mapping strategy is, 'passthrough', 'strict', see below.
  ##############################################################################################################################
  - "iommu=force"

  ##############################################################################################################################
  # Enables strict enforcement of IOMMU TLB invalidation, so devices will never be able to access stale data contents.
  # - 'iommu.passthrough=0'
  # Prevents devices from operating in identity-mapped passthrough mode. Without this parameter (or with =1), devices could be
  # passed through without being monitored by the IOMMU in a truly restrictive manner. From a security standpoint,
  # - 'iommu.passthrough=0' is an important step toward DMA isolation for all devices, especially for untrusted PCI(e) devices.
  # - 'iommu.strict=1'
  # Enables Strict Mode for dma-iommu.c (i.e., all DMA transactions are validated synchronously). Without this parameter, the
  # kernel often runs in lazy mode, where mapping caches are used.
  # Performance vs. security: strict=1= more secure, but potentially slower, especially with many small DMA transfers.
  # https://github.com/torvalds/linux/blob/master/drivers/iommu/Kconfig#L97
  # Page 11 of https://lenovopress.lenovo.com/lp1467.pdf
  ##############################################################################################################################
  - "iommu.passthrough=0"
  - "iommu.strict=1"

  ##############################################################################################################################
  # Disable the busmaster bit on all PCI bridges during very early boot to avoid holes in IOMMU.
  # https://mjg59.dreamwidth.org/54433.html
  # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4444f8541dad16fefd9b8807ad1451e806ef1d94
  ##############################################################################################################################
  - "efi=disable_early_pci_dma"

  ##############################################################################################################################
  # Disables the merging of slabs of similar sizes. Sometimes a slab can be used vulnerably, which an attacker can exploit.
  ##############################################################################################################################
  - "slab_nomerge"

  ##############################################################################################################################
  # Zero memory at allocation and free time.
  ##############################################################################################################################
  - "init_on_alloc=1"
  - "init_on_free=1"

  ##############################################################################################################################
  # This option randomizes page allocator freelists, improving security by making page allocations less predictable. This also
  # improves performance.
  ##############################################################################################################################
  - "page_alloc.shuffle=1"

  ##############################################################################################################################
  # When releasing (i.e., free_pages()), all bytes with a marker value (e.g., 0xAA) are overwritten. If later code
  # (accidentally or maliciously) accesses this page, it will most likely crash or produce recognizable artifacts. Only
  # supported if the kernel was built with CONFIG_PAGE_POISONING=y (default on Debian: enabled since Bookworm).
  ##############################################################################################################################
  - "page_poison=1"

  ##############################################################################################################################
  # Enables Kernel Page Table Isolation, which mitigates Meltdown, improves KASLR.
  ##############################################################################################################################
  - "pti=on"

  ##############################################################################################################################
  # The setting 'vsyscall' is obsolete, are at fixed addresses and are a target for ROP.
  ##############################################################################################################################
  - "vsyscall=none"

  ##############################################################################################################################
  # The kernel adds a small random padding offset to the stack pointer with every system call or kernel entry. The starting
  # point for local variables is at a different position within the stack with every call. This makes ROP chains
  # (return-oriented programming) or stack pivoting attacks significantly more difficult.
  ##############################################################################################################################
  - "randomize_kstack_offset=on"

  ##############################################################################################################################
  # Prevents the debugfsfile system from being made available at boot time. This is a useful hardening measure because debugfs
  # reveals a lot of potentially security-relevant kernel information by default, which can be misused by normal users and by
  # exploits.
  ##############################################################################################################################
  - "debugfs=off"

  ##############################################################################################################################
  # Force the kernel to panic on "oopses" (which may be due to false positives).
  # - 'panic=N'  (e.g., 'panic=60'): Wait N seconds and then reboot.
  # - 'panic=0'  No automatic action (System remains stuck in panic state).
  # - 'panic=-1' Also explicitly prevents any automatic reboot.
  ##############################################################################################################################
  - "oops=panic"
  - "panic=-1"

  ##############################################################################################################################
  # Enable a subset of known mitigations for CPU vulnerabilities and disable SMT.
  # - 'mitigations=auto' Enables all available CPU-specific security measures based on the detected CPU, microcode version, and
  # kernel build configuration, if applicable.
  # - 'nosmt' Disables Simultaneous Multithreading (SMT) (e.g., Hyper-Threading on Intel) system-wide to prevent shared cache
  # attacks (SMoTHER, MDS, L1TF, TAA, Snoop-assisted).
  # Why is 'mitigations=auto,nosmt' better than setting everything manually?
  # Automatically adjusted: Depending on CPU family, stepping, microcode.
  # Consistency guaranteed: No contradictions between flags are possible
  # (e.g., spec_store_bypass_disable=on vs. nospec_store_bypass_disable=off).
  # Future-proof: Even new features (e.g., bhi=flush or srbds) are automatically activated without having to know about them.
  ##############################################################################################################################
  - "mitigations=auto,nosmt"

  ##############################################################################################################################
  # If mitigations=auto,nosmt is set, see before, then these flags should not be set individually because they are redundant.
  # Enable mitigations for both 'Spectre Variant 2' (indirect branch speculation) and Intel branch history injection (BHI)
  # vulnerabilities.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/spectre.html
  ##############################################################################################################################
  #- "spectre_v2=on"
  #- "spectre_v2_user=on"
  #- "spectre_bhi=on"

  ##############################################################################################################################
  # If mitigations=auto,nosmt is set, see before, then these flags should not be set individually because they are redundant.
  # Disable Speculative Store Bypass (Spectre Variant 4).
  # https://www.suse.com/support/kb/doc/?id=000019189
  ##############################################################################################################################
  #- "spec_store_bypass_disable=on"
  #- "nospec_store_bypass_disable=off"

  ##############################################################################################################################
  # If mitigations=auto,nosmt is set, see before, then these flags should not be set individually because they are redundant.
  # Enable mitigations for the L1TF vulnerability through disabling SMT and L1D flush runtime control.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html
  ##############################################################################################################################
  #- "l1tf=full,force"

  ##############################################################################################################################
  # If mitigations=auto,nosmt is set, see before, then these flags should not be set individually because they are redundant.
  # Enable mitigations for the MDS vulnerability through clearing the buffer cache and disabling SMT.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html
  ##############################################################################################################################
  #- "mds=full,nosmt"

  ##############################################################################################################################
  # If mitigations=auto,nosmt is set, see before, then these flags should not be set individually because they are redundant.
  # Patches the TAA vulnerability by disabling TSX and enables mitigations using TSX Async Abort along with disabling SMT.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html
  ##############################################################################################################################
  #- "tsx=off"
  #- "tsx_async_abort=full,nosmt"

  ##############################################################################################################################
  # Mark all huge pages in the EPT as non-executable to mitigate iTLB multihit.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/multihit.html
  ##############################################################################################################################
  - "kvm.nx_huge_pages=force"

  ##############################################################################################################################
  # Force disable SMT as it has caused numerous CPU vulnerabilities. The only full mitigation of cross-HT attacks is disabling.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/core-scheduling.html
  ##############################################################################################################################
  - "nosmt=force"

  ##############################################################################################################################
  # Enables the prctl interface to prevent leaks from L1D on context switches.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1d_flush.html
  ##############################################################################################################################
  - "l1d_flush=on"

  ##############################################################################################################################
  # Mitigates numerous MMIO Stale Data vulnerabilities and disables SMT.
  # mmio_stale_data=off        No mitigation (unsafe)
  # mmio_stale_data=full       All known measures active
  # mmio_stale_data=full,nosmt Full mitigation + SMT disabling
  # mmio_stale_data=auto       Activated depending on CPU/microcode
  # mmio_stale_data=full,force Forces mitigation even on CPUs that are supposedly not affected.
  # https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/processor_mmio_stale_data.html
  ##############################################################################################################################
  - "mmio_stale_data=full,force"

  ##############################################################################################################################
  # Enable mitigations for RETBleed (Arbitrary Speculative Code Execution with Return Instructions) vulnerability and disable
  # SMT. If 'mitigations=auto,nosmt' is set, the kernel already activates all retbleed-relevant mitigations, provided the CPU
  # is affected; 'retbleed=auto,nosmt' explicitly overrides the internal assessment and forces full protection. If maximum
  # hardening is required, and one does not want to rely on "auto-detection", then it is recommended to additionally set
  # 'retbleed=auto,nosmt' otherwise, 'mitigations=auto,nosmt' is sufficient.
  # https://www.suse.com/support/kb/doc/?id=000020693
  ##############################################################################################################################
  - "retbleed=auto,nosmt"

  ##############################################################################################################################
  # Enables kernel lockdown mode with a focus on confidentiality. The kernel is configured in such a way that even privileged
  # users (such as root) have limited access to kernel data and debug mechanisms.
  # 'confidentiality': Maximum restriction to ensure the security and integrity of the system. This prevents direct access to
  # hardware and debug interfaces, for example. Useful for highly secure environments as it reduces the attack surface to kernel
  # data. However, some applications that require debugging or hardware access may have problems.
  # https://blog.cloudflare.com/de-de/linux-kernel-hardening/
  # https://www.linux-magazine.com/Issues/2020/239/Lockdown-Mode
  ##############################################################################################################################
  - "lockdown=confidentiality"

  ##############################################################################################################################
  # Enables 'Read-Only Data Protection', which implements read-only memory areas for kernel data structures. This protects the
  # kernel from certain types of exploit (e.g., buffer overflows). 'on': Forces the corresponding areas to remain read-only.
  # https://www.kernel.org/doc/html/v6.10/admin-guide/kernel-parameters.html
  ##############################################################################################################################
  - "rodata=on"

  ##############################################################################################################################
  # Kernel Electric-Fence (KFENCE) is a low-overhead sampling-based memory safety error detector. KFENCE detects a heap of
  # out-of-bounds access, use-after-free, and invalid-free errors. KFENCE is designed to be enabled in production kernels and
  # has near zero performance overhead. Compared to KASAN, KFENCE trades performance for precision. The main motivation behind
  # KFENCE design is that with enough total uptime, KFENCE will detect bugs in code paths not typically exercised by
  # non-production test workloads. One way to quickly achieve a large enough total uptime is when the tool is deployed across a
  # large fleet of machines.
  # https://docs.kernel.org/dev-tools/kfence.html
  ##############################################################################################################################
  - "kfence.sample_interval=100"

  ##############################################################################################################################
  # CFI Ensures that only controlled, predefined transitions are possible in the programs' control flow.
  # kcfi (Kernel Control Flow Integrity): Specific implementation of CFI for the Linux kernel that is particularly robust and
  # provides accurate control flow validation. kcfi relies on compiler-based technologies (e.g., LLVM) that insert special
  # checks and instrumentation into the kernel code.
  # https://kspp.github.io/Recommended_Settings#kernel-command-line-options
  ##############################################################################################################################
  - "cfi=kcfi"

  ##############################################################################################################################
  # Remove additional (32-bit) attack surface, unless you really need them.
  # https://www.kernel.org/doc/html/v6.10/admin-guide/kernel-parameters.html
  # https://kspp.github.io/Recommended_Settings#kernel-command-line-options
  ##############################################################################################################################
  - "ia32_emulation=0"

  ##############################################################################################################################
  # Removes mapping for 32-bit VDSO (for ia32binaries). On 32-bit processes that rely on VDSO, this causes a fallback to classic
  # syscalls (slower) or errors. On a system without CONFIG_IA32_EMULATION or with ia32_emulation=0, vdso32=0 is effective but
  # redundant.
  ##############################################################################################################################
  - "vdso32=0"

  ##############################################################################################################################
  # Checks every copy_to_user() / copy_from_user()operation. Prevents kernels from accidentally copying unallocated memory to
  # userspace. Stop exploits that trigger buffer overflows or use-after-free via copy_*_user(), for example. Effect: Detects
  # heap/SLOB abuse, overwrites. Leads to BUG() & stack trace if suspicious access is detected.
  ##############################################################################################################################
  - "hardened_usercopy=1"

  ##############################################################################################################################
  # Sets the minimum log output of the kernel at boot time to level 0 (= KERN_EMERG).
  ##############################################################################################################################
  - "loglevel=0"

################################################################################################################################
# Grub settings
################################################################################################################################
grub:
  background:                  # RECOMMENDED settings: JPG 1280 x 1024 px or JPG 1920 x 1080 px
    enable: true               # If you want to add a GRUB background.
    path: "/includes/target/etc/default/grub.d/hexagon.png"
  bootdev: "/dev/sda"          # Due notably to potential USB sticks, the location of the primary drive cannot be determined
                               # safely in general, so this needs to be specified.
  force_efi: true              # Force GRUB installation to the EFI removable media path?
                               # Some EFI firmware implementations do not meet the EFI specification (i.e., they are buggy)
                               # and do not support proper configuration of boot options from system hard drives.
                               #
                               # A workaround for this problem is to install an extra copy of the EFI version of the GRUB
                               # bootloader to a fallback location, the "removable media path". Almost all EFI systems, no
                               # matter how buggy, will boot GRUB that way.
                               #
                               # Warning: If the installer failed to detect another operating system that is present on your
                               # computer that also depends on this fallback, installing GRUB there will make that OS
                               # temporarily unbootable. GRUB can be manually configured later to boot it if necessary.
  latest: true                 # Install the latest GRUB2 backported package for encrypted '/boot' support.
                               # MUST be "true" in the case of 'LUKS2' and / or 'dm-integrity' encrypted '/boot'
  only_debian: true            # This is fairly safe to set; it makes grub install automatically to the UEFI partition '/boot'
                               # record if no other operating system is detected on the machine.
  other-os: true               # This one makes grub-installer install to the UEFI partition '/boot' record if it also finds
                               # some other OS, which is less safe as it might not be able to boot that other OS.
  prober: false                # OS-prober did not detect any other operating systems on your computer at this time, but you
                               # may still wish to enable it in case you install more in the future.
  skip: false                  # Skip installing grub.
  update_nvram: false          # Update NVRAM variables to automatically boot into Debian?
                               # GRUB can configure your platform's NVRAM variables so that it boots into Debian automatically
                               # when powered on. However, you may prefer to disable this behavior and avoid changes to your
                               # boot configuration. For example, if your NVRAM variables have been set up such that your
                               # the system contacts a PXE server on every boot, this would preserve that behavior.

################################################################################################################################
# Locale settings set language, country, locale, keyboard map and timezone
################################################################################################################################
locale:
  country: "US"
  keyboard:
    layout: "de"
    xkb_keymap: "de"
  language: "en"
  locale:                      # All locales specified via override MUST be set here, too. A specified 'locale' take
                               # precedence over 'country' and 'language' settings.
    - "en_US.UTF-8"
    - "de_DE.UTF-8"
  override:
    address: "de_DE.UTF-8"     # Address format.
    collate: "en_US.UTF-8"     # Sort order.
    ctype: "de_DE.UTF-8"       # Character set, upper/lower case, character groups.
    measurement: "de_DE.UTF-8" # Metric or imperial system.
    messages: "en_US.UTF-8"    # System language for error messages.
    monetary: "en_US.UTF-8"    # Currency format and symbol.
    name: "en_US.UTF-8"        # Format of personal names.
    numeric: "en_US.UTF-8"     # Number formatting, decimal / a thousand separators.
    paper: "de_DE.UTF-8"       # Standard paper format.
    telephone: "en_US.UTF-8"   # Format for telephone numbers.
    time: "de_DE.UTF-8"        # Date and time format, start of week.
  timezone: "Europe/Lisbon"

################################################################################################################################
# Network settings
################################################################################################################################
network:
  autoconfig:
    enable: true               # Automatic network configuration 'dhcp' is the default. If you prefer to configure the network
                               # manually, change 'network.autoconfig.enable' from "true" to "false" and configure
                               # - 'network.choose_interface.static'
                               # - 'network.hostname'
                               # - 'network.ipv6'
                               # - 'network.static' section
  choose_interface:
    auto: true                 # Choose an interface that has a link if possible. Or manually configure the static NIC below.
    static: "eth1"             # For manual configuration, specify a particular interface.
  hostname: "nsa.usic.gov"     # Specify the FQDN of the server.
                               # If not specified and autoconfig is enabled, the given dhcp value is chosen.
  ipv6: true                   # Specify if you want to use IPv6.
  timeout:
    dhcp: 60                   # If the dhcp server is slow, and the installer times out waiting for it, this might be useful.
    linkwait: 60               # To set a different link detection timeout (default is 3 seconds).
  static:
    enable: true               # If you want the preconfiguration file to work on systems both with and without a dhcp
                               # server, change 'network.static.enable' from "false" to "true" and configure the static
                               # configuration below.
    ipv4address: "192.168.128.128"
    ipv4netmask: "255.255.255.0"
    ipv4gateway: "192.168.128.254"
    ipv4nameserver:
      - "135.181.207.105"      # dns01.eddns.eu
      - "89.58.62.53"          # dns02.eddns.de
      - "138.199.237.109"      # dns03.eddns.eu
    ipv4nameserver_fallback:
      - "176.9.93.198"         # dnsforge.de
      - "176.9.1.117"          # dnsforge.de
    ipv6address: "2a0a:aaaa:bbbb:cccc:192:168:128:128"
    ipv6netmask: "128"
    ipv6gateway: "fe80::1"
    ipv6nameserver:
      - "2a01:4f9:c012:a813:135:181:207:105"
      - "2a0a:4cc0:1:e6:89:58:62:53"
      - "2a01:4f8:c013:8011:138:199:237:109"
    ipv6nameserver_fallback:
      - "2a01:4f8:151:34aa::198"
      - "2a01:4f8:141:316d::117"

################################################################################################################################
# Security settings
################################################################################################################################
security:
  unauthenticated: false       # The installer will ensure that any packages are signed and authenticated.
  unauthenticated_ssl: false   # This ensures that the connection between the installer, and the server from which files
                               # are downloaded, is encrypted and signed by a trusted certificate authority.

################################################################################################################################
# Software installation
################################################################################################################################
software:
  ##############################################################################################################################
  ### Installed by 4000_debootstrap.sh
  ##############################################################################################################################
  # bash
  # busybox
  # ca-certificates
  # coreutils
  # e2fsprogs
  # kmod
  # locales
  # nano
  # openssl
  # passwd
  # procps
  # sed
  # tar
  # tzdata
  # util-linux
  # vim-common
  # zstd
  ##############################################################################################################################
  ### Installed by 4110_update_sources.sh
  ##############################################################################################################################
  # unattended-upgrades
  ##############################################################################################################################
  ### Installed by 4130_installation_toolset.sh
  ##############################################################################################################################
  # apt-show-versions
  # bc
  # bind9-dnsutils
  # bsdmainutils
  # btrfs-progs
  # bzip2
  # dirmngr
  # dmsetup
  # dosfstools
  # efibootmgr
  # fdisk
  # file
  # gawk
  # gdisk
  # gnupg
  # grep
  # gzip
  # haveged
  # initramfs-tools
  # iproute2
  # iputils-ping
  # jq
  # kbd
  # keyutils
  # libpam-pwquality
  # logrotate
  # lsb-release
  # parted
  # pciutils
  # pwgen
  # sudo
  # tar
  # tree
  # unzip
  # usbutils
  # wget
  # whois
  # zsh
  ##############################################################################################################################
  ### Installed by 4140_installation_microcode.sh
  ##############################################################################################################################
  # amd64-microcode
  # intel-microcode
  ##############################################################################################################################
  ### Installed by 4150_installation_chrony.sh
  ##############################################################################################################################
  # chrony
  ##############################################################################################################################
  ### Installed by 4220_installation_cryptsetup.sh
  ##############################################################################################################################
  # cryptsetup
  # cryptsetup-initramfs
  ##############################################################################################################################
  ### Installed by 4230_installation_grub.sh
  ##############################################################################################################################
  # grub2-common
  # grub-efi-amd64 || grub-efi-arm64 || grub-efi-ia32
  ##############################################################################################################################
  ### Installed by 4310_dropbear_build.sh
  ##############################################################################################################################
  # dropbear
  # dropbear-initramfs
  ##############################################################################################################################
  ### Installed by 4420_installation_ssh.sh
  ##############################################################################################################################
  # ssh
  ##############################################################################################################################
  # core software
  ##############################################################################################################################
  - apt-utils
  - bash-completion
  - bat
  - debconf
  - debconf-utils
  - dialog
  - fzf
  - git
  - knot-dnssecutils
  - knot-dnsutils
  - libpam-google-authenticator
  - locate
  - rsyslog
  - screen
  - software-properties-common
  - spectre-meltdown-checker
  - sysstat
  ##############################################################################################################################
  # documentation
  ##############################################################################################################################
  - debian-kernel-handbook
  - linux-doc-6.12
  - man-db
  ##############################################################################################################################
  # encryption
  ##############################################################################################################################
  - pollinate
  ##############################################################################################################################
  # files
  ##############################################################################################################################
  - rsnapshot
  - rsync
  - zip
  ##############################################################################################################################
  # malware detection
  ##############################################################################################################################
  - chkrootkit
  - clamav
  - clamav-daemon
  - rkhunter
  ##############################################################################################################################
  # network
  ##############################################################################################################################
  - dhcpdump
  - dhcping
  - iftop
  - mtr
  - ncat
  - net-tools
  - nmap
  - tshark
  ##############################################################################################################################
  # partitioning
  ##############################################################################################################################
  - mdadm
  ##############################################################################################################################
  # password
  ##############################################################################################################################
  - keychain
  - wamerican
  - wbritish
  - wfrench
  - wngerman
  ##############################################################################################################################
  # security
  ##############################################################################################################################
  - fail2ban
  - ufw
  ##############################################################################################################################
  # sw dev
  ##############################################################################################################################
  #- build-essential
  #- clang
  #- debootstrap
  #- linux-source
  #- lld
  #- makedev
  - shellcheck
  #- ssl-cert
  ##############################################################################################################################
  # tools
  ##############################################################################################################################
  - expect
  - figlet
  - htop
  - neofetch
  - neovim
  - python3
  - virt-what

################################################################################################################################
# Time settings
################################################################################################################################
# Germany     : https://www.ptb.de/cms/ptb/fachabteilungen/abtq/gruppe-q4/ref-q42/zeitsynchronisation-von-rechnern-mit-hilfe-des-network-time-protocol-ntp.html
# Germany     : ptbtime1.ptb.de ptbtime2.ptb.de ptbtime3.ptb.de
# Germany     : https://www.rrze.fau.de/serverdienste/infrastruktur/zeitserver/
# Germany     : ntp0.fau.de	ntp3.fau.de
# Portugal    : https://si.tecnico.ulisboa.pt/en/servicos/servidores-e-dados/ntp/
# Portugal    : ntp1.tecnico.ulisboa.pt ntp2.tecnico.ulisboa.pt
# Sweden      : https://www.netnod.se/swedish-distributed-time-service
# Sweden      : sth1.ntp.se
# Switzerland : https://www.metas.ch/metas/de/home/fabe/zeit-und-frequenz/time-dissemination.html
# Switzerland : ntp11.metas.ch ntp12.metas.ch ntp13.metas.ch
# USA         : https://tf.nist.gov/tf-cgi/servers.cgi
# USA         : time-a-g.nist.gov time-c-b.nist.gov utcnist3.colorado.edu
ntp:
  server:
    - "ntp.ripe.net"
    - "ptbtime3.ptb.de"
    - "ptbtime2.ptb.de"
    - "ptbtime1.ptb.de"
    - "ntp13.metas.ch"
    - "time-c-b.nist.gov"
    - "sth1.ntp.se"
    - "ntp0.fau.de"
  timezone: "Europe/Lisbon"    # Any valid setting for $TZ; see the contents of '/usr/share/zoneinfo' for valid values.
  utc: true                    # Controls whether the hardware clock is set to UTC.

################################################################################################################################
# SSH settings
################################################################################################################################
ssh:
  allow_hardening: true        # For additional hardening of SSH connections via TCP wrapper: '/etc/hosts.allow'.
  # If "allow_hardening" = "true", at least one 'allow_ipv4' MUST be provided.
  allow_ipv4:                  # Provide Bastion / Jump-Server / static VPN-Exit-Nodes IPv4: will be added: 'f2ban-ignoreip'.
    - 202.61.246.50
  allow_ipv6:                  # Provide Bastion / Jump-Server / static VPN-Exit-Nodes IPv6: will be added: 'f2ban-ignoreip'.
    - 2a03:4000:53:f:abcd:9494:0:2
  port: 42137                  # SSH Port.
  root_ca: "/.preseed/ssh_root_ca.pub"

################################################################################################################################
# User settings
################################################################################################################################
user:
  ##############################################################################################################################
  # root – Superuser account (normally disabled for direct login)
  ##############################################################################################################################
  root:
    ensure: present            # Must always be 'present'.
    protected: true            # Prevent unintentional edits or deletions.
    shell: /bin/zsh            # Login shell (e.g., '/bin/bash', '/bin/zsh'); use '/usr/sbin/nologin' for non-interactive users.
    password: ""
    sshpubkey: "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINAYZDAqVZUk3LwJsqeVHKvLn8UKkFx642VBbiSS8uSY 2025_ciss.debian.live.ISO_PUBLIC_ONLY"
    authentication:
      access:
        ssh: false             # Allow SSH access.
        tty: true              # Allow TTY (local console) login.
      password:
        ssh: false             # Allow SSH password login.
        tty: true              # Allow TTY (local console) password login.
      2fa:
        ssh: false             # Require 2FA for SSH access.
        tty: true              # Require 2FA for TTY (local console) login.
    privileges:
      description: "Root user with full system access and administrative privileges."
      sudo: false              # Whether the user can escalate to root using sudo.
      system: true             # Whether this is a low-UID system user (e.g., for automation).
      restricted: false        # If true, the user is limited in scope (e.g., no login, no file access, --no-create-home)
      shell: true              # MUST be "true" if the shell is not '/usr/sbin/nologin' or '/bin/false'.

  ##############################################################################################################################
  # Primary administrative user with full sudo access
  ##############################################################################################################################
  user0:
    ensure: present            # "present" = create user; "absent" = remove user
    protected: true            # Prevent unintentional edits or deletions.
    name: "msw"                # The name of the user account.
    fullname: "msw"            # The full name of the user account holder.
    uid: 1000                  # Ensures that the same user has the same UID on all systems.
    gid: 1000                  # Ensures that the same user has the same GID on all systems.
    shell: /bin/zsh            # Login shell (e.g., '/bin/bash', '/bin/zsh'); use '/usr/sbin/nologin' for non-interactive users.
    password: ""
    sshpubkey: ""
    authentication:
      access:
        ssh: true              # Allow SSH access.
        tty: true              # Allow TTY (local console) login.
      password:
        ssh: false             # Allow SSH password login.
        tty: true              # Allow TTY (local console) password login.
      2fa:
        ssh: true              # Require 2FA for SSH access.
        tty: true              # Require 2FA for TTY (local console) login.
    privileges:
      description: "Primary admin user with full sudo access and interactive login."
      sudo: true               # Whether the user can escalate to root using sudo.
      system: false            # Whether this is a low-UID system user (e.g., for automation).
      restricted: false        # If true, the user is limited in scope (e.g., no login, no file access, --no-create-home)
      shell: true              # MUST be "true" if the shell is not '/usr/sbin/nologin' or '/bin/false'.

  ##############################################################################################################################
  # ansible – System user for automation, no interactive shell
  ##############################################################################################################################
  user1:
    ensure: present            # "present" = create user; "absent" = remove user
    protected: true            # Prevent unintentional edits or deletions.
    name: "ansible"            # The name of the user account.
    fullname: "ansible"        # The full name of the user account holder.
    uid: 137                   # Ensures that the same user has the same UID on all systems.
    gid: 137                   # Ensures that the same user has the same GID on all systems.
    shell: /usr/sbin/nologin   # Login shell (e.g., '/bin/bash', '/bin/zsh'); use '/usr/sbin/nologin' for non-interactive users.
    password: ""               # No password set for ansible user
    sshpubkey: ""
    authentication:
      access:
        ssh: true              # Allow SSH access.
        tty: false             # Allow TTY (local console) login.
      password:
        ssh: false             # Allow SSH password login.
        tty: false             # Allow TTY (local console) password login.
      2fa:
        ssh: false             # Require 2FA for SSH access.
        tty: false             # Require 2FA for TTY (local console) login.
    privileges:
      description: "Automation user without interactive shell and no sudo."
      sudo: true               # Whether the user can escalate to root using sudo.
      system: true             # Whether this is a low-UID system user (e.g., for automation).
      restricted: false        # If true, the user is limited in scope (e.g., no login, no file access, --no-create-home)
      shell: false             # MUST be "true" if the shell is not '/usr/sbin/nologin' or '/bin/false'.

# vim: number et ts=2 sw=2 sts=2 ai tw=128 ft=yaml
