Firewall einrichten
(Zur Vertiefung siehe auch: Wiki)
Die von Canonical angebotenen Ubuntu Binärdownloads installieren standardmäßig keine Firewall. OpenSim muss im derzeitigen Entwicklungsstadium noch als unsicher eingestuft werden, denn das Suchen nach Sicherheits-Schwachstellen ist noch zweitrangig gegenüber der Implementierung und Stabilisierung der Funktionalitäten. Deshalb ist es sinnvoll, für eingeschränkte Accounts alle nicht zwingend benötigten Ports zu schließen. Dies erschwert einem Angreifer, den Server mit Hilfe nachinstallierter Software für Angriffe auf Drittrechner zu benutzen … zumindest, so lange er keine Administrator-Rechte erlangt.
Aus obigen Gründen wird in dieser Anleitung die im Linux-Kernel eingebaute Firewall konfiguriert. Dazu sind als Benutzer root zwei Schritte erforderlich:
1) Folgendes Bash-Script mit Rechten ausschließlich für root abspeichern (chmod 700
), zum Beispiel im Verzeichnis /root
.
Hinweis: Für SSH ist hier noch Port 22 angegeben, obwohl das im Kapitel „SSH härten“ bereits auf einen anderen Port verstellt wurde. In der Firewall muss natürlich ggf. der geänderte Port angegeben werden!
Hinweis: Der Name der Netzwerkschnittstelle ist je nach Betriebssysteminstallation unterschiedlich, er muss angepasst werden! Mit dem Kommando ifconfig
wird er in der linken Spalte der Ausgabe angezeigt, bei mehreren Schnittstellen helfen die ebenfalls angezeigten IP-Adressen bei der Identifizierung.
#!/bin/bash # durch den Provider vorgegebener Name der Netzwerk-Schnittstelle interface="eth0" #### IPv6 Konfigurationsblock #### # alle alten Regeln löschen ip6tables -F ip6tables -t nat -F # alle Ports schließen ip6tables -P INPUT DROP ip6tables -P OUTPUT DROP ip6tables -P FORWARD DROP # lokalen Datenverkehr erlauben, notwendig für das Betriebssystem! ip6tables -A INPUT -i lo -j ACCEPT ip6tables -A OUTPUT -o lo -j ACCEPT #### IPv4 Konfigurationsblock #### # alle alten Regeln löschen iptables -F iptables -t nat -F # alle Ports schließen iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # lokalen Datenverkehr erlauben, notwendig für das Betriebssystem! iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # spezielle Steuersignale für IPv4 Kommunikation iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type parameter-problem -j ACCEPT iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT iptables -A OUTPUT -p icmp -j ACCEPT # bereits bestehenden Verbindungen das Antworten erlauben iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT # ausgehend TCP für alle unprivilegierten Ports freigeben iptables -A OUTPUT -o ${interface} -p tcp --dport 1024:65535 -m conntrack --ctstate NEW -j ACCEPT # eingehend SSH erlauben, eventuell Portnummer anpassen (für Fernwartung) iptables -A INPUT -i ${interface} -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # ausgehend DNS erlauben (für Auflösung von Domainnamen) iptables -A OUTPUT -o ${interface} -p udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -o ${interface} -p tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT # ausgehend HTTP und HTTPS erlauben (für Software-Updates) iptables -A OUTPUT -o ${interface} -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT iptables -A OUTPUT -o ${interface} -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT # ausgehend NTP erlauben (für Zeitsynchronisation, entfällt bei virtuellen Servern) iptables -A OUTPUT -o ${interface} -p udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT # Hier weitere Ports nach Bedarf öffnen analog zu SSH und DNS. Jeweils anpassen: # => Richtung "INPUT -i" (einwärts) oder "OUTPUT -o" (auswärts) # => Protokoll "udp" oder "tcp" # => Portnummer # eigener Server (wie in OpenSim.ini angegeben, Default ist 9000) iptables -A INPUT -i ${interface} -p tcp --dport 9000 -m conntrack --ctstate NEW -j ACCEPT # eigene Regionen (wie in Regions.ini angegeben, pro Region ein Port) iptables -A INPUT -i ${interface} -p udp --dport 9050 -m conntrack --ctstate NEW -j ACCEPT
2) Einen Aufruf des Scriptes in den Autostart einbauen (dort bereits berücksichtigt).
Eigener Server: Der Port kann in der Konfigurationsdatei OpenSim.ini frei gewählt werden, Default ist 9000. Wenn du mehrere Instanzen von OpenSim auf dem selben Rechner mit einer gemeinsamen IP-Adresse betreibst, wähle für jede Instanz einen separaten Port.
Eigene Regionen: Jede Region braucht einen eigenen UDP-Port, wie in der Regions.ini konfiguriert. Auch bei mehreren Instanzen von OpenSim auf dem selben Rechner darf es nicht zu Überschneidungen kommen.
Achtung! Wenn nach einem Rechnerstart dieses Script nicht aufgerufen wurde, dann ist der Rechner völlig ungeschützt! Deshalb ist empfehlenswert, bis zur fertigen Konfiguration auch des Autostarts möglichst außer SSH keine vom Internet zugänglichen Dienste zu starten. Und nicht vergessen, die Firewall zu testen!
Hinweis: Generell empfiehlt es sich, diese Konfiguration nur vorzunehmen, wenn ein aktuelles Backup des Gesamtsystems vorhanden ist. Starte die Firewall manuell, bevor du sie in den Autostart einbaust! Es ist durchaus möglich, sich mit Firewall-Konfigurationsfehlern endgültig aus dem System auszusperren.
Notanker: Die meisten Serververmieter bieten (nach Kundenlogin) auf den Webseiten zur Serverkonfiguration die Möglichkeit, von einem Rettungssystem zu booten. Von dort sind Korrekturen an der Konfigurationsdatei noch möglich, das Rettungssystem mountet den gemieteten Server als gewöhnliche Festplatte.
Hinweis: Wenn du außer OpenSim noch weitere Software auf dem Server betreibst, sind unter Umständen weitere Portfreigaben für die andere Software nötig. Ein gewöhnlicher Webserver zum Beispiel würde noch INPUT für die Ports 80 und 443 benötigen. Ebenfalls ist es sinnvoll IPv6 zu benutzen, wenn eine Software damit umgehen kann.
Weiter: Autostart einrichten