class: center, middle # 🛡Server absichern🛡 # Firewall mit # 🔥iptables/nftables🔥 ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Zu diesem Video ![img33l](../../gfx/cybaer-schrift-links.png) Dieses Video ist Teil gemeinsamen Projektes, bei dem Jean, Micha und ich verschiedene Aspekte behandeln, wie Ihr Eure Server absichern könnt. Schaut Euch auch die Firewallvideos von Jean und Micha an, da die beiden **viele Grundlagen** erklären, die ich hier nicht nochmal durchgehe. Und: **Micha malt** sogar :-) **Playlist mit allen Videos**:
https://youtube.com/playlist?list=PLhvaM7uJr1PA89sEfrL74abQ4kZGC3Js9
Viel Spaß beim Vorbeischauen und Anschauen :-) --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - Community-Video-Serie *"Nicht der Weisheit letzter Schluß"* auf
tube.tchncs.de
und
YouTube
mit **beruflichen** oder **privaten Projekten** - Verwendet iptables/nftables als Teil der grundlegenden Absicherung für seine Server und für spezielle Routingaufgaben. --- ### 🔥🛡iptables/nftables * Mächtiges Werkzeug mit vielen **Möglichkeiten** und **Fallstricken** * Anders als bei anderen Firewalls (wie firewalld) sind **standardmäßig alle Verbindungen erlaubt** * iptables erschien 1998 * Seit Mitte 2018 ersetzt durch nftables * nftables wird Standard z.B. ab Debian 10 * Direkt im Linux-Kernel enthalten * Verbesserter Code (z.B. Zusammenfassung von Duplikaten) * Erhöhte Geschwindigkeit im Vergleich zu iptables * *iptables* ruft *iptables-nft* auf, ist aber **syntaxkompatibel** zum Original-iptables * Eigenes Programm *nft* (nicht Thema dieses Videos) --- ### Filterketten *"Alle"* aktuell gesetzten Regeln anzeigen: ```bash iptables -L [-v] ``` Die Filter sind in Ketten (Chains) organisiert. Diese können z.B. so heißen: * **INPUT**: Eingehende Verbindungen * **OUTPUT**: Ausgehende Verbindungen * **FORWARD**: Weiterleitungen * *f2b-sshd: Fail2Ban* Mögliche Aktionen: * **ACCEPT**: Paket **akzeptieren** und **Filterkette beenden** * **REJECT**: Paket **abweisen**, Sender darüber informieren & **Filterkette beenden** * **DROP**: Paket **stillschweigend ignorieren**, Sender **nicht** darüber informieren und **Filterkette beenden** * **LOG**: Paket **protokollieren** und in der Filterkette **fortfahren** * *REDIRECT, ...* --- ### Grundlegende Parameter ```bash iptables ... ``` * -A [Filterkettenname]: Hängt eine neue Regel **ans Ende** der Kette an (**a**ppend). * -I [Filterkettenname] [Position]: Fügt eine Regel an eine **bestimmte Position** (>= 1) in der Kette ein. * -s [IP oder Netz]: **Quelle** (**s**ource) von der das Paket stammt. * -d [IP oder Netz]: **Ziel** (**d**estination) an das das Paket **gesendet** werden soll. * -o [Netzwerkgerätename]: Gerät, **von** dem das Paket **gesendet** (**o**ut-interface) werden soll. * -i [Netzwerkgerätename]: Gerät, **in** dem das Paket **eingegangen** (**i**n-interface) ist. * -j [Aktion]: Aktion (ACCEPT, REJECT, DROP, ...), die auf das Paket angewendet werden soll (**j**ump). * -F [Filterkettenname]: Eine Filterkette oder bei Weglassen des Filterkettennames alle leeren (**f**lush). --- ### Beispiele Filterketten anlegen: ```bash # INPUT-Filterkette leeren iptables -F INPUT # Auf lokaler Schnittstelle alles erlauben iptables -A INPUT -i lo -j ACCEPT # IPs (z.B. Router) aus dem lokalen Netz erlauben iptables -A INPUT -s 10.0.2.0/24 -i enp0s3 -j ACCEPT # Den Rest blockieren iptables -A INPUT -i enp0s3 -j DROP # Ping testen ping goos-habermann.de ``` Filterkette modifizieren: ```bash # Neue Regel an Position 1: goos-habermann.de-IP explizit freischalten iptables -I INPUT 1 -s 82.97.135.25 -i enp0s3 -j ACCEPT # Ping testen ping goos-habermann.de ``` --- ### Ports Neben Schnittstellen, einzelnen IPs und Netzwerken können auch Ports gefiltert werden. * -p [tcp/udp/icmp]: **Protokollauswahl** für den Filter * --dport [Port/Protokollname]: **Zielport** (z.B. 22) oder Zielprotokollname (z.B. ssh), der eine Verbindung annehmen soll. * --sport [Port/Protokollname]: **Quellport** * --dports + --sports: Gleich mehrere Ports (durch Komma getrennt) oder Port-Bereiche (durch Doppelpunkt getrennt) angeben. * -m [Modulname]: Schaltet iptables-Module (mit zusätzlichen Parametern) frei. Z.B. multiport, tcp oder udp. ```bash # SSH auf allen Netzwerkschnittstellen erlauben iptables -A INPUT -p tcp --dport ssh -j ACCEPT # Port 80 (HTTP), 443 (HTTPs) und alle Ports von 2000 bis 3000 freischalten iptables -A INPUT -p tcp -m multiport --dports 80,443,2000:3000 -j ACCEPT ``` --- ### 🔥🛡Speichern und laden Aktuelles Regelwerk speichern: ```bash iptables-save > /etc/iptables.ipv4.nat ``` Regelwerk laden: ```bash iptables-restore < /etc/iptables.ipv4.nat ``` Regelwerk durch Eintrag in */etc/network/interfaces* automatisch laden: ```bash auto eth0 iface eth0 inet static address 192.168.4.1 netmask 255.255.255.0 up iptables-restore < /etc/iptables.ipv4.nat post-up iptables-restore < /etc/iptables.ipv4.nat ``` --- ### iptables/nftables kann noch vieles mehr * **Filtern** nach * MAC-Adressen * Verbindungszustand (z.B. INVALID) ```bash iptables -A INPUT -m state --state INVALID -j DROP ``` * ... * **Tabellen** * Standardmäßig wird die Tabelle *"filter"* verwendet * *"nat"* für Routing ```bash iptables -A FORWARD [...] -m state\ --state RELATED,ESTABLISHED -j ACCEPT ``` * *"mangle*" zum Ändern von Paketen * *"raw"* zum Definieren von Ausnahmen, damit Pakete nicht durch andere Regeln bearbeitet werden * *"security"* zum Umsetzen von Sicherheitsregeln via Mandatory Access Control (MAC) z.B. im Zusammenhang mit SELinux --- ### AccessPoint bauen und weitere Infos * AccessPoint zum "Selbstbauen":
Dodger-Tools: Raspberry Pi als Access-Point
* Mehr Informationen und Beispiele z.B. unter * https://help.ubuntu.com/community/IptablesHowTo * https://de.wikipedia.org/wiki/Iptables * https://wiki.nftables.org/ * https://wiki.archlinux.org/title/Iptables * Genauere Beschreibung vom Zusammenspiel iptables ⇔ nftables ⇔ Netfilter * https://de.wikipedia.org/wiki/Netfilter#nftables --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de