Innehållsförteckning:
- Tillbehör
- Steg 1: Initial RPi -installation
- Steg 2: Nätverk
- Steg 3: En annan användare
- Steg 4: Syctl -fil
- Steg 5: DHCP och DNS (del 1)
- Steg 6: DHCP och DNS (del 2)
- Steg 7: DHCP och DNS (del 3)
- Steg 8: Brandväggen
- Steg 9: Syslog
- Steg 10: Inträngningsdetektering med fnys
- Steg 11: Njut
- Steg 12: Ändra
Video: Raspberry Pi4 brandvägg: 12 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:42
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
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
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
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
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)
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)
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)
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
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
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
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
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:
Skydda ditt nätverk med en UTM -brandvägg gratis: 4 steg
Skydda ditt nätverk med en UTM -brandvägg gratis: Den här guiden tar upp grunderna för att få en Sophos UTM installerad och igång på ditt hemnätverk. Detta är en gratis och mycket kraftfull programvarupaket. Jag försöker nå den lägsta gemensamma nämnaren, så jag kommer inte att gå in på aktiv katalogintegration, fjärrkontroll
Bridge -brandvägg med OrangePi R1: 4 steg
Bridge Firewall With OrangePi R1: Jag var tvungen att köpa en annan Orange Pi :) Detta berodde på att min SIP -telefon började ringa mitt på natten från konstiga nummer och min VoIP -leverantör föreslog att det berodde på portskanningar. En annan anledning - jag hade hört alltför ofta om att routrar hackades, en
Brandvägg/proxyserver kringgås: 3 steg
Brandvägg/proxyserveromgång: Många andra studenter kom och frågade mig hur jag skulle ta mig igenom brandväggarna och ombuden. IT -personer i skolan blir smartare om elever som använder proxy. Jag tänkte på det här problemet en tid och jag har en lösning. Varför inte skapa dina egna webbsidor
Så här: Ställ in en IPCop Virtual Machine -brandvägg för att skydda din Windows -värd (gratis!): 5 steg
Så här: Ställ in en IPCop Virtual Machine -brandvägg för att skydda din Windows -värd (gratis!): Sammanfattning: Syftet med detta projekt är att använda IpCop (gratis Linux -distribution) i en virtuell maskin för att skydda ett Windows -värdsystem i alla nätverk. IpCop är en mycket kraftfull Linux -baserad brandvägg med avancerade funktioner som: VPN, NAT, Intrusion Det
Hur man säkerhetskopierar en Netscreen -brandvägg: 8 steg
Så här säkerhetskopierar du en Netscreen -brandvägg: Denna instruktion visar ett skript som kan användas för att automatisera säkerhetskopior av en nätverksbrandvägg som kör ScreenOS