Server Hardening (Debian): Unterschied zwischen den Versionen

Aus MattWiki
 
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Apache Webserver ==
== Apache Webserver ==
=== Serverversion und Betriebssystem ausblenden ===
=== Serverversion und Betriebssystem ausblenden ===
<code># nano /etc/apache2/apache2.conf</code>


Folgende zwei Zeilen einfügen:
Neue Datei <code>/etc/apache2/conf-available/zzz-my-security.conf</code> erstellen:
 
ServerTokens Prod
  ServerSignature Off
  ServerSignature Off
ServerTokens Prod
 
Die Datei ersetzt die gleichnamigen Variablen aus '''/etc/apache2/conf-available/zzz-my-security.conf'''.


=== Verzeichnisauflistungen deaktivieren ===
=== Verzeichnisauflistungen deaktivieren ===
<code># nano /etc/apache2/sites-available/default</code> und
<code># nano /etc/apache2/apache2.conf</code> bearbeiten
 
<code># nano /etc/apache2/sites-available/default-ssl</code> bearbeiten.


Folgenden Abschnitt suchen
Folgenden Abschnitt suchen


        <Directory /var/www/>
<Directory /var/www/>
                # Options Indexes FollowSymLinks MultiViews    # Zeile finden
  # Options Indexes FollowSymLinks       # Zeile auskommentieren
                Options FollowSymLinks MultiViews            # "Indexes" entfernen
  Options FollowSymLinks                 # Zeile einfügen
                AllowOverride None
  AllowOverride None                                                                                        
                Order allow,deny
  Require all granted
                allow from all
</Directory>
        </Directory>


=== Alle Anfragen auf HTTPS umleiten ===
=== Alle Anfragen auf HTTPS umleiten per Redirect ===
Hierfür am besten eine komplette Subdomain benutzen. Einrichtung per VirtualHost. Darin diese Zeile einfügen:
Hierfür am besten eine komplette Subdomain benutzen. Einrichtung per VirtualHost. Darin diese Zeile einfügen:
  Redirect permanent / https://host1.domain.tld/
  Redirect permanent / https://host1.domain.tld/
Zeile 33: Zeile 32:
  </VirtualHost>   
  </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 ===
=== SSL Konfiguration härten ===
Die hierfür notwendigen Einstellungen lassen sich nicht pauschal benennen.
Die hierfür notwendigen Einstellungen lassen sich nicht pauschal benennen.


Daher am besten den [https://mozilla.github.io/server-side-tls/ssl-config-generator/ Mozilla SSL Configuration Generator] verwenden.
Eine Einleitung findet sich bei Mozilla: https://wiki.mozilla.org/Security/Server_Side_TLS
 
Inhalte in die ssl.conf-Datei einbauen.


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 52: Zeile 73:
  # nano /etc/ssh/sshd_config
  # nano /etc/ssh/sshd_config


Änderungen
Änderungen:
  Port 22                    # Auf einen anderen Port stellen
  Port 22                    # Auf einen anderen Port stellen
  ListenAddress ::            # ???
  ListenAddress ::            # ???
Zeile 58: Zeile 79:
  Protocol 2                  # Idealerweise nur Protocol 2 benutzen, Protocol 1 hat Sicherheitslücken
  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
  PermitEmptyPasswords no    # User mit leeren Passwörtern erlauben
  PasswordAuthentication no  # Stattdessen Zertifikatsauthentifizierung ohne Password
  PasswordAuthentication no  # Stattdessen Zertifikatsauthentifizierung ohne Password
Zeile 69: Zeile 95:
  # service ssh restart
  # service ssh restart


Optional: Fail2Ban installieren
Optional installieren:  
* [[Fail2Ban (Debian)]] oder
* DenyHosts oder
* [[Knockd (Debian)]]


== Netzwerk ==
== Netzwerk ==
Zeile 84: Zeile 113:




[[Category:Debian]]
[[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:

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