Nachdem dieses Blog einige Jahre auf einem Webspace gehostet war, bin ich nun auf einen eigenen vServer umgezogen. Damit bekommt man zum gleichen Preis eine höhere Leistung, da man sich die zur Verfügung stehenden Ressourcen mit niemandem teilen muss. Außerdem hat man beim Setup wesentlich mehr Freiheiten und kann beispielsweise Webserver und Datenbanken selbst wählen. Das bedeutet aber auch, dass man sich um die Administration kümmern muss.
Zum Einstieg ist es bei mir ein VPS (Virtual Private Server) mit 256 MB RAM, 20 GB Speicherplatz und 250 GB Traffic auf OpenVZ-Basis geworden, den ich auf LowEndBox gefunden habe. In diesem und den folgenden Artikeln werde über meine Erfahrungen beim Installieren berichten.
Erster Schritt nach der Installation des Betriebssystems sollte das Einrichten einer Firewall sein. Bei mir ist die Wahl auf iptables gefallen, das sich unter Debian und Ubuntu als Paket installieren lässt:
1 |
sudo apt-get install iptables |
IPv4
Zum Initialisieren löscht man erstmal alle bereits vorhandenen Regeln:
1 |
sudo iptables -F |
Anschließend kann man eigene Regeln anlegen, wobei die Ports natürlich an die eigenen Bedürfnisse angepasst werden müssen, damit man sich nicht versehentlich aussperrt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -p tcp --dport 25 -j ACCEPT # SMTP sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP sudo iptables -A INPUT -p tcp --dport 110 -j ACCEPT # POP3 sudo iptables -A INPUT -p tcp --dport 143 -j ACCEPT # IMAP sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS sudo iptables -A INPUT -p tcp --dport 465 -j ACCEPT # SSMTP sudo iptables -A INPUT -p tcp --dport 587 -j ACCEPT # Submission sudo iptables -A INPUT -p tcp --dport 993 -j ACCEPT # IMAPS sudo iptables -A INPUT -p tcp --dport 995 -j ACCEPT # POP3S sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # SSH sudo iptables -A INPUT -p tcp --dport 5656 -j ACCEPT # HTTPS (Admin) sudo iptables -A INPUT -p tcp --dport 6523 -j ACCEPT # Infinoted (Gobby) sudo iptables -A INPUT -p icmp -j ACCEPT # ICMP (Ping, Traceroute) sudo iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 sudo iptables -A INPUT -j DROP sudo iptables -A FORWARD -j REJECT sudo iptables -A OUTPUT -j ACCEPT |
Mit diesen Regeln werden Antworten auf ausgehende Verbindungen, Loopback-Verbindungen, die angegebenen Ports der Protokolle HTTP, SMTP, SSH & Co. sowie Pings akzeptiert. Die Ports müssen hierbei noch an die eigenen Bedürfnisse angepasst werden. In der obigen Konfiguration habe ich den SSH-Port beispielsweise von 22 auf 2222 geändert. Alle anderen eingehenden Verbindungen werden dann ignoriert, Weiterleitungen abgelehnt und ausgehende Verbindungen immer zugelassen.
Zum Auflisten der eingerichteten Regeln lässt sich der folgende Befehl verwenden:
1 |
sudo iptables -L |
Damit die Konfiguration auch nach einem Neustart noch vorhanden ist, wird sie mittels iptables-save
abgespeichert:
1 |
sudo sh -c "iptables-save > /etc/iptables.rules" |
Nun erstellt man einen Anhang zur Interface-Konfiguration, in dem man festlegt, dass die iptables-Regeln beim Starten geladen werden. Wer möchte, dass die Regeln beim Herunterfahren automatisch gespeichert werden, kann die zweite Zeile auch noch einkommentieren:
1 |
sudo vi /etc/network/interfaces.tail |
1 2 |
pre-up iptables-restore < /etc/iptables.rules # post-down iptables-save > /etc/iptables.rules |
IPv6
Es ist allerdings wichtig zu wissen, dass sich die gezeigten Befehle nur auf die IPv4-Implementation von iptables beziehen. Ist der vServer auch per IPv6 erreichbar, sollten die Regeln unbedingt auch mit ip6tables gepflegt werden, da er über IPv6 ansonsten ungeschützt erreichbar wäre.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
sudo ip6tables -F sudo ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo ip6tables -A INPUT -i lo -j ACCEPT sudo ip6tables -A INPUT -p tcp --dport 25 -j ACCEPT # SMTP sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP sudo ip6tables -A INPUT -p tcp --dport 110 -j ACCEPT # POP3 sudo ip6tables -A INPUT -p tcp --dport 143 -j ACCEPT # IMAP sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS sudo ip6tables -A INPUT -p tcp --dport 465 -j ACCEPT # SSMTP sudo ip6tables -A INPUT -p tcp --dport 587 -j ACCEPT # Submission sudo ip6tables -A INPUT -p tcp --dport 993 -j ACCEPT # IMAPS sudo ip6tables -A INPUT -p tcp --dport 995 -j ACCEPT # POP3S sudo ip6tables -A INPUT -p tcp --dport 2222 -j ACCEPT # SSH sudo ip6tables -A INPUT -p tcp --dport 5656 -j ACCEPT # HTTPS (Admin) sudo ip6tables -A INPUT -p tcp --dport 6523 -j ACCEPT # Infinoted (Gobby) sudo ip6tables -A INPUT -p icmp -j ACCEPT # ICMP (Ping, Traceroute) sudo ip6tables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "ip6tables denied: " --log-level 7 sudo ip6tables -A INPUT -j DROP sudo ip6tables -A FORWARD -j REJECT sudo ip6tables -A OUTPUT -j ACCEPT |
Auch hier speichert man die Konfiguration mittels ip6tables-save
ab:
1 |
sudo sh -c "ip6tables-save > /etc/ip6tables.rules" |
An die zuvor erstellte Konfiguration hängt man nun noch folgendes an, damit die ip6tables-Regeln beim Starten geladen werden:
1 |
sudo vi /etc/network/interfaces.tail |
1 2 |
pre-up ip6tables-restore < /etc/ip6tables.rules # post-down ip6tables-save > /etc/ip6tables.rules |
Somit ist die grundlegende Konfiguration von iptables und ip6tables abgeschlossen. Ein weiterer sinnvoller Schritt zur Absicherung des vServers ist, die Fernwartung mit SSH auf Authentifizierung über öffentliche Schlüssel umzustellen.
Links
- ubuntuusers.de Wiki: iptables2
- Community Ubuntu Documentation: IptablesHowTo
- Simple Iptables Script Generator
- Vesa’s tech corner: Setup basic firewall in OpenVZ hosted Ubuntu 10.04
- Howto: Basic Lockdown using IPTABLES
- How to Log Linux IPTables Firewall Dropped Packets to a Log File