Was kann getan werden, um Ubuntu Server zu sichern?

35

Ich habe ein Projekt, um Ubuntu Server so gut wie möglich abzusichern. Der Server ist ein Webhosting-Server. Auf dem Server werden LAMP, Mail und DNS ausgeführt.

Eine Null
quelle
Welche Dienste werden ausgeführt?
Wojox
LAMP, Mail, DNS
One Zero
Ich habe ein Ubuntu Server Cheat Sheet erstellt und möchte es mit Ihnen teilen. Die ersten Seiten sind allgemeine Linux-Befehle, dann spezifische Server-Pakete und die letzte Seite ist eine Checkliste für die Serversicherheit. Die Checkliste vereint Tipps und Härtungen vieler Websites. Ich hoffe es hilft dir! Lizenziert unter der WTFPL- Lizenz. Sie können die Checkliste hier ansehen / herunterladen / was auch immer . Ich aktualisiere es von Zeit zu Zeit.
Noah Krasser

Antworten:

43

Hier ist eine Liste der Maßnahmen, die ich zur Sicherung meines Servers ergriffen habe.

  1. Aktivieren Sie UFW ( sudo ufw enable) und lassen Sie nur die tatsächlich verwendeten Ports zu. ( sudo ufw allow 80)
  2. Stellen Sie sicher, dass MySQL nur Verbindungen von localhost zulässt.
  3. Aktivieren Sie TLS für Mail-Dienste. Auch wenn es ein selbstsigniertes Zertifikat ist. Sie möchten keine Passwörter im Klartext senden.
  4. Installieren Sie ssh-Bruteforce-Blocker wie denyhosts oder fail2ban. ( sudo apt-get install denyhosts)
  5. Schauen Sie sich an, wie Sie sich nur mit SSH-Schlüsseln anmelden.
  6. Lerne AppArmor. Wenn Sie ziemlich Vanille-Konfigurationen verwenden, ist es extrem einfach. Stellen Sie einfach sicher, dass es eingeschaltet ist. Dies wird dazu beitragen, Zero-Day-Exploits zu reduzieren.
  7. Abhängig vom physischen Zugriff auf den Server möchten Sie möglicherweise sogar die Verschlüsselung der Daten auf der Festplatte überprüfen.
  8. Folgen Sie anderen Empfehlungen in diesem Link. BEARBEITEN: Ich habe vergessen, dies zu bearbeiten, da ich nicht genug Reputation hatte, um weitere Links hinzuzufügen. Der Link, der hier gemeint ist, ist der letzte Link unten.
  9. Vertraue niemals deinen Benutzern. Wenn Sie mehrere Benutzer mit Zugriff auf das System haben, sperren Sie diese. Wenn Sie ihnen sudo-Zugriff gewähren müssen, geben Sie ihnen nur das, was sie benötigen.
  10. Verwenden Sie gesunden Menschenverstand. Überlegen Sie sich genau, wie Sie reinkommen würden, wenn Sie jemals ausgesperrt wären. Dann schließen Sie diese Löcher.

Noch ein paar Dinge zu beachten. Die meisten Menschen vergessen den physischen Zugang. Alle Software-Konfigurationen auf der Welt haben keine Bedeutung, wenn ich mit einer Live-CD physisch hineingehen und Ihre Daten stehlen kann. Vorsicht vor Social Engineering. Stellen Sie Fragen, um zu überprüfen, wer am Telefon ist, und stellen Sie sicher, dass er die Berechtigung hat, die von ihm gestellte Anfrage zu stellen.

Da ich noch ein "neuer" Benutzer bin, kann ich nicht mehr als 2 Links posten. Weitere Informationen zu diesem Thema finden Sie hier: https://help.ubuntu.com/12.04/serverguide/index.html und unter besonderer Berücksichtigung von https://help.ubuntu.com/12.04/serverguide/security.html

Patrick Regan
quelle
2
Eine Alternative zur Verwendung von UFW (während Sie in Ubuntu iptablesimmer noch vorinstallierte Firewalls verwenden) besteht darin, Ihr System mit äußerst spezifischen Regeln zu sperren, um den externen Zugriff auf Dienste zu verhindern, die Sie nicht nutzen werden, wenn Sie einen seltsamen Fehler haben. Ball-Setup, das fortgeschrittenes Rouing und andere Dinge erfordert.
Thomas Ward
2
@LordofTime vereinbart. Eigentlich benutze ich iptables selbst, aber ufw ist für die meisten Basisinstallationen in Ordnung. UFW ist sowieso mehr oder weniger nur ein Wrapper für die meisten gängigen iptables-Konfigurationen. Das zugrunde liegende System ist immer noch das gleiche.
Patrick Regan
2
+1 für ufw, du bist kein neuer Benutzer, du bist Mitglied seit 1 Jahr: p
Tachyons
1
In der Tat wollte ich nur darauf hinweisen, dass iptables in bestimmten Fällen eine bessere Verwendbarkeit haben als ufw
Thomas Ward
1
Betrachten Sie BastilleLinux als eine gute Sicherheitslösung.
7.
13

Sicherer gemeinsamer Speicher

/ dev / shm kann bei einem Angriff auf einen laufenden Dienst wie httpd verwendet werden. Ändern Sie / etc / fstab, um die Sicherheit zu erhöhen.

Öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

sudo vi /etc/fstab

Fügen Sie die folgende Zeile hinzu und speichern Sie. Sie müssen neu starten, damit diese Einstellung wirksam wird:

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Härten Sie das Netzwerk mit Sysctl-Einstellungen ab

Die Datei /etc/sysctl.conf enthält alle sysctl-Einstellungen. Verhindern Sie das Weiterleiten von eingehenden Paketen und protokollieren Sie fehlerhafte IP-Adressen. Geben Sie Folgendes in ein Terminalfenster ein

sudo vi /etc/sysctl.conf

Bearbeiten Sie die Datei /etc/sysctl.conf und entfernen Sie den Kommentar oder fügen Sie die folgenden Zeilen hinzu:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Geben Sie Folgendes ein, um sysctl mit den neuesten Änderungen neu zu laden:

sudo sysctl -p

Verhindern Sie IP-Spoofing

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo vi /etc/host.conf

Fügen Sie die folgenden Zeilen hinzu oder bearbeiten Sie sie:

order bind,hosts
nospoof on

Härten Sie PHP für die Sicherheit

Bearbeiten Sie die Datei php.ini:

sudo vi /etc/php5/apache2/php.ini

Fügen Sie die folgenden Zeilen hinzu oder bearbeiten Sie sie:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Web Application Firewall - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Schutz vor DDOS-Angriffen (Denial of Service) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Überprüfen Sie Protokolle und sperren Sie verdächtige Hosts - DenyHosts und Fail2Ban

@ DenyHosts

DenyHosts ist ein Python-Programm, das SSH-Angriffe automatisch blockiert, indem Einträge zu /etc/hosts.deny hinzugefügt werden. DenyHosts informiert Linux-Administratoren auch über anstößige Hosts, angegriffene Benutzer und verdächtige Anmeldungen.

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo apt-get install denyhosts

Bearbeiten Sie nach der Installation die Konfigurationsdatei /etc/denyhosts.conf und ändern Sie die E-Mail- Adresse und andere Einstellungen nach Bedarf.

Um die Admin-E-Mail-Einstellungen zu bearbeiten, öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

sudo vi /etc/denyhosts.conf

Ändern Sie die folgenden Werte nach Bedarf auf Ihrem Server:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban ist fortgeschrittener als DenyHosts, da es die Protokollüberwachung auf andere Dienste wie SSH, Apache, Courier, FTP und mehr erweitert.

Fail2ban scannt Protokolldateien und verbietet IP-Adressen, die böswillige Anzeichen aufweisen - zu viele Kennwortfehler, auf der Suche nach Exploits usw.

In der Regel wird Fail2Ban dann zum Aktualisieren der Firewall-Regeln verwendet, um die IP-Adressen für einen bestimmten Zeitraum abzulehnen. Es können jedoch auch beliebige andere Aktionen konfiguriert werden. Fail2Ban wird standardmäßig mit Filtern für verschiedene Dienste (Apache, Kurier, FTP, SSH usw.) geliefert.

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo apt-get install fail2ban

Bearbeiten Sie nach der Installation die Konfigurationsdatei /etc/fail2ban/jail.local und erstellen Sie die Filterregeln nach Bedarf.

Um die Einstellungen zu bearbeiten, öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

sudo vi /etc/fail2ban/jail.conf

Aktivieren Sie alle Dienste , die Sie überwachen möchten fail2ban würde durch Ändern enabled = false * aktiviert = true *

Wenn Sie beispielsweise die SSH-Überwachung und das Verbot des Gefängnisses aktivieren möchten, suchen Sie die folgende Zeile und ändern Sie die Einstellung von false in true . Das ist es.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Wenn Sie E-Mails von Fail2Ban erhalten möchten, wenn Hosts gesperrt sind, ändern Sie die folgende Zeile in Ihre E-Mail-Adresse.

destemail = root@localhost

und ändere die folgende Zeile von:

action = %(action_)s

zu:

action = %(action_mwl)s

Sie können auch Regelfilter für die verschiedenen Dienste erstellen , die fail2ban überwachen soll und die nicht standardmäßig bereitgestellt werden.

sudo vi /etc/fail2ban/jail.local

Eine gute Anleitung zum Konfigurieren von fail2ban und zum Erstellen der verschiedenen Filter finden Sie in HowtoForge - hier finden Sie ein Beispiel

Wenn Sie mit der Konfiguration von Fail2Ban fertig sind, starten Sie den Dienst neu mit:

sudo /etc/init.d/fail2ban restart

Sie können den Status auch mit überprüfen.

sudo fail2ban-client status

Suchen Sie nach Rootkits - RKHunter und CHKRootKit.

Sowohl RKHunter als auch CHKRootkit machen im Prinzip dasselbe - überprüfen Sie Ihr System auf Rootkits. Kein Schaden bei der Verwendung von beiden.

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo apt-get install rkhunter chkrootkit

Um chkrootkit auszuführen, öffnen Sie ein Terminalfenster und geben Sie Folgendes ein:

sudo chkrootkit

So aktualisieren Sie RKHunter und führen es aus Öffnen Sie ein Terminal und geben Sie Folgendes ein

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Scannen Sie offene Ports - Nmap

Nmap ("Network Mapper") ist ein kostenloses Open Source-Dienstprogramm für die Netzwerkerkennung und Sicherheitsüberwachung.

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo apt-get install nmap

Scannen Sie Ihr System nach offenen Ports mit:

nmap -v -sT localhost

SYN-Scannen mit folgenden Funktionen:

sudo nmap -v -sS localhost

Analysieren Sie die System-LOG-Dateien - LogWatch

Logwatch ist ein anpassbares Loganalysesystem. Logwatch analysiert die Protokolle Ihres Systems und erstellt einen Bericht, in dem die von Ihnen angegebenen Bereiche analysiert werden. Logwatch ist einfach zu bedienen und funktioniert auf den meisten Systemen direkt aus dem Paket.

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo apt-get install logwatch libdate-manip-perl

Verwenden Sie zum Anzeigen der Logwatch-Ausgabe weniger:

sudo logwatch | less

Geben Sie Folgendes ein, um einen Logwatch-Bericht für die letzten 7 Tage per E-Mail an eine E-Mail-Adresse zu senden, und ersetzen Sie [email protected] durch die erforderliche E-Mail-Adresse. :

sudo logwatch --mailto [email protected] --output mail --format html --range 'between -7 days and today' 

Prüfen Sie Ihre Systemsicherheit - Tiger.

Tiger ist ein Sicherheitstool, das sowohl als Sicherheitsüberprüfungs- als auch als Einbruchserkennungssystem eingesetzt werden kann.

Öffnen Sie ein Terminal und geben Sie Folgendes ein:

sudo apt-get install tiger

Um Tiger auszuführen, geben Sie Folgendes ein:

sudo tiger

Alle Tiger-Ausgaben befinden sich im Verzeichnis / var / log / tiger

Öffnen Sie zum Anzeigen der Tiger-Sicherheitsberichte ein Terminal und geben Sie Folgendes ein:

sudo less /var/log/tiger/security.report.*

Weitere Hilfe

Eine Null
quelle
PHP: magic_quotes_gpc = On. Magic Quotes wurde zuerst veraltet und dann entfernt: php.net/manual/en/security.magicquotes.whynot.php
Tim
13

Da Sie sagten, dies ist ein Web-Hosting-Server ... Ich möchte meine bewährten Methoden und Erfahrungen aus 5 langen Jahren in der Web-Hosting-Linie teilen .

  1. Aus meinen Erfahrungen in der Vergangenheit sollten Sie, anstatt sofort in die Konfigurationshölle zu gehen, zuerst die niedrig hängenden Sicherheitstrauben zusammenbauen, wie auf dem angegebenen Artikel angegeben.

  2. Da Sie LAMP haben, müssen Sie sehr vorsichtig mit PHP und seinen php.ini-Einstellungen sein. Dies ist ein guter Link zum Sichern von PHP. PHP hat Superkräfte, die zu einer Sicherheitsschleife werden können, wenn sie nicht richtig konfiguriert werden.

  3. Sie können einen Cron-Job verwenden , um zu überprüfen, wann Ihre Dateien ohne Ihre Erlaubnis geändert und möglicherweise gehackt wurden. mit diesem Cron Job . Ich bevorzuge Notepad ++ , um die Cron-Ergebnisse zu vergleichen (lade die Cron-E-Mail direkt von deinem Webserver herunter und öffne sie in Notepad ++).

  4. Wenn Sie SEM installieren möchten, ist cPanel am besten geeignet (jedoch kostenpflichtig). Webmin und Zpanel sind sehr gute kostenlose Alternativen. Webmin ist besser, da atleast selbstsignierte Zertifikate verwendet und die Sicherheit erhöht.

  5. Wenn Sie möchten, dass etwas sofort funktioniert, können Sie sich für schlüsselfertiges Linux entscheiden. Es basiert auf Ubuntu, ist extrem einfach zu implementieren und lässt sich flexibel an Ihre Bedürfnisse anpassen. Mit sehr wenig Aufwand erhalten Sie Sicherheit aus der Box. Dies ist ihr LAMP-Stack . Ich persönlich benutze und bevorzuge dies nur.

  6. Wenn Sie von vorne anfangen, können Sie auch ISPconfig3 installieren. Anleitung hier .

  7. Sie können Ihre Sicherheit testen, indem Sie versuchen, mit Back-Track-Linux in Ihre Sicherheit einzudringen .

  8. Behalten Sie komplexe lange und zufällige Passwörter. Speichern Sie sie nicht auf dem PC. Schreib sie auf. Verwenden Sie eine Live-CD, um auf diese Anmeldungen zuzugreifen.

  9. Besorgen Sie sich eine Brute-Force- Schutzsoftware wie fail2ban.

  10. Führen Sie nicht die Dämonen aus, die Sie nicht benötigen.

  11. Blockieren Sie alle unnötigen Ports . Seien Sie äußerst vorsichtig mit dem SSH-Port (22).

  12. Holen Sie sich eine statische IP auf dem System, über die Sie den Server verwalten. Machen Sie die meisten Dinge IP-Block und erlauben Sie nur Ihrer bestimmten IP, auf diese Konfigurationsorte wie Port 22 zuzugreifen .

Am Ende des Tages ... arbeiten Sie mit äußerster Besonnenheit, werden Sie nicht emotional mit der Installation und die Anwendung von gesundem Menschenverstand führt Sie weit darüber hinaus.

**My heartiest best wishes to you. good luck.**
Bhavesh Diwan
quelle
1
PHP kann auch gefährlich sein, wenn Sie Benutzereingaben vertrauen (z. B. SQL-Injection).
NoBugs
@ NoBugs Ich stimme diesem Punkt absolut zu. Es ist nicht möglich, alles in einer einzigen Antwort zu komprimieren. Meine Antwort enthält viele Hyperlinks und als solche sind diese Websites, die diese Seiten enthalten, wirklich sehr nützlich. Hoffe, meine Antwort und die darin enthaltenen Links helfen der Community :)
Bhavesh Diwan
2
Nr. 9: Nein, Ramdom-Passwörter sind schlecht, der Schlüssel liegt in der Länge , dh. "D0g ....................." ist stärker als "PrXyc.N (n4k77 # L! EVdAfp9". Erläuterung unter explainxkcd.com/2011/08/10 / Passwort-Stärke
Papukaija
2
@ Papukaija Ich schlage vor, Sie zu googeln brute force attacksund dictionary attacks.. Zufällige lange Passwort sind der einzige Weg, um sich vor solchen Angriffen zu schützen.
Bhavesh Diwan
6

Nutzen Sie das Bastille Linux-Projekt.

Es bietet ein interaktives Tool, mit dem Sie zusätzliche Sicherheitsmaßnahmen durchführen können, um die Gesamtsicherheit zu erhöhen und die Anfälligkeit für Kompromisse für Ihr Ubuntu-System (von Bastille Linux ) zu verringern .

Es bietet eine Bewertungs- und Berichtsfunktion, mit der Sie feststellen können, welche Teile des Systems nicht gesperrt sind. Es überprüft das System schreibgeschützt und gibt Auskunft über den Status der einzelnen Härtungselemente. Bastille könnte beispielsweise prüfen, ob der DNS-Server in einem Chroot-Gefängnis gesperrt ist, ob Telnet deaktiviert ist oder ob Kennwörter eine gute Länge haben müssen. Sie können sich über diesen Link eine reine Web-Demo ansehen (weitere Informationen ).

Hier können Sie eine Vorschau der (einzigen) Web-Demo anzeigen .

BastillleLinux

pl1nk
quelle
1
Ich kann dieser Empfehlung nur zustimmen. Für den Betrieb exponierter Hosts (z. B. Webserver) leistet Bastille einen wichtigen Beitrag zur Sicherung des Systems.
Floyd
Dies ähnelt dem SELinux-System, das Sie unter CentOS / Redhat finden, aber ich wette, SELinux ist moderner.
Djangofan
3

Verwenden Sie diese Option nmapauf allen Schnittstellen des Computers, damit Sie wissen, welche Dienste auf Ihrem Computer ausgeführt werden. Dies ist ein wesentliches Werkzeug für die Sicherheit.

Entfernen Sie alle nicht benötigten Dienste von Ihren externen Schnittstellen. Sie können MySQL so konfigurieren, dass nur bestimmte Schnittstellen wie localhost überwacht werden.

Verwenden Sie ufw, um Ihren SSH-Dienst (und mögliche andere) so zu schützen, dass nicht zu viele (fehlgeschlagene) Verbindungen pro Minute von demselben Computer zugelassen werden. Das wird Brute-Force-Angriffe schwerer machen. Die Portnummer zu ändern ist nicht so nützlich, nur Dunkelheit, keine Sicherheit.

Seien Sie bei der Anzahl der Konten auf Ihrem Computer restriktiv. Installieren Sie auch nicht mehr Pakete / Programme, als Sie tatsächlich verwenden. Installieren Sie nur X11-Clients, keinen X11-Server.

Erlaube ssh-login nur mit digitalen Zertifikaten, ohne Passwort. Das macht auch Brute-Force-Angriffe schwer / unmöglich.

Anders
quelle
0

Sicherheit hat immer einen Preis. Das Setzen einiger realistischer Grenzen hilft Ihnen dabei, Ihre Ziele zu erreichen. Ich würde folgende Aspekte berücksichtigen:

  • Gegen was schützen Sie sich (welche Art von Bösewicht, wie hoch ist sein Budget)?
  • Was sind Ihre Angriffsvektoren?

Wenn Sie alle Links überprüfen, die hier gepostet werden, sollte meiner Meinung nach dieser Link hinzugefügt werden. Es wird nicht nur detailliert beschrieben, wie Sie Ihre Software einrichten, sondern auch über den Sicherheitsplan nachdenken. Als Plus wird jeder auszuführende Befehl mit einer Quelle erklärt.

Sicherung eines Ubuntu-Webservers unter Xenial 16.04

Daan
quelle
0

Ich habe vor nicht allzu langer Zeit einen Beitrag darüber verfasst, wie Ubuntu gesichert werden kann. 16.04-18.04. Diese Schritte umfassen:

Ersetzen Sie die Kennwortanmeldung durch autorisierte Schlüssel. Installieren Sie eine Firewall auf Ihrem Linux-Server

und noch einiges mehr. https://hostup.org/blog/how-to-secure-a-ubuntu-linux-server-in-3-simple-steps/

Davh
quelle