Innholdsfortegnelse:

Raspberry Pi4 brannmur: 12 trinn
Raspberry Pi4 brannmur: 12 trinn

Video: Raspberry Pi4 brannmur: 12 trinn

Video: Raspberry Pi4 brannmur: 12 trinn
Video: turn PC into a Firewall and Wi-Fi management device | NETVN 2024, November
Anonim
Raspberry Pi4 brannmur
Raspberry Pi4 brannmur

Da den nye Raspbery Pi 4 (RPi4) nettopp ble utgitt, bestemte jeg meg for å lage meg en brannmur til hjemmebruk. Etter å ha snublet rundt på Internett, fant jeg en flott artikkel om emnet av Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Artikkelen er fantastisk, og du bør lese den før du går videre-det vil gjøre prosessen beskrevet her enklere. Saken er at artikkelen ble skrevet i 2012 og er basert på ArchLinux distro. Ingenting mot ArchLinux, men jeg ønsket å lage dette ved å bruke den mer vanlige Raspbian -bygningen. RPi4 kan håndtere behandlingskravene. Så takk Guillaume for inspirasjonen !! Denne instruksen vil referere tilbake til Guillaumes ("GK" for korte) originale innlegg. Du vil sannsynligvis ha begge sider åpne i nettleseren din.

Et par viktige ting om brannmuren min:

  • Jeg har den innebygde ethernet-kontakten (eth0) til LAN
  • ISP -ruteren er på TRENDnet -adapteren (eth1)
  • Jeg har aktivt deaktivert den trådløse adapteren (wlan0)
  • Dette er ikke garantert å få deg 100% der … forhåpentligvis minst 99%:) så vær så snill å gi tilbakemelding/kommentarer
  • Dette er min første instruks. Beklager alt som ikke følger de riktige instruksjonsnormene.

La oss ha det gøy nå …

Rekvisita

  • Bringebær Pi 4

    • Jeg brukte 4 GB -versjonen, prøv gjerne en annen versjon
    • Case (jeg liker FLIRC, men det er ditt anrop)
    • Strømadapter
  • MicroSD -kort, 32 GB eller høyere (jeg brukte et 64 GB -kort)
  • TRENDnet USB3.0 Gigabit Ethernet Dongle (modell: TU3-ETG)
  • Et par RJ45 nettverkskabler
  • USB -tastatur og mus
  • En mikro-HDMI til HDMI-kabel (som er koblet til en HDMI-skjerm)

Det tastaturet, videoen og musen kan fjernes når du er i stand til å få SSH og VNC i gang.

Trinn 1: Første RPi -oppsett

Første RPi -oppsett
Første RPi -oppsett

Det første du må gjøre er å få RPi4 i gang som et nytt system. Last ned og installer hele Raspbian -distribusjonen (Raspbian Buster med skrivebord og anbefalt programvare). Du må starte på nytt et par ganger, slik at det kan utvides og dra nytte av hele MicroSD -kortet.

Når det starter, må du svare på spørsmål om lokalitet, nettverk, tastatur og mus. Koble til et nettverk og la det oppdatere.

La oss også bekrefte at alt er oppdatert riktig, og få et par verktøy som kan hjelpe til med feilsøking senere:

$ sudo apt-get oppdatering

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

Jeg installerte IKKE vim, og heller ikke noe av GKs trinn 8 (konfigurer vim). Jeg har nettopp brukt vi -editoren siden den har de fleste av disse funksjonene uansett. Dette sparte også litt tid og krefter.

Når det er fullført, kan vi sette opp RPi4 slik at vi kan koble til en skjerm. Målet mitt var å få den til å kjøre hodeløs, men hvis jeg trenger å koble til en skjerm, vil den bli gjenkjent.

$ sudo vi /boot/config.txt

I den filen:

uncomment (fjern #-symbolet foran): hdmi_force_hotplug = 1

uncomment: hdmi_drive = 2

eventuelt legg til: enable_hdmi_sound

Trinn 2: Nettverk

Nettverk
Nettverk
Nettverk
Nettverk

Hvis du følger med på GKs nettsted, er dette trinn 3. Men husk at jeg ikke fulgte mange av de første trinnene i nøyaktig rekkefølge.

Da jeg først startet dette, koblet jeg RPi direkte til ISP -ruteren min ("ved siden av mitt eksisterende nettverk"). Dette tillot meg å leke med konfigurasjonen uten å påvirke nettverket. Koble RPi4 innebygde RJ45 til ruteren (eller trådløs, hvis du vil). Med Raspbian er den enkleste måten å gjøre dette ved å bruke GUI. Klikk på bringebærikonet> Innstillinger> Raspberry Pi -konfigurasjon på skrivebordet. Sørg for å aktivere SSH og VNC. Dette vil installere Real-VNC-serverklienten. Jeg fant ut at hvis du prøver å koble deg til Tight VNC -klienten, vil den kaste passord og kreve ytterligere konfigurasjon. Så installer Real-VNC-klienten på dette tidspunktet på din primære stasjonære/bærbare datamaskin (ikke RPi4).

SSH fungerer ikke utenom boksen (GK trinn 7). Vi må endre noen konfigurasjoner. La oss først endre ssh -konfigurasjonsfilen. Her er endringene jeg gjorde. Husk at jeg ikke studerte virkningen av hver endring her. Jeg gjorde det GKs nettsted foreslo. Noen av disse endringene er IKKE nødvendig.

$ sudo vi/etc/ssh/sshd_config

Ikke kommenter følgende linjer i filen:

HostKey/etc.

Ignorer Rhosts ja

PrintMotd noPrintLastLog jaTCPKeepAlive ja

Og legg til følgende linjer:

Protocol 2UsePrivilegeSeparation jaNøkkelRegenerasjonIntervall 3600ServerKeyBits 768RSAAutentisering jaRhostsRSAAuthentication no

Og endre følgende linjer:

Port 15507LoginGraceTime 60PermitRootLogin -nr

La oss raskt snakke om den første modifiseringen … port 15507. SSH kjører normalt på port 22. GK flyttet den til 15507-vet ikke hvorfor. Du kan enten endre det eller ikke … Hvis du velger å endre det, må du legge til "-p 15507" i en hvilken som helst SSH-kommando du prøver å koble til. Hvis du bestemmer deg for å hoppe over det, må du holde øye med de andre stedene som 15507 er nevnt i disse instruksjonene, og ignorere dem, spesielt brannmurreglene!

Til slutt kan du få RPi4s IP -adresse for dette trinnet, slik at vi vet hva vi skal koble til:

$ ipconfig -a

Finn den aktive nettverkstilkoblingen (sannsynligvis på eth0 eller wlan0) og skriv ned den IP -adressen. Nå har du det du trenger for å koble til RPi4 eksternt. La oss starte på nytt før vi fortsetter:

$ sudo omstart

Trinn 3: En annen bruker

En annen bruker
En annen bruker

Det er best å ikke bruke standard RPi -brukernavn (pi), og du bør absolutt endre passordet. For å være trygg kan du legge til en annen brukerkonto du kan bruke til å koble til eksternt og fortsette med (trinn 6 i GK). Tilbake på RPi, lar oss legge til en ny bruker og angi tillatelser for brukeren til SSH og utstede sudo -kommandoen:

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

$ sudo passwd [USERNAME]

Logg ut eller start på nytt og bruk den nyopprettede kontoen fremover.

Trinn 4: Syctl -fil

Syctl -fil
Syctl -fil

Neste trinn er å endre /etc/sysctl.conf -filen (trinn 9 i GK). Denne filen brukes til å endre noen få kjerneinnstillinger. Vi kommer til å gjøre akkurat det GK sier å gjøre. Her er et forenklet sett med trinn.

$ sudo vi /etc/sysctl.conf

Ikke kommenter følgende linjer i filen:

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 legg til 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

Start tjenesten på nytt med disse nye innstillingene og start på nytt:

$ sudo sysctl -p

$ sudo omstart

Trinn 5: DHCP og DNS (del 1)

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

For meg var det to smertefulle deler i denne prosessen … Konfigurering av DHCP og DNS og konfigurering av brannmurreglene. Så, her går vi med den første delen. Hvis du følger med på GKs nettsted, er vi på trinn 10.

For å gjøre dette trenger du noen få opplysninger fra ISP -ruteren (eller nåværende brannmur):

  • Den interne IP -adressen til ruteren
  • En IP -adresse du kan bruke for RPi4 -grensesnittet til ruteren
  • IP -adressene til en navneserver (eller to)
  • Grensesnittnavnet for LAN -tilkoblingen (f.eks. Eth0 eller eth1)
  • Grensesnittnavnet for ISP -tilkoblingen (f.eks. Hva du ikke brukte for LAN)

Du må kanskje også endre ruterens innstillinger for å gi RPi4 en statisk IP -adresse (punkt 2 ovenfor). Det var i hvert fall det jeg gjorde.

La oss først endre dhcpcd.conf -filen …

$ sudo vi /etc/dhcpcd.conf

Ikke kommenter disse linjene:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

For hvert nettverksgrensesnitt må du angi nettverksdetaljene. De bør se omtrent slik ut:

# Statisk for grensesnittet til Internett -leverandøren

grensesnitt 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 grensesnittet til LAN -grensesnittet 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 denne delen hvis du vil tvinge en IP -adresse på en enhet. Navnet etter 'host' #er meningsløst for systemet. Skriv inn MAC -adressen til enheten, så vel som ønsket #IP -adresse. Sørg for at den er utenfor dhcp -området. Gjenta etter behov. #host [ALT] { # hardware ethernet xx: xx: xx: xx: xx: xx; # fast adresse 10.210.212.250; #}

Sørg for å bruke tall som fungerer for deg. IP -adressene ovenfor er for nettverket mitt, med unntak av navneservere som er Google. Legg merke til at jeg også har angitt beregningen for ISP til 100 for å tvinge det til å være standard første forsøk for nettverkstrafikk. Jeg gjorde også noe spesielt med min trådløse adapter (wlan0). Jeg har tenkt å slå av det grensesnittet helt, så det var fornuftig for meg.

Også, hvis du vil tvinge en IP -adresse på en enhet (som en NAS), kan du bruke den nederste delen. Gi verten et navn som er meningsfullt for deg, men vet at det aldri blir brukt av noe. Ikke glem semikolonene.

Trinn 6: DHCP og DNS (del 2)

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

Det neste trinnet er å endre dnsmasq.conf -filen …

$ sudo vi /etc/dnsmasq.conf

Vi trenger å kommentere noen få linjer og redigere noen få linjer. Du må også kopiere noen få innstillinger fra filen dhcpcd.conf. To andre spørsmål du må svare på selv er:

Trenger det interne LAN (f.eks. Eth0) DHCP og DNS? Hvilket DHCP -område vil du ha for ditt LAN, og hvor lang skal hver leiekontrakt være?

Begynn med å kommentere noen få linjer:

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

Sett navneserveren din. Se etter linjen som starter 'server =' og gjør den til noe som 'server = 8.8.8.8'.

Angi DHCP -området. Det er mange måter å gjøre dette på. Jeg valgte å oppgi de to endepunkt -IP -ene, masken og lengden på leieavtalen. Rekkevidden min var 10.210.212.20-10.210.212.240, med en nettmaske på 255.255.255.0 og leietid på 12 timer. Jeg anbefaler at du lar noen IP -er ligge øverst og nederst i området, i tilfelle du noen gang trenger å gi noe en statisk IP.

Sett grensesnittet som vil få DNS og DHCP (LAN) ved å endre linjen 'interface =' til å være noe som 'interface = eth0). Legg merke til at jeg spesifikt fortalte det IKKE å tildele en DHCP IP -adresse til det trådløse nettverket mitt. Igjen, jeg har tenkt å slå av det grensesnittet helt, så det var fornuftig for meg.

Trinn 7: DHCP og DNS (del 3)

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

En avledning fra GKs instruksjoner for dette siste trinnet …

Da jeg gikk for å starte RPi på nytt på dette tidspunktet, var dnsmasq -prosessen ikke aktiv. Litt å lete rundt og jeg fant ut at eth0 og eth1 nettverksgrensesnittene ikke begge var aktive før dnsmasq ble startet, så dnsmasq ville mislykkes ved start. Jeg må koble tastatur og mus til RPi og starte dnsmasq manuelt. Dette er ikke ideelt med et hodeløst oppsett. Jeg leste en haug med innlegg som sa at de skulle gjøre forskjellige endringer i innstillinger (f.eks. Deaktivere bind-grensesnitt) og andre ting. Ingenting av det fungerte. Til slutt bestemte jeg meg for å bare skrive et skallskript som ville kjøres hvert 2. minutt og sjekke statusen til dnsmasq. Hvis den ikke kjørte, start den. Jeg antar at denne situasjonen ikke er unik for meg. Så, her er hva du trenger å gjøre:

Lag følgende kode til en fil som heter 'dns_masq_keepalive.sh' på RPi -en.

#!/bin/bash

# Fil: dns_masq_keepalive.sh # august 2019 # Bruk dette med crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) for å sikre at dnsmasq kjører. Tjenesten stopper seg selv hvis # alle grensesnittene nevnt i dhcpcd.conf ikke er oppe før den begynner. Dette løser problemet. # Denne neste linjen vil returnere alle aktive jobber med ordet 'dnsmasq' i dem. Så ikke inkluder 'dnsmasq' i denne # filens navn, ellers vil den returnere den hver gang, og du vil aldri få en omstart. dns_running = $ (ps -e | grep dnsmasq) ekko $ dns_running hvis [-z "$ dns_running"] så #echo Ingen DNSMasq sudo /etc/init.d/dnsmasq restart #else #echo DNSMasq Running fi

Klipp og lim det inn hvis du trenger det. Uansett hva du gjør, må du ikke inkludere 'dnsmasq' i navnet. Skriptet ser etter ordet 'dnsmasq', og hvis skriptet har det i navnet, antar det at tjenesten kjører. Gi også nytt navn til filen slik at den ender med '.sh'. Intructables ville ikke la meg laste opp en.sh-fil-noe som er bra. De resterende instruksjonene antar at filen finnes på: /etc/dns_masq_keepalive.sh.

For det andre, angi tillatelser for filen slik at den kan utføres:

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

Nå vil vi bruke crontab -systemet til å få programmet til å kjøre hvert 2. minutt hver dag. Start crontab:

$ sudo crontab -e

Det bør be deg om å redigere ved hjelp av vi eller noe annet. Noen vil fungere. Når du kan redigere den, legger du til følgende i slutten av filen:

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

Ingen mellomrom i '*/2', men mellomrom mellom stjernene. Lagre og avslutt. Det skal fortelle deg at jobben er planlagt, eller noe sånt.

Trinn 8: Brannmuren

Brannmuren
Brannmuren

Den neste smertefulle prosessen er brannmuren (GKs trinn 11). Raspbian bruker det velkjente iptables -systemet. GKs blogg inneholder tre filer som hjelper deg med å komme dit … firewall.simple, firewall.advanced og firewall.flows. All respekt til GK, men gjør det enkelt for deg selv og bare gå med brannmur. Enkel. Jeg brukte mye tid på å finne ut av iptables -systemet og -reglene. Jeg er glad jeg gjorde det, men det var smertefullt. Så, jeg gir deg de vedlagte to filene for å hjelpe deg … firewall.simple og firewall.clear. Kopier begge disse filene til din /etc -mappen og endre tillatelsene for å gjøre dem kjørbare:

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

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

Før du setter opp noen brannmurregler, må du koble en stasjonær/bærbar datamaskin til RPi eth0 -porten og bekrefte at den får en IP -adresse og at DNS kjører. Den enkleste måten å gjøre dette på er å prøve å pinge et generisk nettsted og deretter en kjent IP -adresse. Pinger også RPi- og ISP -ruteren. Hvis du får resultater, er alt bra, og eventuelle nettverksproblemer du nå støter på er sannsynligvis et resultat av brannmurproblemer.

Den første filen som ble levert startet opprinnelig som GKs firewall.simple -fil (takk igjen, GK!). Jeg har gjort en rekke endringer for å få det til å fungere for dette systemet. Det bør tillate minst HTTP, HTTPS, DNS, DHCP, ping, intern SSH, intern VNC og plex. Plex har kanskje ikke alle åpne porter for alle mulige enheter, men det er en haug med innlegg der ute for å fikse det. Øverst i filen er verdier du må endre til nettverkskonfigurasjonen.

Den andre filen, firewall.clear, er ment å brukes når du tester brannmurreglene. Når du kjører 'sudo /etc/firewall.clear' vil alle brannmurreglene bli slettet, og systemet skal være fullt koblet til Internett. Så hvis du ikke kan få en nettverkstjeneste (som dns) til å fungere med brannmuren. Enkle regler på plass, men det begynner å fungere etter at du har kjørt firewall.clear, vet du at du har et regelproblem. Dette vil egentlig bare være kritisk når du tester reglene dine.

Så vi har brannmurreglene der, vi må få dem til å starte når RPi starter. For å gjøre det, vil vi redigere /etc/rc.local -filen:

$ sudo vi /etc/rc.local

Når du er inne, legger du til følgende i slutten av filen:

ekko “Laster inn iptables -regler”/etc/firewall.simple >>/dev/null

Hvis du velger å legge til system for gjenkjenning av snortinnbrudd, må du redigere denne filen igjen. For nå er det bare å lagre det og starte på nytt.

$ sudo omstart

Trinn 9: Syslog

Syslog
Syslog

To trinn igjen…

Dette er en enkel. Hvis du fremdeles er der, og følger med bloggen til GK, er dette trinn 12. Du må gjøre akkurat det han sier med hensyn til syslog -filen. Her er de forkortede trinnene:

Behold 2 måneders syslog -data …

$ sudo vi /etc/logrotate.conf

Vi må fortelle det å bruke "en uke" som en måling, og deretter beholde 12 av dem. Du trenger følgende to linjer i denne filen. Jeg tror du må endre de eksisterende linjene.

ukerotat 12

Lagre det.

Trinn 10: Innbruddsdeteksjon med fnysing

Innbruddsdeteksjon med snort
Innbruddsdeteksjon med snort

Det siste GK konfigurerer er fnysesystemet. Jeg anbefaler dette også. Du kan følge reglene hans, og jeg kommer ikke til å kopiere dem alle her, med noen få små modifikasjoner. Instruksjonene hans er for ArchLinux distro. Her er de få endringene for Raspbian -distribusjonen vi bruker her. Resten av instruksjonene fungerer fint.

Først må du ikke bruke sudo pacman -S snort for å laste ned og installere snort. Gjør følgende:

$ sudo apt-get install snort

For det andre kan du ikke bekrefte snort med sudo snort -versjon. Bekreft installasjonen med:

$ sudo snort -V

Til slutt, for å få den til å kjøre ved oppstart, må du ikke endre rc.conf -filen, redigere rc.local -filen (igjen) …

$ sudo vi /etc/rc.local

Legg til følgende linjer i slutten av filen:

ekko "Laster snort"

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

Start på nytt, og alt skal fungere på magisk vis.

$ sudo omstart

Trinn 11: Kos deg

Nyt
Nyt

Det burde være det!

Først og fremst kan jeg ikke takke Guillaume Kaddouch nok! Han inspirerte dette.

For det andre, hvis du ikke allerede har koblet fra tastaturet, videoen og musen, kan du gjøre det. Bruk SSH og VNC for å komme tilbake når det er nødvendig.

For å avslutte, er dette kanskje ikke 100% perfekt. Vennligst legg igjen med endringer/forslag/anbefalinger. Målet mitt ville være at dette skal være starten på diskusjonen og mange som liker det!

Takk!!

PS … Bildet er en RPi4 inne i et FLIRC aluminiumsdeksel med en gammel Intel-vifte litt modifisert og glidelåsfestet på toppen. Det er termisk pasta under viften også, bare hvis du lurer på. Jeg fant noe lignende på Internett (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) og bestemte meg for å prøve det selv.

Trinn 12: Endringslogg

Etter hvert som det gjøres endringer i dette instruerbare, vil jeg dokumentere dem her. Hvis du har et problem, sjekk her for å se om du tok tak i gamle instruksjoner eller filer.

25. september 2019:

  • Fast DHCP -regler i brannmur. Enkel
  • Fast DHCP -område i instruksjonene (filene var riktige)
  • Lagt til faste IP-oppgaver i DHCP-instruksjonene

13. oktober 2019

  • Rettet flere skrivefeil
  • Opprettet en andre pi, så jeg ville ha et test -SD -kort for å bytte om nødvendig

Anbefalt: