Eine Firewall ist nie genug, sie ist das absolute Minimum. Dann ist es wünschenswert, eine Art IDS zu haben. Wenn Ihr SSH-Port beispielsweise offengelegt ist, sollten Sie Brute-Force-Angriffe blockieren, auch wenn Sie ein sicheres Kennwort haben. Ein typischer Server im Internet wird hunderttausend Mal am Tag untersucht und angegriffen. Ich weiß aus all den Benachrichtigungen, die ich an einem einzigen Tag erhalte und nur durch Lesen der Protokolle. Sicherheit kann übrigens leicht zu einer Vollzeitbeschäftigung werden. Und wenn Sie Protokolle haben, diese aber nie lesen, könnten Sie etwas verpassen.
Wenn Sie eine Website von Grund auf neu erstellen, besteht die größte Gefahr meines Erachtens in Ihrem eigenen Code. Ihr größter Feind sind Sie, wenn Sie nicht wissen, was Sie tun. Wenn Ihr Code beispielsweise SQL-Injektionen zulässt, schützt Sie ufw nicht. Die Verwendung eines Frameworks sollte Ihnen helfen, einige Anfängerfehler zu vermeiden, garantiert jedoch nicht die Qualität des Codes. Sie müssen Best Practices und das Schreiben von sicherem Code lernen. Das Framework wird Ihnen das nicht beibringen.
Da Sie Python erwähnt haben, schlage ich pylint vor, um die Qualität Ihres Codes zu testen. Es gibt andere Tools wie Bandit oder Mypy für spezifischere Überprüfungen.
Eine WAF (Webanwendungs-Firewall) kann ebenfalls von Vorteil sein, erfordert jedoch einige Optimierungen, um effektiv zu sein, ohne zu restriktiv zu sein.
Es gibt viele Dinge, die Sie tun können, um Ihre Angriffsfläche zu reduzieren. Google: "Linux Hardening". Wenn ich ein Buch empfehlen müsste, wäre es Hacking ausgesetzt für einen umfassenden Überblick.
Eine wichtige Sache ist, Ihr System auf dem neuesten Stand zu halten . Es werden ständig Sicherheitslücken gefunden, manchmal auch 0 Tage, sodass Sie schnell reagieren müssen, um ein Upgrade oder einen Patch herunterzuladen (ein aktuelles Beispiel ist Exim). Ich empfehle daher dringend, einige Mailinglisten, Websites oder Blogs zum Thema Computersicherheit zu abonnieren, um stets über Neuigkeiten informiert zu sein.
Equifax wurde aufgrund eines Fehlers gehackt, der einige Monate zuvor behoben worden war. Ihr Aufschub kostete sie viel Geld. Wenn Sie Ihr System nicht warten, erhöht sich das Risiko erheblich. Alles was es braucht ist ein ausnutzbarer Fehler.
Schließlich würde ich Ihnen raten, sich pentest. Zum Testen auf SQL-Injektionen SQLmap ist ein großartiges Tool. Um jedoch die besten Ergebnisse zu erzielen, müssen Sie verstehen, wie die Tools funktionieren. Wenn Sie sie nur mit Standardoptionen ausführen, reicht dies meistens nicht aus, um Fehler zu finden (es sei denn, die Site ist sehr schlecht codiert). Manchmal belassen Webmaster vertrauliche Dateien wie SQL-Sicherungen auf ihrem Server, weil sie vergessen haben, die Datei nach dem Wiederherstellen einer Datenbank zu löschen. Eine Verzeichnisliste kann das Vorhandensein von Dateien anzeigen, die nicht vorhanden sein sollten.
Viele Websites verfügen über ein phpmyadmin-Verzeichnis und bieten keinerlei Schutz vor Brute-Force-Angriffen. Auf diese Weise kann ein Hacker Zugriff auf Ihre Datenbank erhalten. Wenn Sie wirklich phpmyadmin auf dem Server haben möchten, verwenden Sie zumindest keinen vorhersehbaren Verzeichnisnamen und beschränken Sie den Zugriff so, dass nicht das ganze Wort für null Vorteile verfügbar ist.