Product SiteDocumentation Site

B.6. Schutz der Sicherheitsaktualisierung durch eine Firewall

Nach einer Standard-Installation könnten immer noch Sicherheitslücken auf dem System vorhanden sein. Falls Sie die Aktualisierungen für die verwundbaren Pakete nicht auf einem anderen System herunterladen können (oder security.debian.org zu lokalen Zwecken spiegeln können), müssen Sie sich mit dem Internet verbinden, um die Pakete herunterzuladen.
Wenn Sie sich jedoch mit dem Internet verbinden, setzen Sie Ihr System einer Gefahr aus. Wenn einer Ihrer lokalen Dienste angreifbar ist, könnten Sie kompromittiert sein, noch bevor die Aktualisierung beendet ist! Sie mögen dies paranoid finden, aber eine Analyse vom http://www.honeynet.org zeigt tatsächlich, dass ein System in weniger als drei Tagen kompromittiert werden kann, sogar wenn das System gar nicht der Öffentlichkeit bekannt ist (d.h. nicht in DNS-Einträgen auftaucht).
Wenn Sie eine Aktualisierung Ihres Systems durchführen, das nicht von einem externen System (z.B. einer Firewall) geschützt ist, können Sie trotzdem eine lokale Firewall so konfigurieren, dass Sie nur die Sicherheitsaktualisierung selbst erlaubt. Das Beispiel unten zeigt, wie die lokale Firewall aufgesetzt werden muss, damit nur Verbindungen zu security.debian.org erlaubt werden, während der Rest protokolliert wird.
Im nachfolgenden Beispiel wird ein strenges Regelwerk für eine Firewall dargestellt. Führen Sie diese Befehle auf einer lokalen Konsole aus (und nicht auf einer entfernten), um das Risiko zu verringern, sich aus Ihrem System auszusperren.
  # iptables -F
  # iptables -L
  Chain INPUT (policy ACCEPT)
  target     prot opt source               destination

  Chain FORWARD (policy ACCEPT)
  target     prot opt source               destination

  Chain OUTPUT (policy ACCEPT)
  target     prot opt source               destination
  # iptables -A OUTPUT -d security.debian.org --dport 80 -j ACCEPT
  # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  # iptables -A INPUT -p icmp -j ACCEPT
  # iptables -A INPUT -j LOG
  # iptables -A OUTPUT -j LOG
  # iptables -P INPUT DROP
  # iptables -P FORWARD DROP
  # iptables -P OUTPUT DROP
  # iptables -L
  Chain INPUT (policy DROP)
  target     prot opt source               destination
  ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0          state RELATED,ESTABLISHED
  ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
  LOG        all  --  anywhere             anywhere           LOG level warning

  Chain FORWARD (policy DROP)
  target     prot opt source               destination

  Chain OUTPUT (policy DROP)
  target     prot opt source               destination
  ACCEPT     80   --  anywhere             security.debian.org
  LOG        all  --  anywhere             anywhere           LOG level warning
Hinweis: Es ist die vorzugswürdige Verfahrensweise, die Policy-Regel DROP für die Input-Kette zu verwenden. Seien Sie aber äußerst vorsichtig, wenn Sie dies bei einer entfernten Verbindung unternehmen. Wenn Sie das Regelwerk Ihrer Firewall aus der Ferne testen, ist es am besten, wenn Sie ein Skript mit dem Regelwerk laufen lassen (anstatt jede Regel Zeile für Zeile von der Befehlszeile aus einzugeben) und sich vorsorglich eine Hintertür[88]
Selbstverständlich müssen Sie alle Hintertüren abschalten, ehe Sie Ihr System in Betrieb nehmen. Offen halten, so dass Sie wieder Zugriff auf Ihr System bekommen, wenn Sie einen Fehler gemacht haben. Auf diese Weise müssen Sie sich nicht auf den Weg zum entfernten Rechner machen, um die Firewall-Regel, mit der Sie sich ausgeschlossen haben, zu korrigieren.
FIXME: This needs DNS to be working properly since it is required for security.debian.org to work. You can add security.debian.org to /etc/hosts but now it is a CNAME to several hosts (there is more than one security mirror)
FIXME: this will only work with HTTP URLs since ftp might need the ip_conntrack_ftp module, or use passive mode.


[88] Wie z.B. knockd. Alternativ dazu können Sie auch eine separate Konsole öffnen und das System nachfragen lassen, ob sich jemand auf der Gegenseite befindet. Wenn keine Eingabe erfolgt, werden die Firewall-Regeln zurückgesetzt. Ein Beispiel dafür ist:
#!/bin/bash

while true; do
    read -n 1 -p "Are you there? " -t 30 ayt
    if [ -z "$ayt" ] ; then
        break
    fi
done

# Reset the firewall chain, user is not available
echo
echo "Resetting firewall chain!"
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
exit 1