Server Hardening (Debian): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) |
Matt (Diskussion | Beiträge) |
||
(20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Apache Webserver == | == Apache Webserver == | ||
=== Serverversion und Betriebssystem ausblenden === | === Serverversion und Betriebssystem ausblenden === | ||
Neue Datei <code>/etc/apache2/conf-available/zzz-my-security.conf</code> erstellen: | |||
ServerTokens Prod | |||
ServerSignature Off | ServerSignature Off | ||
Die Datei ersetzt die gleichnamigen Variablen aus '''/etc/apache2/conf-available/zzz-my-security.conf'''. | |||
=== Verzeichnisauflistungen deaktivieren === | === Verzeichnisauflistungen deaktivieren === | ||
<code># nano /etc/apache2/ | <code># nano /etc/apache2/apache2.conf</code> bearbeiten | ||
Folgenden Abschnitt suchen | |||
<Directory /var/www/> | |||
# Options Indexes FollowSymLinks # Zeile auskommentieren | |||
Options FollowSymLinks # Zeile einfügen | |||
AllowOverride None | |||
Require all granted | |||
</Directory> | |||
=== Alle Anfragen auf HTTPS umleiten per Redirect === | |||
Hierfür am besten eine komplette Subdomain benutzen. Einrichtung per VirtualHost. Darin diese Zeile einfügen: | |||
Redirect permanent / https://host1.domain.tld/ | |||
Ergebnis: | |||
<VirtualHost *:80> | |||
DocumentRoot /var/www/host1 | |||
ServerName host1.domain.tld | |||
Redirect permanent / https://host1.domain.tld/ | |||
</VirtualHost> | |||
=== Alle Anfragen auf HTTPS umleiten per Rewrite === | |||
Erfordert Modul RewriteEngine. Muss vorher aktiviert werden mit <code>a2enmod rewrite</code>. | |||
Standard-Konfigurationsdatei <code>/etc/apache2/sites-available/000-default.conf</code> bearbeiten: | |||
<VirtualHost *:80> | |||
ServerName host1.domain.tld | |||
... | |||
... | |||
... | |||
RewriteEngine on | |||
RewriteCond %{SERVER_NAME} =host1.domain.tld | |||
RewriteRule ^ <nowiki>https://%{SERVER_NAME}%{REQUEST_URI}</nowiki> [END,QSA,R=permanent] | |||
</VirtualHost> | |||
SSL-Konfigurationsdatei <code>/etc/apache2/sites-available/000-default-ssl.conf</code> bearbeiten. | |||
Sie muss mindestens einen zur Standard-Konfigurationsdateinamen passenden ServerName enthalten: | |||
<VirtualHost *:443> | |||
ServerName host1.domain.tld | |||
... | |||
... | |||
... | |||
</VirtualHost> | |||
=== SSL Konfiguration härten === | |||
Die hierfür notwendigen Einstellungen lassen sich nicht pauschal benennen. | |||
Eine Einleitung findet sich bei Mozilla: https://wiki.mozilla.org/Security/Server_Side_TLS | |||
Dort steht auch der [https://mozilla.github.io/server-side-tls/ssl-config-generator/ Mozilla SSL Configuration Generator] zur Verfügung. | |||
Die generierten Inhalte in die ssl.conf-Datei einbauen. | |||
=== Serverkonfiguration neu laden === | === Serverkonfiguration neu laden === | ||
Nach den Bearbeitungen Konfiguration neu laden | Nach den Bearbeitungen Konfiguration neu laden | ||
Zeile 32: | Zeile 73: | ||
# nano /etc/ssh/sshd_config | # nano /etc/ssh/sshd_config | ||
Änderungen | Änderungen: | ||
Port 22 # Auf einen anderen Port stellen | |||
ListenAddress :: # ??? | ListenAddress :: # ??? | ||
ListenAddress 192.168.1.100 # Login nur über Netzwerk 192.168.1.xxx | ListenAddress 192.168.1.100 # Login z. B. nur über lokale Netzwerk 192.168.1.xxx | ||
Protocol 2 # Idealerweise nur Protocol 2 benutzen, Protocol 1 hat Sicherheitslücken | |||
PermitRootLogin no # Root-Login deaktivieren | PermitRootLogin no # Root-Login deaktivieren | ||
#Alternativ: | |||
PermitRootLogin without-password # Root-Login nur ohne Passwort | |||
IgnoreRhosts yes # Ignore old RSH-Access | |||
RhostsRSAAuthentication no | |||
HostbasedAuthentication no # Keine Host-Basierte Authentifizierung | |||
PermitEmptyPasswords no # User mit leeren Passwörtern erlauben | |||
PasswordAuthentication no # Stattdessen Zertifikatsauthentifizierung ohne Password | |||
X11Forwarding no # Wenn Hochsicherheitsserver ohne GUI-Notwendig | |||
UserPAM no | |||
AllowUsers xxx yyy # Nur User xxx und yyy zulassen | |||
DenyUsers zzz # User zzz ablehnen | |||
Danach noch Config-Datei neu laden oder SSH-Server neu starten | |||
# service ssh reload # oder | |||
# service ssh restart | |||
Optional installieren: | |||
* [[Fail2Ban (Debian)]] oder | |||
* DenyHosts oder | |||
* [[Knockd (Debian)]] | |||
== Netzwerk == | == Netzwerk == | ||
Zeile 48: | Zeile 111: | ||
Neustarten | Neustarten | ||
[[Category:Linux]] | |||
[[Category:LAMP]] | |||
[[Kategorie:Kryptographie]] |
Aktuelle Version vom 30. September 2020, 12:22 Uhr
Apache Webserver
Serverversion und Betriebssystem ausblenden
Neue Datei /etc/apache2/conf-available/zzz-my-security.conf
erstellen:
ServerTokens Prod ServerSignature Off
Die Datei ersetzt die gleichnamigen Variablen aus /etc/apache2/conf-available/zzz-my-security.conf.
Verzeichnisauflistungen deaktivieren
# nano /etc/apache2/apache2.conf
bearbeiten
Folgenden Abschnitt suchen
<Directory /var/www/> # Options Indexes FollowSymLinks # Zeile auskommentieren Options FollowSymLinks # Zeile einfügen AllowOverride None Require all granted </Directory>
Alle Anfragen auf HTTPS umleiten per Redirect
Hierfür am besten eine komplette Subdomain benutzen. Einrichtung per VirtualHost. Darin diese Zeile einfügen:
Redirect permanent / https://host1.domain.tld/
Ergebnis:
<VirtualHost *:80> DocumentRoot /var/www/host1 ServerName host1.domain.tld Redirect permanent / https://host1.domain.tld/ </VirtualHost>
Alle Anfragen auf HTTPS umleiten per Rewrite
Erfordert Modul RewriteEngine. Muss vorher aktiviert werden mit a2enmod rewrite
.
Standard-Konfigurationsdatei /etc/apache2/sites-available/000-default.conf
bearbeiten:
<VirtualHost *:80> ServerName host1.domain.tld ... ... ... RewriteEngine on RewriteCond %{SERVER_NAME} =host1.domain.tld RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] </VirtualHost>
SSL-Konfigurationsdatei /etc/apache2/sites-available/000-default-ssl.conf
bearbeiten.
Sie muss mindestens einen zur Standard-Konfigurationsdateinamen passenden ServerName enthalten:
<VirtualHost *:443> ServerName host1.domain.tld ... ... ... </VirtualHost>
SSL Konfiguration härten
Die hierfür notwendigen Einstellungen lassen sich nicht pauschal benennen.
Eine Einleitung findet sich bei Mozilla: https://wiki.mozilla.org/Security/Server_Side_TLS
Dort steht auch der Mozilla SSL Configuration Generator zur Verfügung.
Die generierten Inhalte in die ssl.conf-Datei einbauen.
Serverkonfiguration neu laden
Nach den Bearbeitungen Konfiguration neu laden
# /etc/init.d/apache2 reload # Nur Konfiguration neu laden # oder # service apache2 restart # Weberserver neu starten
SSH Server
# nano /etc/ssh/sshd_config
Änderungen:
Port 22 # Auf einen anderen Port stellen ListenAddress :: # ??? ListenAddress 192.168.1.100 # Login z. B. nur über lokale Netzwerk 192.168.1.xxx Protocol 2 # Idealerweise nur Protocol 2 benutzen, Protocol 1 hat Sicherheitslücken PermitRootLogin no # Root-Login deaktivieren #Alternativ: PermitRootLogin without-password # Root-Login nur ohne Passwort IgnoreRhosts yes # Ignore old RSH-Access RhostsRSAAuthentication no HostbasedAuthentication no # Keine Host-Basierte Authentifizierung PermitEmptyPasswords no # User mit leeren Passwörtern erlauben PasswordAuthentication no # Stattdessen Zertifikatsauthentifizierung ohne Password X11Forwarding no # Wenn Hochsicherheitsserver ohne GUI-Notwendig UserPAM no AllowUsers xxx yyy # Nur User xxx und yyy zulassen DenyUsers zzz # User zzz ablehnen
Danach noch Config-Datei neu laden oder SSH-Server neu starten
# service ssh reload # oder # service ssh restart
Optional installieren:
- Fail2Ban (Debian) oder
- DenyHosts oder
- Knockd (Debian)
Netzwerk
IPv6 deaktivieren
Im Kernel deaktivieren
# echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf
Zusätzlich
# nano /etc/hosts # Alle IPv6-relevanten Zeilen entfernen.
Neustarten