Beveiliging voor FreeBSD verbeteren met IPFW en SSHGuard

VPS-servers worden vaak aangevallen door indringers. Een veelvoorkomend type aanval verschijnt in systeemlogboeken als honderden niet-geautoriseerde SSH-inlogpogingen. Het opzetten van een firewall is erg handig, maar kan op zichzelf niet voldoende verstorende inbraakpogingen beheersen.

Deze tutorial laat zien hoe je een verbeterde inbraakbarrière voor FreeBSD construeert met behulp van twee programma's, de ipfwfirewall en sshguard. SSHGuard is een klein add-on-programma dat systeemlogboeken controleert op "misbruik" -vermeldingen. Wanneer overtreders proberen toegang te krijgen, sshguardgeeft ipfwze de instructie om verkeer te blokkeren dat afkomstig is van het IP-adres van de overtreder. De dader wordt dan effectief buitengesloten.

Als eenmaal is begrepen hoe deze programma's werken, is het beheren van serverbeveiliging vrij eenvoudig. Hoewel deze handleiding is gericht op het configureren van FreeBSD, zijn delen ervan van toepassing op andere besturingssystemen en firewallsoftware.

Stap 1. IPFW configureren

FreeBSD levert 3 firewalls in de standaard ( GENERIC) kernel, ipfw, pf, en ipfilter. Elk heeft voordelen en fans, maar het ipfwis FBSD's eigen firewallsoftware en vrij eenvoudig te gebruiken voor onze doeleinden. Het is vermeldenswaard dat ipfwveel dingen doen zoals de man-pagina laat zien, maar mogelijkheden zoals NAT, traffic shaping, etc. zijn niet nodig voor de typische VPS-situatie. Gelukkig voldoen de basisfuncties van de firewall gemakkelijk aan onze vereisten.

Om de firewall tijdens het opstarten te starten, voegt u het volgende toe aan /etc/rc.conf:

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

De serviceopdracht is beschikbaar om de firewall handmatig te starten / stoppen:

[user@vultr ~]$ sudo service ipfw start

Natuurlijk ipfwzal het niets doen totdat het regels toevoegt, vaak uit een bestand, in dit voorbeeld op /usr/local/etc/IPFW.rules. Het regelbestand kan zich in feite overal bevinden of een naam hebben, zolang het maar overeenkomt met de parameter "firewall_script". Het regelsbestand wordt hieronder in detail beschreven.

Stap 2. Installeer en configureer SSHGuard

sshguardwordt geleverd in verschillende smaken voor gebruik met verschillende firewalls. Gebruik het pkghulpprogramma om op te halen en te installeren sshguard-ipfw:

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

In de meeste gevallen is dat alles wat u hoeft te doen. De juiste variabele wordt automatisch ingevoegd om /etc/rc.confte starten bij het opstarten:

sshguard_enable="YES"

De standaardinstellingen werken normaal gesproken goed. Als er verschillende waarden nodig zijn, geeft de sshguardman-pagina gedetailleerde informatie over de parameters:

# 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"

U kunt beginnen sshguardmet de gebruikelijke serviceaanroep:

[user@vultr ~]$ sudo service sshguard start

Stap 3. Maak een regelscript

Het moeilijkste is het maken van de firewall-regelset. ipfwkan gebruik maken van het meegeleverde /etc/rc.firewallscript, maar het moet worden aangepast aan SSHGuard, evenals verschillende operationele scenario's. Een aantal webpagina's en de FreeBSD-handleiding bevatten nuttige informatie hierover. Het schrijven van een regelsbestand is echter niet zo moeilijk, bovendien kan een aangepaste regelset gemakkelijker te begrijpen en indien nodig te wijzigen zijn.

Een belangrijk kenmerk van ipfwregels is dat de eerste wedstrijd wint, wat betekent dat de volgorde van de regels belangrijk is. In ipfwis elke regel een opdracht en het regelbestand is een uitvoerbaar shell-script. Hierdoor kan de regelset worden gewijzigd door regels te wijzigen en vervolgens het regelbestand uit te voeren als het shell-script dat het is:

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

Over het algemeen definieert een regelbestand een variabele voor de ipfwopdracht, wist vervolgens de huidige regels, geeft algemene regels uit en gaat vervolgens door met het opstellen van "out" -regels, gevolgd door "in" -regels. De ipfw man-pagina en andere bronnen bevatten een schat aan informatie over regelstructuur en opties die op zijn zachtst gezegd talrijk zijn.

Sinds de versie van FreeBSD sshguard is bijgewerkt naar versie 1.6.2, is de methode voor het invoegen van blokkeringsregels voor overtreders veranderd. Nu worden de adressen van de overtreders bewaard in een ipfw-tabel (tabel 22 om specifiek te zijn), in plaats van zoals eerder opgenomen in de regels boven 55000.

Gelukkig is het vrij eenvoudig om het regelbestand in te stellen om de tabel te gebruiken. Het is gewoon een kwestie van de tabelregel op de juiste plaats zetten en ervoor zorgen dat de juiste syntaxis wordt gebruikt bij het schrijven van de regel.

Wanneer sshguardeen dader wordt gevonden, wordt het adres van de dader in de zwarte lijst geplaatst en wordt het adres ook in de ipfwtabel ingevoegd, zodat de toegang wordt geweigerd. Met deze regel worden deze doelen bereikt:

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

Het is in dit geval nog steeds nodig om regels in te stellen die inkomende services boven 01000 toestaan . Laten we bijvoorbeeld zeggen dat adres 10.20.30.40een overtreder is in tabel 22, en we hebben deze ipfw-regel:

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

Aangezien ipfwontmoetingen regel 01000 vóór regel 56420 , 10.20.30.40wordt geblokkeerd . Het zal helemaal niet worden gezien door de regel "allow 22 in". Als de allow-regel een "normaal" nummer had, zoals 00420 , zou het slechte verkeer worden binnengelaten en nooit worden geblokkeerd (omdat 00420 kleiner is dan 01000 en "eerste match wint").

Een leuke functie van de bijgewerkte versie is dat nu wanneer sshguard opstart, alle adressen in de zwarte lijst aan de tabel worden toegevoegd en beschikbaar zijn om inkomende overtreders zonder vertraging te blokkeren. De zwarte lijst is cumulatief en wordt behouden tussen sessies.

Op dit punt is het waarschijnlijk verstandig om een ​​volledige ipfwregelset te tonen die is aangepast voor sshguard. De opmerkingen zouden het vrij eenvoudig moeten maken om de regellogica te volgen:

#!/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

Stap 4. Opstarten en testen

Systeembehoeften variëren en verschillende keuzes van poorten om te blokkeren of deblokkeren worden weerspiegeld in de regelset. Zodra de regelset is voltooid, slaat u het bestand op /usr/local/etc/IPFW.rulesen start u de FBSD-services:

 # service ipfw start
 # service sshguard start

De uitgebreide firewall zou nu moeten werken! Controleer sshguard:

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

Als sshguardwordt uitgevoerd, worden de pid en de volledige opdrachtregel weergegeven:

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

Dit toont de firewall-regelset met statistieken en de laatste keer dat een pakket overeenkwam met de regel:

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

Na uren of dagen worden adressen van overtreders toegevoegd aan de zwarte lijst en ook aan tabel 22. Gebruik deze opdracht om alle adressen in de tabel te bekijken:

ipfw table 22 list

Het resultaat wordt afgedrukt als:

10.10.10.118/32 0
10.10.10.72/32 0
...

Zoals hierboven beschreven, zijn verbindingen vanaf deze adressen niet toegestaan. Natuurlijk zullen er bij het eerste gebruik sshguardgeen adressen in de lijst staan, maar na verloop van tijd kan het behoorlijk lang worden. Een optie is het maken van afzonderlijke blokkeringsregels voor adressen met meerdere vermeldingen in de tabel en deze vervolgens van de zwarte lijst te verwijderen.

Stap 5. Waakzaam blijven ...

Het is een goed idee om af en toe logboeken te controleren om er zeker van te zijn dat inbraken worden gecontroleerd. Over het algemeen /var/log/auth.logen /var/log/securityzijn informatief. Lacunes of fouten in de dekking van netwerkdiensten kunnen duidelijk worden. Het zo nodig aanpassen van de firewall-regelset is een normaal onderdeel van serverbeheer.

In eerdere sshguard-versies /var/db/sshguard/blacklist.dbkon het voorkomen dat het bestand bij het sshguardopstarten van het systeem opstartte toen het groot was geworden . Het verwijderen of hernoemen van het zwarte lijstbestand dat mag sshguardstarten. Dit probleem lijkt te zijn opgelost in de nieuwste sshguard-versie, dus deze oplossing is waarschijnlijk niet langer nodig.

Zorg ervoor dat u het IP-adres op de witte lijst zet waarmee u verbonden bent met de SSH-sessie. Als je jezelf per ongeluk buitensluit, kun je altijd verbinding maken met de noVNC-console op https://my.vultr.com en je IP op de witte lijst zetten.

Samenvattend, met behulp van de combinatie van ipfwen sshguardhelpt uw ​​FreeBSD-systeem veilig te houden en zijn werk te doen. Het minimaliseren van opdringerige netwerkactiviteit heeft een bijkomend voordeel: minder "ruis" maakt het gemakkelijker om de werking van het systeem te volgen en af ​​te stemmen, wat bijdraagt ​​aan een veiligere, beter werkende server.

Het effectief beveiligen van een FreeBSD-systeem / server is niet bijzonder ingewikkeld. Hoewel een bescheiden inspanning vereist is om het aan de gang te krijgen, loont het in aanzienlijk grotere VPS- en projectbeveiliging.


Tags: #BSD #Security

Leave a Comment

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.