Gehärtete Distribution Rocky: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 4: Zeile 4:
 
*In dieser Anleitung wird exemplarisch gezeigt, wie ein Webserver unter Rocky Linux eingerichtet wird – inklusive HTTPS, SELinux-Anpassungen und Firewallkonfiguration.   
 
*In dieser Anleitung wird exemplarisch gezeigt, wie ein Webserver unter Rocky Linux eingerichtet wird – inklusive HTTPS, SELinux-Anpassungen und Firewallkonfiguration.   
 
*Dabei wird besonders auf sicherheitsrelevante Aspekte geachtet, die den gehärteten Zustand des Systems unterstreichen.   
 
*Dabei wird besonders auf sicherheitsrelevante Aspekte geachtet, die den gehärteten Zustand des Systems unterstreichen.   
*Das Beispiel basiert auf dem Hostnamen '''rocky.it1xx.int''' und verwendet reale Konfigurationsbefehle und typische Pfade.
+
*Das Beispiel basiert auf dem Hostnamen '''rocky.it113.int''' und verwendet reale Konfigurationsbefehle und typische Pfade.
  
 
+
==Installation==
=Installation=
 
 
{| class="wikitable"
 
{| class="wikitable"
 
! Einstellung !! Wert
 
! Einstellung !! Wert
 
|-
 
|-
| '''Name''' || rocky.it1xx.int
+
| '''Name''' || rocky.it113.int
 
|-
 
|-
| '''IP-Adresse''' || 10.88.1xx.51/24
+
| '''IP-Adresse''' || 10.88.1xx.81/24
 
|-
 
|-
 
| '''Gateway''' || 10.88.1xx.1
 
| '''Gateway''' || 10.88.1xx.1
Zeile 19: Zeile 18:
 
| '''Nameserver''' || 10.88.1xx.1
 
| '''Nameserver''' || 10.88.1xx.1
 
|-
 
|-
| '''Search-Domain''' || it1xx.int
+
| '''Search-Domain''' || it113.int
 
|-
 
|-
 
| '''Festplatte''' || 20 GByte
 
| '''Festplatte''' || 20 GByte
Zeile 36: Zeile 35:
 
|}
 
|}
  
=Installation von Nginx=
+
==Installation von Nginx==
 
*sudo dnf install nginx
 
*sudo dnf install nginx
=nginx: HTTPS-VirtualHost für rocky.it1xx.int unter Rocky Linux=
 
 
==Firewall konfigurieren==
 
;HTTPS (Port 443) freigeben
 
*firewall-cmd --permanent --add-service=https
 
;HTTP (Port 80) freigeben – z. B. für Weiterleitungen
 
*firewall-cmd --permanent --add-service=http
 
;Firewall neu laden
 
*firewall-cmd --reload
 
;Aktive Regeln anzeigen
 
*firewall-cmd --list-all
 
==SELinux: Zugriff auf Webverzeichnisse freischalten==
 
Standardmäßig sind manuell angelegte Verzeichnisse wie /var/www/braun durch SELinux blockiert. 
 
  
Damit nginx darauf zugreifen darf, muss der richtige SELinux-Kontext gesetzt werden.
+
==nginx: HTTPS-VirtualHost für rocky.it113.int==
;Zugriff erlauben
+
===Zertifikate besorgen===
*chcon -Rt httpd_sys_content_t /var/www/rocky
 
;nginx neu laden
 
*systemctl reload nginx
 
;Kontext prüfen
 
*ls -Zd /var/www/rocky
 
==Fehleranalyse==
 
;Letzte SELinux-Blockaden anzeigen
 
*ausearch -m avc -ts recent
 
===Exkurs===
 
* SELinux (Security-Enhanced Linux) ist eine Sicherheitsfunktion im Linux-Kernel zur Zugriffskontrolle.
 
* Es verwendet Sicherheitskontexte, um genau zu steuern, welche Prozesse auf welche Ressourcen zugreifen dürfen.
 
* SELinux blockiert Zugriffe auch dann, wenn die Dateiberechtigungen eigentlich ausreichen würden.
 
* Dadurch wird die Systemsicherheit erhöht und kompromittierte Dienste können isoliert werden.
 
* Unter Rocky Linux ist SELinux standardmäßig aktiv und muss bei Webservern berücksichtigt werden.
 
* Nach dem Setzen des SELinux-Kontexts httpd_sys_content_t erkennt SELinux das Verzeichnis als Webinhalt, und der Webserver darf darauf zugreifen.
 
==Zertifikate besorgen==
 
 
*cd /etc/nginx/ssl/
 
*cd /etc/nginx/ssl/
*wget https://web.samogo.de/certs/rocky.it1xx.int.crt
+
*wget https://web.samogo.de/certs/rocky.it113.int.crt
*wget https://web.samogo.de/certs/rocky.it1xx.int.key
+
*wget https://web.samogo.de/certs/rocky.it113.int.key
==Konfigurationsdatei anlegen==
 
 
 
Die folgende Konfiguration wird als Datei gespeichert unter:
 
  
/etc/nginx/conf.d/rocky.it113.int.conf
+
===Konfigurationsdatei anlegen===
 +
*/etc/nginx/conf.d/rocky.it113.int.conf
  
<pre>
+
server {
server {
+
    listen 80;
    listen 443 ssl;
+
    listen [::]:80;
    listen [::]:443 ssl;
+
    server_name rocky.it113.int;
 +
    return 301 https://$host$request_uri;
 +
}
  
    server_name rocky.it1xx.int;
+
server {
 +
    listen 443 ssl;
 +
    listen [::]:443 ssl;
  
    root /var/www/rocky;
+
    server_name rocky.it113.int;
    index index.html index.htm;
 
  
    ssl_certificate /etc/nginx/ssl/rocky.it1xx.int.crt;
+
    root /var/www/rocky;
    ssl_certificate_key /etc/nginx/ssl/rocky.it1xx.int.key;
+
    index index.html index.htm;
  
    location / {
+
    ssl_certificate /etc/nginx/ssl/rocky.it113.int.crt;
        try_files $uri $uri/ =404;
+
    ssl_certificate_key /etc/nginx/ssl/rocky.it113.int.key;
    }
 
}
 
</pre>
 
  
==Verzeichnisstruktur vorbereiten==
+
    location / {
 +
        try_files $uri $uri/ =404;
 +
    }
 +
}
  
 +
===Verzeichnisstruktur vorbereiten===
 
;Verzeichnis für Inhalte anlegen
 
;Verzeichnis für Inhalte anlegen
 
*mkdir -p /var/www/rocky
 
*mkdir -p /var/www/rocky
  
==Startseite erzeugen==
+
===Startseite erzeugen===
 
 
 
;Script herunterladen (außerhalb des DocumentRoot)
 
;Script herunterladen (außerhalb des DocumentRoot)
 
*cd /root
 
*cd /root
Zeile 113: Zeile 84:
 
*./webgen.sh rocky > /var/www/rocky/index.html
 
*./webgen.sh rocky > /var/www/rocky/index.html
  
==nginx neu starten==
+
===nginx neu starten===
 
 
 
;Konfiguration übernehmen
 
;Konfiguration übernehmen
 
*systemctl restart nginx
 
*systemctl restart nginx
Zeile 120: Zeile 90:
 
;Status prüfen
 
;Status prüfen
 
*systemctl status nginx
 
*systemctl status nginx
 +
 +
==Zugriff==
 +
===Erster Versuch===
 +
*Beim ersten Zugriffsversuch schlägt die Verbindung fehl – die Ursache liegt in der aktiven Host-Firewall.
 +
 +
===Firewall konfigurieren===
 +
;HTTPS (Port 443) freigeben
 +
*firewall-cmd --permanent --add-service=https
 +
 +
;HTTP (Port 80) freigeben – notwendig für Redirect
 +
*firewall-cmd --permanent --add-service=http
 +
 +
;Firewall neu laden
 +
*firewall-cmd --reload
 +
 +
;Aktive Regeln anzeigen
 +
*firewall-cmd --list-all
 +
 +
===Zweiter Versuch===
 +
*Auch der zweite Versuch schlägt fehl – diesmal verhindert SELinux den Zugriff auf das Verzeichnis.
 +
 +
==SELinux==
 +
===Fehleranalyse===
 +
;SELinux-Blockaden anzeigen
 +
*ausearch -m avc -ts recent
 +
 +
===Lösung===
 +
;Zugriff erlauben
 +
*chcon -Rt httpd_sys_content_t /var/www/rocky
 +
 +
;nginx neu laden
 +
*systemctl reload nginx
 +
 +
;Kontext prüfen
 +
*ls -Zd /var/www/rocky
 +
 +
===Exkurs===
 +
*SELinux (Security-Enhanced Linux) ist eine Sicherheitsfunktion im Linux-Kernel zur Zugriffskontrolle. 
 +
*Es verwendet Sicherheitskontexte, um genau zu steuern, welche Prozesse auf welche Ressourcen zugreifen dürfen. 
 +
*SELinux blockiert Zugriffe auch dann, wenn die Dateiberechtigungen eigentlich ausreichen würden. 
 +
*Dadurch wird die Systemsicherheit erhöht und kompromittierte Dienste können isoliert werden. 
 +
*Unter Rocky Linux ist SELinux standardmäßig aktiv und muss bei Webservern berücksichtigt werden. 
 +
*Nach dem Setzen des SELinux-Kontexts httpd_sys_content_t erkennt SELinux das Verzeichnis als Webinhalt, und der Webserver darf darauf zugreifen.
 +
 +
==Fazit==
 +
*Rocky Linux ist bereits in der Standardinstallation mit sicherheitsrelevanten Features wie SELinux und einer restriktiven Firewall ausgestattet. 
 +
*Diese Anleitung zeigt exemplarisch, wie mit wenigen Schritten ein Webserver aufgesetzt werden kann, der diese Mechanismen berücksichtigt. 
 +
*Damit ist Rocky eine solide Grundlage für den sicheren Betrieb produktiver Dienste – bereits „ab Werk“ leicht gehärtet.

Version vom 25. April 2025, 12:09 Uhr

Einführung

  • Rocky Linux ist eine auf Stabilität und Sicherheit ausgelegte Enterprise-Distribution und eignet sich besonders gut für produktive Serverumgebungen.
  • Ein zentrales Merkmal von Rocky ist die konsequente Voreinstellung sicherheitsrelevanter Mechanismen wie SELinux und einer restriktiven Firewall.
  • In dieser Anleitung wird exemplarisch gezeigt, wie ein Webserver unter Rocky Linux eingerichtet wird – inklusive HTTPS, SELinux-Anpassungen und Firewallkonfiguration.
  • Dabei wird besonders auf sicherheitsrelevante Aspekte geachtet, die den gehärteten Zustand des Systems unterstreichen.
  • Das Beispiel basiert auf dem Hostnamen rocky.it113.int und verwendet reale Konfigurationsbefehle und typische Pfade.

Installation

Einstellung Wert
Name rocky.it113.int
IP-Adresse 10.88.1xx.81/24
Gateway 10.88.1xx.1
Nameserver 10.88.1xx.1
Search-Domain it113.int
Festplatte 20 GByte
RAM 4 GByte
Benutzername kit
Benutzerpasswort kit
Administrator root
Administratorpasswort radler
Netz DMZ

Installation von Nginx

  • sudo dnf install nginx

nginx: HTTPS-VirtualHost für rocky.it113.int

Zertifikate besorgen

Konfigurationsdatei anlegen

  • /etc/nginx/conf.d/rocky.it113.int.conf
server {
    listen 80;
    listen [::]:80;
    server_name rocky.it113.int;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name rocky.it113.int;
    root /var/www/rocky;
    index index.html index.htm;
    ssl_certificate /etc/nginx/ssl/rocky.it113.int.crt;
    ssl_certificate_key /etc/nginx/ssl/rocky.it113.int.key;
    location / {
        try_files $uri $uri/ =404;
    }
}

Verzeichnisstruktur vorbereiten

Verzeichnis für Inhalte anlegen
  • mkdir -p /var/www/rocky

Startseite erzeugen

Script herunterladen (außerhalb des DocumentRoot)
HTML-Seite erzeugen
  • ./webgen.sh rocky > /var/www/rocky/index.html

nginx neu starten

Konfiguration übernehmen
  • systemctl restart nginx
Status prüfen
  • systemctl status nginx

Zugriff

Erster Versuch

  • Beim ersten Zugriffsversuch schlägt die Verbindung fehl – die Ursache liegt in der aktiven Host-Firewall.

Firewall konfigurieren

HTTPS (Port 443) freigeben
  • firewall-cmd --permanent --add-service=https
HTTP (Port 80) freigeben – notwendig für Redirect
  • firewall-cmd --permanent --add-service=http
Firewall neu laden
  • firewall-cmd --reload
Aktive Regeln anzeigen
  • firewall-cmd --list-all

Zweiter Versuch

  • Auch der zweite Versuch schlägt fehl – diesmal verhindert SELinux den Zugriff auf das Verzeichnis.

SELinux

Fehleranalyse

SELinux-Blockaden anzeigen
  • ausearch -m avc -ts recent

Lösung

Zugriff erlauben
  • chcon -Rt httpd_sys_content_t /var/www/rocky
nginx neu laden
  • systemctl reload nginx
Kontext prüfen
  • ls -Zd /var/www/rocky

Exkurs

  • SELinux (Security-Enhanced Linux) ist eine Sicherheitsfunktion im Linux-Kernel zur Zugriffskontrolle.
  • Es verwendet Sicherheitskontexte, um genau zu steuern, welche Prozesse auf welche Ressourcen zugreifen dürfen.
  • SELinux blockiert Zugriffe auch dann, wenn die Dateiberechtigungen eigentlich ausreichen würden.
  • Dadurch wird die Systemsicherheit erhöht und kompromittierte Dienste können isoliert werden.
  • Unter Rocky Linux ist SELinux standardmäßig aktiv und muss bei Webservern berücksichtigt werden.
  • Nach dem Setzen des SELinux-Kontexts httpd_sys_content_t erkennt SELinux das Verzeichnis als Webinhalt, und der Webserver darf darauf zugreifen.

Fazit

  • Rocky Linux ist bereits in der Standardinstallation mit sicherheitsrelevanten Features wie SELinux und einer restriktiven Firewall ausgestattet.
  • Diese Anleitung zeigt exemplarisch, wie mit wenigen Schritten ein Webserver aufgesetzt werden kann, der diese Mechanismen berücksichtigt.
  • Damit ist Rocky eine solide Grundlage für den sicheren Betrieb produktiver Dienste – bereits „ab Werk“ leicht gehärtet.