Vylepšení zabezpečení pro FreeBSD pomocí IPFW a SSHGuard

Vylepšení zabezpečení pro FreeBSD pomocí IPFW a SSHGuard

VPS servery jsou často cílem útočníků. Běžný typ útoku se objevuje v systémových protokolech jako stovky neoprávněných pokusů o přihlášení přes ssh. Nastavení firewallu je velmi užitečné, ale samo o sobě nemusí dostatečně kontrolovat rušivé pokusy o narušení.

Tento tutoriál ukazuje, jak vytvořit vylepšenou bariéru proti vniknutí pro FreeBSD pomocí dvou programů, ipfwfirewallu a sshguard. SSHGuard je malý doplňkový program, který monitoruje systémové protokoly, zda neobsahují „zneužívající“ záznamy. Když se pachatelé pokusí získat přístup, sshguardvydá pokyn ipfwk blokování provozu pocházejícího z adresy IP pachatele. Pachatel je pak účinně vyloučen.

Jakmile pochopíte, jak tyto programy fungují, je správa ochrany serveru docela jednoduchá. Přestože je tato příručka zaměřena na konfiguraci FreeBSD, její části se vztahují na další OS a software brány firewall.

Krok 1. Konfigurace IPFW

FreeBSD poskytuje 3 firewally ve svém výchozím ( GENERIC) jádru ipfw, pf, a ipfilter. Každý z nich má své výhody a fanoušky, ale ipfwjedná se o nativní firewallový software FBSD, který lze pro naše účely použít docela jednoduše. Stojí za zmínku, že ipfwdělá mnoho věcí, jak ukazuje jeho manuálová stránka, nicméně schopnosti jako NAT, traffic shaping atd. nejsou pro typickou situaci VPS potřeba. Naštěstí základní funkce firewallu snadno splňují naše požadavky.

Chcete-li spustit bránu firewall při spouštění, přidejte do /etc/rc.conf:

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

servicePříkaz je k dispozici pro start / ručně zastavit firewall:

[user@vultr ~]$ sudo service ipfw start

Přirozeně ipfwneprovede nic, dokud nepřidá pravidla, často ze souboru, v tomto příkladu umístěném na adrese /usr/local/etc/IPFW.rules. Soubor pravidel může být ve skutečnosti umístěn kdekoli nebo mít jakýkoli název, pokud se shoduje s parametrem "firewall_script". Soubor pravidel je podrobně popsán níže.

Krok 2. Nainstalujte a nakonfigurujte SSHGuard

sshguardpřichází v několika variantách pro použití s ​​různými firewally. Použijte pkgnástroj k načtení a instalaci sshguard-ipfw:

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

Ve většině případů je to vše, co člověk musí udělat. Příslušná proměnná se automaticky vloží do /etc/rc.confpro spuštění při startu:

sshguard_enable="YES"

Výchozí nastavení normálně funguje dobře. Pokud jsou nutné různé hodnoty, sshguardmanuálová stránka poskytuje podrobné informace o parametrech:

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

Můžete začít sshguardběžným servicevyvoláním:

[user@vultr ~]$ sudo service sshguard start

Krok 3. Vytvořte skript pravidel

Nejtěžší částí je vytvoření sady pravidel brány firewall. ipfwmůže použít poskytnutý /etc/rc.firewallskript, ale musí být upraven tak, aby vyhovoval SSHGuard a také různým provozním scénářům. Užitečné informace o tom má řada webových stránek a příručka FreeBSD . Psaní souboru pravidel však není tak těžké, kromě toho může být vlastní sada pravidel snazší pochopit a v případě potřeby ji změnit.

Důležitým rysem ipfwpravidel je, že první zápas vyhrává, což znamená, že pořadí pravidel je důležité. V ipfw, každé pravidlo je příkaz a soubor pravidla je spustitelný shell skript. To umožňuje změnit sadu pravidel změnou pravidel a poté spuštěním souboru pravidel jako skriptu shellu:

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

Obecně platí, že soubor pravidel definuje proměnnou pro ipfwpříkaz, poté vymaže aktuální pravidla, vydá obecná pravidla a poté přistoupí k nastavení pravidel „out“ následovaných pravidly „in“. Manuální stránka ipfw a další zdroje obsahují množství informací o struktuře pravidel a možnostech, kterých je přinejmenším mnoho.

Od té doby, co byla verze FreeBSD sshguard aktualizována na verzi 1.6.2, se změnil způsob vkládání blokovacích pravidel pro pachatele. Nyní jsou adresy pachatelů uchovávány v tabulce ipfw (konkrétní tabulka 22), spíše než vkládání do pravidel nad 55 000 jako dříve.

Naštěstí je docela jednoduché nastavit soubor pravidel pro použití tabulky. Jde jen o to umístit pravidlo tabulky na správné místo a ujistit se, že při psaní pravidla používáte správnou syntaxi.

Když sshguardnajde pachatele, umístí adresu pachatele na svou černou listinu a také vloží adresu do ipfwtabulky, takže "spustí" odepření přístupu. Toto pravidlo splní tyto účely:

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

V tomto případě je stále nutné nastavit pravidla umožňující příchozí služby nad 01000. Řekněme například, že adresa 10.20.30.40je pachatelem v tabulce 22 a máme toto pravidlo ipfw:

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

Protože ipfwnarazí na pravidlo 01000 před pravidlem 56420 , 10.20.30.40je blokován . Pravidlo „povolit 22 v“ to vůbec neuvidí. Pokud by pravidlo povolení mělo "běžné" číslo jako 00420 , špatný provoz by byl vpuštěn a nikdy by nebyl zablokován (protože 00420 je menší než 01000 a "první zápas vyhrává").

Příjemnou vlastností aktualizované verze je, že nyní, když se sshguard spustí, jsou všechny adresy na černé listině přidány do tabulky a jsou k dispozici pro okamžité zablokování příchozích pachatelů. Černá listina je kumulativní a uchovává se mezi relacemi.

V tuto chvíli je pravděpodobně rozumné ukázat kompletní ipfwsadu pravidel upravenou pro sshguard. Komentáře by měly usnadnit dodržování logiky pravidla:

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

Krok 4. Spuštění a testování

Potřeby systému se liší a v sadě pravidel se odrážejí různé možnosti blokování nebo odblokování portů. Jakmile je /usr/local/etc/IPFW.rulessada pravidel hotová, uložte soubor do a spusťte služby FBSD:

 # service ipfw start
 # service sshguard start

Rozšířený firewall by nyní měl být spuštěn! Zkontrolujte sshguard:

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

Pokud sshguardje spuštěn, zobrazí se jeho pid a celý příkazový řádek:

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

Zde je zobrazena sada pravidel brány firewall se statistikami a poslední dobou, kdy paket odpovídal pravidlu:

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

Po hodinách nebo dnech jsou adresy pachatelů přidány na černou listinu a také do tabulky 22. Chcete-li zobrazit všechny adresy v tabulce, použijte tento příkaz:

ipfw table 22 list

Výsledek se vytiskne takto:

10.10.10.118/32 0
10.10.10.72/32 0
...

Jak je popsáno výše, připojení z těchto adres jsou zakázána. Samozřejmě, že při prvním spuštění sshguardnebudou v seznamu žádné adresy, ale časem se může prodloužit. Jednou z možností je vytvoření samostatných pravidel blokování pro adresy s více položkami v tabulce a jejich odstranění z černé listiny.

Krok 5. Buďte ostražití...

Je dobré občas zkontrolovat protokoly, abyste se ujistili, že narušení jsou pod kontrolou. Obecně /var/log/auth.loga /var/log/securityjsou informativní. Mohou se objevit mezery nebo chyby v pokrytí síťových služeb. Úprava sady pravidel brány firewall podle potřeby je běžnou součástí správy serveru.

V předchozích verzích sshguard, když se /var/db/sshguard/blacklist.dbsoubor zvětšil, mohl zabránit sshguardspuštění při spouštění systému. Odstranění nebo přejmenování souboru černé listiny povoleno sshguardspustit. Zdá se, že tento problém je vyřešen v nejnovější verzi sshguard, takže toto řešení pravděpodobně již není nutné.

Ujistěte se, že jste uvedli na seznam povolených IP adresu, ze které jste připojeni k relaci SSH. Pokud se omylem uzamknete, můžete se kdykoli připojit ke konzole noVNC na https://my.vultr.com a přidat svou IP na seznam povolených.

Sečteno a podtrženo, použití kombinace ipfwa sshguardpomáhá udržet váš systém FreeBSD bezpečný a dělat svou práci. Minimalizace rušivé síťové aktivity má další výhodu: méně „šumu“ usnadňuje sledování a ladění provozu systému, což přispívá k bezpečnějšímu a lépe fungujícímu serveru.

Účinná ochrana systému/serveru FreeBSD není nijak zvlášť složitá. I když je pro jeho zprovoznění potřeba mírné úsilí, vyplatí se v podstatně větším zabezpečení VPS a projektu.


Jak nainstalovat Tiny Tiny RSS Reader na FreeBSD 11 FAMP VPS

Jak nainstalovat Tiny Tiny RSS Reader na FreeBSD 11 FAMP VPS

Používáte jiný systém? Tiny Tiny RSS Reader je bezplatný a otevřený zdroj s vlastním hostitelem webového zdroje zpráv (RSS/Atom) a agregátorem určeným pro

Jak nainstalovat Wiki.js na FreeBSD 11

Jak nainstalovat Wiki.js na FreeBSD 11

Používáte jiný systém? Wiki.js je bezplatná a open source, moderní wiki aplikace postavená na Node.js, MongoDB, Git a Markdown. Zdrojový kód Wiki.js je veřejný

Jak nainstalovat Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Jak nainstalovat Pagekit 1.0 CMS na FreeBSD 11 FAMP VPS

Používáte jiný systém? Pagekit 1.0 CMS je krásný, modulární, rozšiřitelný a lehký, bezplatný a open source systém správy obsahu (CMS) s

Jak nainstalovat MODX Revolution na FreeBSD 11 FAMP VPS

Jak nainstalovat MODX Revolution na FreeBSD 11 FAMP VPS

Používáte jiný systém? MODX Revolution je rychlý, flexibilní, škálovatelný, open source podnikový systém správy obsahu (CMS) napsaný v PHP. To i

Nastavení OpenBSD 5.5 64-bit

Nastavení OpenBSD 5.5 64-bit

Tento článek vás provede nastavením OpenBSD 5.5 (64-bit) na KVM pomocí Vultr VPS. Krok 1. Přihlaste se do ovládacího panelu Vultr. Krok 2. Klikněte na DEPLOY

Jak nainstalovat osTicket na FreeBSD 12

Jak nainstalovat osTicket na FreeBSD 12

Používáte jiný systém? osTicket je open-source systém pro podporu zákazníků. Zdrojový kód osTicket je veřejně hostován na Github. V tomto tutoriálu

Jak nainstalovat Flarum Forum na FreeBSD 12

Jak nainstalovat Flarum Forum na FreeBSD 12

Používáte jiný systém? Flarum je bezplatný a open source software fóra nové generace, díky kterému je online diskuze zábavná. Zdrojový kód Flarum je hostován o

Jak povolit TLS 1.3 v Nginx na FreeBSD 12

Jak povolit TLS 1.3 v Nginx na FreeBSD 12

Používáte jiný systém? TLS 1.3 je verze protokolu Transport Layer Security (TLS), který byl publikován v roce 2018 jako navrhovaný standard v RFC 8446.

Nainstalujte WordPress na OpenBSD 6.2

Nainstalujte WordPress na OpenBSD 6.2

Úvod WordPress je dominantním redakčním systémem na internetu. Pohání vše od blogů po složité webové stránky s dynamickým obsahem

Jak nainstalovat Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Jak nainstalovat Subrion 4.1 CMS na FreeBSD 11 FAMP VPS

Používáte jiný systém? Subrion 4.1 CMS je výkonný a flexibilní open source systém správy obsahu (CMS), který přináší intuitivní a jasný obsah

Jak nakonfigurovat DJBDNS na FreeBSD

Jak nakonfigurovat DJBDNS na FreeBSD

Tento tutoriál vám ukáže, jak nakonfigurovat službu DNS, která se snadno udržuje, snadno konfiguruje a je obecně bezpečnější než klasický BIN.

Jak nainstalovat zásobník Nginx, MySQL a PHP (FEMP) na FreeBSD 12.0

Jak nainstalovat zásobník Nginx, MySQL a PHP (FEMP) na FreeBSD 12.0

Zásobník FEMP, který je srovnatelný se zásobníkem LEMP na Linuxu, je kolekce softwaru s otevřeným zdrojovým kódem, který se obvykle instaluje společně, aby umožnil FreeBS.

Instalace MongoDB na FreeBSD 10

Instalace MongoDB na FreeBSD 10

MongoDB je prvotřídní NoSQL databáze, která se často používá v novějších webových aplikacích. Poskytuje vysoce výkonné dotazy, sdílení a replikaci

Jak nainstalovat Monicu na FreeBSD 12

Jak nainstalovat Monicu na FreeBSD 12

Používáte jiný systém? Monica je open source systém pro řízení osobních vztahů. Představte si to jako CRM (oblíbený nástroj používaný prodejními týmy v tis

OpenBSD jako řešení elektronického obchodu s PrestaShop a Apache

OpenBSD jako řešení elektronického obchodu s PrestaShop a Apache

Úvod Tento tutoriál ukazuje OpenBSD jako řešení pro e-commerce využívající PrestaShop a Apache. Apache je vyžadován, protože PrestaShop má složité UR

Instalace Fork CMS na FreeBSD 12

Instalace Fork CMS na FreeBSD 12

Používáte jiný systém? Fork je open source CMS napsaný v PHP. Zdrojový kód Forks je hostován na GitHubu. Tato příručka vám ukáže, jak nainstalovat Fork CM

Jak nainstalovat Directus 6.4 CMS na FreeBSD 11 FAMP VPS

Jak nainstalovat Directus 6.4 CMS na FreeBSD 11 FAMP VPS

Používáte jiný systém? Directus 6.4 CMS je výkonný a flexibilní, bezplatný a open source systém pro správu obsahu bez hlavy (CMS), který poskytuje vývojářům

Vylepšení zabezpečení pro FreeBSD pomocí IPFW a SSHGuard

Vylepšení zabezpečení pro FreeBSD pomocí IPFW a SSHGuard

VPS servery jsou často cílem útočníků. Běžný typ útoku se objevuje v systémových protokolech jako stovky neoprávněných pokusů o přihlášení přes ssh. Nastavení

Nastavení httpd v OpenBSD

Nastavení httpd v OpenBSD

Úvod OpenBSD 5.6 představilo nového démona s názvem httpd, který podporuje CGI (přes FastCGI) a TLS. K instalaci nového http není potřeba žádná další práce

Nastavte iRedMail na FreeBSD 10

Nastavte iRedMail na FreeBSD 10

Tento tutoriál vám ukáže, jak nainstalovat groupwarový iRedMail na čerstvou instalaci FreeBSD 10. Měli byste použít server s alespoň jedním gigabajtem o

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Umělá inteligence není v budoucnosti, je zde přímo v současnosti V tomto blogu si přečtěte, jak aplikace umělé inteligence ovlivnily různé sektory.

Útoky DDOS: Stručný přehled

Útoky DDOS: Stručný přehled

Jste také obětí DDOS útoků a nemáte jasno v metodách prevence? Chcete-li vyřešit své dotazy, přečtěte si tento článek.

Přemýšleli jste někdy, jak hackeři vydělávají peníze?

Přemýšleli jste někdy, jak hackeři vydělávají peníze?

Možná jste slyšeli, že hackeři vydělávají spoustu peněz, ale napadlo vás někdy, jak takové peníze vydělávají? Pojďme diskutovat.

Revoluční vynálezy od Googlu, které vám usnadní život.

Revoluční vynálezy od Googlu, které vám usnadní život.

Chcete vidět revoluční vynálezy Google a jak tyto vynálezy změnily život každého dnešního člověka? Pak si přečtěte na blogu a podívejte se na vynálezy od Googlu.

Friday Essential: Co se stalo s auty řízenými umělou inteligencí?

Friday Essential: Co se stalo s auty řízenými umělou inteligencí?

Koncept aut s vlastním pohonem, která vyrazí na silnice s pomocí umělé inteligence, je snem, který už nějakou dobu máme. Ale přes několik slibů nejsou nikde vidět. Přečtěte si tento blog a dozvíte se více…

Technologická singularita: vzdálená budoucnost lidské civilizace?

Technologická singularita: vzdálená budoucnost lidské civilizace?

Jak se věda vyvíjí rychlým tempem a přebírá mnoho našeho úsilí, stoupá také riziko, že se vystavíme nevysvětlitelné singularitě. Přečtěte si, co pro nás může znamenat singularita.

Evoluce ukládání dat – Infografika

Evoluce ukládání dat – Infografika

Způsoby ukládání dat se mohou vyvíjet od narození dat. Tento blog se zabývá vývojem ukládání dat na základě infografiky.

Funkcionality vrstev referenční architektury velkých dat

Funkcionality vrstev referenční architektury velkých dat

Přečtěte si blog, abyste co nejjednodušším způsobem poznali různé vrstvy v architektuře velkých dat a jejich funkce.

6 úžasných výhod toho, že máme v životě zařízení pro chytrou domácnost

6 úžasných výhod toho, že máme v životě zařízení pro chytrou domácnost

V tomto digitálním světě se chytrá domácí zařízení stala klíčovou součástí života. Zde je několik úžasných výhod chytrých domácích zařízení o tom, jak náš život stojí za to žít a zjednodušit jej.

Aktualizace doplňku macOS Catalina 10.15.4 způsobuje více problémů než řešení

Aktualizace doplňku macOS Catalina 10.15.4 způsobuje více problémů než řešení

Apple nedávno vydal doplňkovou aktualizaci macOS Catalina 10.15.4, která opravuje problémy, ale zdá se, že aktualizace způsobuje další problémy, které vedou k zablokování počítačů mac. Přečtěte si tento článek a dozvíte se více