Schlagwort-Archive: bash Bourne-again shell

Bash (für Bourne-again shell) ist eine freie Unix-Shell und Teil des GNU-Projekts. Sie ist heute auf vielen unixoiden Systemen die Standard-Shell.

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.

Mails ohne eigenen Mail-Server versenden mit SSMTP

SSMTP Client zum Senden von E-Mails mit SMTP und SMTPS

Unixoide Systeme verwenden in der Regel ein Mail Transfer Agent (MTA) wie Postfix oder Exim für den Versand von E-Mails. Diese vollwertigen MTAs haben einen mächtigen Funktionsumfang, was sich auch in einer komplexen Konfiguration wieder findet.

In Situationen bei diesen ein Linux Host Mails versenden soll, beispielsweise von Cron-Task, dieser im Fall von Fehler den Status per Mail verschicken kann, oder ein Webserver mit einem Ticket oder einem Shop System, dieses mittels PHP Mails versendet. Dafür aber extra ein kompletten MTA mit Postfix oder Exim aufzubauen zu komplex wäre. Auch sind kleine Netzwerke ohne eigenen MTA, ohne gültiges CA-Zertifikat und ohne fixe IP Adresse ohnehin nicht in der lage, Mails direkt versenden zu können, die meisten Mailserver werden den Empfang von diesen Servern ablehnen. Für solche Szenarien ist daher die weiterleitung von Mails an einen SMTP-Smarthost die probate Lösung, diesen Prozess kann das Tool ssmtp übernehmen.

sSMTP Mail Submission STARTTLS

ssmtp ist kein vollwertiger MTA (Mail-Transfer-Agent) wie Postfix oder Exim, viel mehr ist es ein einfaches Tool das E-Mails zu einem autorisierten MTA Smarthost weiterleitet. ssmtp unterstützt die Mail Submission Authentifizierung und STARTTLS. Dabei installiert man ssmtp hier auf CentOS als root wie folgt:

Die Installation auf einer Debian basierten Distribution ist:

Mails über Office 365 aus CLI versenden

Nach der Installation gibt es die zwei Konfigurationsdateien /etc/ssmtp/ssmtp.conf und /etc/ssmtp/revaliases, diese an die eigene Anforderung angepasst werden. Hier wird die Konfiguration erstellt, um E-Mails über ein Office 365 Konto zu verschicken.

  Anstelle des Platzhalter shop@domain.com wird der entsprechende Benutzer verwendet dieser bei Office 365 erstellt wurde, bei password ist das zum Benutzer gehörende Passwort einzutragen, bei domain.com kann die eigene Domain oder outlook.com eingetragen werden. Natürlich funktioniert es auch mit anderen Anbieter, wie Goolge Mail (smtp.gmail.com). Dabei soll nicht unerwähnt sein, das der Zugriff auf das Google-Konto Zugriff durch weniger sichere Apps aktiviert sein muss.

Nun legt man fest welche User den Mailserver nutzen dürfen. Dies wird über die Datei revaliases festgelegt, reverse aliases ist die umgekehrte Version von aliases, dazu editiert man /etc/ssmtp/revaliases.

Es darf root und der User john direkt vom Host senden.

Anschliessend wird eine Datei mit Parameter für ssmtp im richtigen Format erstellt, im Editor deiner wahl durch  Copy Past die nachstehenden Zeilen einfügen, inklusive Punkt am Ende:

  Anstelle To:touser@domain.net die eigentliche Empfänger Email eintragen, und bei From:shop@domain.com die korrekte Absender Email. Sollen weitere Empfänger erreicht werden, können dazu einfach weitere Zeilen To: mit den gewünschten Adressen eingetragen werden.

Jetzt wird getestet, wir senden mit folgendem Command.

Es wird als der angemeldete Benutzer gesendet, ist john eingeloggt kann dieser Mails versenden weil er in revaliases eingetragen ist.

Die verbose Ausgabe in der Console dann etwa wie folgt:

Im maillog sollte die ausgabe etwa wie diese zu finden sein.

Damit nun auch beim Empfänger anstatt root, die eigentliche Absenderadresse erscheint, kann /etc/passwd angepasst werden.

Hier kann das Finger Command chfn angewendet werden.

Der mit Finger chfn geänderte full name in passwd weist danach folgenden Inhalt aus:

Sollen E-Mail nur als root versendet werden, kann auf diese Konfiguration verzichtet werden, dabei wird über ssmtp.conf ermöglicht das eine Absenderadresse übergeben werden kann.

Zu guter Letzt wollen natürlich nicht nur Testmails versendet werden. Für den produktiven Einsatz könnte beispielsweise mit PHP oder einem Shell Script eine Parameterdatei für ssmtp erzeugt werden, diese dann automatisiert die gewünschten Informationen dynamisch bereitstellt. Eine E-Mail versenden mit ssmtp kann auch mit dem folgenden Einzieler ausgeführt werden.

Windows Terminal Profiles.json

Das Windows Terminal

Windows-Terminal ist eine neue, moderne leistungsstarke und produktive Terminalanwendung für Befehlszeilentools wie Command Prompt, PowerShell und das Windows-Subsystem für Linux (WSL) sowie Git-Bash. Zu den Hauptfunktionen gehören, Terminal Ausführung in Taps, Unicode- und UTF-8 Zeichenunterstützung, eine GPU-Accelerated Text Rendering-Engine, sowie die Möglichkeit für benutzerdefinierte Themen und Stiles zu Konfigurieren.

Profile für eine Vielzahl von Befehlszeilenanwendungen

Alle Anwendung, die über eine Befehlszeilenschnittstelle verfügen, können in Windows Terminal ausgeführt werden. Dies umfasst alles von PowerShell und der Eingabeaufforderung und Git-Bash bis hin zu Azure Cloud Shell und beliebigen WSL-Distributionen wie Ubuntu.

Angepasste Schemas Konfigurationen

Es können Windows Terminal so konfiguriert werden, dass es über eine Vielzahl von Farbschemas und Einstellungen verfügt.

Die Konfiguration wird mittels JSON in der Konfigurationsdatei profiles.json gespeichert. Hier ein Beispiel mit Profile für PowerShell, Command Prompt, Git-Bash und das Windows Linux Subsystem (WSL).

  Mit der Option copyOnSelect true, werden markierte Texte in die Zwischenablage kopiert, wie es in Linux Bash oder von PuTTY bekannt ist.

Die Datei profiles.json befindet sich in folgendem Pfad:

Windows Explorer

Windows Terminal Settings

Windows Terminal Settings öffnen über die Pfeilspitze nach unten, oder über den Tastatur Hotkey Ctrl+,

Windows Terminal Settings

  Ein Windows-Terminal referenziert über die GUID (Globally Unique Identifier) in seiner Sektion (guid) in profiles.json, wer eine neue GUID erzeugen möchte, kann folgendes Command in der PowerShell ausführen.

Git for Windows Arbeitsumgebung gibt es im Download

Git Icons werden in den LocalState Ordner gespeichert.

Windows Terminal Splitting

Windows Terminal erlaubt das splitting der Terminal Fenster mit Ctrl+- Horizontal, mit Crtl+. in Vertikaler Aufteilung der Fenster.

Windows Terminal Split Horizontal Ctrl+- / Split Vertikal Ctrl+

Windows Terminal OpenSSH

Secure Shell zu einem Remote Host aus dem Windows Terminal wird emöglicht, wenn unter Windows 10, Apps & Features – Optionale Features, das Paket OpenSSH Client installiert wurde.

In der Zeile commandLine wird SSH zu einem Host aufgerufen, in einer Profile Sektion in der Datei profiles.json:

Dabei muss die Authentifizierung mittels SSH-Key angewandt werden, der mit ssh-keygen erzeugte Public Key befindet sich hier auf dem Host fedora.foo.bar unter User home neutrino ~/.ssh/authorized_keys.

Die SSH-Konfigurationsdatei hierfür auf dem lokalen Host hat folgenden Inhalt in ~/.ssh/config

  IdentityFile ist der in Datei ~/.ssh/hostkey beinhaltete Privatkey dieser mit ssh-keygen generiert wurde.

„commandline“ : „ssh.exe fedora“