Archiv der Kategorie: Linux Howto Tutorials

GNU/Linux Howto’s and Tutorials unblog technical contribution for professionals

FTP-Server Installation mit VSFTPD

FTP-Server Installation mit VSFTPD und Absicherung mit Fail2ban

Very Secure File Transfer Protocol Deamon (VSFTPD), wie uns das gleichnamige Dienstprogramm verspricht, ist VSFTPD ein sicherer FTP-Daemon, dieser als Standard-FTP-Server von den meisten Linux Distributionen verwendet wird, so in Debian, Ubuntu, CentOS, Fedora, RHEL und weiteren mehr. VSFTPD ist ein stabiler FTP-Server dieser unter der GNU General Public License autorisiert ist. VSFTPD wurde entwickelt für eine sichere und einfache Unterstützung virtueller Clients mit PAM (Pluggable Authentication Modules). In diesem Tutorial wird gezeigt, wie man VSFTPD installiert und mit Fail2ban auf Debian 10 (buster) oder anderen Linux Versionen implementiert. Fail2ban ist ein in Python geschriebenes Intrusion Prevention System, das auf jedem Linux Betriebssystem läuft, dieses eine manipulierbare Firewall beinhaltet.

INSTALLATION

Unter Debian und Ubuntu wird VSFTPD mit dem apt Paket Manager aus dem Standard Repository installiert.

Bei CentOS und RHEL wird VSFTPD mit YUM installiert.

Nach der Installation geht’s zur Konfiguration von VSFTPD.

Bei CentOS / RHEL / Fedora ist vsftpd.conf unter /etc/vsftpd.

  Wer nicht mit VIM arbeitet, kann mit nano oder ne editieren.

Wir deaktivieren die anonyme Anmeldung und erlauben lokalen Benutzern zu schreiben.

chroot für FTP Benutzer

chroot steht für change root und ist eine Funktion für Unixoide Systeme, um das Rootverzeichnis zu ändern. chroot wirkt sich nur auf den aktuellen Prozess und seine Child-Prozesse aus, es ist ein einfacher Jail-Mechanismus in dem das FTP-Dienstprogramm verhindert das Benutzer auf Dateien ausserhalb seines Verzeichnisses zugreifen können. chroot bietet auch eine einfache Möglichkeit, nicht vertrauenswürdige Daten in eine Sandbox zu versetzen. Die chroot Einstellungen für VSFTPD Benutzer findet man in der Datei vsftpd.conf bei Zeile chroot_local_user und ändere dort auf YES, so auch bei chroot_list_enable.

Alle Benutzer werden chroot zugeteilt, bis auf einige die befreit sind, dazu wird die Datei /etc/vsftpd.chroot_list erstellt, diese Benutzer enthält, die von chroot ausgeschlossen werden.

  CentOS / RHEL Pfad /etc/vsftpd/vsftpd.chroot_list

Um für bestimmte Benutzer die Anmeldung ganz zu verweigern, fügen wir der Datei vsftpd.conf folgende Zeilen hinzu.

Erstelle eine Datei vsftpd.userlist und füge Benutzer hinzu diese abgeleht werden sollen. Abgelehnt werden sollten die Service Accounts, da diese gerne für Angriffe genutzt werden. Benutzer pro Zeile hinzufügen, Beispiel: vsftpd.userlist

SFTP verschlüsselte Authentifizierung

Damit Passwörter nicht im Klartext gesendet werden, diese Optionen zur Konfigurationsdatei hinzufügen, einige davon sind bereits verhanden, überprüfe diese und ändere ggf. die Optionen.

Anmerkung: Wird der SSH Server auf dem System ausgeführt, muss beachtet werden, das per Standard SFTP durch den SSH Daemon bereits ausgeführt wird, deshalb die Datei /etc/ssh/sshd_config überprüfen.

TIP! Weitere empfohlene VSFTPD Einstellungen

VSFTPD Schutz mit Fail2ban

Um den FTP-Server vor Brute-Force Angriffe zu schützen, wird Fail2ban (Fehlschlag führt zum Bann) für VSFTPD aktiviert. Bei einer definierten Anzahl fehlgeschlagener Anmeldeversuche, wird der verdächtige Host für eine bestimmte Zeit gesperrt. Fail2ban liest die Anmeldeversuche aus den Logdateien. Hierzu wird Fail2ban auf dem FTP-Server installiert.

Für Fail2ban und VSFTPD die Datei jail.local erstellen, falls nicht bereits vorhanden.

  Weiter kann die Datei jail.conf kopiert werden, oder es werden einzelne Blöcke der Services in jail.local hinzugefügt.

Der Fail2ban Filter für VSFTPD enthält die Datei unter /etc/fail2ban/filter.d/vsftpd.conf

  Im Standard wird /var/log/vsftpd.log ausgelesen, was mit der Variable %(vsftpd_log)s vordefiniert ist.

Für die funktionsweise von Fail2ban sind die Logs von bedeutung. Der FTP-Server (VSFTPD) protokolliert in der Logdatei /var/log/vsftpd.log. Fail2ban ist flexibel und kann für die meisten Anforderungen angepasst werden, wird zusätzlich ein weiteres Diensprogramm eingesetzt, dieses xferlog voraussetzt, kann mit dual_log_enable=YES in beide Logdateien protokolliert werden.

Um änderungen von Fail2ban zu übernehmen, muss der Daemon neu gestartet werden.

Die von Fail2ban gesperrten IP Adressen können überprüft werden, hier als root mit folgendem fail2ban-client Kommando.

Verdächtige IP mit Linux Firewall Daemon sperren

Brute-Force Angriffe mit Firewall Daemon blockieren aus Bash Script

Firewall Daemon für den Schutz vor laufenden Brute-Force Attacken, bei der Erkennung versuchter Angriffe auf den Linux Host. Um den Host permanent zu schützen, können verdächte Anfragen von angreifenden Quellen schnell gesperrt werden. Das folgende bash Script sperrt die IP, diese als Argument übergeben wird und von firewall-cmd auf reject gesetzt wird.

Das Script wurde auf Debian 10 (buster) geschrieben, bei Debian muss firewalld erst installiert werden, wie auch unter Ubuntu 20. Bei RHEL und CentOS Linux 7+ und Fedora 30 oder höher ist firewalld im Standard und das Script ist gleich anwendbar.

Firewalld Installation auf Debian

Das firewalld-Paket ist in den offiziellen Debian 10 Repositorys verfügbar. Die Installation ist unschwer wie folgender Ablauf zeigt.

Bereitstellung von Firewalld im Terminal mit Root Privileg.

Wenn ufw aktiviert ist, muss die Uncomplicated Firewall (ufw) zur Verwaltung der Netfilter deaktiviert werden, um firewalld zur Standard-Firewall zu machen.

Den Firewall daemon starten und für den Systemstart aktivieren.

Ausführung und Erreichbarkeit überprüfen.

Laden der neuen Firewall-Regeln unter beibehalten des Status.

Erscheint bei Debian nach firewall-cmd –reload der Fehler:

Error: COMMAND_FAILED: ‚/usr/sbin/ip6tables-restore -w -n‘ failed: ip6tables-restore v1.8.2 (nf_tables:
line 4: RULE_REPLACE failed (no such file ordirectory): rule in chain OUTPUT

Ist die Lösung das Ausführen von update-alternatives, um Debian zu erzwingen, iptables anstelle von nftables zu verwenden.

Nach dem wechsel von nftables zu iptables den Linux Rechner mit reboot neu starten.

Firewalld Konfiguration

Firewalld ist eine Firewall-Verwaltungslösung als Frontend für das vom Linux-Kernel bereitgestellte iptables-Paketfiltersystem. firewall-cmd ist das Dienstprogramm zum Verwalten der Firewall-Konfiguration. Der firewalld Daemon verwaltet Gruppen von Regeln mithilfe von Entitäten, die als „Zonen“ bezeichnet werden. Zonen sind wie Regelsätze, die festlegen, welcher Datenverkehr zugelassen werden soll, anhand des Vertrauen der Netzwerke, mit denen der Computer verbunden ist. Den Netzwerkschnittstellen wird eine Zone zugewiesen, um das Verhalten festzulegen, das die Firewall zulassen soll.

Ein Netzwerk Interface zur Default Zone public zugewiesen, unter Verwendung des firewall-cmd Tools, mit dem Kommand zur Überprüfung von Zonen und den Interfaces.

Erscheint bei interfaces (bei Zeile 6) keine Netzwerk Schnittstelle, muss dieses der Zone noch zugeweisen werden, dazu mit ip oder ifconfig (net-tools) die Schnittstellen abfragen.

Hier bei unserem virtuellen Debian (buster) ist es Link 2 ens33.

Das Interface ens33 wird zur Default Zone public zugewiesen.

Das zur Zone zugewiesene Interface überprüfen mit der Ausgabe.

Das Interface ens33 ist mit der Zone verbunden.

Fail2ban und Firewalld Interaktion

Fail2ban (Fehlschlag führt zum Bann) ist ein in Python entwickeltes IPS und Framework zur Vorbeugung gegen Einbrüche, das auf allen Unixoiden OS läuft, die ein manipulierbares Paketfiltersystem oder eine Firewall besitzen wie iptables oder firewalld unter Linux.

Bei Zeile 13 im Script reject.sh (oben), wird falls vorhanden und ausgeführt, die von Fail2ban verbannten (banned) Adressen nach der manipulation von firewalld, den zuvor aktive Zustand wieder hergestellt. Wird Fail2ban nicht angewandt, können die Zeilen 12 – 14 gelöscht werden.

Script ausführen

Mit Übergabe der Source-IP wird das Script in der bash ausgeführt, um verdächtige Anfragen durch die Firewall abzulehnen.

Die abgelehnte IP-Adresse kann mit folgender Kommandozeile in der Shell wieder entfernt werden.

Die Regel mit firewall-cmd –remove wieder entfernen.

Mit firewall-cmd –reload wird die Änderung aktiviert.

Anwendung und Hilfe zu firewall-cmd

Ausgeben der geänderten und aktivierten Regel der Zone Public.

Aktuelle Firewall Regeln überprüfen mit folgenden Kommandos.

Standardzone für Verbindungen und Schnittstellen ausgeben.

Eine Zone zur Defaultzone festlegen.

Derzeit aktive Zonen ausgeben.

Vordefinierte Zonen ausgeben.

Hilfe und man page von firewall-cmd ausgeben.

Network Time Protocol Linux Installation

Linux Systemzeit Synchronisation mit Network Time Protocol (NTP)

Network Time Protocol – NTP Synchronisation der Systemzeit mit der Atomzeit der NTP-Server. Dieser Beitrag zeigt die NTP-Service Bereitstellung und Konfiguration in der Linux Befehlszeile. Eine korrekte Systemzeit ist für Computersysteme essentiell und schafft überhaupt die Voraussetzung für ein reibungslosen Beitrieb der interagierenden Dienste. Zur Überprüfung und ändern der Systemzeit dienen folgende Befehlszeilentools.

Zur Abfrage der aktuellen Systemzeit mit date und timedatectl:

Der Zeitabgleich auf einem Server wird von einem NTP-Daemon ausgeführt, mit Synchronisation der Systemzeit für eine ordnungsgemässe Funktion der Systeme. Die Atomzeit kann von NTP-Server im Internet synchronisiert werden, wie zum Beispiel Google Public Network Time Protocol (NTP) time.google.com

Die NTP-Daemon Bereitstellung

Der NTP-Daemon auf Debian Linux basiertem System Installieren:

Der NTP-Daemon auf RHEL/CentOS/Fedora System Installieren:

NTP Pool Server pool.ntp.org versucht den nächstgelegenen verfügbaren Server zu finden. Das Projekt NTP-Pool ist ein dynamischer Pool von Zeitservern. Die NTP Pool Server kann man in /etc/ntp.conf editieren.

Bevor der ntpd-Dienst gestartet werden kann, muss die Systemzeit grob (im Bereich weniger Minuten) eingestellt werden. Das kann manuell mit date oder hier mit timedatectl set-time oder über den NTP Pool mit ntpdate pool.ntp.org gemacht werden.

Nach einigen Minuten kann der Status des Dienstes abgerufen werden. Die Ausgabe des Kommandos ntpq -p sollte in etwa wie folgt aussehen.

Der bereitgestellte NTP-Daemon nun ausführen und in systemd für den automatischen start verlinken:

Die systemd-timesyncd Konfiguration

Der Service systemd-timesyncd ist bei vielen Distributionen bereits installliert. Die Konfigurationsdateien steuern die Zeitsynchronisation des NTP-Netzwerks.

Die Network Time Synchronization für den Service systemd-timesyncd beinhaltet die Datei /etc/systemd/timesyncd.conf

Die Konfigurationsdatei timesyncd.conf kann wie folgt sein.

Damit systemd-timesyncd automatisch gestartet wird, aktiviert der Befehl enable den Service entsprechend:

Bei einem systemd-basierten System führt man folgenden Befehl aus, um den Servicestatus zu überprüfen:

Die Ausgabe auf Zeile 7 und 8 bedeutet, dass der Zeitabgleich nicht ausgeführt wird. Mit folgendem Befehl wird die Synchronisation aktiviert:

Der NTP Servicestatus erneut abfragen, nach einigen Sekunden zeigt die Ausgabe System clock synchronized: yes und NTP service: active:

Die Kerberos-Authentifizierung

Die Kerberos-Authentifizierung ist gegenwärtig die Standard-Authentifizierungstechnologie unter Windows, auch Apple macOS, FreeBSD und Linux Systeme nutzen Kerberos-Implementierungen. Bei der Authentifizierung in einer Umgebung mit Kerberos, kommt eine synchrone Systemzeit für interagierende System eine fundamentale Bedeutung zu.

Die Kerberos Authentifizierung verlangt drei Entitäten, für die Ticket-Autorisierung durch eine dritte Partei, dabei darf die Systemzeit eine bestimmte Drift Limite nicht überschreiten, ein Ticket das durch Kerberos erstellt wird, ist nach einer gewissen Zeit abgelaufen, das Ticket wird ungültig.

Kerberos ist auch für Websites und SSO-Implementierungen plattformübergreifend zum Standard geworden. In Active Directory Domain Services (AD DS), ist bei der Integration von NAS und anderen Geräte, für den Zugriff auf Netzwerkressourcen für eine übereinstimmende Systemzeit zu sorgen. Für die Protokollierung wie Syslog ist die präzise Zeit, der Timestamp für die Auswertung der Ereignisse, und bei der Fehler Analyse bedeutend.

Linux Mint 20 Cinnamon: apt install ntp ntpdate