Härtung von Ubuntu.
Heute schreibe ich über die Härtung, also die Erhöhung der Sicherheit, eines Ubuntu 18.04. Als Vorlage dient der „CIS Ubuntu Linux 18.04 LTS Benchmark“ des „Center for Internet Security“. Eine Sammlung mit Handlungsanweisungen zur Härtung von Ubuntu. Er umfasst etwas über 200 Anweisungen, welche, sofern nicht bereits im Betriebssystem eingerichtet, von mir zuerst in Bash-Skripten zusammengefasst werden. Die Anweisungen umfassen das Deaktivieren von Diensten und das Ändern von Konfigurationsdateien sowie Firewallregeln oder das Erteilen von Dateiberechtigungen. Ziel ist es, zu verhindern, dass potenzielle Angreifer in das Ubuntu Betriebssystem eindringen und Handlungen ausführen, die den Betrieb des Produktes oder sogar die gesamte Infrastruktur gefährden.
Durch Aufteilen der Festplatte in mehrere Partitionen, darunter eine gesonderte Partition für Log Dateien, soll verhindert werden, dass die Festplatte vollläuft und Dienste oder das gesamte Betriebssystem zum Absturz gebracht werden – verursacht etwa durch Angreifer oder fehlerbehaftete Logeinträge. Strenge Firewallregeln definieren feste Kommunikationspfade zwischen den einzelnen Systemen und verhindern dadurch, dass unbekannte Dienste ungewollt kommunizieren.
Problem und Lösung bei der Bereitstellungszeit.
Interessant dabei, ist das Arbeiten mit dem Linuxtool ‘sed‘, mit dem man den Inhalt einzelner Konfigurationsdateien inplace abändern kann. Ein vorkommendes Problem: Nachdem die meisten Skripte geschrieben worden sind, kann beim sequentiellen Ausführen aller Scripte, die Zeit zum Bereitstellen einer einzelnen virtuellen Maschine viel zu lange dauern. Meine Lösung: Ich überprüfe die Reihenfolge, in denen die Skripte ausgeführt werden sollen. Das kann die Zeit eventuell halbieren. Auch durch zusätzliches Installieren eines DNS Caches, ist es möglich, die Zeit zum Bereitstellen um weitere Minuten zu reduzieren. Grund für das langsame Bereitstellen, kann zum Beispiel ein DNS Eintrag in der Datei hosts.allow sein, welcher sehr früh in der Bereitstellungsphase des Systems eingetragen worden ist. Das kann das System veranlassen, bei jeder Verbindung zu prüfen, ob die IP-Adresse zum angegebenen DNS-Namen gehört. Die Bereitstellung besteht aus mehreren hundert einzelner Shellbefehle, die über das Netzwerk an die virtuelle Maschine gesendet, dort ausgeführt und das Ergebnis ebenfalls übers Netzwerk zurück an den Bereitstellungsdienst geschickt werden. Jeder dieser Befehle führt dazu, dass das Senden der Anweisung an die virtuelle Maschine und das Empfangen des Ergebnisses des Befehls, nicht nur einige Millisekunden, sondern mehrere Sekunden braucht. Meine Lösung: Ich verschiebe das Skript, welches den DNS Eintrag in die Datei hosts.allow einträgt, an das Ende des Bereitstellungsprozesses der virtuellen Maschine.
Auch das darauffolgende Starten der Applikationen, welche ebenfalls vom Bereitstellungsdienst über einzelne Befehle übers Netzwerk gesendet werden, kann ich durch den Einsatz des DNS Caches beschleunigen.
Wichtig zum Abschluss.
Abschließend müssen Prüfskripte erstellt werden. Sie sollen einem das Überprüfen erleichtern, ob das System weiterhin den Härtungsanforderungen entspricht. Diese Skripte kontrollieren, die durch die Härtung veränderten oder hinzugefügten Einstellungen und melden einem, wenn sich an den Sollwerten etwas verändert.
Now you know.
Have fun. Enjoy coding.
Your INNO coding team.