Nobara

Secure Boot

tl/dr: https://www.youtube.com/watch?v=6TKJkLWMr50

1) Boot into your motherboard bios. Turn off secure boot, but enable key management. Delete all existing keys (AFTER YOU MAKE SURE YOU DON’T HAVE BITLOCKER ENCRYPTED DRIVES). Exit and boot into Nobara.

2) Add the sbctl copr to your repositories: sudo dnf copr enable chenxiaolong/sbctl

3) Install sbctl: sudo dnf in sbctl

4) Initialize the key database: sudo sbctl create-keys 5) Enroll microsoft keys: sudo sbctl enroll-keys -m

5) Determine current kernel: uname -r

6) Sign current kernel: sudo sbctl sign -s /boot/vmlinuz-6.19.2-200.nobara.fc43.x86_64

7) Sign grub .efi program: sudo sbctl sign -s /boot/efi/EFI/fedora/grubx64.efi

8) Boot back into bios, enable secure boot, save and exit back to Linux

9) Verify secure boot is working: sudo sbctl status

10) Create auto-sign script /etc/kernel/install.d/99-sign-kernel.install:

#!/bin/bash 
for kernel in /boot/vmlinuz-*; do 
/usr/bin/sbctl sign -s "$kernel" 
done 

11) Make the script executable: sudo chmod u+x /etc/kernel/install.d/99-sign-kernel.install

12) Run the script, verify it works: sudo /etc/kernel/install.d/99-sign-kernel.install

Automatisches Entschlüsseln der Partition

Im Grunde wie unter Ubuntu. Nur init ramfs ist ein anderer befehl

sudo dracut -f --regenerate-all<br>

Odroid 4h+

Einrichtung wie PI Nas

smartctl

sudo apt install smartmontools

temp sensoren

sudo apt install lm-sensors
sudo sensors-detect
sensors

ssh hardening

ssh keys auf client erstellen ssh-keygen. inhalt der .pub datei auf dem server an ~/.ssh/authorized_keys einfügen

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sshd -T
sudo nano /etc/ssh/sshd_config

ListenAddress 192.168.178.0
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 20
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no
X11Forwarding no
#AllowAgentForwarding no
#AllowTcpForwarding no
PermitTunnel no



sudo sshd -t
sudo systemctl reload sshd.service

Proxy für IPv4 zu IPv6 Bridge

Ein Nginx Installieren. Certbot muss geteilt werden und kann nicht auf beiden Servern laufen. Anscheinend ist es nicht möglich auf beiden Servern ein eiegens Zertifikat zu bekommen.

# /etc/nginx/sites-available/reverse-proxy.conf
server {
    listen 80;
    listen [::]:80;
    server_name TLD;

    # Weiterleitung auf HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name TLD;


    # SSL-Zertifikate (Let's Encrypt)
    ssl_certificate /home/user/letsencrypt/live/TLD.de/fullchain.pem;
    ssl_certificate_key /home/user/letsencrypt/live/TLD.de/privkey.pem;


    # Sicherheit & Performance
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # Proxy-Einstellungen
    location / {
        proxy_pass https://[IPV6];
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header Host TLD.de;       # Für HTTP-Header
        proxy_ssl_server_name on;                     # Aktiviert SNI
        proxy_ssl_name TLD.de;             # SNI explizit setze

        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Timeout für WebSockets & H2
        proxy_read_timeout 3600;
    }
}

IPv6 für Docker Container aktivieren

https://docs.docker.com/engine/daemon/ipv6/#use-ipv6-for-the-default-bridge-network

/etc/docker/daemon.json

{
  "ipv6": true,
  "ip6tables": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
  "default-network-opts": {"bridge":{"com.docker.network.enable_ipv6":"true"}}
}

LUKS2 mit TPM automatisch bei Systemstart entschlüsseln

Dank Copilot:

TPM-Unterstützung prüfen

ls /dev/tpm*

Erwartet: /dev/tpm0 und /dev/tpmrm0

TPM2-Tools installieren

sudo apt install tpm2-tools cryptsetup

UUIDs der Partitionen ermitteln

sudo blkid /dev/sdb1

TPM-Key in LUKS eintragen für jede Festplatte

sudo systemd-cryptenroll --tpm2-device=auto /dev/disk/by-uuid/16d6c412-6434-4fdc-951b-1d7176a0c03e

Prüfe ob der Key in slot 1 eingetragen wurde

 sudo cryptsetup luksDump /dev/disk/by-uuid/16d6c412-6434-4fdc-951b-1d7176a0c03e

Wenn der Key in Slot 2 eingetragen wurde können die Slots mit gelöscht werden

sudo systemd-cryptenroll --wipe-slot=tpm2 /dev/disk/by-uuid/16d6c412-6434-4fdc-951b-1d7176a0c03e

crypttab konfigurieren

sudo nano /etc/crypttab

sdb1_crypt UUID=16d6c412-6434-4fdc-951b-1d7176a0c03e none luks,tpm2-device=auto
sdc1_crypt UUID=7e86646a-6efd-47b9-996c-e0597b8038b7 none luks,tpm2-device=auto
sdd1_crypt UUID=82b8afee-51f5-43e9-bb35-7e108f073c3d none luks,tpm2-device=auto

initramfs aktualisieren

sudo update-initramfs -u -k all

Nach Reboot prüfen ob das Entschlüsseln jetzt automatisch funktioniert. Dann fstab anpassen

/dev/mapper/sdb1_crypt /mnt/nas btrfs defaults,noatime,compress=zstd 0 0

Profit!

BTRFS Notizen

btrfs subvolume list /dev

HDD zum Dateisystem hinzufügen oder entfernen. Ich mag Kuchen

https://wiki.tnonline.net/w/Btrfs/Adding_and_removing_devices#Complete_example_of_adding_a_second_device_to_single_disk_filesystem

Verschicken von BTRFS Subvolumes

Snapshot umbennen

https://superuser.com/a/415194

Übersicht von Festplattenbelegung

 sudo btrfs device usage /mnt/nas

Dateisystemfehler prüfen

sudo btrfs check /mnt/dm-1

Neue HDD einrichten

Partition erstellen

 sudo parted /dev/sde print
 sudo parted /dev/sde mklabel gpt
 sudo parted /dev/sde mkpart primary 2048s 100%
 sudo parted /dev/sde print
 sudo parted /dev/sde align-check optimal 1

Verschlüsselungsart bestimmen

cryptsetup benchmark

Partition verschlüsseln

sudo cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sde1 

Partiton entschlüsseln

sudo udisksctl unlock -b /dev/disk/by-uuid/82b8afee-51f5-43e9-bb35-7e108f073c3d

HDD zu bestehendem BTRFS Pool hinzufügen

sudo btrfs device add /dev/dm-3 /mnt/nas

Pool Balancen

sudo btrfs balance start -v --full-balance /mnt/nas

Balance überwachen (als root)

 watch "btrfs filesystem usage -T /mnt/nas; btrfs balance status /mnt/nas"

Dateisystem erstellen

 sudo mkfs.btrfs /dev/dm-4

Dateisystem mounten

sudo mount /dev/dm-4 /mnt

Von anderem BTRFS Dateisystem kopieren

sudo btrfs subvolume list /quelle
btrfs subvolume snapshot -r /quelle/subvolume /quelle/subvolume@yyyymmddhhnn
btrfs send /quelle/subvolume@yyyymmddhhnn | pv -tba | btrfs receive /ziel

Oracle DMP Importieren

Eine WM erstellen, Oracle DB installieren, SQLDeveloper runterladen, SQLDeveloper starten.

Verbindung mit der DB herstellen, neuen User erstellen (muss mit C## beginnen und komplett groß geschrieben werden). Alle Rechte und Rollen zuordnen ausser die sys* rollen.

Alls neuer User verbinden. Ansicht->DBA Verbinden. Datapump Import. Assistent Datapump

GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO C##ARNE;

CREATE OR REPLACE DIRECTORY „DATA_PUMP_DIR“ as ‚C:\tmp\‘;

Tablespaces

SELECT DISTINCT sgm.TABLESPACE_NAME , dtf.FILE_NAME
FROM DBA_SEGMENTS sgm
JOIN DBA_DATA_FILES dtf ON (sgm.TABLESPACE_NAME = dtf.TABLESPACE_NAME)
WHERE sgm.OWNER = ‚C##ARNE‘

ggfs tablespaces und userschemas anpassen lassen

Nas neu eingerichtet – raspi 4 usb boot

Ubuntu laut Anleitung vorbereitet und gebootet. Updates abwarten (20 Min etwa)
https://jamesachambers.com/raspberry-pi-4-ubuntu-20-04-usb-mass-storage-boot-guide/

mit


locales

die sprache prüfen

mit


sudo dpkg-reconfigure locales

die Sprache ändern

neuen benutzer einrichten
sudo adduser

benutzer zu sudo hinzufügen
sudo usermod -aG sudo

teste ob user wirklich sudo rechte hat. werde zu neuem user
sudo su

<benutzername>: sudo whoami #sollte roote ausgeben

alten ubuntu user löschen
sudo userdel -R ubuntu

verschlüsselte festplatte
installiere udisks
sudo apt install udisks2

sudo udisksctl unlock -b <disk>

firewall
prüfen ob aktiv
sudo ufw status

ssh erlauben
sudo ufw allow ssh

http erlauben
sudo ufw allow http
sudo ufw allow https

ufw bei systemstart mitstarten
sudo ufw enable

hostname ändern
sudo nano /etc/hosts
sudo nano /etc/hostname
sudo hostname -F /etc/hostname

apache2 installieren
sudo apt install apache2

sudo nano /etc/apache2/apache2.conf
ServerSignature Off
ServerTokens Prod
SSLProtocol -ALL +TLSv1.2
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM

mod_rewrite
sudo a2enmod rewrite
a2enmod proxy
a2enmod proxy_http
a2enmod ssl

cerbot
sudo apt install certbot python3-certbot-apache

emby
https://emby.media/linux-server.html
curl -L –out emby.deb
sudo dpkg -i emby.deb

htop
sudo apt install htop

samba
sudo apt install samba
Ports 139 und 445 freigeben in der Firewall
sudo ufw allow from 192.168.178.0/24 to any port 139
sudo ufw allow from 192.168.178.0/24 to any port 445

smb.conf:

[Public]
create mask = 0775
directory mask = 0775
force group = users
guest ok = Yes
path = /mnt/nas/Public
write list = arne

[Arne]
create mask = 0770
directory mask = 0770
force group = arne
force user = arne
path = /mnt/nas/Arne
read only = No
valid users = arne

samba user erstellen

sudo smbpasswd -a <username>

ssh
enable public key

ggf public key aus private key erstellen
ssh-keygen -f <pfad/zum/privatekey> -y > public_key

ddclient für dynv6
sudo apt install ddclient
config laut dynv6, username auch wirklich none eingeben

nextcloud
sudo apt install mariadb-server php7.4-bcmath php7.4-bz2 php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php7.4-xml php7.4-zip php7.4 php7.4-fpm php7.4-intl

datenbank und user in mariadb anlegen
create database nextcloud;
CREATE USER ’nexcloud’@’localhost‘ IDENTIFIED BY ‚changeme‘;
GRANT ALL PRIVILEGES ON nextcloud.* TO ’nextcloud’@’localhost‘;
FLUSH PRIVILEGES;
exit;

php.ini
sudo nano /etc/php7.4/fpm/php.ini
memory_limit = 512M
output_buffering = off

fail2ban
für emby
/etc/fail2ban$ sudo nano filter.d/emby.conf
[Definition]
failregex = AUTH-ERROR: – Invalid user
HTTP Response 401 to .

    /etc/fail2ban$ sudo nano jail.d/emby.local
    [emby]
    enabled = true
    filter = emby
    logpath = /var/lib/emby/logs/embyserver.txt
    port = 80,443
für nexcloud
    Create a file in /etc/fail2ban/filter.d named nextcloud.conf with the following contents:

    [Definition]
    _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
    failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
                ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
    datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
    The jail file defines how to handle the failed authentication attempts found by the Nextcloud filter.

    Create a file in /etc/fail2ban/jail.d named nextcloud.local with the following contents:

    

[nextcloud]

backend = auto enabled = true port = 80,443 protocol = tcp filter = nextcloud maxretry = 3 bantime = 86400 findtime = 43200 logpath = /path/to/data/directory/nextcloud.log

lüfterscript einbauen

hd-idle

sudo nano /etc/default/hd-idle

START_HD_IDLE=true

HD_IDLE_OPTS=“-i 1800 -a /dev/disk/by-uuid/9ffe642b-6af8-49b3-952f-2c86f1f3b37f -i 1800 -a /dev/disk/by-uuid/369dda9c-0411-4ddd-a630-eed8d66b941e -l /var/log/hd-idle.log“ -a /dev/disk/by-uuid/82b8afee-51f5-43e9-bb35-7e108f073c3d -a /dev/disk/by-uuid/d89ada69-30a4-405c-b2f9-532fce8d0078 -l /var/log/hd-idle.log“



sudo systemctl enable hd-idle
sudo systemctl start hd-idle

mailversandt

sudo usermod -aG mail <benutzername>

dann ab und wieder anmelden


sudo apt install mailutils

als satelit einrichten

sudo nano /etc/postfix/main.cf

(vorhandenes smtp_tls_security_level auskommentieren)

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_tls_security_level = encrypt

virtual_alias_domains = nas
virtual_alias_maps = hash:/etc/postfix/virtual

sudo touch /etc/postfix/sasl_password
sudo nano /etc/postfix/sasl_password
mail.gmx.net mail_adresse@gmx.de:passwort

sudo nano /etc/postfix/sender_canonical
www-data meine_adresse@gmx.de
root meine_adresse@gmx.de
arne meine_adresse@gmx.de
sudo postmap hash:/etc/postfix/sasl_password 
sudo postmap /etc/postfix/sender_canonical

sudo nano /etc/postfix/virtual
@example.com         example@gmx.de

sudo postmap /etc/postfix/virtual

sudo systemctl restart postfix

zumtesten:
echo Hallo! dies ist ein Test! | mail -s Testmail meine_adresse@gmx.de

Auto Updates

sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Die Zeile //Unattended-Upgrade::Mail ""; suchen und auskommentieren und mit eurer E-Mailadresse ergänzen.

Unattended-Upgrade::Mail „info@beyond.lol“;

Für den automatischen Neustart folgende Zeilen anpassen
//Unattended-Upgrade::Automatic-Reboot „false“;
Unattended-Upgrade::Automatic-Reboot „true“;

//Unattended-Upgrade::Automatic-Reboot-Time „02:00“;
Unattended-Upgrade::Automatic-Reboot-Time „02:00“;

sudo unattended-upgrades –dry-run

Emby ohne Portnummer aufrufen (Apache Reverse Proxy)

Frei nach hier:

https://emby.media/community/index.php?/topic/61549-apache-proxy-frontend-for-emby/

a2enmod proxy
a2enmod proxy_http
a2enmod rewrite
a2enmod headers
a2enmod ssl
a2enmod http2

SSL Zertifikat von Letsencrypt (crytbot) und die Config aus dem Artikel anpassen, mit dem Zusatz fürs logging:

ErrorLog ${APACHE_LOG_DIR}/emby-error_log
LogFormat "%t \"%r\" %>s" common
CustomLog ${APACHE_LOG_DIR}/emby-access_log common