Skip to content
Zurück zum BlogLinux-Sicherheit in der Praxis: firewalld, iptables und SELinux
linux sicherheit firewalld iptables selinux apparmor firewall

Linux-Sicherheit in der Praxis: firewalld, iptables und SELinux

18. Oktober 2026~2 min read· Tobias Weiss

Linux-Sicherheit ist nicht ein Werkzeug — es sind Schichten. Firewall, Mandatory Access Control (SELinux/AppArmor), SSH-Härtung und Dateisystem-Berechtigungen arbeiten zusammen. Dieser Artikel zeigt, wie du sie in der Praxis einsetzt.

Schicht 1: Firewall

iptables — der Klassiker

# Grundregeln: alles verbieten, dann Ausnahmen erlauben
iptables -P INPUT DROP       # Default: eingehend verwerfen
iptables -P FORWARD DROP     # Default: weiterleiten verwerfen
iptables -P OUTPUT ACCEPT    # Default: ausgehend erlauben

# Ausnahmen
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT    # SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT   # HTTPS

# Regeln speichern (überleben Reboot)
iptables-save > /etc/iptables/rules.v4
# Bei Red Hat/CentOS:
service iptables save

iptables: Die Reihenfolge der Regeln ist entscheidend

iptables verarbeitet Regeln von oben nach unten. Die erste Regel, die zutrifft, gewinnt. Daher:

  1. ESTABLISHED,RELATED zuerst (verhindert, dass Verbindungen getrennt werden)
  2. Dann spezifische Ausnahmen (Port 22, 80, 443)
  3. Dann die Default-Policy (DROP)

Wenn du eine Regel in der Mitte einfügen musst, nutze -I statt -A: iptables -I INPUT 2 -p tcp --dport 8080 -j ACCEPT fügt an Position 2 ein.

firewalld — die moderne Alternative

# Zonen und Services
firewall-cmd --get-zones                    # Alle Zonen
firewall-cmd --get-default-zone             # Aktive Default-Zone
firewall-cmd --set-default-zone=public      # Default setzen

# Services erlauben
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# Port öffnen
firewall-cmd --permanent --add-port=8080/tcp

# Änderungen anwenden
firewall-cmd --reload

# Rich Rules (komplexere Regeln)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'

Schicht 2: Mandatory Access Control (MAC)

SELinux

SELinux (Security-Enhanced Linux) ist ein Mandatory Access Control-System, das Prozessen den Zugriff auf Dateien, Ports und andere Ressourcen einschränkt — unabhängig von Dateiberechtigungen.

# SELinux-Status
sestatus                    # Status und Modus
getenforce                  # Aktueller Modus (Enforcing/Permissive/Disabled)

# Modus ändern (temporär)
setenforce 0                # Permissive (loggt, aber blockiert nicht)
setenforce 1                # Enforcing (blockiert)

# Modus ändern (permanent)
# In /etc/selinux/config:
# SELINUX=enforcing
# SELINUX=permissive
# SELINUX=disabled

# Kontext anzeigen und ändern
ls -Z /var/www/html         # SELinux-Kontext einer Datei
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html  # Kontext anwenden

# Ports für Services
semanage port -a -t http_port_t -p tcp 8080  # Port 8080 für HTTP

SELinux-Modi: Enforcing, Permissive, Disabled

  • Enforcing: SELinux-Regeln werden durchgesetzt. Verletzungen werden blockiert und geloggt. Das ist der Produktionsmodus.
  • Permissive: SELinux-Regeln werden ausgewertet, aber Verletzungen werden nur geloggt, nicht blockiert. Ideal zum Debuggen.
  • Disabled: SELinux ist komplett deaktiviert. Nicht empfohlen.

Der häufigste Fehler: SELinux auf Disabled setzen, weil etwas nicht funktioniert. Stattdessen: Permissive-Modus aktivieren, Logs in /var/log/audit/audit.log lesen, Kontext anpassen, dann zurück auf Enforcing.

AppArmor

AppArmor ist die Alternative zu SELinux (Standard auf Ubuntu/Debian). Es ist einfacher zu konfigurieren, aber weniger granular.

# AppArmor-Status
aa-status                   # Status und Profile
apparmor_status             # Alternative

# Profile verwalten
aa-enforce /etc/apparmor.d/usr.sbin.nginx   # Enforcing
aa-complain /etc/apparmor.d/usr.sbin.nginx  # Complain (loggt nur)
aa-disable /etc/apparmor.d/usr.sbin.nginx   # Deaktivieren

Schicht 3: SSH-Härtung

# /etc/ssh/sshd_config — wichtigste Härtungsmaßnahmen
Port 2222                           # Standard-Port ändern
PermitRootLogin no                  # Root-Login verbieten
PasswordAuthentication no           # Nur Key-Auth
PubkeyAuthentication yes            # Public-Key-Auth
MaxAuthTries 3                      # Brute-Force-Schutz
AllowUsers alice bob                # Nur bestimmte Benutzer
ClientAliveInterval 300             # Timeout nach 5 Min Inaktivität
ClientAliveCountMax 0               # Kein Keepalive

# Nach Änderungen:
systemctl restart sshd

Schicht 4: Fail2ban (Brute-Force-Schutz)

# Installation
apt install fail2ban     # Debian/Ubuntu
dnf install fail2ban     # Red Hat/Fedora

# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600

systemctl enable fail2ban
systemctl start fail2ban
fail2ban-client status sshd    # Status anzeigen

Ins Thema einsteigen

Bereit, zu üben? Starte mit den kostenlosen LPI Übungsfragen.

Verwandte Artikel

This site uses essential cookies for Stripe payments. No tracking cookies.