Verbessern der Sicherheit für FreeBSD mithilfe von IPFW und SSHGuard

VPS-Server werden häufig von Eindringlingen angegriffen. Eine häufige Art von Angriff wird in Systemprotokollen als Hunderte von nicht autorisierten SSH-Anmeldeversuchen angezeigt. Das Einrichten einer Firewall ist sehr nützlich, kann jedoch störende Eindringversuche an sich möglicherweise nicht angemessen steuern.

Dieses Tutorial zeigt, wie Sie mit zwei Programmen, der Firewall und, eine erweiterte Intrusion Barriere für FreeBSD ipfwerstellen sshguard. SSHGuard ist ein kleines Zusatzprogramm, das Systemprotokolle auf "missbräuchliche" Einträge überwacht. Wenn Täter versuchen, Zugriff zu erhalten, werden sie sshguardangewiesen ipfw, den Datenverkehr zu blockieren, der von der IP-Adresse des Täters stammt. Der Täter wird dann effektiv ausgeschlossen.

Sobald Sie wissen, wie diese Programme funktionieren, ist die Verwaltung des Serverschutzes ziemlich einfach. Obwohl sich dieses Handbuch auf die Konfiguration von FreeBSD konzentriert, gelten Teile davon für andere Betriebssysteme und Firewall-Software.

Schritt 1. IPFW konfigurieren

FreeBSD stellt 3 Firewalls in seinem Standard ( GENERIC) kernel, ipfw, pf, und ipfilter. Jedes hat Vorteile und Fans, ist jedoch ipfwdie native Firewall-Software von FBSD und für unsere Zwecke recht einfach zu verwenden. Es ist erwähnenswert, dass ipfwviele Dinge ausgeführt werden, wie die Manpage zeigt, jedoch werden Funktionen wie NAT, Traffic Shaping usw. für die typische VPS-Situation nicht benötigt. Glücklicherweise erfüllen die Grundfunktionen der Firewall problemlos unsere Anforderungen.

Fügen Sie Folgendes hinzu, um die Firewall beim Start zu starten /etc/rc.conf:

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

Der serviceBefehl steht zum manuellen Starten / Stoppen der Firewall zur Verfügung:

[user@vultr ~]$ sudo service ipfw start

Natürlich ipfwwird nichts getan, bis Regeln hinzugefügt werden, oft aus einer Datei, in diesem Beispiel unter /usr/local/etc/IPFW.rules. Die Regeldatei kann sich tatsächlich an einer beliebigen Stelle befinden oder einen beliebigen Namen haben, sofern sie mit dem Parameter "firewall_script" übereinstimmt. Die Regeldatei wird unten ausführlich beschrieben.

Schritt 2. Installieren und konfigurieren Sie SSHGuard

sshguardEs gibt verschiedene Geschmacksrichtungen zur Verwendung mit verschiedenen Firewalls. Verwenden Sie das pkgDienstprogramm zum Abrufen und Installieren von sshguard-ipfw:

[user@vultr ~]$ sudo pkg install sshguard-ipfw

In den meisten Fällen ist das alles, was man tun muss. Die entsprechende Variable wird automatisch eingefügt, /etc/rc.confum beim Booten zu starten:

sshguard_enable="YES"

Die Standardeinstellungen funktionieren normalerweise gut. Wenn unterschiedliche Werte erforderlich sind, enthält die sshguardManpage detaillierte Informationen zu den Parametern:

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

Sie können sshguardmit dem üblichen serviceAufruf beginnen:

[user@vultr ~]$ sudo service sshguard start

Schritt 3. Erstellen Sie ein Regelskript

Am schwierigsten ist es, den Firewall-Regelsatz zu erstellen. ipfwkann das bereitgestellte /etc/rc.firewallSkript verwenden, muss jedoch geändert werden, um SSHGuard sowie verschiedene Betriebsszenarien zu berücksichtigen. Eine Reihe von Webseiten und das FreeBSD-Handbuch enthalten nützliche Informationen dazu. Das Schreiben einer Regeldatei ist jedoch nicht so schwierig. Außerdem kann ein benutzerdefinierter Regelsatz bei Bedarf einfacher zu verstehen und zu ändern sein.

Ein wichtiges Merkmal von ipfwRegeln ist, dass das erste Spiel gewinnt, was bedeutet, dass die Reihenfolge der Regeln wichtig ist. In ipfwist jede Regel ein Befehl, und die Regeldatei ist ein ausführbares Shell-Skript. Dadurch kann der Regelsatz geändert werden, indem Regeln geändert und dann die Regeldatei als Shell-Skript ausgeführt wird:

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

Im Allgemeinen definiert eine Regeldatei eine Variable für den ipfwBefehl, löscht dann die aktuellen Regeln, gibt generische Regeln aus und fährt dann mit dem Festlegen von "out" -Regeln fort, gefolgt von "in" -Regeln. Die ipfw-Handbuchseite und andere Ressourcen enthalten eine Fülle von Informationen über Regelstrukturen und Optionen, die gelinde gesagt zahlreich sind.

Seit die FreeBSD sshguard-Version auf Version 1.6.2 aktualisiert wurde, hat sich die Methode zum Einfügen von Sperrregeln für Täter geändert. Jetzt werden die Adressen der Täter in einer ipfw-Tabelle (genauer gesagt in Tabelle 22) gespeichert und nicht wie zuvor in die Regeln über 55000 eingefügt.

Glücklicherweise ist es ziemlich einfach, die Regeldatei für die Verwendung der Tabelle einzurichten. Es geht nur darum, die Tabellenregel an der richtigen Stelle zu platzieren und sicherzustellen, dass beim Schreiben der Regel die richtige Syntax verwendet wird.

Wenn sshguardein Täter gefunden wird, wird die Adresse des Täters in seine schwarze Liste aufgenommen und die Adresse in die ipfwTabelle eingefügt, sodass der Zugriff verweigert wird. Diese Regel erfüllt folgende Zwecke:

01000 deny ip from table\(22\) to any

In diesem Fall müssen weiterhin Regeln festgelegt werden, die eingehende Dienste über 01000 zulassen. Angenommen, die Adresse 10.20.30.40ist ein Täter in Tabelle 22, und wir haben diese ipfw-Regel:

56420 allow tcp from any to me dst-port 22 in via $vif

Da ipfwBegegnungen Regel 01000 vor Regel 56420 , 10.20.30.40ist gesperrt . Es wird von der "Zulassen 22 in" -Regel überhaupt nicht gesehen. Wenn die Zulassungsregel eine "reguläre" Nummer wie 00420 hätte , würde der schlechte Verkehr eingelassen und niemals blockiert (da 00420 kleiner als 01000 ist und "das erste Spiel gewinnt").

Ein nettes Feature der aktualisierten Version ist, dass jetzt beim Start von sshguard alle Adressen in der Blacklist zur Tabelle hinzugefügt werden und verfügbar sind, um eingehende Täter unverzüglich zu blockieren. Die schwarze Liste ist kumulativ und wird zwischen den Sitzungen beibehalten.

An dieser Stelle ist es wahrscheinlich sinnvoll, einen vollständigen ipfwRegelsatz anzuzeigen, der für geändert wurde sshguard. Die Kommentare sollten es ziemlich einfach machen, der Regellogik zu folgen:

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

Schritt 4. Starten und Testen

Die Systemanforderungen variieren und unterschiedliche Auswahlmöglichkeiten zum Blockieren oder Entsperren von Ports spiegeln sich im Regelsatz wider. Speichern Sie nach Abschluss des Regelsatzes die Datei in /usr/local/etc/IPFW.rulesund starten Sie die FBSD-Dienste:

 # service ipfw start
 # service sshguard start

Die erweiterte Firewall sollte jetzt ausgeführt werden! Überprüfen Sie sshguard:

 [user@vultr ~]$ sudo pgrep -lfa ssh

Wenn ausgeführt sshguardwird, werden die PID und die vollständige Befehlszeile angezeigt:

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

Dies zeigt den Firewall-Regelsatz mit Statistiken und das letzte Mal, wenn ein Paket mit der Regel übereinstimmt:

 [user@vultr ~]$ sudo ipfw -cat list

Nach Stunden oder Tagen werden Adressen von Tätern zur Blacklist und auch zu Tabelle 22 hinzugefügt. Verwenden Sie diesen Befehl, um alle Adressen in der Tabelle anzuzeigen:

ipfw table 22 list

Das Ergebnis wird gedruckt als:

10.10.10.118/32 0
10.10.10.72/32 0
...

Wie oben beschrieben, sind Verbindungen von diesen Adressen nicht zulässig. Natürlich gibt es beim ersten Start sshguardkeine Adressen in der Liste, aber mit der Zeit kann es ziemlich lang werden. Eine Möglichkeit besteht darin, separate Sperrregeln für Adressen mit mehreren Einträgen in der Tabelle zu erstellen und diese dann von der Blacklist zu löschen.

Schritt 5. Wachsam bleiben ...

Es ist eine gute Idee, gelegentlich Protokolle zu überprüfen, um sicherzustellen, dass das Eindringen kontrolliert wird. Im Allgemeinen /var/log/auth.logund /var/log/securitysind informativ. Es können Lücken oder Fehler bei der Abdeckung von Netzwerkdiensten auftreten. Das Ändern des Firewall-Regelsatzes nach Bedarf ist ein normaler Bestandteil der Serververwaltung.

In früheren sshguard-Versionen konnte die /var/db/sshguard/blacklist.dbDatei beim sshguardStarten des Systems möglicherweise nicht gestartet werden, wenn sie groß geworden war . Entfernen oder Umbenennen der Blacklist-Datei sshguard, die gestartet werden darf . Dieses Problem scheint in der neuesten sshguard-Version behoben zu sein, sodass diese Problemumgehung wahrscheinlich nicht mehr erforderlich ist.

Stellen Sie sicher, dass Sie die IP-Adresse, von der aus Sie mit der SSH-Sitzung verbunden sind, auf die Whitelist setzen. Wenn Sie sich versehentlich aussperren, können Sie jederzeit eine Verbindung zur noVNC-Konsole unter https://my.vultr.com herstellen und Ihre IP-Adresse auf die Whitelist setzen.

Zusammenfassend lässt sich sagen, dass die Kombination aus ipfwund dazu sshguardbeiträgt, Ihr FreeBSD-System sicher zu halten und seine Arbeit zu erledigen. Das Minimieren aufdringlicher Netzwerkaktivitäten hat einen zusätzlichen Vorteil: Weniger "Rauschen" erleichtert das Verfolgen und Optimieren des Systembetriebs und trägt zu einem sichereren und besser laufenden Server bei.

Der effektive Schutz eines FreeBSD-Systems / Servers ist nicht besonders kompliziert. Während ein bescheidener Aufwand erforderlich ist, um es in Betrieb zu nehmen, zahlt es sich in einer wesentlich höheren VPS- und Projektsicherheit aus.


Tags: #BSD #Security

Leave a Comment

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist

ReactOS: Ist das die Zukunft von Windows?

ReactOS: Ist das die Zukunft von Windows?

ReactOS, ein quelloffenes und kostenloses Betriebssystem, ist hier mit der neuesten Version. Kann es den Anforderungen moderner Windows-Benutzer genügen und Microsoft zu Fall bringen? Lassen Sie uns mehr über dieses alte, aber neuere Betriebssystem erfahren.

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Whatsapp hat endlich die Desktop-App für Mac- und Windows-Benutzer auf den Markt gebracht. Jetzt können Sie ganz einfach von Windows oder Mac auf WhatsApp zugreifen. Verfügbar für Windows 8+ und Mac OS 10.9+

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Lesen Sie dies, um zu erfahren, wie Künstliche Intelligenz bei kleinen Unternehmen beliebt wird und wie sie die Wahrscheinlichkeit erhöht, sie wachsen zu lassen und ihren Konkurrenten einen Vorsprung zu verschaffen.

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

Vor kurzem hat Apple macOS Catalina 10.15.4 als Ergänzungsupdate veröffentlicht, um Probleme zu beheben, aber es scheint, dass das Update mehr Probleme verursacht, die zum Bricking von Mac-Computern führen. Lesen Sie diesen Artikel, um mehr zu erfahren

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Unser Computer speichert alle Daten in einer organisierten Weise, die als Journaling-Dateisystem bekannt ist. Es ist eine effiziente Methode, die es dem Computer ermöglicht, Dateien zu suchen und anzuzeigen, sobald Sie auf die Suche klicken.https://wethegeek.com/?p=94116&preview=true

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Da sich die Wissenschaft schnell weiterentwickelt und einen Großteil unserer Bemühungen übernimmt, steigt auch das Risiko, uns einer unerklärlichen Singularität auszusetzen. Lesen Sie, was Singularität für uns bedeuten könnte.

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

KI im Gesundheitswesen hat in den letzten Jahrzehnten große Fortschritte gemacht. Somit wächst die Zukunft der KI im Gesundheitswesen immer noch von Tag zu Tag.