# Sammlung Codes und Tricks

# iptables

### Eintrag löschen nach Nummer in der Chain

```bash
sudo iptables -L --line-numbers

```

Output:

```
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    DROP       all  --  anywhere             anywhere             ctstate INVALID
4    UDP        udp  --  anywhere             anywhere             ctstate NEW
5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED

```

```bash
sudo iptables -D INPUT 3

```

# chmod

<table border="1" id="bkmrk-wert-rechte-0-keine-" style="border-collapse: collapse; width: 67.037%; height: 272px;"><colgroup><col style="width: 49.9848%;"></col><col style="width: 49.9848%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px; background-color: rgb(206, 212, 217);">## **Wert**

</td><td class="align-center" style="height: 29.6px; background-color: rgb(206, 212, 217);">## **Rechte**

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 0

</td><td class="align-center" style="height: 29.6px;">### Keine

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 1

</td><td class="align-center" style="height: 29.6px;">### x

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 2

</td><td class="align-center" style="height: 29.6px;">### w

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 3

</td><td class="align-center" style="height: 29.6px;">### w+x

</td></tr><tr style="height: 35.2px;"><td style="height: 35.2px;">### 4

</td><td class="align-center" style="height: 35.2px;">### r

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 5

</td><td class="align-center" style="height: 29.6px;">### r+x

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 6

</td><td class="align-center" style="height: 29.6px;">### r+w

</td></tr><tr style="height: 29.6px;"><td class="align-center" style="height: 29.6px;">### 7

</td><td class="align-center" style="height: 29.6px;">### r+w+x

</td></tr></tbody></table>

# In History suchen mit Bild nach oben und Bild nach unten

Hierzu muss in der Datei "/etc/inputrc" folgender Inhalt aktiviert werden unter Linux:

```shell
# alternate mappings for "page up" and "page down" to search the history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
```

Ist die Aktivierung unter "/etc/inputrc" nicht möglich, kann im Homeverzeichnis des Users folgende Datei angelegt werden "$HOME/.inputrc" mit dem gleichen Inhalt wie oben angegeben.

Möchte man erreichen, dass sogar bei parallel geöffneten Tabs bzw. Fenstern die History aus allen Tabs nach jedem Befehl gespeichert und dadurch jedem bereits geöffneten anderen Tab sofort zur Verfügung gestellt wird, ohne dafür einen neuen Tab öffnen zu müssen, trägt man stattdessen folgende Zeile ein in ".bashrc" :

```shell
PROMPT_COMMAND="history -a; history -c; history -r"
```

# Vaultwarden Admin Passwort setzen

[![vaultwarden_logo.png](https://wiki.unixweb.net/uploads/images/gallery/2024-04/scaled-1680-/vaultwarden-logo.png)](https://wiki.unixweb.net/uploads/images/gallery/2024-04/vaultwarden-logo.png)

Bei der Vaultwarden Docker Installation mit docker-compose erhält man einen Fehler wenn folgender Eintrag gemacht wird.

Die Variable "ADMIN\_TOKEN" wird nicht richtig als String gelesen und Vaultwarden ist über "./admin" nicht erreichbar oder das Passwort wird als falsch erkannt.

```yaml
services:
  bitwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    ports:
      - 8060:80
      - 3012:3012
    volumes:
      - bw2-data:/data
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - bw2-data:/log
        # - LOG_FILE=/home/joachim/docker/bitwarden/log/bitwarden.log
    environment:
      - WEBSOCKET_ENABLED=true
      - SIGNUPS_ALLOWED=true
      - SIGNUPS_VERIFY=true
        #- ADMIN_TOKEN: "$argon2id$v=19$m=65540,t=3,p=4$u/fA7M86QrbBzN6eZjYOESs5EhLXQvYcuwBHTE1/gIE$23stGPt3z5CKQclPGH/p77VsvMl9ZOwkkr8ViP1JNq"
      - ADMIN_TOKEN=${ADMIN_TOKEN}
      - INVITATIONS_ALLOWED=true
      - SHOW_PASSWORD_HINT=false
      - DATABASE_URL=mysql://vaultwarden:xxxxxxx@192.168.XXX.XXX:3306/vaultwarden2

volumes:
     bw2-data:
```

#### Abhilfe : 

Erstelle im Installationsverzeichnis von Vaultwarden eine Datei ".env" mit folgendem Inhalt und ersetze in der "docker-compose.yml" die Variable "- ADMIN\_TOKEN=${ADMIN\_TOKEN}" :

```yaml
ADMIN_TOKEN="$argon2id$v=19$m=65540,t=3,p=4$u/fA7M86QrbBzN6eZjYOESs5EhLXQvYcuwBHTE1/gIE$23stGPt3z5CKQclPGH/p77VsvMl9ZOwkkr8ViP1JNq"

```

Der Token wird durch folgenden Befehl erstellt :

```shell
docker exec -it vaultwarden /vaultwarden hash
```

# Websocket in Nginx Proxy Manager

[![Bildschirmfoto 2024-04-04 um 20.08.25.png](https://wiki.unixweb.net/uploads/images/gallery/2024-04/scaled-1680-/bildschirmfoto-2024-04-04-um-20-08-25.png)](https://wiki.unixweb.net/uploads/images/gallery/2024-04/bildschirmfoto-2024-04-04-um-20-08-25.png)Einrichtung Websocket für Vaultwarden:

```plain
location:             /notifications/hub
scheme:               http
forward-hostname/ip:  IPvonVaultwarden
port:                 3012
zahnradmenü:          proxy_set_header Upgrade $http_upgrade;
                      proxy_set_header Connection "upgrade";
```

```plain
location:             /notification/hub/negotiate
scheme:               http
forward-hostname/ip:  IPvonVaultwarden
port:                 8080
```

# Tasmota Rules / Regeln

```shell
rule1 on Time#Minute|1 DO ping4 [IP-Adresse] ENDON 

rule1 on Time#Minute|1 DO ping4 [IP-Adresse] ENDON ON ping#[IP-Adresse]#Success=4 DO tmsend Netzwerkverbindung von NAS-Speicher OK! ENDON

rule1 on Time#Minute|1 DO ping4 [IP-Adresse] ENDON ON ping#[IP-Adresse]#Success=0 DO tmsend Netzwerkverbindung von NAS-Speicher unterbrochen! ENDON

rule1 on Time#Minute|1 DO BACKLOG ping4 [IP-Adresse1]; ping4 [IP-Adresse2]; ping4 [IP-Adresse3] ENDON ON ping#[IP-Adresse1]#Success=4 DO tmsend Netzwerkverbindung [dein Gerät] ok! ENDON ON ping#[IP-Adresse2]#Success=4 DO tmsend Netzwerkverbindung [dein Gerät] ok! ENDON ON ping#[IP-Adresse3]#Success=4 DO tmsend Netzwerkverbindung [dein Gerät] ok! ENDON

rule1 on Time#Minute|1 DO BACKLOG ping4 [IP-Adresse1]; ping4 [IP-Adresse2]; ping4 [IP-Adresse3] ENDON ON ping#[IP-Adresse1]#Success=0 DO tmsend Netzwerkverbindung [dein Gerät] unterbrochen! ENDON ON ping#[IP-Adresse2]#Success=0 DO tmsend Netzwerkverbindung [dein Gerät] unterbrochen! ENDON ON ping#[IP-Adresse3]#Success=0 DO tmsend Netzwerkverbindung [dein Gerät] unterbrochen! ENDON

```

# Raspberry Pi 5 Lüfter Steuerung

In der Datei /boot/firmware/config.txt müssen folgende Parameter eingetragen werden. Die Beschreibung sollte selbsterklärend sein.

```shell
[all]

# Bei Temperatur 35 Grad Celsius Lüfter auf 0-250 / 100 setzen 
dtparam=fan_temp0=35000
dtparam=fan_temp0_hyst=5000
dtparam=fan_temp0_speed=100

# Bei Temperatur 60 Grad Celsius Lüfter auf 0-250 / 125  setzen = Halber Speed 
dtparam=fan_temp1=60000
dtparam=fan_temp1_hyst=5000
dtparam=fan_temp1_speed=125

# Bei Temperatur 67,5 Grad Celsius Lüfter auf 0-250 / 175 setzen = Dreiviertel Speed
dtparam=fan_temp2=67500
dtparam=fan_temp2_hyst=5000
dtparam=fan_temp2_speed=175

# Bei Temperatur 75 Grad Celsius Lüfter auf 0-250 / 250 setzen = Full Speed 
dtparam=fan_temp3=75000
dtparam=fan_temp3_hyst=5000
dtparam=fan_temp3_speed=250
```

# Hetzner /etc/apt/sources.list

Es gibt auf verschiedenen Hetzner Server Fehler mit "apt update" und "apt upgrade". Ein "--fix-missing" ist leider nicht erfolgreich.

Lösung ARM64 ist nicht eingetragen und muss auf anderen Mirror umgestellt werden:

```
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy main restricted
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy-updates main restricted
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy universe
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy-updates universe
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy multiverse
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy-updates multiverse
deb https://mirror.hetzner.com/ubuntu-ports/packages jammy-backports main restricted universe multiverse

```

\# dpkg --print-architecture. zeigt die Architektur an.

# Nvidia Treiber unter Ubuntu 24.01 installieren

## Add Nvidia PPA

Ensure your system has the latest packages

```
sudo apt update && sudo apt upgrade -y

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk-" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>Add the Nvidia PPA

```
sudo add-apt-repository ppa:graphics-drivers/ppa

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk--1" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>When prompted hit `ENTER` to continue. Pull the latest packages

```
sudo apt update

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk--2" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>Check which drivers are available. I usually go with the 'recommended' version

```
ubuntu-drivers devices

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk--3" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>## Install Drivers

Once you identify the driver you wish to install, use `apt` to install it

```
sudo apt install nvidia-driver-<DRIVER VERSION>

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk--4" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>Reboot for the changes to take effect

```
sudo reboot now

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk--5" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>## Confirm Installation

Check `nvidia-smi` to see if the GPU is detected and the correct driver version is installed

```
nvidia-smi

```

<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" id="bkmrk--6" style="--prism-color: #393A34; --prism-background-color: #f6f8fa;"><div class="codeBlockContent_biex"><div class="buttonGroup__atx">  
</div></div></div>I have the nvidia-driver-560 installed at the time of this guide, and my output reflects that

# Anleitung: Anaconda Installation

### **Anleitung: Anaconda installieren und nutzen**

Anaconda ist eine Open-Source-Distribution, die vor allem für Data Science, maschinelles Lernen und wissenschaftliches Computing verwendet wird. Sie vereinfacht die Verwaltung von Python- und R-Paketen und Umgebungen.

---


### **Was ist Anaconda und wofür ist es gut?**

1. **Python-Umgebungen:**
    
    
    - Anaconda erleichtert die Verwaltung von Python-Versionen und -Bibliotheken, sodass Projekte mit unterschiedlichen Anforderungen problemlos parallel laufen können.
2. **Pakete und Tools:**
    
    
    - Es enthält viele nützliche Tools wie **Jupyter Notebook**, **Spyder** und **conda** (Package- und Environment-Manager).
    - Beliebte Bibliotheken wie NumPy, pandas, TensorFlow und Matplotlib sind vorkonfiguriert.
3. **Vorteile:**
    
    
    - Kein Konflikt zwischen verschiedenen Bibliotheken.
    - Ideal für Data-Science-Projekte.
    - Erleichtert die Zusammenarbeit, da man leicht reproduzierbare Umgebungen erstellen kann.

---

[![grafik.png](https://wiki.unixweb.net/uploads/images/gallery/2024-12/scaled-1680-/grafik.png)](https://wiki.unixweb.net/uploads/images/gallery/2024-12/grafik.png)

### **Anleitung: Installation von Anaconda**

#### **Schritt 1: Anaconda herunterladen**

1. Gehe auf die [offizielle Anaconda-Website](https://www.anaconda.com/).
2. Lade die Installationsdatei für dein Betriebssystem herunter (Windows, macOS oder Linux).

#### **Schritt 2: Installation unter Windows**

1. Starte den Installer.
2. Folge den Anweisungen: 
    - Wähle die Option "Just Me" für eine Einzelbenutzerinstallation.
    - Empfohlen: Installiere Anaconda für deinen Benutzer (kein Admin-Zugang nötig).
    - Lass den Anaconda-Installer den Pfad setzen.
3. Aktiviere die Option: "Add Anaconda3 to my PATH environment variable" **nur**, wenn du sicher bist, dass keine andere Python-Installation Probleme verursacht.

#### **Schritt 3: Installation unter macOS und Linux**

1. Öffne ein Terminal.
2. Führe den heruntergeladenen Installer mit: ```bash
    bash Anaconda3-*.sh
    
    ```
3. Folge den Installationsanweisungen im Terminal.

#### **Schritt 4: Installation überprüfen**

Nach der Installation kannst du prüfen, ob alles funktioniert:

```bash
conda --version

```

Dies sollte die installierte Version anzeigen.

---

### **Erste Schritte mit Anaconda**

#### **1. Anaconda Navigator starten**

- **Windows/macOS:** Suche nach "Anaconda Navigator" und starte es.
- **Linux:** Gib im Terminal ein: ```bash
    anaconda-navigator
    
    ```

Der Navigator bietet eine grafische Oberfläche, um Pakete zu installieren, Umgebungen zu verwalten und Tools wie Jupyter Notebook zu starten.

#### **2. Umgebung erstellen**

Du kannst separate Umgebungen für verschiedene Projekte erstellen:

```bash
conda create --name meine_umgebung python=3.9
conda activate meine_umgebung

```

#### **3. Pakete installieren**

Füge Bibliotheken hinzu:

```bash
conda install numpy pandas matplotlib

```

#### **4. Jupyter Notebook starten**

```bash
jupyter notebook

```

Dies öffnet eine Weboberfläche, auf der du Python-Skripte interaktiv ausführen kannst.

---

### **Nützliche Befehle für die Arbeit mit Anaconda**

<table id="bkmrk-befehl-beschreibung-"><thead><tr><th>**Befehl**</th><th>**Beschreibung**</th></tr></thead><tbody><tr><td>`conda list`</td><td>Zeigt alle installierten Pakete in der Umgebung.</td></tr><tr><td>`conda update conda`</td><td>Aktualisiert den Conda-Paketmanager.</td></tr><tr><td>`conda deactivate`</td><td>Beendet die aktive Umgebung.</td></tr><tr><td>`conda env list`</td><td>Listet alle verfügbaren Umgebungen.</td></tr><tr><td>`conda remove --name meine_umgebung`</td><td>Löscht eine Umgebung.</td></tr></tbody></table>

---

### **Fazit**

Anaconda ist ein leistungsstarkes Tool, das die Arbeit mit Python-Umgebungen erheblich erleichtert. Es ist besonders nützlich für Entwickler, die an Projekten im Bereich Data Science oder maschinelles Lernen arbeiten. Dank der integrierten Tools wie Jupyter Notebook und der einfachen Paketverwaltung ist es sowohl für Anfänger als auch für Experten geeignet.

# git clone verzeichnis

Wenn ich nur ein bestimmtes Verzeichnis aus einem git repository clonen möchte sind folgende Schritte nötig:

```shell
git clone --no-checkout git@git.local:gitbenutzer/clone-directory.git
```

**Sparse Checkout aktivieren:** Aktiviere Sparse Checkout:

```shell
git sparse-checkout init
```

**Unterverzeichnis auswählen:** Gib das Unterverzeichnis an, das du herunterladen möchtest. Zum Beispiel, wenn das Unterverzeichnis `releases/` heißt:

```shell
git sparse-checkout set releases/1/
```

project/  
├── releases/  
│ ├── file1.txt  
│ └── file2.txt  
├── anotherdir/  
└── README.md

**Sparse Checkout Änderungen:** Falls du später ein weiteres Verzeichnis hinzufügen möchtest, kannst du den Befehl `git sparse-checkout set` erneut ausführen:

```shell
git sparse-checkout set releases/1 releases/2
```

# Datei Import bei Cryptpad

Bei Cryptpad gibt es das Problem, wenn Dateien in Word oder Excel Format hochgeladen werden, diese nicht in das integrierte OnlyOffice geöffnet werden.

In dem Bild unten wurde eine Datei "Mai-2025-Leistungsnachweis" im Excel Format hochgeladen. Man kann die Datei sehen, aber nicht das es eine Excel Datei ist. Beim klicken auf die Datei muss man die Datei lokal herunterladen und dann lokal bearbeiten.

[![Bildschirmfoto 2025-05-16 um 15.35.35.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-35-35.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-35-35.png)

Hier wird beim anklicken der Download Dialog geöffnet. Was für ein Unsinn, da es voraussetzt, dass lokal auf den PC ein Office installiert sein muss. Warum kann man die Datei nicht in Excel bearbeiten, welches ja schon in Cryptpad integriert ist. Also ein Excel oder Word welches direkt im Browser läuft?

[![Bildschirmfoto 2025-05-16 um 15.38.16.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-38-16.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-38-16.png)

Nun kommt der Trick das Excel doch im Browser geöffnet werden kann und man die Datei im Browser bearbeitet.   
Voraussetzung ist, dass Tabelle, Dokument, Präsentation usw. installiert und aktiviert ist in CryptPad.

[![Bildschirmfoto 2025-05-16 um 15.27.08.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-27-08.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-27-08.png)

Beim erstellen einer neuen Tabellen Datei gibt es links oben den Punkt "Datei" &lt;- dort drauf klicken. Es öffnet sich ein Dialogfenster und dort den Menüpunkt "Importieren" auswählen. Es öffnet sich ein Dateibrowser wo man die zu importierende Datei als Excel Datei auswählt.

[![Bildschirmfoto 2025-05-16 um 15.38.50.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-38-50.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-38-50.png)

Bei Erfolg kommt diese Meldung:

[![Bildschirmfoto 2025-05-16 um 15.39.14.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-39-14.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-39-14.png)

Die Excel Datei wird nun in Cryptpad Dateiablage als Excel-Tabelle mit dem richtigen Icon angezeigt. In diesem Beispiel als "Tabelle Erfolgreich Import angezeigt.

[![Bildschirmfoto 2025-05-16 um 15.40.03.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-40-03.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-40-03.png)

Die Datei lässt sich nun mit dem vollständigen Funktionsumfang von OnlyOffice direkt im Browser bearbeiten.

[![Bildschirmfoto 2025-05-16 um 15.59.20.png](https://wiki.unixweb.net/uploads/images/gallery/2025-05/scaled-1680-/bildschirmfoto-2025-05-16-um-15-59-20.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-05/bildschirmfoto-2025-05-16-um-15-59-20.png)

Wünsche weiterhin viel Erfolg und Spaß mit CryptPad.

# Zammad hinter Zoraxy: CSRF-Token-Probleme lösen

## Problem

Beim Zugriff auf ein Zammad-System über den Reverse Proxy **Zoraxy** kam es zu folgender Fehlermeldung:

```
{"error":"CSRF token verification failed!","error_human":"CSRF token verification failed!"}

```

Zammad blockierte POST-/PUT-Anfragen, da kein gültiges CSRF-Token erkannt wurde.

## Ursache

Rails-basierte Systeme wie Zammad schützen sich gegen CSRF (Cross-Site Request Forgery). Damit das funktioniert, muss Zammad wissen, ob die Verbindung über **HTTPS** erfolgt. Wenn hinter einem Reverse Proxy wie Zoraxy **der Header `X-Forwarded-Proto` fehlt oder falsch gesetzt ist**, denkt Zammad, die Verbindung sei unsicher (HTTP):

- **Secure-Cookies werden nicht gesetzt** → Session geht verloren
- **CSRF-Token wird nicht akzeptiert** → Aktionen scheitern

## Lösung

In der **Zoraxy-Oberfläche** wurde ein benutzerdefinierter Header gesetzt, um Zammad das HTTPS-Protokoll korrekt mitzuteilen.

### Schritte in Zoraxy

1. Reverse Proxy für `support.example.de` öffnen
2. Reiter **Custom Headers** auswählen
3. Im Abschnitt **Zoraxy → Origin** folgenden Header hinzufügen:
    
    
    - **Header Key**: `X-Forwarded-Proto`
    - **Header Value**: `https`
4. Mit **„Add Header“** speichern
5. Einstellungen übernehmen und ggf. Zoraxy neu starten

## Optional: Weitere hilfreiche Header

<table id="bkmrk-header-key-value-hin"><thead><tr><th>Header Key</th><th>Value</th><th>Hinweis</th></tr></thead><tbody><tr><td>X-Forwarded-Proto</td><td>https</td><td>Pflicht für CSRF und Cookies</td></tr><tr><td>X-Forwarded-Ssl</td><td>on</td><td>Optional, für bessere Kompat.</td></tr><tr><td>X-Real-IP</td><td>(auto)</td><td>Optional, für Logging</td></tr></tbody></table>

## Ergebnis

Nach dem Setzen des Headers erkennt Zammad wieder korrekt:

- Die Verbindung ist über **HTTPS**
- **Secure-Cookies** werden korrekt gesetzt
- **CSRF-Token-Prüfungen** funktionieren wieder

Anmeldung über den Browser ist nun problemlos möglich.

---

**Tipp:**  
Wenn weitere Dienste hinter Zoraxy laufen (z. B. GitLab, Nextcloud), lohnt es sich, diesen Header standardmäßig in den jeweiligen Reverse-Proxy-Konfigurationen zu setzen.

# Update Enterprise iredmail

```

wget -O /tmp/iredmail  https://dl.iredmail.org/ee/iredmail-enterprise-latest-linux-arm64
chown root /tmp/iredmail
chmod 0500 /tmp/iredmail
service iredmail stop
mv /tmp/iredmail /usr/local/bin/iredmail
service iredmail start

```

[![dashboard-upgrade.png](https://wiki.unixweb.net/uploads/images/gallery/2025-08/scaled-1680-/dashboard-upgrade.png)](https://wiki.unixweb.net/uploads/images/gallery/2025-08/dashboard-upgrade.png)

# WIFI Verbindung Headless am Rasberry Pi

Da das neue Raspian den Network Manager nutzt müssen folgende Dinge vorbereitet werden um sich automatisiert ans WLAN Netzwerk anzumelden:

Erstelle eine Datei: wlan.nmconnection

```shell
[connection]
id=WLAN
type=wifi
autoconnect=true

[wifi]
mode=infrastructure
ssid=DEIN_SSID

[wifi-security]
key-mgmt=wpa-psk
psk=DEIN_PASSWORT

[ipv4]
method=auto

[ipv6]
method=auto
```

Diese Datei ins Root Verzeichnis ablegen der Boot Partition.

Nun muss die Datei aber noch ins richtige Verzeichnis kopiert werden beim booten, die Datei nur dort hinzukopieren ist nicht ausreichend.

Erstelle eine Datei "firstrun.sh" und chmod +x firstrun.sh nicht vergessen.

```shell
#!/bin/bash
mv /boot/firmware/wlan.nmconnection /etc/NetworkManager/system-connections/
chmod 600 /etc/NetworkManager/system-connections/wlan.nmconnection
systemctl restart NetworkManager
rm /boot/firmware/firstrun.sh
```

Fertig.

# swaks Email Service Test Tool

**Swaks** ist ein leichtgewichtiges Kommandozeilen-Werkzeug zum **Testen und Analysieren von SMTP-Servern**.  
Der Name steht für *Swiss Army Knife for SMTP* – und genau so wird es in der Praxis auch genutzt.

Es wird seit vielen Jahren von Administratoren eingesetzt, um Mailserver sauber und reproduzierbar zu prüfen.

```shell
# SSH auf den Mailserver, dann:
swaks \
  --to user@web.de \
  --from test@achtsamebewegungen.de \
  --server 127.0.0.1 \
  --port 25 \
  --helo web.example.com
```

**Mit Authentifizierung und TLS**

```shell
swaks --to empfaenger@example.com \
      --from ich@web.de \
      --server mail.web.de \
      --port 587 \
      --auth LOGIN \
      --auth-user ich@web.de \
      --auth-password 'passwort' \
      --tls
```