Linux-Sicherheit in der Praxis: firewalld, iptables und SELinux
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:
- ESTABLISHED,RELATED zuerst (verhindert, dass Verbindungen getrennt werden)
- Dann spezifische Ausnahmen (Port 22, 80, 443)
- 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
- LPIC-3 303 Security Deep Dive — Sicherheit auf LPIC-3-Niveau
- LPIC-1 102-500 Deep Dive — Grundlagen (inklusive Sicherheit)
- LPIC-2 202-450 Deep Dive — Sicherheit auf LPIC-2-Niveau
Bereit, zu üben? Starte mit den kostenlosen LPI Übungsfragen.