Innehållsförteckning:

Raspberry Pi4 brandvägg: 12 steg
Raspberry Pi4 brandvägg: 12 steg

Video: Raspberry Pi4 brandvägg: 12 steg

Video: Raspberry Pi4 brandvägg: 12 steg
Video: Raspberry Pi CM4 (delidding or scalping) 2024, Juni
Anonim
Raspberry Pi4 brandvägg
Raspberry Pi4 brandvägg

Med den nya Raspbery Pi 4 (RPi4) som just släppts bestämde jag mig för att göra mig till en brandvägg för hemmabruk. Efter att ha snubblat runt på Internet hittade jag en bra artikel om ämnet av Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Artikeln är fantastisk, och du bör läsa den innan du går vidare-det kommer att göra processen som beskrivs här lättare. Saken är att den artikeln skrevs 2012 och är baserad på ArchLinux distro. Inget mot ArchLinux, men jag ville göra detta med den vanligare Raspbian -byggnaden. RPi4 klarar bearbetningskraven. Så tack Guillaume för inspirationen !! Denna instruerbara kommer att referera tillbaka till Guillaumes ("GK" för korta) ursprungliga inlägg, du kommer sannolikt att vilja ha båda sidorna öppna i din webbläsare.

Ett par viktiga saker om min brandvägg:

  • Jag har den inbyggda ethernet-uttaget (eth0) till LAN
  • ISP -routern finns på TRENDnet -adaptern (eth1)
  • Jag har aktivt inaktiverat den trådlösa adaptern (wlan0)
  • Detta kan inte garantera att du kommer dit 100% … förhoppningsvis minst 99%:) så ge feedback/kommentarer
  • Detta är min första instruerbara. Ursäkta allt som inte följer lämpliga instruktionsnormer.

Nu ska vi ha lite kul …

Tillbehör

  • Hallon Pi 4

    • Jag använde 4 GB -versionen, prova gärna en annan version
    • Case (jag gillar FLIRC, men det är ditt samtal)
    • Strömadapter
  • MicroSD -kort, 32 GB eller högre (jag använde ett 64 GB -kort)
  • TRENDnet USB3.0 Gigabit Ethernet Dongle (modell: TU3-ETG)
  • Ett par RJ45 -nätverkskablar
  • USB -tangentbord och mus
  • En mikro-HDMI till HDMI-kabel (som är ansluten till en HDMI-skärm)

Det tangentbordet, videon och musen kan tas bort när du kan få SSH och VNC igång.

Steg 1: Initial RPi -installation

Initial RPi -inställning
Initial RPi -inställning

Det första du ska göra är att få din RPi4 igång som ett nytt system. Ladda ner och installera hela Raspbian -distributionen (Raspbian Buster med skrivbord och rekommenderad programvara). Du måste starta om ett par gånger så att det kan expandera och dra nytta av hela MicroSD -kortet.

När det startar måste du svara på frågor om lokalitet, nätverk, tangentbord och mus. Anslut till ett nätverk och låt det uppdateras.

Låt oss också bekräfta att allt uppdateras korrekt och få ett par verktyg som kan hjälpa till med felsökning senare:

$ sudo apt-get uppdatering

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

Jag installerade INTE vim, inte heller något av GK: s steg 8 (konfigurera vim). Jag har precis använt vi -editoren eftersom den har de flesta av dessa funktioner i alla fall. Detta sparade också lite tid och ansträngning.

När det är klart kan vi ställa in RPi4 så att vi kan ansluta en bildskärm till en varm anslutning. Mitt mål var att få den att köra utan huvud, men om jag behöver ansluta en bildskärm skulle den känna igen.

$ sudo vi /boot/config.txt

I den filen:

uncomment (ta bort den främre #-symbolen): hdmi_force_hotplug = 1

uncomment: hdmi_drive = 2

valfritt, lägg till: enable_hdmi_sound

Steg 2: Nätverk

Nätverk
Nätverk
Nätverk
Nätverk

Om du följer med på GK: s webbplats är detta steg 3. Men kom ihåg att jag inte följde många av hans första steg i exakt ordning.

När jag först startade detta kopplade jag RPi direkt till min ISP -router ("bredvid mitt befintliga nätverk"). Detta tillät mig att spela med konfigurationen utan att påverka nätverket. Anslut den inbyggda RJ45 RP45 till din router (eller trådlöst, om du vill). Med Raspbian är det enklaste sättet att göra detta med hjälp av GUI. Klicka på hallonikonen> Inställningar> Raspberry Pi -konfiguration från skrivbordet. Var noga med att aktivera SSH och VNC. Detta kommer att installera Real-VNC-serverklienten. Jag upptäckte att om du försöker ansluta till Tight VNC -klienten kommer den att kasta passningar och kräver ytterligare konfiguration. Så, vid denna tidpunkt installera Real-VNC-klienten på din primära stationära/bärbara dator (inte din RPi4).

SSH fungerar inte direkt (GK: s steg 7). Vi måste ändra vissa konfigurationer. Låt oss först ändra ssh -konfigurationsfilen. Här är de ändringar jag gjorde. Tänk på att jag inte studerade effekten av varje förändring här. Jag gjorde vad GK: s webbplats föreslog. Vissa av dessa ändringar kan INTE krävas.

$ sudo vi/etc/ssh/sshd_config

Avmarkera följande rader i den filen:

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

Ignorera Rhosts ja

PrintMotd noPrintLastLog jaTCPKeepAlive ja

Och lägg till följande rader:

Protokoll 2UsePrivilegeSeparation jaKeyRegenerationInterval 3600ServerKeyBits 768RSAAutentisering jaRhostsRSAAutentisering nr

Och ändra följande rader:

Port 15507LoginGraceTime 60PermitRootLogin nr

Låt oss snabbt prata om den första ändringen … port 15507. SSH körs normalt på port 22. GK flyttade den till 15507-vet inte varför. Du kan ändra hur som helst eller inte … Om du väljer att ändra det måste du lägga till "-p 15507" till alla SSH-kommandon du försöker ansluta till. Om du bestämmer dig för att hoppa över det, håll utkik efter de andra platserna som 15507 nämns i dessa instruktioner och ignorera dem, särskilt brandväggsreglerna!

Slutligen för detta steg, låt oss få RPi4: s IP -adress så att vi vet vad vi ska ansluta till:

$ ipconfig -a

Hitta den aktiva nätverksanslutningen (troligen på eth0 eller wlan0) och skriv ner den IP -adressen. Nu har du det du behöver för att fjärransluta till RPi4. Låt oss starta om innan vi fortsätter:

$ sudo starta om

Steg 3: En annan användare

En annan användare
En annan användare

Det är bäst att inte använda standard RPi -användarnamn (pi), och du bör verkligen ändra lösenordet. För att vara säker, låt oss lägga till ett annat användarkonto som du kan använda för att fjärransluta och fortsätta med (GK: s steg 6). Tillbaka på RPi, låt oss lägga till en ny användare och ställa in behörigheter för användaren till SSH och utfärda sudo -kommandot:

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

$ sudo passwd [USERNAME]

Logga ut eller starta om och använd det nyskapade kontot framöver.

Steg 4: Syctl -fil

Syctl -fil
Syctl -fil

Nästa steg är att ändra filen /etc/sysctl.conf (GK: s steg 9). Denna fil används för att ändra några kärninställningar. Vi kommer att göra exakt vad GK säger att göra. Här är en förenklad uppsättning steg.

$ sudo vi /etc/sysctl.conf

Avmarkera följande rader i den 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

Och lägg till följande rader:

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

Starta om tjänsten med dessa nya inställningar och starta om:

$ sudo sysctl -p

$ sudo starta om

Steg 5: DHCP och DNS (del 1)

DHCP och DNS (del 1)
DHCP och DNS (del 1)

För mig fanns det två smärtsamma delar i denna process … Konfigurera DHCP och DNS och konfigurera brandväggsreglerna. Så här går vi med den första delen. Om du följer med på GK: s webbplats är vi på steg 10.

För att göra detta behöver du några uppgifter från din ISP -router (eller nuvarande brandvägg):

  • Routerens interna IP -adress
  • En IP -adress som du kan använda för RPi4: s gränssnitt till routern
  • IP -adresserna för en namnserver (eller två)
  • Gränssnittsnamnet för LAN -anslutningen (t.ex. eth0 eller eth1)
  • Gränssnittsnamnet för ISP -anslutningen (t.ex. vad du inte använde för LAN)

Du kan också behöva ändra routerns inställningar för att ge RPi4 en statisk IP -adress (punkt 2 ovan). Åtminstone, det var vad jag gjorde.

Låt oss först ändra dhcpcd.conf -filen …

$ sudo vi /etc/dhcpcd.conf

Kommentera inte dessa rader:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

För varje nätverksgränssnitt måste du ange nätverksdetaljer. De borde se ut ungefär så här:

# Statiskt för gränssnittet till ISP

gränssnitt 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 för gränssnittet till LAN -gränssnittet 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 #Kommentera detta avsnitt om du vill tvinga fram en IP -adress på en enhet. Namnet efter "host" #är meningslöst för systemet. Ange enhetens MAC -adress samt önskad #IP -adress. Se till att det är utanför dhcp -intervallet. Upprepa vid behov. #host [ALLT] { # hårdvara ethernet xx: xx: xx: xx: xx: xx; # fast adress 10.210.212.250; #}

Var noga med att använda siffror som fungerar för dig. IP -adresserna ovan är för mitt nätverk, med undantag för namnservrarna som är Google. Lägg märke till att jag också ställde in måttet för ISP till 100 för att tvinga det till att vara standard första försök för nätverkstrafik. Jag gjorde också ingenting åt min trådlösa adapter (wlan0). Jag tänker stänga av det gränssnittet helt, så det var vettigt för mig.

Om du vill tvinga fram en IP -adress på en enhet (som en NAS), använd den nedre delen. Ge värden ett namn som är meningsfullt för dig, men vet att det aldrig används av någonting. Glöm inte semikolon.

Steg 6: DHCP och DNS (del 2)

DHCP och DNS (del 2)
DHCP och DNS (del 2)

Nästa steg är att ändra dnsmasq.conf -filen …

$ sudo vi /etc/dnsmasq.conf

Vi måste avmarkera några rader och redigera några rader. Du måste också kopiera några inställningar från filen dhcpcd.conf. Två andra frågor du behöver svara själv är:

Behöver det interna LAN (t.ex. eth0) DHCP och DNS? Vilket DHCP -område vill du ha för ditt LAN och hur lång tid ska varje leasingavtal vara?

Börja med att inte kommentera några rader:

falus-privno-dhcp-interface = wlan0bind-interfacesdhcp-name-match = set: wpad-ignorera, wpaddhcp-ignorera-namn = tagg: wpad-ignorera

Ställ in din namnserver. Leta efter raden som startar 'server =' och gör den till ungefär 'server = 8.8.8.8'.

Ställ in ditt DHCP -intervall. Det finns många sätt att göra detta. Jag valde att tillhandahålla de två slutpunktens IP: er, masken och hyresavtalets längd. Mitt intervall var 10.210.212.20-10.210.212.240, med en nätmask på 255.255.255.0 och leasingtid på 12 timmar. Jag rekommenderar att du lämnar några IP -adresser högst upp och längst ner i ditt sortiment om du skulle behöva ge något en statisk IP.

Ställ in gränssnittet som kommer att få DNS och DHCP (LAN) genom att ändra raden 'interface =' till något liknande 'interface = eth0). Lägg märke till att jag specifikt sa till det INTE att tilldela ett DHCP IP -adress till mitt trådlösa nätverk. Återigen tänker jag stänga av det gränssnittet helt, så det var vettigt för mig.

Steg 7: DHCP och DNS (del 3)

DHCP och DNS (del 3)
DHCP och DNS (del 3)

En avledning från GK: s instruktioner för detta sista steg …

När jag gick för att starta om min RPi vid denna tidpunkt var dnsmasq -processen inte aktiv. Lite peta runt och jag fann att mina eth0 och eth1 nätverksgränssnitt inte var båda aktiva innan dnsmasq startades, så dnsmasq skulle misslyckas vid start. Jag måste ansluta ett tangentbord och en mus till RPi och manuellt starta om dnsmasq. Detta är inte perfekt med en huvudlös inställning. Jag läste ett gäng inlägg som sa att de skulle göra olika ändringar i inställningar (t.ex. inaktivera bind-gränssnitt) och andra saker. Inget av det fungerade. Till slut bestämde jag mig för att helt enkelt skriva ett skalskript som skulle köras varannan minut och kontrollera statusen för dnsmasq. Om det inte körde, starta det. Jag antar att denna situation inte är unik för mig. Så här är vad du behöver göra:

Gör följande kod till en fil som heter 'dns_masq_keepalive.sh' på din RPi.

#!/bin/bash

# Fil: dns_masq_keepalive.sh # augusti 2019 # Använd detta med crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) för att se till att dnsmasq körs. Tjänsten stoppar sig själv om # alla gränssnitt som nämns i dhcpcd.conf inte är uppe innan det börjar. Detta löser problemet. # Denna nästa rad returnerar alla aktiva jobb med ordet "dnsmasq" i dem. Så inkludera inte 'dnsmasq' i den här # filens namn, annars kommer den att returnera den varje gång och du kommer aldrig att få en omstart. dns_running = $ (ps -e | grep dnsmasq) eko $ dns_running om [-z "$ dns_running"] då #echo Ingen DNSMasq sudo /etc/init.d/dnsmasq starta om #else #echo DNSMasq Running fi

Klipp ut och klistra in den om du behöver. Vad du än gör, inkludera inte "dnsmasq" i namnet. Skriptet letar efter ordet 'dnsmasq' och om manuset har det i namnet antar det att tjänsten körs. Byt också namn på filen så att den slutar med '.sh'. Intructables låter mig inte ladda upp en ".sh" -fil-vilket är bra. De återstående instruktionerna förutsätter att filen finns på: /etc/dns_masq_keepalive.sh.

För det andra, ställ in behörigheter för filen så att den kan köras:

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

Nu kommer vi att använda crontab -systemet för att få programmet att köras varannan minut varje dag. Starta crontab:

$ sudo crontab -e

Det bör uppmana dig att redigera med vi eller något annat. Vilka som helst fungerar. När du kan redigera den lägger du till följande i slutet av filen:

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

Inga mellanslag i "*/2", utan mellanslag mellan asteriskerna. Spara och avsluta. Det borde berätta att jobbet är schemalagt, eller något liknande.

Steg 8: Brandväggen

Brandväggen
Brandväggen

Nästa smärtsamma process är brandväggen (GK: s steg 11). Raspbian använder det välkända iptables -systemet. GK: s blogg innehåller tre filer som hjälper dig att komma dit … firewall.simple, firewall.advanced och firewall.flows. All respekt för GK, men gör det enkelt för dig själv och bara gå med brandvägg. Enkel. Jag ägnade mycket tid åt att försöka lista ut iptables -systemet och reglerna. Jag är glad att jag gjorde det, men det var smärtsamt. Så, jag ger dig de bifogade två filerna för att hjälpa dig … firewall.simple och firewall.clear. Kopiera båda dessa filer till din /etc -mapp och ändra behörigheterna för att göra dem körbara:

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

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

Innan du konfigurerar några brandväggsregler ansluter du en stationär/bärbar dator till din RPi eth0 -port och bekräftar att den får en IP -adress och att DNS körs. Det enklaste sättet att göra detta är att försöka pinga en generisk webbplats och sedan en känd IP -adress. Pingar också din RPi och ISP -router. Om du får resultat är allt bra och eventuella nätverksproblem som du stöter på kommer troligen att bero på brandväggsproblem.

Den första filen som tillhandahålls startade ursprungligen som GK: s firewall.simple -fil (tack igen, GK!). Jag gjorde en massa ändringar för att få det att fungera för det här systemet. Det bör tillåta åtminstone HTTP, HTTPS, DNS, DHCP, ping, intern SSH, intern VNC och plex. Plex har kanske inte alla öppna portar för alla möjliga enheter, men det finns en massa inlägg där ute för att fixa det. Högst upp i filen finns värden som du måste ändra till din nätverkskonfiguration.

Den andra filen, firewall.clear, är avsedd att användas när du testar dina brandväggsregler. När du kör 'sudo /etc/firewall.clear' rensas alla brandväggsregler och systemet bör vara helt anslutet till Internet. Så om du inte kan få en nätverkstjänst (som dns) att fungera med brandväggen. Enkla regler på plats, men det börjar fungera efter att du har kört firewall.clear, vet du att du har ett regelproblem. Detta är verkligen bara kritiskt när du testar dina regler.

Så vi har brandväggsreglerna där, vi måste få dem att starta när RPi startar. För att göra det kommer vi att redigera filen /etc/rc.local:

$ sudo vi /etc/rc.local

När du väl är inne lägger du till följande i slutet av filen:

echo “Loading iptables rules” /etc/firewall.simple >>/dev/null

Om du väljer att lägga till systemet för upptäckt av snortintrång måste du redigera den här filen igen. För nu är det bara att spara det och starta om.

$ sudo starta om

Steg 9: Syslog

Syslog
Syslog

Två steg kvar…

Det här är en enkel. Om du fortfarande är där och följer med GK: s blogg är detta steg 12. Du måste göra exakt vad han säger om syslog -filen. Här är de förkortade stegen:

Behåll 2 månaders syslog -data …

$ sudo vi /etc/logrotate.conf

Vi måste berätta för den att använda "en vecka" som en mätning och sedan behålla 12 av dem. Du behöver följande två rader i den här filen. Jag tror att du kommer att behöva ändra de befintliga linjerna.

veckorotation 12

Spara den.

Steg 10: Inträngningsdetektering med fnys

Intrångsdetektering med fnys
Intrångsdetektering med fnys

Det sista GK konfigurerar är fnyssystemet. Jag rekommenderar detta också. Du kan följa hans regler, och jag kommer inte att kopiera dem alla här, med några mindre ändringar. Hans instruktioner är för ArchLinux distro. Här är de få ändringarna för Raspbian -distributionen vi använder här. Resten av instruktionerna fungerar bra.

För det första, använd inte sudo pacman -S snort för att ladda ner och installera snort. Gör följande:

$ sudo apt-get install snort

För det andra kan du inte verifiera snort med sudo snort -version. Verifiera installationen med:

$ sudo snort -V

Slutligen, för att få den att köra vid start, ändra inte rc.conf -filen, redigera rc.local -filen (igen) …

$ sudo vi /etc/rc.local

Lägg till följande rader i slutet av filen:

eko “Laddar snort”

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

Nu starta om och allt ska fungera magiskt.

$ sudo starta om

Steg 11: Njut

Njut av
Njut av

Det borde vara det!

Först och främst kan jag inte tacka Guillaume Kaddouch nog! Han inspirerade detta.

För det andra, om du inte redan har kopplat bort tangentbordet, videon och musen kan du göra det. Använd SSH och VNC för att komma in igen vid behov.

För att avsluta är detta kanske inte 100% perfekt. Skicka gärna tillbaka med ändringar/förslag/rekommendationer. Mitt mål är att detta ska vara början på diskussionen och många människor njuter!

Tack!!

PS … Bilden är en RPi4 inuti ett FLIRC-aluminiumfodral med en gammal Intel-fläkt något modifierad och dragkedjad på toppen. Det finns termisk pasta under fläkten också, bara om du undrar. Jag hittade något liknande på Internet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) och bestämde mig för att prova själv.

Steg 12: Ändra

Eftersom ändringar görs i denna instruerbara, kommer jag att dokumentera dem här. Om du har ett problem, kolla här om du har tagit gamla instruktioner eller filer.

25 september 2019:

  • Fixade DHCP -regler i brandvägg. Enkel
  • Fast DHCP -intervall i instruktionerna (filerna var korrekta)
  • Lagt till fasta IP-tilldelningar till DHCP-instruktioner

13 oktober 2019

  • Fixade flera stavfel
  • Skapade en andra pi så jag skulle ha ett test -SD -kort att byta om det behövs

Rekommenderad: