Obsah:

Firewall Raspberry Pi4: 12 kroků
Firewall Raspberry Pi4: 12 kroků

Video: Firewall Raspberry Pi4: 12 kroků

Video: Firewall Raspberry Pi4: 12 kroků
Video: Raspberry Pi Router And Firewall Using nftables 2024, Červen
Anonim
Firewall Raspberry Pi4
Firewall Raspberry Pi4

S právě vydanou novinkou Raspbery Pi 4 (RPi4) jsem se rozhodl udělat ze sebe firewall pro domácí použití. Poté, co jsem narazil na internet, našel jsem skvělý článek na toto téma od Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Článek je úžasný a měli byste si jej přečíst, než budete pokračovat-usnadní zde popsaný postup. Věc je, že tento článek byl napsán v roce 2012 a je založen na distribuci ArchLinux. Nic proti ArchLinuxu, ale chtěl jsem to udělat pomocí běžnější verze Raspbian. RPi4 zvládne požadavky na zpracování. Takže, Guillaume, děkuji za inspiraci !! Tento pokyn bude odkazovat zpět na původní příspěvek Guillaume (zkráceně „GK“), pravděpodobně budete chtít mít ve svém prohlížeči otevřené obě stránky.

Několik klíčových věcí o mém firewallu:

  • Mám vestavěný ethernetový konektor (eth0), který jde do LAN
  • Směrovač ISP je na adaptéru TRENDnet (eth1)
  • Aktivně jsem deaktivoval bezdrátový adaptér (wlan0)
  • Není zaručeno, že se tam dostanete na 100% … doufejme, že alespoň na 99%:), proto prosím poskytněte zpětnou vazbu/komentáře
  • Toto je můj první pokyn. Omlouváme se za cokoli, co nedodržuje příslušné instrukční normy.

Pojďme se nyní pobavit…

Zásoby

  • Raspberry Pi 4

    • Použil jsem 4GB verzi, klidně zkuste jinou verzi
    • Case (FLIRC se mi líbí, ale je to vaše volba)
    • Napájecí adaptér
  • Karta MicroSD, 32 GB nebo větší (použil jsem 64 GB kartu)
  • Gigabitový ethernetový klíč TRENDnet USB3.0 (model: TU3-ETG)
  • Pár síťových kabelů RJ45
  • USB klávesnice a myš
  • Kabel Micro-HDMI na HDMI (zapojený do monitoru HDMI)

Klávesnici, video a myš lze odebrat, jakmile budete moci zprovoznit SSH a VNC.

Krok 1: Počáteční nastavení RPi

Počáteční nastavení RPi
Počáteční nastavení RPi

První věcí, kterou musíte udělat, je uvést váš RPi4 do provozu jako nový systém. Stáhněte a nainstalujte plnou distribuci Raspbian (Raspbian Buster s počítačem a doporučeným softwarem). Budete muset několikrát restartovat, aby se mohla rozšířit a využívat výhody plné karty MicroSD.

Během zavádění budete muset odpovědět na otázky týkající se lokality, sítě, klávesnice a myši. Připojte se k síti a nechte ji aktualizovat.

Pojďme také potvrdit, že je vše správně aktualizováno, a získat několik nástrojů, které mohou pomoci při ladění později:

$ sudo apt-get update

$ sudo apt-get dist-upgrade $ sudo apt-get install htop $ sudo apt-get install tcpdump

Neinstaloval jsem vim, ani žádný z kroků 8 GK (konfigurace vim). Právě jsem použil editor vi, protože stejně má většinu těchto funkcí. Tím se také ušetřil čas a úsilí.

Jakmile to bude hotové, nastavme RPi4, abychom mohli monitor připojit za provozu. Mým cílem bylo, aby to běželo bez hlavy, ale kdybych potřeboval zapojit monitor, bylo by to poznat.

$ sudo vi /boot/config.txt

V tom souboru:

odkomentujte (odstraňte přední #-symbol): hdmi_force_hotplug = 1

odkomentujte: hdmi_drive = 2

volitelně přidat: enable_hdmi_sound

Krok 2: Sítě

Sítě
Sítě
Sítě
Sítě

Pokud sledujete stránky GK, toto je krok 3. Ale mějte na paměti, že jsem nesledoval mnoho jeho prvních kroků v přesném pořadí.

Když jsem to poprvé spustil, připojil jsem RPi přímo ke svému routeru ISP („vedle mé stávající sítě“). To mi umožnilo hrát si s konfigurací, aniž by to ovlivnilo síť. Připojte vestavěný RJ45 RPi4 ke svému routeru (nebo bezdrátovému, chcete-li). U Raspbian je nejjednodušší způsob, jak to udělat, pomocí GUI. Na ploše klikněte na ikonu Raspberry> Předvolby> Konfigurace Raspberry Pi. Nezapomeňte povolit SSH a VNC. Tím se nainstaluje klient serveru Real-VNC. Zjistil jsem, že pokud se pokusíte spojit s klientem Tight VNC, bude se hodit a bude vyžadovat další konfiguraci. V tomto okamžiku tedy nainstalujte klienta Real-VNC na primární stolní počítač/notebook (nikoli na RPi4).

SSH nebude fungovat po vybalení (krok 7 GK). Musíme upravit některé konfigurace. Nejprve upravte konfigurační soubor ssh. Zde jsou změny, které jsem provedl. Mějte na paměti, že jsem zde nestudoval dopad každé změny. Udělal jsem, co navrhly stránky GK. Některé z těchto změn NEJSOU vyžadovány.

$ sudo vi/etc/ssh/sshd_config

V tomto souboru odkomentujte následující řádky:

HostKey/etc/ssh/ssh_host_rsa_keyHostKey/etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogLevel INFOStrictModes anoPubkeyAuthentication yesHostBasedAuthentication ne

Ignorovat Rhosts ano

PrintMotd noPrintLastLog anoTCPKeepAlive ano

A přidejte následující řádky:

Protokol 2 PoužitíPrivilegeOddělení ano

A upravte následující řádky:

Port 15507LoginGraceTime 60PermitRootLogin no

Pojďme si rychle promluvit o té první úpravě … port 15507. SSH normálně běží na portu 22. GK jej přesunul na 15507-nevím proč. Můžete to buď upravit, nebo ne… Pokud se to rozhodnete upravit, budete muset přidat „-p 15507“ke každému příkazu SSH, se kterým se pokoušíte spojit. Pokud se ho rozhodnete přeskočit, dávejte pozor na další místa, která v těchto pokynech uvádí 15507, a ignorujte je, zejména pravidla brány firewall!

Nakonec pro tento krok získáme IP adresu RPi4, abychom věděli, k čemu se připojit:

$ ipconfig -a

Najděte aktivní připojení k síti (pravděpodobně na eth0 nebo wlan0) a zapište si tuto IP adresu. Nyní máte to, co potřebujete pro vzdálené připojení k RPi4. Než budeme pokračovat, restartujme:

$ sudo restart

Krok 3: Jiný uživatel

Další uživatel
Další uživatel

Nejlepší je nepoužívat výchozí uživatelské jméno RPi (pi) a určitě byste měli změnit heslo. Abychom byli v bezpečí, přidejte další uživatelský účet, který můžete použít ke vzdálenému připojení, a pokračujte v (krok 6 GK). Zpět na RPi umožňuje přidat nového uživatele a nastavit oprávnění pro uživatele k SSH a vydat příkaz sudo:

$ sudo useradd -m -g uživatelé -G sudo, netdev -s /bin /bash [USERNAME]

$ sudo passwd [USERNAME]

Nebojte se odhlásit nebo restartovat a používat tento nově vytvořený účet.

Krok 4: Soubor Syctl

Soubor Syctl
Soubor Syctl

Dalším krokem je úprava souboru /etc/sysctl.conf (krok GK 9). Tento soubor slouží ke změně několika nastavení jádra. Uděláme přesně to, co říká GK. Zde je zjednodušená sada kroků.

$ sudo vi /etc/sysctl.conf

V tomto souboru odkomentujte následující řádky:

net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.all.rp_filter = 1net.ipv4.tcp_syncookies = 1

net.ipv4.ip_forward = 1

net.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.send_redirects = 0net.ipv4.conf.all.accept_source_route = 0net.ipv4.conf.all.log_martians = 1

A přidejte následující řádky:

net.ipv4.icmp_echo_ignore_broadcasts = 1net.ipv4.icmp_ignore_bogus_error_responses = 1net.ipv4.conf.eth0.accept_redirects = 0vm.min_free_kbytes = 8192

Restartujte službu pomocí těchto nových nastavení a restartujte počítač:

$ sudo sysctl -p

$ sudo restart

Krok 5: DHCP a DNS (část 1)

DHCP a DNS (část 1)
DHCP a DNS (část 1)

Pro mě to byly dvě bolestivé části tohoto procesu … Nastavení DHCP a DNS a nastavení pravidel brány firewall. Takže jdeme na první část. Pokud sledujete stránky GK, jsme na kroku 10.

K tomu budete potřebovat několik informací z routeru ISP (nebo aktuálního firewallu):

  • Interní IP adresa routeru
  • IP adresa, kterou můžete použít pro rozhraní RPi4 k routeru
  • IP adresy pro jmenný server (nebo dvě)
  • Název rozhraní pro připojení LAN (např. Eth0 nebo eth1)
  • Název rozhraní pro připojení ISP (např. Cokoli, co jste pro LAN nepoužili)

Možná budete muset také upravit nastavení routeru, aby měl RPi4 statickou IP adresu (odrážka 2, výše). Alespoň to jsem udělal.

Nejprve upravte soubor dhcpcd.conf…

$ sudo vi /etc/dhcpcd.conf

Odkomentujte tyto řádky:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

Pro každé síťové rozhraní musíte nastavit podrobnosti o síti. Měly by vypadat nějak takto:

# Statické pro rozhraní k ISP

interface eth1 static ip_address = 192.168.1.static routery = 192.168.1.254 static domain_name_servers = 8.8.8.8 8.8.4.4 metric 100 # Statické pro rozhraní k rozhraní LAN eth0 static ip_address = 10.210.212.static routery = 10.210.212.1 static domain_name_servers = 8.8.8.8 8.8.4.4 #interface wlan0 #static ip_address = 10.210.212. #static routery = 10.210.212.1 #static domain_name_servers = 8.8.8.8 #Odkomentujte tuto sekci, pokud chcete vynutit IP adresu na zařízení. Název za 'hostitelem' #nemá pro systém žádný význam. Zadejte MAC adresu zařízení a požadovanou #IP adresu. Ujistěte se, že je mimo rozsah DHCP. Opakujte podle potřeby. #host [ANYTHING] { # hardware ethernet xx: xx: xx: xx: xx: xx; # pevná adresa 10.210.212.250; #}

Určitě používejte čísla, která vám vyhovují. Výše uvedené IP adresy jsou pro moji síť, s výjimkou jmenných serverů, které jsou Google. Všimněte si, že jsem také nastavil metriku pro ISP na 100, abych vynutil, aby to byl výchozí první pokus o síťový provoz. Také jsem konkrétně neudělal nic svému bezdrátovému adaptéru (wlan0). Hodlám to rozhraní úplně vypnout, takže mi to dávalo smysl.

Také, pokud chcete vynutit IP adresu na zařízení (jako je NAS), použijte tuto spodní část. Dejte hostiteli jméno, které je pro vás smysluplné, ale vězte, že ho nikdy nikdo nepoužívá. Nezapomeňte na středníky.

Krok 6: DHCP a DNS (část 2)

DHCP a DNS (část 2)
DHCP a DNS (část 2)

Dalším krokem je úprava souboru dnsmasq.conf…

$ sudo vi /etc/dnsmasq.conf

Potřebujeme odkomentovat několik řádků a upravit několik řádků. Budete také muset zkopírovat několik nastavení ze souboru dhcpcd.conf. Další dvě otázky, které si musíte zodpovědět sami, jsou:

Potřebuje interní LAN (např. Eth0) DHCP a DNS? Jaký rozsah DHCP chcete pro svou LAN a jak dlouhý by měl být každý pronájem?

Začněte odkomentováním několika řádků:

falešný-privno-dhcp-interface = wlan0bind-interfacesdhcp-name-match = set: wpad-ignore, wpaddhcp-ignore-names = tag: wpad-ignore

Nastavte svůj jmenný server. Vyhledejte řádek začínající „server =“a vytvořte z něj něco jako „server = 8.8.8.8“.

Nastavte rozsah DHCP. Existuje mnoho způsobů, jak to udělat. Rozhodl jsem se poskytnout dvě IP koncových bodů, masku a délku pronájmu. Můj dosah byl 10.210.212.20-10.210.212.240, s maskou sítě 255.255.255.0 a dobou pronájmu 12 hodin. Doporučuji ponechat některé IP adresy nahoře a dole pro případ, že byste někdy potřebovali dát něčemu statickou IP.

Nastavte rozhraní, které bude získávat DNS a DHCP (LAN), úpravou řádku „interface =“na něco jako „interface = eth0). Všimněte si, že jsem konkrétně řekl, že NENÍ přiřazovat mé bezdrátové síti IP adresu DHCP. Opět mám v úmyslu úplně vypnout to rozhraní, takže mi to dávalo smysl.

Krok 7: DHCP a DNS (část 3)

DHCP a DNS (část 3)
DHCP a DNS (část 3)

Odklon od pokynů GK pro tento poslední krok …

Když jsem v tomto bodě šel restartovat RPi, proces dnsmasq nebyl aktivní. Trochu jsem šťoural a zjistil jsem, že moje síťová rozhraní eth0 a eth1 nebyla před spuštěním dnsmasq aktivní, takže dnsmasq při startu selže. K RPi bych musel připojit klávesnici a myš a dnsmasq ručně restartovat. S nastavením bez hlavy to není ideální. Přečetl jsem spoustu příspěvků, které říkaly, že mají provádět různé změny v nastavení (např. Deaktivovat rozhraní vazby) a další věci. Nic z toho nefungovalo. Nakonec jsem se rozhodl jednoduše napsat shell skript, který poběží každé 2 minuty a zkontroluje stav dnsmasq. Pokud neběžel, spusťte jej. Předpokládám, že tato situace není pro mě jedinečná. Zde je tedy to, co musíte udělat:

Vytvořte následující kód do souboru s názvem 'dns_masq_keepalive.sh' na vašem RPi.

#!/bin/bash

# Soubor: dns_masq_keepalive.sh # Srpen 2019 # Použijte toto s crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh), abyste se ujistili, že dnsmasq běží. Služba se sama zastaví, pokud # všechna rozhraní uvedená v dhcpcd.conf nejsou spuštěna, než začne. Tím je problém vyřešen. # Tento další řádek vrátí všechny aktivní úlohy se slovem „dnsmasq“. Nezahrnujte 'dnsmasq' do názvu tohoto # souboru, jinak jej vrátí pokaždé a nikdy nebudete mít restart. dns_running = $ (ps -e | grep dnsmasq) echo $ dns_running if [-z "$ dns_running"] then #echo No DNSMasq sudo /etc/init.d/dnsmasq restart #else #echo DNSMasq Run fi

V případě potřeby jej vyjměte a vložte. Ať děláte cokoli, neuvádějte do názvu „dnsmasq“. Skript hledá slovo „dnsmasq“a pokud jej skript obsahuje v názvu, bude předpokládat, že je služba spuštěna. Přejmenujte soubor tak, aby končil '.sh'. Intructables mi nedovolil nahrát soubor '.sh'-což je dobré. Zbývající pokyny předpokládají, že soubor existuje na: /etc/dns_masq_keepalive.sh.

Za druhé, nastavte oprávnění k souboru, aby jej bylo možné spustit:

$ sudo chmod u+x /etc/dns_masq_keepalive.sh

Nyní pomocí systému crontab spustíme program každé 2 minuty každý den. Spustit crontab:

$ sudo crontab -e

Mělo by vás to vyzvat k úpravám pomocí vi nebo něčeho jiného. Kterýkoli bude fungovat. Jakmile jej můžete upravit, přidejte na konec souboru následující:

*/2 * * * * sudo /etc/dns_masq_keepalive.sh

Žádné mezery v '*/2', ale mezery mezi hvězdičkami. Uložit a ukončit. Mělo by vám to říct, že práce je naplánovaná, nebo něco podobného.

Krok 8: Firewall

Firewall
Firewall

Dalším bolestivým procesem je firewall (krok GK 11). Raspbian používá dobře známý systém iptables. Blog GK poskytuje tři soubory, které vám pomohou se tam dostat … firewall.simple, firewall.advanced a firewall.flows. Veškerý respekt ke GK, ale usnadněte si to a stačí použít firewall. Jednoduché. Strávil jsem spoustu času zkoušením systému a pravidel iptables. Jsem rád, že jsem to udělal, ale bylo to bolestivé. Dávám vám tedy přiložené dva soubory, které vám pomohou … firewall.simple a firewall.clear. Zkopírujte oba tyto soubory do složky /etc a změňte oprávnění, aby byly spustitelné:

$ sudo chmod u+x /etc/firewall.simple

$ sudo chmod u+x /etc/firewall.clear

Než nastavíte jakákoli pravidla brány firewall, připojte stolní počítač/notebook k portu RPi eth0 a potvrďte, že získá IP adresu a běží DNS. Nejjednodušší způsob, jak to udělat, je zkusit odeslat příkaz ping na obecný web a poté na známou adresu IP. Také pingněte svůj router RPi a ISP. Pokud získáte výsledky, pak je vše v pořádku a jakékoli problémy se sítí, se kterými se nyní setkáte, budou pravděpodobně důsledkem problémů s bránou firewall.

První poskytnutý soubor původně začínal jako soubor brány firewall GK. Jednoduchý soubor (ještě jednou díky, GK!). Udělal jsem spoustu změn, aby to fungovalo pro tento systém. Měl by umožňovat alespoň HTTP, HTTPS, DNS, DHCP, ping, interní SSH, interní VNC a plex. Plex nemusí mít všechny otevřené porty pro všechna možná zařízení, ale existuje spousta příspěvků, které to opravují. V horní části souboru jsou hodnoty, které budete muset změnit v konfiguraci sítě.

Druhý soubor, firewall.clear, je určen k použití při testování pravidel brány firewall. Když spustíte 'sudo /etc/firewall.clear', všechna pravidla brány firewall budou vymazána a systém by měl být plně připojen k internetu. Pokud tedy nejste schopni zajistit, aby síťová služba (jako dns) fungovala s bránou firewall. Zavedla jednoduchá pravidla, ale začne fungovat po spuštění brány firewall.clear, víte, že máte problém s pravidly. To bude opravdu důležité pouze při testování vašich pravidel.

Takže máme pravidla brány firewall, musíme je spustit, když se spustí RPi. Za tímto účelem upravíme soubor /etc/rc.local:

$ sudo vi /etc/rc.local

Jakmile jste uvnitř, přidejte na konec souboru následující:

echo „Načítání pravidel iptables“/etc/firewall.simple >>/dev/null

Pokud se rozhodnete přidat systém detekce narušení chrápání, budete muset tento soubor znovu upravit. Prozatím jej uložte a restartujte.

$ sudo restart

Krok 9: Syslog

Syslog
Syslog

Zbývají dva kroky…

To je snadné. Pokud jste stále tam a sledujete blog GK, je to krok 12. Musíte udělat přesně to, co říká ohledně souboru syslog. Zde jsou zkrácené kroky:

Uchovávejte data syslog v hodnotě 2 měsíce…

$ sudo vi /etc/logrotate.conf

Musíme mu říci, aby jako měření používal „jeden týden“, a pak si jich ponechat 12. V tomto souboru potřebujete následující dva řádky. Věřím, že budete muset změnit stávající řádky.

týdenní otočení 12

Ulož to.

Krok 10: Detekce narušení pomocí Snort

Detekce narušení pomocí Snort
Detekce narušení pomocí Snort

Poslední věcí, kterou GK konfiguruje, je snort systém. Doporučuji i toto. Můžete se řídit jeho pravidly a já je zde nebudu s několika drobnými úpravami kopírovat. Jeho pokyny jsou pro distribuci ArchLinux. Zde je několik změn pro distribuci Raspbian, kterou zde používáme. Zbytek pokynů funguje dobře.

Nejprve nepoužívejte sudo pacman -S snort ke stahování a instalaci snortu. Udělej následující:

$ sudo apt-get install snort

Za druhé, nemůžete odfrknout pomocí sudo snort -version. Ověřte instalaci pomocí:

$ sudo snort -V

Nakonec, aby se spustil při spuštění, neupravujte soubor rc.conf, upravte soubor rc.local (znovu)…

$ sudo vi /etc/rc.local

Na konec souboru přidejte následující řádky:

echo „Načítání odfrknutí“

#/usr/sbin/snort -D -u snort -g snort -c /etc/snort/snort.conf -i eth0 -l/var/log/snort

Nyní restartujte a vše by mělo magicky fungovat.

$ sudo restart

Krok 11: Užijte si to

Užívat si
Užívat si

To by mělo být!

Předně nemohu Guillaume Kaddouchovi dostatečně poděkovat! Inspiroval to.

Za druhé, pokud jste ještě neodpojili klávesnici, video a myš, můžete. V případě potřeby se vraťte zpět pomocí SSH a VNC.

Nakonec to nemusí být stoprocentně dokonalé. Pošlete nám prosím zpět změny/návrhy/doporučení. Mým cílem by bylo, aby to byl začátek diskuse a mnoho lidí si to užilo!

Dík!!

PS… Obrázek je RPi4 uvnitř hliníkového pouzdra FLIRC se starým ventilátorem Intel, mírně upraveným a připevněným na zip nahoře. Pod ventilátorem je také tepelná pasta, jen pro případ, že by vás to zajímalo. Něco podobného jsem našel na internetu (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) a rozhodl jsem se to zkusit sám.

Krok 12: Seznam změn

Jak budou v tomto pokynu provedeny změny, zdokumentuji je zde. Pokud máte problém, zkontrolujte zde, zda jste si vzali staré pokyny nebo soubory.

25. září 2019:

  • Opravená pravidla DHCP ve firewallu. Jednoduché
  • Opravený rozsah DHCP v pokynech (soubory byly správné)
  • Přidáno přiřazení pevné IP k pokynům DHCP

13. října 2019

  • Opraveno více překlepů
  • Vytvořil jsem druhé pí, takže bych v případě potřeby nechal vyměnit testovací kartu SD

Doporučuje: