Inhoudsopgave:

Raspberry Pi4 Firewall - Ajarnpa
Raspberry Pi4 Firewall - Ajarnpa

Video: Raspberry Pi4 Firewall - Ajarnpa

Video: Raspberry Pi4 Firewall - Ajarnpa
Video: Firewall For Your Home Or Office - For Free! How To Set Up Ipfire On Raspberry Pi. ipfire vs pfsense 2024, Juni-
Anonim
Raspberry Pi4 Firewall
Raspberry Pi4 Firewall

Met de nieuwe Raspbery Pi 4 (RPi4) die net is uitgebracht, besloot ik om een firewall voor thuisgebruik voor mezelf te maken. Na wat rondstruinen op internet, vond ik een geweldig artikel over het onderwerp van Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Het artikel is verbazingwekkend en je zou het moeten lezen voordat je verder gaat - het zal het hier beschreven proces gemakkelijker maken. Het punt is dat dat artikel in 2012 is geschreven en is gebaseerd op de ArchLinux-distro. Niets tegen ArchLinux, maar ik wilde dit maken met de meer gebruikelijke Raspbian-build. De RPi4 kan de verwerkingsvereisten aan. Dus, bedankt, Guillaume, voor de inspiratie!! Deze instructable verwijst terug naar het originele bericht van Guillaume ("GK" in het kort), u wilt waarschijnlijk beide pagina's in uw browser openen.

Een paar belangrijke dingen over mijn firewall:

  • Ik heb de ingebouwde ethernet-aansluiting (eth0) die naar het LAN gaat
  • De ISP-router bevindt zich op de TRENDnet-adapter (eth1)
  • Ik heb de draadloze adapter (wlan0) actief uitgeschakeld
  • Dit is niet gegarandeerd dat je er 100% komt … hopelijk ten minste 99%:) dus geef alsjeblieft feedback/opmerkingen
  • Dit is mijn eerste instructable. Sorry voor alles dat niet voldoet aan de juiste instrucable-normen.

Laten we nu wat plezier hebben…

Benodigdheden

  • Raspberry Pi 4

    • Ik heb de 4GB-versie gebruikt, probeer gerust een andere versie
    • Case (ik hou van de FLIRC, maar dat is jouw beslissing)
    • Oplader
  • MicroSD-kaart, 32 GB of meer (ik heb een kaart van 64 GB gebruikt)
  • TRENDnet USB3.0 Gigabit Ethernet-dongle (model: TU3-ETG)
  • Een paar RJ45-netwerkkabels
  • USB-toetsenbord en muis
  • Een Micro-HDMI-naar-HDMI-kabel (die is aangesloten op een HDMI-monitor)

Dat toetsenbord, de video en de muis kunnen worden verwijderd zodra u SSH en VNC in gebruik kunt nemen.

Stap 1: Initiële RPi-installatie

Initiële RPi-configuratie
Initiële RPi-configuratie

Het eerste dat u moet doen, is uw RPi4 als een nieuw systeem in gebruik nemen. Download en installeer de volledige Raspbian-distributie (Raspbian Buster met desktop en aanbevolen software). U moet een paar keer opnieuw opstarten zodat deze kan uitbreiden en profiteren van de volledige MicroSD-kaart.

Tijdens het opstarten moet u vragen beantwoorden over de locatie, het netwerk, het toetsenbord en de muis. Maak verbinding met een netwerk en laat het updaten.

Laten we ook bevestigen dat alles correct is bijgewerkt en een paar hulpprogramma's krijgen die later kunnen helpen bij het debuggen:

$ sudo apt-get update

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

Ik heb vim NIET geïnstalleerd, en ook geen van stap 8 van GK (vim configureren). Ik heb zojuist de vi-editor gebruikt, omdat deze toch de meeste van die functies heeft. Dit scheelde ook wat tijd en moeite.

Zodra dat is voltooid, laten we de RPi4 zo instellen dat we een monitor kunnen hot-pluggen. Mijn doel was om het zonder hoofd te laten werken, maar als ik een monitor moet aansluiten, zou het worden herkend.

$ sudo vi /boot/config.txt

In dat bestand:

uncomment (verwijder het voorste #-symbool): hdmi_force_hotplug=1

commentaar verwijderen: hdmi_drive=2

voeg optioneel toe: enable_hdmi_sound

Stap 2: Netwerken

Netwerken
Netwerken
Netwerken
Netwerken

Als je de site van GK volgt, is dit stap 3. Maar onthoud dat ik niet veel van zijn eerste stappen in exacte volgorde heb gevolgd.

Toen ik hiermee begon, heb ik de RPi rechtstreeks aangesloten op mijn ISP-router ("naast mijn bestaande netwerk"). Hierdoor kon ik met de configuratie spelen zonder het netwerk te beïnvloeden. Sluit de RPi4 ingebouwde RJ45 aan op je router (of draadloos, als je wilt). Met Raspbian is de eenvoudigste manier om dit te doen het gebruik van de GUI. Klik vanaf het bureaublad op het Raspberry-pictogram > Voorkeuren > Raspberry Pi-configuratie. Zorg ervoor dat u SSH en VNC inschakelt. Hiermee wordt de Real-VNC-serverclient geïnstalleerd. Ik ontdekte dat als je probeert verbinding te maken met de Tight VNC-client, het tegenvallen en wat extra configuratie vereist. Installeer dus nu de Real-VNC-client op uw primaire desktop/laptop (niet op uw RPi4).

SSH zal niet out-of-the-box werken (GK's stap 7). We moeten enkele configuraties wijzigen. Laten we eerst het ssh-configuratiebestand wijzigen. Dit zijn de wijzigingen die ik heb aangebracht. Houd er rekening mee dat ik hier niet de impact van elke verandering heb bestudeerd. Ik heb gedaan wat de site van GK voorstelde. Sommige van deze wijzigingen zijn mogelijk NIET vereist.

$ sudo vi /etc/ssh/sshd_config

Verwijder in dat bestand de opmerkingen over de volgende regels:

HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogNiveau INFOtrictModes jaPubkeyAuthenticatie jaHostBasedAuthentication nee

Negeer Rhosts ja

PrintMotd neePrintLastLog jaTCPKeepAlive ja

En voeg de volgende regels toe:

Protocol 2UsePrivilegeScheiding jaKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthenticatie jaRhostsRSAAuthenticatie nee

En pas de volgende regels aan:

Poort 15507LoginGraceTime 60PermitRootLogin nr

Laten we het snel hebben over die eerste wijziging… poort 15507. SSH draait normaal op poort 22. GK heeft het verplaatst naar 15507 - weet niet waarom. Je kunt alle kanten op, het wijzigen of niet… Als je ervoor kiest om het te wijzigen, moet je "-p 15507" toevoegen aan elk SSH-commando waarmee je verbinding probeert te maken. Als u besluit het over te slaan, let dan op de andere plaatsen waar 15507 in deze instructies wordt genoemd en negeer ze, met name de firewallregels!

Laten we voor deze stap ten slotte het IP-adres van de RPi4 ophalen, zodat we weten waarmee we verbinding moeten maken:

$ ipconfig -a

Zoek de actieve netwerkverbinding (waarschijnlijk op eth0 of wlan0) en noteer dat IP-adres. Nu heb je wat je nodig hebt om op afstand verbinding te maken met de RPi4. Laten we opnieuw opstarten voordat we verder gaan:

$ sudo opnieuw opstarten

Stap 3: Een andere gebruiker

Een andere gebruiker
Een andere gebruiker

Het is het beste om de standaard RPi-gebruikersnaam (pi) niet te gebruiken en u moet zeker het wachtwoord wijzigen. Laten we voor de zekerheid nog een gebruikersaccount toevoegen waarmee u op afstand verbinding kunt maken en verder kunt gaan met (GK's stap 6). Terug op de RPi, laten we een nieuwe gebruiker toevoegen en machtigingen instellen voor de gebruiker voor SSH en het sudo-commando geven:

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

$ sudo wachtwoord [USERNAME]

Voel je vrij om uit te loggen of opnieuw op te starten en dat nieuw aangemaakte account in de toekomst te gebruiken.

Stap 4: Syctl-bestand

Syctl-bestand
Syctl-bestand

De volgende stap is het wijzigen van het bestand /etc/sysctl.conf (stap 9 van GK). Dit bestand wordt gebruikt om enkele kernelinstellingen te wijzigen. We gaan precies doen wat GK zegt te doen. Hier is een vereenvoudigde reeks stappen.

$ sudo vi /etc/sysctl.conf

Verwijder in dat bestand de opmerkingen over de volgende regels:

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

En voeg de volgende regels toe:

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 de service opnieuw met deze nieuwe instellingen en start opnieuw op:

$ sudo sysctl -p

$ sudo opnieuw opstarten

Stap 5: DHCP & DNS (deel 1)

DHCP & DNS (deel 1)
DHCP & DNS (deel 1)

Voor mij waren er twee pijnlijke delen aan dit proces … DHCP & DNS instellen en de firewallregels instellen. Dus hier gaan we met het eerste deel. Als je de site van GK volgt, zijn we bij stap 10.

Hiervoor heeft u een aantal gegevens van uw ISP-router (of huidige firewall) nodig:

  • Het interne IP-adres van de router
  • Een IP-adres dat u kunt gebruiken voor de interface van de RPi4 naar de router
  • De IP's voor een nameserver (of twee)
  • De interfacenaam voor de LAN-verbinding (bijv. eth0 of eth1)
  • De interfacenaam voor de ISP-verbinding (bijvoorbeeld wat u niet voor het LAN hebt gebruikt)

Mogelijk moet u ook de instellingen van de router wijzigen om de RPi4 een statisch IP-adres te geven (bullet 2, hierboven). Tenminste, dat is wat ik deed.

Laten we eerst het bestand dhcpcd.conf aanpassen…

$ sudo vi /etc/dhcpcd.conf

Maak een opmerking over deze regels:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

Voor elke netwerkinterface moet u de netwerkdetails instellen. Ze zouden er ongeveer zo uit moeten zien:

# Statisch voor de interface naar de ISP

interface eth1 statisch ip_address=192.168.1.static routers=192.168.1.254 statisch domain_name_servers=8.8.8.8 8.8.4.4 metrisch 100 # Statisch voor de interface naar de LAN-interface eth0 statisch ip_address=10.210.212.static routers=10.210.212.1 statisch 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 #Geef commentaar op deze sectie als u een IP-adres op een apparaat wilt forceren. De naam achter 'host' #is betekenisloos voor het systeem. Voer het MAC-adres van het apparaat en het gewenste #IP-adres in. Zorg ervoor dat het buiten het dhcp-bereik is. Herhaal indien nodig. #host [IETS] { # hardware ethernet xx:xx:xx:xx:xx:xx; # vast adres 10.210.212.250; #}

Zorg ervoor dat u nummers gebruikt die voor u werken. Bovenstaande IP's zijn voor mijn netwerk, met uitzondering van de nameservers die Google zijn. Merk op dat ik ook de statistiek voor de ISP op 100 heb gezet om dat te forceren als de standaard eerste poging voor netwerkverkeer. Ik heb ook specifiek niets gedaan aan mijn draadloze adapter (wlan0). Ik ben van plan om die interface volledig uit te schakelen, dus het was logisch voor mij.

Als u een IP-adres op een apparaat (zoals een NAS) wilt forceren, gebruik dan dat onderste gedeelte. Geef de host een naam die voor u betekenisvol is, maar weet dat deze nooit door iets wordt gebruikt. Vergeet de puntkomma's niet.

Stap 6: DHCP & DNS (deel 2)

DHCP & DNS (deel 2)
DHCP & DNS (deel 2)

De volgende stap is om het bestand dnsmasq.conf te wijzigen…

$ sudo vi /etc/dnsmasq.conf

We moeten een paar regels verwijderen en een paar regels bewerken. U moet ook enkele instellingen kopiëren uit het bestand dhcpcd.conf. Twee andere vragen die u voor uzelf moet beantwoorden, zijn:

Heeft het interne LAN (bijv. eth0) DHCP en DNS nodig? Welk DHCP-bereik wilt u voor uw LAN en hoe lang moet elke lease zijn?

Begin met het verwijderen van commentaar op een paar regels:

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

Stel uw naamserver in. Zoek naar de regel die begint met 'server=' en maak er iets van als 'server=8.8.8.8'.

Stel uw DHCP-bereik in. Er zijn veel manieren om dit te doen. Ik heb ervoor gekozen om de twee eindpunt-IP's, het masker en de lengte van de lease op te geven. Mijn bereik was 10.210.212.20-10.210.212.240, met een netmask van 255.255.255.0 en een leasetijd van 12 uur. Ik raad aan dat je een aantal IP's aan de boven- en onderkant van je bereik laat voor het geval je ooit iets een statisch IP moet geven.

Stel de interface in die DNS en DHCP (het LAN) krijgt door de regel 'interface=' te wijzigen in zoiets als 'interface=eth0). Merk op dat ik het specifiek heb verteld om GEEN DHCP IP-adres toe te wijzen aan mijn draadloze netwerk. Nogmaals, ik ben van plan die interface volledig uit te schakelen, dus het was logisch voor mij.

Stap 7: DHCP & DNS (deel 3)

DHCP & DNS (deel 3)
DHCP & DNS (deel 3)

Een afleiding van de instructies van GK voor deze laatste stap…

Toen ik mijn RPi op dit punt ging herstarten, was het dnsmasq-proces niet actief. Een beetje rondneuzen en ik ontdekte dat mijn eth0- en eth1-netwerkinterfaces niet allebei actief waren voordat dnsmasq werd gestart, dus dnsmasq zou mislukken bij het starten. Ik zou een toetsenbord en muis op de RPi moeten aansluiten en dnsmasq handmatig opnieuw moeten opstarten. Dit is niet ideaal met een headless setup. Ik las een aantal berichten waarin stond dat ik verschillende wijzigingen in instellingen moest aanbrengen (bijv. Bind-interface uitschakelen) en andere dingen. Niets van het werkte. Uiteindelijk besloot ik om gewoon een shellscript te schrijven dat elke 2 minuten zou worden uitgevoerd en de status van dnsmasq te controleren. Als het niet actief was, start het dan. Ik neem aan dat deze situatie niet uniek voor mij is. Dus, hier is wat je moet doen:

Maak van de volgende code een bestand met de naam 'dns_masq_keepalive.sh' op je RPi.

#!/bin/bash

# Bestand: dns_masq_keepalive.sh # Augustus 2019 # Gebruik dit met crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) om ervoor te zorgen dat dnsmasq wordt uitgevoerd. De service stopt zichzelf als # alle interfaces genoemd in dhcpcd.conf niet actief zijn voordat deze begint. Dit lost het probleem op. # Deze volgende regel retourneert alle actieve jobs met het woord 'dnsmasq' erin. Dus neem 'dnsmasq' niet op in de naam van dit # bestand, anders zal het elke keer terugkeren en zul je nooit een herstart hebben. 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 Running fi

Knip en plak het indien nodig. Wat je ook doet, gebruik 'dnsmasq' niet in de naam. Het script zoekt naar het woord 'dnsmasq' en als het script het in de naam heeft, gaat het ervan uit dat de service actief is. Hernoem het bestand ook zodat het eindigt op '.sh'. Intructables liet me geen '.sh'-bestand uploaden - wat goed is. De overige instructies gaan ervan uit dat het bestand bestaat op: /etc/dns_masq_keepalive.sh.

Ten tweede, stel permissies in voor het bestand zodat het kan worden uitgevoerd:

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

Nu zullen we het crontab-systeem gebruiken om het programma elke 2 minuten van elke dag te laten draaien. Crontab starten:

$ sudo crontab -e

Het zou u moeten vragen om te bewerken met vi of iets anders. Elke zal werken. Zodra u het kunt bewerken, voegt u het volgende toe aan het einde van het bestand:

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

Geen spaties in de '*/2', maar spaties tussen de sterretjes. Opslaan en afsluiten. Het moet u vertellen dat de taak is gepland, of iets dergelijks.

Stap 8: De firewall

De firewall
De firewall

Het volgende pijnlijke proces is de firewall (stap 11 van GK). Raspbian gebruikt het bekende iptables-systeem. De blog van GK biedt drie bestanden om je te helpen daar te komen… firewall.simple, firewall.advanced en firewall.flows. Alle respect voor GK, maar maak het jezelf gemakkelijk en ga voor firewall.simple. Ik heb veel tijd besteed aan het uitzoeken van het iptables-systeem en de regels. Ik ben blij dat ik het gedaan heb, maar het was pijnlijk. Dus ik geef je de bijgevoegde twee bestanden om je te helpen … firewall.simple en firewall.clear. Kopieer beide bestanden naar uw /etc-map en wijzig de machtigingen om ze uitvoerbaar te maken:

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

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

Voordat u firewallregels instelt, sluit u een desktop/laptop aan op uw RPi eth0-poort en controleert u of deze een IP-adres krijgt en DNS actief is. De eenvoudigste manier om dit te doen, is door een generieke site te pingen en vervolgens een bekend IP-adres. Ping ook uw RPi- en ISP-router. Als u resultaten krijgt, is alles goed en alle netwerkproblemen die u nu tegenkomt, zijn waarschijnlijk het gevolg van firewallproblemen.

Het eerste verstrekte bestand begon oorspronkelijk als het firewall.simple-bestand van GK (nogmaals bedankt, GK!). Ik heb een aantal wijzigingen aangebracht om het voor dit systeem te laten werken. Het moet ten minste HTTP, HTTPS, DNS, DHCP, ping, interne SSH, interne VNC en plex toestaan. Plex heeft misschien niet alle open poorten voor elk mogelijk apparaat, maar er zijn een heleboel berichten om dat op te lossen. Boven aan het bestand staan waarden die u moet wijzigen in uw netwerkconfiguratie.

Het tweede bestand, firewall.clear, is bedoeld om te worden gebruikt bij het testen van uw firewallregels. Wanneer u 'sudo /etc/firewall.clear' uitvoert, worden alle firewallregels gewist en moet het systeem volledig verbonden zijn met internet. Dus als je een netwerkservice (zoals dns) niet kunt laten werken met de firewall.simple-regels, maar het begint te werken nadat je firewall.clear hebt uitgevoerd, weet je dat je een regelprobleem hebt. Dit is echt alleen van cruciaal belang bij het testen van uw regels.

Dus we hebben daar de firewall-regels, we moeten ze laten starten wanneer de RPi start. Om dat te doen, zullen we het bestand /etc/rc.local bewerken:

$ sudo vi /etc/rc.local

Eenmaal binnen voeg je het volgende toe aan het einde van het bestand:

echo “IPtables-regels laden”/etc/firewall.simple >> /dev/null

Als u ervoor kiest om het snort-intrusion-detectiesysteem toe te voegen, moet u dit bestand opnieuw bewerken. Voor nu gewoon opslaan en opnieuw opstarten.

$ sudo opnieuw opstarten

Stap 9: Syslog

Syslog
Syslog

Nog twee stappen…

Dit is een makkelijke. Als je er nog bent en de blog van GK volgt, is dit stap 12. Je moet precies doen wat hij zegt met betrekking tot het syslog-bestand. Dit zijn de verkorte stappen:

Bewaar 2 maanden aan syslog-gegevens…

$ sudo vi /etc/logrotate.conf

We moeten hem vertellen dat hij 'één week' als maatstaf moet gebruiken en er dan 12 moeten houden. U hebt de volgende twee regels nodig in dit bestand. Ik denk dat je de bestaande regels moet wijzigen.

wekelijks draaien 12

Bewaar het.

Stap 10: Inbraakdetectie met Snort

Inbraakdetectie met Snort
Inbraakdetectie met Snort

Het laatste dat GK configureert, is het snort-systeem. Ik raad dit ook aan. Je kunt zijn regels volgen, en ik ga ze niet allemaal hier kopiëren, met een paar kleine aanpassingen. Zijn instructies zijn voor de ArchLinux-distro. Hier zijn de paar wijzigingen voor de Raspbian-distributie die we hier gebruiken. De rest van de instructies werken prima.

Gebruik eerst sudo pacman -S snort niet om snort te downloaden en te installeren. Doe het volgende:

$ sudo apt-get install snort

Ten tweede kun je snort niet verifiëren met sudo snort -version. Controleer de installatie met:

$ sudo snuiven -V

Ten slotte, om het bij het opstarten te laten werken, moet u het rc.conf-bestand niet wijzigen, maar het rc.local-bestand (opnieuw) bewerken…

$ sudo vi /etc/rc.local

Voeg de volgende regels toe aan het einde van het bestand:

echo “Snort laden”

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

Start nu opnieuw op en het zou allemaal op magische wijze moeten werken.

$ sudo opnieuw opstarten

Stap 11: Geniet ervan

Genieten van
Genieten van

Dat zou het moeten zijn!

Allereerst kan ik Guillaume Kaddouch niet genoeg bedanken! Hij inspireerde dit.

Ten tweede, als u uw toetsenbord, video en muis nog niet hebt losgekoppeld, kunt u dat doen. Gebruik SSH en VNC om weer toegang te krijgen, indien nodig.

Om te eindigen, dit is misschien niet 100% perfect. Gelieve terug te posten met wijzigingen/suggesties/aanbevelingen. Mijn doel zou zijn dat dit het begin van de discussie is en dat veel mensen ervan genieten!

Bedankt!!

PS… De afbeelding is een RPi4 in een FLIRC aluminium behuizing met een oude Intel-ventilator die enigszins is aangepast en met een ritssluiting aan de bovenkant is vastgemaakt. Er zit ook koelpasta onder de ventilator, voor het geval je het je afvroeg. Ik vond iets soortgelijks op internet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) en besloot het zelf te proberen.

Stap 12: Changelog

Als er wijzigingen worden aangebracht in dit instructable, zal ik ze hier documenteren. Als je een probleem hebt, kijk dan hier om te zien of je oude instructies of bestanden hebt gepakt.

25 september 2019:

  • Vaste DHCP-regels in firewall.simple
  • Vast DHCP-bereik in instructies (bestanden waren correct)
  • Vaste IP-toewijzingen toegevoegd aan DHCP-instructies

13 oktober 2019

  • Meerdere typefouten verholpen
  • Een tweede pi gemaakt, zodat ik een test-SD-kaart zou hebben om te verwisselen, indien nodig

Aanbevolen: