Firewall ergänzt

This commit is contained in:
Bernd Reuther 2020-09-25 20:21:04 +02:00
parent c486777902
commit b638f17d7d
3 changed files with 152 additions and 1 deletions

151
README.md
View File

@ -363,9 +363,160 @@ Wenn man es noch komfortabler haben möchte, kann man sich am Client-PC ein Lese
Danach genügt der Befehl `ssh mein_server` um sich an der ssh-Konsole des Servers anzumelden. Danach genügt der Befehl `ssh mein_server` um sich an der ssh-Konsole des Servers anzumelden.
## Firewall einrichten
### Allgemeines
Für einen sicheren Server ist eine Firewall unverzichtbar. Im proffessionellen Bereich wird meistens mit einer Hardware-Firewall (also ein eigener Computer mit mehreren Netzwerk-Interfaces) oder einer Firewall-VM gearbeitet. Für kleinere Installationen reicht aber meistens die integrierte Linux-Firewall aus. Dabei gibt es wiederum mehrere Möglichkeiten, diese zu verwalten. Eine der einfachsten Möglichkeiten ist "ufw" - ein Programm, mit dem man unter Ubuntu schnell und unkompliziert Regeln erstellen kann. Leider funktioniert das nicht immer wie gewünscht (z.B. bei der Verwendung von Docker). Hier wird daher die Verwendung von `iptables` bzw. `ip6tables` beschrieben. Obwohl bereits ein Nachfolger von iptables existiert (nftables), werden hier die "alten" Regeln verwendet, da diese weit verbreitet und gut dokumentiert sind. Sofern IPV4 und IPV6 aktiv sind (standard bei root-Servern), müssen die Regeln immer für beide Protokolle gesetzt werden.
Eine komplette Beschreibung von `iptaples` würde an dieser Stelle zu weit führen. In den [Quellenangaben](#quellen) sind einige hilfreiche Artikel dazu verlinkt. Besonders hervorzuheben wäre dabei: [https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Linux-Firewall_mit_IP-Tables](https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Linux-Firewall_mit_IP-Tables).
Zunächst sollte sichergestellt werden, dass "ufw" nicht aktiv ist:
```
root@srv:/home/sshuser# ufw status
Status: Inaktiv
```
Gegebenenfalls deaktivieren:
```
ufw disable
```
### Firewallregeln dauerhaft speichern
Die Regleln, welche mit `iptables` und `ip6tables` erstellt werden, gelten normalerweise nur zur Laufzeit des Servers, also bis zum nächsten Neustart. Das ist eine gewisse Schutzfunktion gegen Fehleingaben, die das System komplett von außen abschotten und damit unbrauchbar machen würden. Dann wäre das System nach einem Neustart über das Server-Control-Panel wieder erreichbar.
Damit man dann nicht alle Regeln neu eingeben muss, gibt es die Programme `iptables-save` und `ip6tables-save` bzw. `iptables-restore` und `ip6tables-restore`.
Mit den Befehlen
```
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
```
werden die aktuellen Regeln gespeichert und können nach einem Neustart mit
```
iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6
```
wieder geladen werden.
Mit dem Paket `iptables-persistent` gibt es für Ubuntu die Möglichkeit, das Speichern und Laden zu automatisieren.
```
apt install iptables-persistent
```
Dabei werden zwei Dialoge angezeigt, die jeweils mit "Ja" zu bestätigen sind.
![iptables-persistent-v4](bilder/iptables_persistent_v4.png)
![iptables-persistent-v6](bilder/iptables_persistent_v6.png)
Wie man den Informationen entnehman kann, werden die aktuell geltenden Firewall-Regeln gespeichert und es wird ein Dienst eingerichtet, der sie beim Neustart wieder aktiviert. Zu beachten ist, dass **nur** während einer Paketinstallation neu erstellte Regeln gespeichert werden. Wenn die Firewall-Konfiguration von Hand geändert wird, muss auch manuell gespeichert werden.
Dafür gibt es den Befehl `netfilter-persistent`, der mit dem Paket `iptables-persistent` automatisch mit installiert wurde.
```
netfilter-persistent save
```
### Die wichtigsten Befehle
!!! note "Anmerkung"
Alle hier aufgelisteten Befehle, die mit "iptables" beginnen, können/müssen mit "ip6tables" für IPv6 angewendet werden.
- anzeigen der aktuell geltenden Regeln
```
iptables -L
```
```
iptables -L INPUT # nur die Regeln der Kette INPUT anzeigen
```
```
iptables -L INPUT --line-numbers # mit Ausgabe der Zeilennummer
```
- anzeigen der Befehle, mit denen die aktuell geltenden Regeln erstellt wurden
```
iptables -S
```
- einfache Freigabe eines Ports
```
iptables -A INPUT -p tcp --dport 54683 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 54683 -m state --state ESTABLISHED -j ACCEPT
```
In diesem Beispiel wird der Port 54683 (unser Beispiel-Port für die ssh-Verbindung zum Server) für Verbindungen von außen geöffnet und bestehende Verbindungen können auch Daten nach außen senden.
!!! note "Anmerkung"
Der zweite Befehl ist nur nötig, wenn die Standard-Regel der OUTPUT-Kette auf "DROP" steht.
- Regel einfügen
Die Firewall-Regeln einer Kette haben intern eine Nummer und werden der Reihenfolge nach abgearbeitet. Bei der ersten Übereinstimmung wird die Kette unterbrochen und die entsprechende Anweisung ausgeführt. Die nachfolgenden Regeln der Kette haben also keine Auswirkung mehr. Es ist daher wichtig, bestimmte Regeln in der richtigen Reihenfolge anzulegen, bzw. einzufügen. Mit dem bereits beschriebenen Befehl `iptables -L <KETTE> --line-numbers` kann man sich die Nummern anzeigen lassen und dann mit dem Parameter `-I <KETTE> <NR>` eine neue Regel einfügen.
Beispiel vorher:
```
root@video:~# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP icmp -- anywhere anywhere
```
Regel einfügen:
```
iptables -I INPUT 1 -p icmp -s 192.168.1.10 -j ACCEPT
```
Beispiel nachher:
```
root@video:~# iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT icmp -- 192.168.1.10 anywhere
2 DROP icmp -- anywhere anywhere
```
Dieses Beispiel blockiert Ping-Anfragen, aber die von dem PCs mit der IP-Adresse 192.168.1.10 sollen erlaubt werden. Würde man die Ausnahme-Regel mit dem Befehl `iptables -A ...` anfügen, hätte sie keine Wirkung, weil die erste Regel bereits zutrifft. Durch das Einfügen der Regel mit `iptables -I INPUT 1 ...`, wird sie vor der bestehenden Regel eingefügt und erlaubt damit Ping-Anfragen von dem entsprechenden Computer.
- alle Regeln löschen
```
iptables -F
```
```
iptables -F OUTPUT # nur die Kette OUTPUT löschen
```
!!! warning "Achtung"
Wenn die Regel-Ketten INPUT und OUTPUT standardmäßig auf "DROP" stehen, sperrt man sich nach dem löschen aller Regeln aus! Entweder, man setzt vorher `iptables -P INPUT ACCEPT` und `iptables -P OUTPUT ACCEPT`, oder man löscht nur einzelne Regeln.
## Quellen ## Quellen
- [https://vitux.com/7-methods-to-generate-a-strong-password-in-ubuntu/](https://vitux.com/7-methods-to-generate-a-strong-password-in-ubuntu/) - [https://vitux.com/7-methods-to-generate-a-strong-password-in-ubuntu/](https://vitux.com/7-methods-to-generate-a-strong-password-in-ubuntu/)
- [https://developer-blog.net/ssh-port-aendern/](https://developer-blog.net/ssh-port-aendern/) - [https://developer-blog.net/ssh-port-aendern/](https://developer-blog.net/ssh-port-aendern/)
- [https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports](https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports) - [https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports](https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports)
- [https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu](https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu) - [https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu](https://www.thomas-krenn.com/de/wiki/OpenSSH_Public_Key_Authentifizierung_unter_Ubuntu)
- [https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Linux-Firewall_mit_IP-Tables](https://de.wikibooks.org/wiki/Linux-Praxisbuch/_Linux-Firewall_mit_IP-Tables)
- [https://webprosa.de/howto-firewall-mit-iptables-unter-debian-oder-ubuntu-einrichten/](https://webprosa.de/howto-firewall-mit-iptables-unter-debian-oder-ubuntu-einrichten/)
- [https://www.pcwelt.de/ratgeber/Ratgeber-Firewall-Linux-Firewall-fuer-Profis-mit-iptables-472858.html](https://www.pcwelt.de/ratgeber/Ratgeber-Firewall-Linux-Firewall-fuer-Profis-mit-iptables-472858.html)
- [https://www.vultr.com/docs/easy-iptables-configuration-and-examples-on-ubuntu-16-04](https://www.vultr.com/docs/easy-iptables-configuration-and-examples-on-ubuntu-16-04)
- [https://www.pro-linux.de/artikel/2/761/7,stateless-firewalling-filterregeln.html](https://www.pro-linux.de/artikel/2/761/7,stateless-firewalling-filterregeln.html)
- [https://www.kworx.de/portscans-iptables-protokollieren/](https://www.kworx.de/portscans-iptables-protokollieren/)
- [http://www.64-bit.de/dokumentationen/netzwerk/iptables/DE-IPTABLES-HOWTO-3.html](http://www.64-bit.de/dokumentationen/netzwerk/iptables/DE-IPTABLES-HOWTO-3.html)

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB