Indholdsfortegnelse:

Raspberry Pi4 Firewall: 12 trin
Raspberry Pi4 Firewall: 12 trin

Video: Raspberry Pi4 Firewall: 12 trin

Video: Raspberry Pi4 Firewall: 12 trin
Video: Raspberry Pi Router And Firewall Using nftables 2024, Juni
Anonim
Raspberry Pi4 Firewall
Raspberry Pi4 Firewall

Da den nye Raspbery Pi 4 (RPi4) lige var udgivet, besluttede jeg at lave mig en firewall til hjemmebrug. Efter at have snublet rundt på Internettet fandt jeg en fantastisk artikel om emnet af Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Artiklen er fantastisk, og du bør læse den, før du går videre-det vil gøre processen beskrevet her lettere. Sagen er, at artiklen blev skrevet i 2012 og er baseret på ArchLinux distro. Intet imod ArchLinux, men jeg ville lave dette ved hjælp af den mere almindelige Raspbian -build. RPi4 kan klare behandlingskravene. Så tak, Guillaume, for inspirationen !! Denne instruks vil referere tilbage til Guillaumes ("GK" for korte) originale indlæg, du vil sandsynligvis have begge sider åbne i din browser.

Et par vigtige ting ved min firewall:

  • Jeg har det indbyggede ethernetstik (eth0) til LAN
  • ISP -routeren er på TRENDnet -adapteren (eth1)
  • Jeg har aktivt deaktiveret den trådløse adapter (wlan0)
  • Dette er ikke garanteret at få dig 100% der … forhåbentlig mindst 99%:) så giv feedback/kommentarer
  • Dette er min første instruerbare. Beklager alt, hvad der ikke følger de relevante instruktionsnormer.

Lad os nu have det sjovt …

Forbrugsvarer

  • Hindbær Pi 4

    • Jeg brugte 4 GB versionen, prøv gerne en anden version
    • Case (jeg kan godt lide FLIRC, men det er dit opkald)
    • Strømadapter
  • MicroSD -kort, 32 GB eller større (jeg brugte et 64 GB -kort)
  • TRENDnet USB3.0 Gigabit Ethernet Dongle (Model: TU3-ETG)
  • Et par RJ45 netværkskabler
  • USB -tastatur og mus
  • Et Micro-HDMI til HDMI-kabel (der er tilsluttet en HDMI-skærm)

Dette tastatur, video og mus kan fjernes, når du er i stand til at få SSH og VNC i gang.

Trin 1: Indledende RPi -opsætning

Indledende RPi -opsætning
Indledende RPi -opsætning

Første ting at gøre er at få din RPi4 i gang som et nyt system. Download og installer hele Raspbian -distributionen (Raspbian Buster med desktop og anbefalet software). Du bliver nødt til at genstarte et par gange, så det kan udvide og drage fordel af det fulde MicroSD -kort.

Når det starter, skal du besvare spørgsmål om lokalitet, netværk, tastatur og mus. Opret forbindelse til et netværk, og lad det opdatere.

Lad os også bekræfte, at alt er opdateret korrekt, og få et par hjælpeprogrammer, der kan hjælpe med fejlfinding senere:

$ sudo apt-get opdatering

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

Jeg installerede IKKE vim, og heller ikke noget af GK's trin 8 (konfigurer vim). Jeg har lige brugt vi -editoren, da den alligevel har de fleste af disse funktioner. Dette sparede også lidt tid og kræfter.

Når det er færdigt, kan vi konfigurere RPi4, så vi kan tilslutte en skærm til et varmt sted. Mit mål var at få det til at køre hovedløst, men hvis jeg skulle tilslutte en skærm, ville det blive genkendt.

$ sudo vi /boot/config.txt

I den fil:

uncomment (fjern det forreste #-symbol): hdmi_force_hotplug = 1

ikke -kommentar: hdmi_drive = 2

tilføj eventuelt: enable_hdmi_sound

Trin 2: Netværk

Netværk
Netværk
Netværk
Netværk

Hvis du følger med på GK's websted, er dette trin 3. Men husk, jeg fulgte ikke mange af hans første trin i nøjagtig rækkefølge.

Da jeg først startede dette, tilsluttede jeg RPi'en direkte til min ISP -router ("ved siden af mit eksisterende netværk"). Dette tillod mig at lege med konfigurationen uden at påvirke netværket. Tilslut den indbyggede RJ45 RP45 til din router (eller trådløs, hvis du vil). Med Raspbian er den nemmeste måde at gøre dette ved at bruge GUI. Klik på skrivebordet på hindbærikonet> Indstillinger> Raspberry Pi -konfiguration. Sørg for at aktivere SSH og VNC. Dette installerer Real-VNC-serverklienten. Jeg fandt ud af, at hvis du prøver at oprette forbindelse til Tight VNC -klienten, vil den kaste pasninger og kræve en ekstra konfiguration. Så på dette tidspunkt skal du installere Real-VNC-klienten på din primære stationære/bærbare computer (ikke din RPi4).

SSH fungerer ikke uden for kassen (GK's trin 7). Vi skal ændre nogle konfigurationer. Lad os først ændre ssh -konfigurationsfilen. Her er de ændringer, jeg har foretaget. Husk, at jeg ikke studerede virkningen af enhver ændring her. Jeg gjorde, hvad GK's websted foreslog. Nogle af disse ændringer er muligvis IKKE påkrævet.

$ sudo vi/etc/ssh/sshd_config

I denne fil skal du kommentere følgende linjer:

HostKey/etc/ssh/ssh_host_rsa_keyHostKey/etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogLevel INFOStrictModes jaPubkeyAuthentication jaHostBasedAuthentication no

Ignorer Rhosts ja

PrintMotd noPrintLastLog jaTCPKeepAlive ja

Og tilføj følgende linjer:

Protokol 2UsePrivilegeSeparation jaNøgleRegenerationInterval 3600ServerKeyBits 768RSAAutentisering jaRhostsRSAAutentificeringsnr

Og rediger følgende linjer:

Port 15507LoginGraceTime 60PermitRootLogin nr

Lad os hurtigt tale om den første ændring … port 15507. SSH kører normalt på port 22. GK flyttede den til 15507-ved ikke hvorfor. Du kan enten ændre det eller ej … Hvis du vælger at ændre det, skal du tilføje "-p 15507" til enhver SSH-kommando, du prøver at oprette forbindelse til. Hvis du beslutter dig for at springe det over, skal du holde øje med de andre steder, hvor 15507 er nævnt i denne vejledning, og ignorere dem, især firewallreglerne!

Endelig til dette trin, lad os få RPi4's IP -adresse, så vi ved, hvad vi skal oprette forbindelse til:

$ ipconfig -a

Find det aktive netværksforbindelse (sandsynligvis på eth0 eller wlan0) og skriv den IP -adresse ned. Nu har du det, du har brug for til fjerntilslutning til RPi4. Lad os genstarte, før vi fortsætter:

$ sudo genstart

Trin 3: En anden bruger

En anden bruger
En anden bruger

Det er bedst at ikke bruge standard RPi -brugernavn (pi), og du bør helt sikkert ændre adgangskoden. For at være sikker kan du tilføje en anden brugerkonto, som du kan bruge til ekstern forbindelse og fortsætte med (GK's trin 6). Tilbage på RPi kan vi tilføje en ny bruger og angive tilladelser for brugeren til SSH og udstede sudo -kommandoen:

$ sudo useradd -m -g brugere -G sudo, netdev -s /bin /bash [USERNAME]

$ sudo passwd [USERNAME]

Du er velkommen til at logge ud eller genstarte og bruge den nyoprettede konto fremover.

Trin 4: Syctl -fil

Syctl -fil
Syctl -fil

Næste trin er at ændre filen /etc/sysctl.conf (GK's trin 9). Denne fil bruges til at ændre et par kernelindstillinger. Vi kommer til at gøre præcis, hvad GK siger at gøre. Her er et forenklet sæt trin.

$ sudo vi /etc/sysctl.conf

I denne fil skal du kommentere følgende linjer:

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

Og tilføj følgende linjer:

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

Genstart tjenesten med disse nye indstillinger, og genstart:

$ sudo sysctl -p

$ sudo genstart

Trin 5: DHCP & DNS (del 1)

DHCP og DNS (del 1)
DHCP og DNS (del 1)

For mig var der to smertefulde dele ved denne proces … Opsætning af DHCP og DNS og opsætning af firewallreglerne. Så her går vi med den første del. Hvis du følger med på GK's websted, er vi på trin 10.

For at gøre dette skal du bruge et par stykker oplysninger fra din ISP -router (eller nuværende firewall):

  • Routerens interne IP -adresse
  • En IP -adresse, du kan bruge til RPi4's interface til routeren
  • IP'erne for en navneserver (eller to)
  • Interfacenavnet for LAN -forbindelsen (f.eks. Eth0 eller eth1)
  • Interfacenavnet for ISP -forbindelsen (f.eks. Hvad du ikke brugte til LAN)

Du skal muligvis også ændre routerens indstillinger for at give RPi4 en statisk IP -adresse (punkt 2 ovenfor). Det var i hvert fald det, jeg gjorde.

Lad os først ændre dhcpcd.conf -filen …

$ sudo vi /etc/dhcpcd.conf

Fjern disse kommentarer:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

For hver netværksgrænseflade skal du angive netværksdetaljerne. De skal se sådan ud:

# Statisk for grænsefladen til internetudbyderen

interface eth1 static ip_address = 192.168.1.static routers = 192.168.1.254 static domain_name_servers = 8.8.8.8 8.8.4.4 metric 100 # Statisk for grænsefladen til LAN -interfacet eth0 static ip_address = 10.210.212.static routers = 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 routers = 10.210.212.1 #static domain_name_servers = 8.8.8.8 #Kommenter dette afsnit, hvis du vil tvinge en IP -adresse på en enhed. Navnet efter 'host' #er meningsløst for systemet. Indtast enhedens MAC -adresse samt den ønskede #IP -adresse. Sørg for, at det er uden for dhcp -området. Gentag efter behov. #host [ALT] { # hardware ethernet xx: xx: xx: xx: xx: xx; # fast adresse 10.210.212.250; #}

Sørg for at bruge tal, der fungerer for dig. IP'erne ovenfor er for mit netværk, med undtagelse af navneservere, der er Google. Bemærk, at jeg også har indstillet metricen for internetudbyderen til 100 for at tvinge det til at være standard første forsøg på netværkstrafik. Jeg gjorde også specifikt ingenting ved min trådløse adapter (wlan0). Jeg har tænkt mig at slukke denne grænseflade helt, så det gav mening for mig.

Hvis du også vil tvinge en IP -adresse på en enhed (f.eks. En NAS), skal du bruge den nederste sektion. Giv værten et navn, der er meningsfuldt for dig, men ved, at det aldrig bruges af noget. Glem ikke semikolonerne.

Trin 6: DHCP & DNS (del 2)

DHCP og DNS (del 2)
DHCP og DNS (del 2)

Det næste trin er at ændre dnsmasq.conf -filen …

$ sudo vi /etc/dnsmasq.conf

Vi skal fjerne et par linjer og redigere et par linjer. Du skal også kopiere et par indstillinger fra filen dhcpcd.conf. To andre spørgsmål, du skal besvare selv, er:

Har det interne LAN (f.eks. Eth0) brug for DHCP og DNS? Hvilket DHCP -område vil du have til dit LAN, og hvor lang tid skal hver lejekontrakt være?

Start med at kommentere et par linjer:

bogus-privno-dhcp-interface = wlan0bind-interfacesdhcp-name-match = set: wpad-ignorere, wpaddhcp-ignorere-navne = tag: wpad-ignorere

Indstil din navneserver. Se efter linjen, der starter 'server =', og gør den til noget som 'server = 8.8.8.8'.

Indstil dit DHCP -område. Der er mange måder at gøre dette på. Jeg valgte at angive de to slutpunkts -IP'er, masken og længden af leasingkontrakten. Mit område var 10.210.212.20-10.210.212.240, med en netmaske på 255.255.255.0 og leasingtid på 12 timer. Jeg anbefaler, at du efterlader nogle IP'er øverst og nederst i dit område, hvis du nogensinde skal give noget en statisk IP.

Indstil grænsefladen, der får DNS og DHCP (LAN) ved at ændre linjen 'interface =' til at være noget lignende 'interface = eth0). Bemærk, at jeg specifikt fortalte det IKKE at tildele en DHCP IP -adresse til mit trådløse netværk. Igen har jeg tænkt mig at slukke denne grænseflade helt, så det gav mening for mig.

Trin 7: DHCP og DNS (del 3)

DHCP og DNS (del 3)
DHCP og DNS (del 3)

En afvigelse fra GK's instruktioner til dette sidste trin …

Da jeg gik til at genstarte min RPi på dette tidspunkt, var dnsmasq -processen ikke aktiv. Lidt pokker rundt, og jeg fandt ud af, at mine eth0 og eth1 netværksgrænseflader ikke begge var aktive, før dnsmasq blev startet, så dnsmasq ville mislykkes ved start. Jeg skulle tilslutte et tastatur og en mus til RPi'en og genstarte dnsmasq manuelt. Dette er ikke ideelt med en hovedløs opsætning. Jeg læste en masse indlæg, der sagde at foretage forskellige ændringer af indstillinger (f.eks. Deaktivere bind-interface) og andre ting. Intet af det virkede. Til sidst besluttede jeg mig for blot at skrive et shell -script, der ville køre hvert 2. minut og kontrollere status for dnsmasq. Hvis det ikke kørte, start det. Jeg går ud fra, at denne situation ikke er unik for mig. Så her er hvad du skal gøre:

Lav følgende kode til en fil kaldet 'dns_masq_keepalive.sh' på din RPi.

#!/bin/bash

# Fil: dns_masq_keepalive.sh # august 2019 # Brug dette med crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) for at sikre, at dnsmasq kører. Tjenesten stopper sig selv, hvis # alle de grænseflader, der er nævnt i dhcpcd.conf, ikke er ope, før den begynder. Dette løser problemet. # Denne næste linje returnerer alle aktive job med ordet 'dnsmasq' i. Så inkluder ikke 'dnsmasq' i denne # fils navn, ellers vender den tilbage hver gang, og du får aldrig en genstart. dns_running = $ (ps -e | grep dnsmasq) ekko $ dns_running hvis [-z "$ dns_running"] så #echo Ingen DNSMasq sudo /etc/init.d/dnsmasq genstart #else #echo DNSMasq Kører fi

Klip og indsæt det, hvis du har brug for det. Uanset hvad du gør, skal du ikke inkludere 'dnsmasq' i navnet. Scriptet leder efter ordet 'dnsmasq', og hvis scriptet har det i navnet, antager det, at tjenesten kører. Omdøb også filen, så den ender med '.sh'. Intructables ville ikke lade mig uploade en '.sh' fil-hvilket er godt. De resterende instruktioner forudsætter, at filen findes på: /etc/dns_masq_keepalive.sh.

For det andet skal du angive tilladelser til filen, så den kan udføres:

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

Nu vil vi bruge crontab -systemet til at få programmet til at køre hvert 2. minut hver dag. Start crontab:

$ sudo crontab -e

Det skulle bede dig om at redigere ved hjælp af vi eller noget andet. Enhver vil fungere. Når du kan redigere det, skal du tilføje følgende til slutningen af filen:

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

Ingen mellemrum i '*/2', men mellemrum mellem stjernerne. Gem og afslut. Det skulle fortælle dig, at jobbet er planlagt eller sådan noget.

Trin 8: Firewallen

Firewallen
Firewallen

Den næste smertefulde proces er firewallen (GK's trin 11). Raspbian bruger det velkendte iptables -system. GK's blog indeholder tre filer, der hjælper dig med at komme dertil … firewall.simple, firewall.advanced og firewall.flows. Al respekt for GK, men gør det let for dig selv og bare gå med firewall.simple. Jeg brugte meget tid på at finde ud af iptables -systemet og reglerne. Jeg er glad for, at jeg gjorde det, men det var smertefuldt. Så jeg giver dig de vedhæftede to filer til at hjælpe dig … firewall.simple og firewall.clear. Kopier begge disse filer til din /etc -mappe, og rediger tilladelserne for at gøre dem eksekverbare:

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

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

Inden du opretter nogen firewall -regler, skal du slutte en stationær/bærbar computer til din RPi eth0 -port og bekræfte, at den får en IP -adresse og DNS kører. Den nemmeste måde at gøre dette på er at prøve at pinge et generisk websted og derefter en kendt IP -adresse. Pinger også din RPi og ISP router. Hvis du får resultater, er alt godt, og eventuelle netværksproblemer, du nu støder på, vil sandsynligvis være et resultat af firewallproblemer.

Den første leverede fil startede oprindeligt som GK's firewall.simple -fil (tak igen, GK!). Jeg lavede en masse ændringer for at få det til at fungere for dette system. Det skal give mulighed for mindst HTTP, HTTPS, DNS, DHCP, ping, intern SSH, intern VNC og plex. Plex har muligvis ikke alle de åbne porte til hver mulig enhed, men der er en masse indlæg derude for at løse det. Øverst i filen er værdier, som du skal ændre til din netværkskonfiguration.

Den anden fil, firewall.clear, er beregnet til at blive brugt, når du tester dine firewall -regler. Når du kører 'sudo /etc/firewall.clear', slettes alle firewallregler, og systemet skal være fuldt forbundet til internettet. Så hvis du ikke er i stand til at få en netværkstjeneste (som dns) til at fungere med firewall. Enkle regler på plads, men det begynder at fungere, efter at du har kørt firewall.clear, ved du, at du har et regelproblem. Dette vil virkelig kun være kritisk, når du tester dine regler.

Så vi har firewallreglerne der, vi skal få dem til at starte, når RPi'en starter. For at gøre det redigerer vi filen /etc/rc.local:

$ sudo vi /etc/rc.local

Når du er inde, skal du tilføje følgende til slutningen af filen:

ekko "Indlæser iptables regler" /etc/firewall.simple >>/dev/null

Hvis du vælger at tilføje system til detektering af snusindbrud, skal du redigere denne fil igen. Gem nu det, og genstart.

$ sudo genstart

Trin 9: Syslog

Syslog
Syslog

To trin tilbage…

Dette er let. Hvis du stadig er der, og følger med GK's blog, er dette trin 12. Du skal gøre præcis, hvad han siger med hensyn til syslog -filen. Her er de forkortede trin:

Gem syslog -data for 2 måneder …

$ sudo vi /etc/logrotate.conf

Vi skal fortælle det at bruge 'en uge' som en måling, og derefter beholde 12 af dem. Du har brug for følgende to linjer i denne fil. Jeg tror, du bliver nødt til at ændre de eksisterende linjer.

ugentligrotation 12

Gem det.

Trin 10: Indtrængningsdetektion med snort

Indtrængningsdetektion med snorken
Indtrængningsdetektion med snorken

Det sidste, GK konfigurerer, er snortesystemet. Jeg anbefaler også dette. Du kan følge hans regler, og jeg vil ikke kopiere dem alle her med et par mindre ændringer. Hans instruktioner er til ArchLinux distro. Her er de få ændringer for den Raspbian -distribution, vi bruger her. Resten af instruktionerne fungerer fint.

Først må du ikke bruge sudo pacman -S snort til at downloade og installere snort. Gør følgende:

$ sudo apt-get install snort

For det andet kan du ikke bekræfte snort med sudo snort -version. Bekræft installationen med:

$ sudo snort -V

Endelig, for at få den til at køre ved opstart, skal du ikke ændre rc.conf -filen, redigere rc.local -filen (igen) …

$ sudo vi /etc/rc.local

Tilføj følgende linjer til slutningen af filen:

ekko “Loading snort”

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

Genstart nu, og det hele skal fungere på magisk vis.

$ sudo genstart

Trin 11: Nyd det

god fornøjelse
god fornøjelse

Det burde være det!

Først og fremmest kan jeg ikke takke Guillaume Kaddouch nok! Han inspirerede dette.

For det andet, hvis du ikke allerede har afbrudt dit tastatur, video og mus, kan du. Brug SSH og VNC for at komme tilbage, når det er nødvendigt.

Til sidst er dette måske ikke 100% perfekt. Send venligst tilbage med ændringer/forslag/anbefalinger. Mit mål ville være, at dette skulle være starten på diskussionen og mange mennesker nyder det!

Tak!!

PS … Billedet er en RPi4 inde i et FLIRC aluminiumskabinet med en gammel Intel blæser let modificeret og lynlåst fastgjort til toppen. Der er også termisk pasta under blæseren, bare hvis du undrede dig. Jeg fandt noget lignende på Internettet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) og besluttede at prøve det selv.

Trin 12: Ændringslog

Da der foretages ændringer i denne instruerbare, vil jeg dokumentere dem her. Hvis du har et problem, kan du tjekke her for at se, om du tog fat i gamle instruktioner eller filer.

25. september 2019:

  • Rettede DHCP -regler i firewall.simple
  • Fast DHCP -område i instruktionerne (filerne var korrekte)
  • Tilføjede faste IP-tildelinger til DHCP-instruktioner

13. oktober 2019

  • Rettet flere stavefejl
  • Oprettede et andet pi, så jeg ville have et test -SD -kort til at bytte, hvis det er nødvendigt

Anbefalede: