Sommario:

Firewall Raspberry Pi4: 12 passaggi
Firewall Raspberry Pi4: 12 passaggi

Video: Firewall Raspberry Pi4: 12 passaggi

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

Con il nuovo Raspbery Pi 4 (RPi4) appena rilasciato, ho deciso di farmi un firewall per uso domestico. Dopo aver inciampato su Internet, ho trovato un ottimo articolo sull'argomento di Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). L'articolo è fantastico e dovresti leggerlo prima di andare avanti: renderà più semplice il processo qui descritto. Il fatto è che quell'articolo è stato scritto nel 2012 e si basa sulla distribuzione ArchLinux. Niente contro ArchLinux, ma volevo farlo usando la build Raspbian più comune. L'RPi4 è in grado di gestire i requisiti di elaborazione. Quindi, grazie, Guillaume, per l'ispirazione!! Questa istruzione farà riferimento al post originale di Guillaume ("GK" in breve), probabilmente vorrai avere entrambe le pagine aperte nel tuo browser.

Un paio di cose chiave sul mio firewall:

  • Ho il jack ethernet integrato (eth0) che va alla LAN
  • Il router dell'ISP è sull'adattatore TRENDnet (eth1)
  • Ho disabilitato attivamente l'adattatore wireless (wlan0)
  • Questo non è garantito per farti arrivare al 100%… si spera almeno al 99%:) quindi per favore fornisci feedback/commenti
  • Questo è il mio primo istruibile. Ci scusiamo per tutto ciò che non segue le norme istruttive appropriate.

Ora divertiamoci un po'…

Forniture

  • Lampone Pi 4

    • Ho usato la versione da 4 GB, sentiti libero di provare una versione diversa
    • Caso (mi piace il FLIRC, ma questa è la tua chiamata)
    • Adattatore di alimentazione
  • Scheda MicroSD, 32 GB o superiore (ho usato una scheda da 64 GB)
  • Dongle Gigabit Ethernet USB3.0 TRENDnet (Modello: TU3-ETG)
  • Un paio di cavi di rete RJ45
  • Tastiera e mouse USB
  • Un cavo da Micro-HDMI a HDMI (collegato a un monitor HDMI)

Quella tastiera, video e mouse possono essere rimossi una volta che sei in grado di far funzionare SSH e VNC.

Passaggio 1: configurazione iniziale dell'RPi

Configurazione iniziale RPi
Configurazione iniziale RPi

La prima cosa da fare è far funzionare il tuo RPi4 come un nuovo sistema. Scarica e installa la distribuzione completa di Raspbian (Raspbian Buster con desktop e software consigliato). Dovrai riavviare un paio di volte in modo che possa espandersi e sfruttare l'intera scheda MicroSD.

All'avvio, dovrai rispondere a domande su località, rete, tastiera e mouse. Connettiti a una rete e consenti l'aggiornamento.

Confermiamo anche che tutto è stato aggiornato correttamente e otteniamo un paio di utilità che potrebbero aiutare a eseguire il debug in un secondo momento:

$ sudo apt-get update

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

NON ho installato vim, né ho eseguito nessuno dei passaggi 8 di GK (configurare vim). Ho appena usato l'editor vi poiché ha comunque la maggior parte di queste funzionalità. Questo ha anche permesso di risparmiare tempo e fatica.

Una volta completato, impostiamo l'RPi4 in modo da poter collegare a caldo un monitor. Il mio obiettivo era farlo funzionare senza testa, ma se avessi bisogno di collegare un monitor, sarebbe stato riconosciuto.

$ sudo vi /boot/config.txt

In quel file:

rimuovere il commento (rimuovere il simbolo # anteriore): hdmi_force_hotplug=1

decommentare: hdmi_drive=2

opzionalmente, aggiungi: enable_hdmi_sound

Passaggio 2: collegamento in rete

Rete
Rete
Rete
Rete

Se stai seguendo il sito di GK, questo è il passaggio 3. Ma tieni presente che non ho seguito molti dei suoi primi passi nell'ordine esatto.

Quando ho iniziato, ho collegato l'RPi direttamente al mio router ISP ("accanto alla mia rete esistente"). Questo mi ha permesso di giocare con la configurazione senza influenzare la rete. Collega l'RPi4 RJ45 integrato al router (o wireless, se lo desideri). Con Raspbian, il modo più semplice per farlo è utilizzare la GUI. Dal desktop, fare clic sull'icona Raspberry > Preferenze > Configurazione Raspberry Pi. Assicurati di abilitare SSH e VNC. Questo installerà il client del server Real-VNC. Ho scoperto che se provi a connetterti con il client Tight VNC, si attiverà e richiederà una configurazione aggiuntiva. Quindi, a questo punto installa il client Real-VNC sul tuo desktop/laptop principale (non sul tuo RPi4).

SSH non funzionerà immediatamente (passaggio 7 di GK). Dobbiamo modificare alcune configurazioni. Innanzitutto, modifichiamo il file di configurazione ssh. Ecco le modifiche che ho apportato. Tieni presente che non ho studiato l'impatto di ogni cambiamento qui. Ho fatto quello che il sito di GK ha suggerito. Alcune di queste modifiche potrebbero NON essere necessarie.

$ sudo vi /etc/ssh/sshd_config

In quel file, decommenta le seguenti righe:

HostKey /etc/ssh/ssh_host_rsa_keyHostKey /etc/ssh/ssh_host_ecdsa_keySyslogFacility AUTHLogLevel INFOStrictModes yesPubkeyAuthentication yesHostBasedAuthentication no

Ignora Rhost sì

PrintMotd noPrintLastLog yesTCPKeepAlive yes

E aggiungi le seguenti righe:

Protocollo 2UsePrivilegeSeparation yesKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentcation yesRhostsRSAAuthentication no

E modificare le seguenti righe:

Porta 15507LoginGraceTime 60PermitRootLogin no

Parliamo velocemente di quella prima modifica…porta 15507. SSH normalmente gira sulla porta 22. GK lo ha spostato su 15507--non so perché. Puoi andare in entrambi i modi a modificarlo o meno… Se scegli di modificarlo, dovrai aggiungere "-p 15507" a qualsiasi comando SSH con cui tenti di connetterti. Se decidi di saltarlo, tieni d'occhio gli altri posti in cui 15507 è menzionato in queste istruzioni e ignorali, in particolare le regole del firewall!

Infine, per questo passaggio, otteniamo l'indirizzo IP di RPi4 in modo da sapere a cosa connetterci:

$ ipconfig -a

Trova la connessione di rete attiva (probabilmente su eth0 o wlan0) e annota quell'indirizzo IP. Ora hai tutto ciò che ti serve per connetterti in remoto a RPi4. Riavviamo prima di andare avanti:

$ sudo reboot

Passaggio 3: un altro utente

Un altro utente
Un altro utente

È meglio non utilizzare il nome utente RPi predefinito (pi) e sicuramente dovresti cambiare la password. Per sicurezza, aggiungiamo un altro account utente che puoi utilizzare per connetterti in remoto e continuare con (passaggio 6 di GK). Torna su RPi, aggiungiamo un nuovo utente e impostiamo le autorizzazioni per l'utente su SSH ed emettiamo il comando sudo:

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

$ sudo passwd [NOMEUTENTE]

Sentiti libero di disconnetterti o riavviare e utilizzare l'account appena creato in futuro.

Passaggio 4: file Syctl

File Syctl
File Syctl

Il prossimo passo è modificare il file /etc/sysctl.conf (passo 9 di GK). Questo file viene utilizzato per modificare alcune impostazioni del kernel. Faremo esattamente quello che dice GK. Ecco una serie semplificata di passaggi.

$ sudo vi /etc/sysctl.conf

In quel file, decommenta le seguenti righe:

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

E aggiungi le seguenti righe:

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

Riavvia il servizio con queste nuove impostazioni e riavvia:

$ sudo sysctl -p

$ sudo reboot

Passaggio 5: DHCP e DNS (parte 1)

DHCP e DNS (parte 1)
DHCP e DNS (parte 1)

Per me, c'erano due parti dolorose in questo processo… Configurare DHCP e DNS e configurare le regole del firewall. Quindi, eccoci alla prima parte. Se stai seguendo il sito di GK, siamo al passaggio 10.

Per fare ciò, avrai bisogno di alcune informazioni dal tuo router ISP (o firewall attuale):

  • L'indirizzo IP interno del router
  • Un indirizzo IP che puoi usare per l'interfaccia di RPi4 al router
  • Gli IP per un nameserver (o due)
  • Il nome dell'interfaccia per la connessione LAN (ad es. eth0 o eth1)
  • Il nome dell'interfaccia per la connessione ISP (ad es., qualunque cosa tu non abbia usato per la LAN)

Potrebbe anche essere necessario modificare le impostazioni del router per fornire all'RPi4 un indirizzo IP statico (punto 2, sopra). Almeno, questo è quello che ho fatto.

Innanzitutto, modifichiamo il file dhcpcd.conf…

$ sudo vi /etc/dhcpcd.conf

Decommenta queste righe:

persistentoption rapid_commitoption domain_name_servers, domain_name, domain_search, host_nameoption interface_mtu

Per ogni interfaccia di rete, è necessario impostare i dettagli di rete. Dovrebbero assomigliare a questo:

# Statico per l'interfaccia con l'ISP

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 # Statico per l'interfaccia alla LAN interfaccia 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 #Decommentare questa sezione se si desidera forzare un indirizzo IP su un dispositivo. Il nome dopo 'host' #non ha significato per il sistema. Immettere l'indirizzo MAC del dispositivo e l'indirizzo #IP desiderato. Assicurati che sia fuori dall'intervallo DHCP. Ripetere se necessario. #host [NULLA] { # hardware ethernet xx:xx:xx:xx:xx:xx; # indirizzo fisso 10.210.212.250; #}

Assicurati di utilizzare i numeri che funzionano per te. Gli IP sopra sono per la mia rete, ad eccezione dei server dei nomi che sono Google. Si noti che ho anche impostato la metrica per l'ISP su 100 per forzare che sia il primo tentativo predefinito per il traffico di rete. Inoltre, in particolare, non ho fatto nulla al mio adattatore wireless (wlan0). Ho intenzione di disattivare completamente quell'interfaccia, quindi aveva senso per me.

Inoltre, se vuoi forzare un indirizzo IP su un dispositivo (come un NAS), usa quella sezione in basso. Assegna all'host un nome che sia significativo per te, ma sappi che non viene mai utilizzato da nulla. Non dimenticare il punto e virgola.

Passaggio 6: DHCP e DNS (parte 2)

DHCP e DNS (parte 2)
DHCP e DNS (parte 2)

Il prossimo passo è modificare il file dnsmasq.conf…

$ sudo vi /etc/dnsmasq.conf

Dobbiamo decommentare alcune righe e modificare alcune righe. Dovrai anche copiare alcune impostazioni dal file dhcpcd.conf. Altre due domande a cui devi rispondere da solo sono:

La LAN interna (ad es. eth0) ha bisogno di DHCP e DNS? Quale intervallo DHCP desideri per la tua LAN e per quanto tempo dovrebbe essere ogni lease?

Inizia decommentando alcune righe:

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

Imposta il tuo server dei nomi. Cerca la riga che inizia con 'server=' e rendila simile a 'server=8.8.8.8'.

Imposta il tuo intervallo DHCP. Ci sono molti modi per farlo. Ho scelto di fornire i due IP dell'endpoint, la maschera e la durata del contratto di locazione. Il mio intervallo era 10.210.212.20-10.210.212.240, con una maschera di rete di 255.255.255.0 e un tempo di locazione di 12 ore. Ti consiglio di lasciare alcuni IP nella parte superiore e inferiore del tuo intervallo nel caso in cui tu abbia mai bisogno di dare a qualcosa un IP statico.

Imposta l'interfaccia che otterrà DNS e DHCP (la LAN) modificando la riga 'interface=' in modo che sia qualcosa come 'interface=eth0). Si noti che gli ho detto specificamente di NON assegnare un indirizzo IP DHCP alla mia rete wireless. Di nuovo, ho intenzione di disattivare completamente quell'interfaccia, quindi aveva senso per me.

Passaggio 7: DHCP e DNS (parte 3)

DHCP e DNS (parte 3)
DHCP e DNS (parte 3)

Un diversivo dalle istruzioni di GK per quest'ultimo passaggio…

Quando sono andato a riavviare il mio RPi a questo punto, il processo dnsmasq non era attivo. Un po 'di frugando e ho scoperto che le mie interfacce di rete eth0 ed eth1 non erano entrambe attive prima dell'avvio di dnsmasq, quindi dnsmasq avrebbe fallito all'avvio. Dovrei collegare una tastiera e un mouse all'RPi e riavviare manualmente dnsmasq. Questo non è l'ideale con una configurazione senza testa. Ho letto un sacco di post che dicevano di apportare varie modifiche alle impostazioni (ad esempio disabilitare l'interfaccia di associazione) e altre cose. Niente di tutto questo ha funzionato. Alla fine, ho deciso di scrivere semplicemente uno script di shell che venisse eseguito ogni 2 minuti e controllasse lo stato di dnsmasq. Se non era in esecuzione, avvialo. Presumo che questa situazione non sia unica per me. Quindi, ecco cosa devi fare:

Crea il seguente codice in un file chiamato "dns_masq_keepalive.sh" sul tuo RPi.

#!/bin/bash

# File: dns_masq_keepalive.sh # Agosto 2019 # Usalo con crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) per assicurarti che dnsmasq venga eseguito. Il servizio si fermerà se # tutte le interfacce menzionate in dhcpcd.conf non sono attive prima di iniziare. Questo risolve il problema. # Questa riga successiva restituirà tutti i lavori attivi con la parola 'dnsmasq' al loro interno. Quindi, non includere 'dnsmasq' nel nome di questo # file, altrimenti lo restituirà ogni volta e non avrai mai un riavvio. 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

Taglia e incolla se necessario. Qualunque cosa tu faccia, non includere 'dnsmasq' nel nome. Lo script cerca la parola 'dnsmasq' e se lo script lo contiene nel nome, presumerà che il servizio sia in esecuzione. Inoltre, rinomina il file in modo che termini con '.sh'. Intructables non mi permetteva di caricare un file '.sh', il che è positivo. Le restanti istruzioni presuppongono che il file esista in: /etc/dns_masq_keepalive.sh.

In secondo luogo, imposta le autorizzazioni sul file in modo che possa essere eseguito:

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

Ora useremo il sistema crontab per far funzionare il programma ogni 2 minuti di ogni giorno. Inizio crontab:

$ sudo crontab -e

Dovrebbe chiederti di modificare usando vi o qualcos'altro. Qualsiasi funzionerà. Una volta che puoi modificarlo, aggiungi quanto segue alla fine del file:

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

Nessuno spazio in '*/2', ma spazi tra gli asterischi. Salva ed esci. Dovrebbe dirti che il lavoro è programmato o qualcosa del genere.

Passaggio 8: il firewall

Il firewall
Il firewall

Il prossimo processo doloroso è il firewall (passo 11 di GK). Raspbian utilizza il noto sistema iptables. Il blog di GK fornisce tre file per aiutarti ad arrivarci… firewall.simple, firewall.advanced e firewall.flows. Tutto rispetto per GK, ma rendilo facile con te stesso e vai con firewall.simple. Ho passato molto tempo a cercare di capire il sistema e le regole di iptables. Sono contento di averlo fatto, ma è stato doloroso. Quindi, ti do i due file allegati per aiutarti… firewall.simple e firewall.clear. Copia entrambi questi file nella tua cartella /etc e modifica i permessi per renderli eseguibili:

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

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

Prima di impostare le regole del firewall, collega un desktop/laptop alla porta RPi eth0 e verifica che ottenga un indirizzo IP e che il DNS sia attivo. Il modo più semplice per farlo è provare a eseguire il ping di un sito generico e quindi di un indirizzo IP noto. Effettua anche il ping del router RPi e ISP. Se ottieni risultati, allora tutto è a posto e qualsiasi problema di rete che riscontri sarà probabilmente il risultato di problemi con il firewall.

Il primo file fornito originariamente è iniziato come file firewall.simple di GK (grazie, ancora, GK!). Ho apportato un sacco di modifiche per farlo funzionare per questo sistema. Dovrebbe consentire almeno HTTP, HTTPS, DNS, DHCP, ping, SSH interno, VNC interno e plex. Plex potrebbe non avere tutte le porte aperte per ogni possibile dispositivo, ma ci sono un sacco di post là fuori per risolverlo. Nella parte superiore del file ci sono i valori che dovrai modificare nella configurazione della tua rete.

Il secondo file, firewall.clear, deve essere utilizzato per testare le regole del firewall. Quando esegui "sudo /etc/firewall.clear" tutte le regole del firewall verranno cancellate e il sistema dovrebbe essere completamente connesso a Internet. Quindi, se non sei in grado di far funzionare un servizio di rete (come dns) con le regole firewall.simple in atto, ma inizia a funzionare dopo aver eseguito firewall.clear, sai che hai un problema con le regole. Questo sarà davvero fondamentale solo durante il test delle regole.

Quindi, abbiamo le regole del firewall lì, dobbiamo farle iniziare all'avvio dell'RPi. Per farlo, modificheremo il file /etc/rc.local:

$ sudo vi /etc/rc.local

Una volta dentro, aggiungi quanto segue alla fine del file:

echo “Caricamento regole iptables”/etc/firewall.simple >> /dev/null

Se scegli di aggiungere il sistema di rilevamento delle intrusioni snort, dovrai modificare nuovamente questo file. Per ora salvalo e riavvia.

$ sudo reboot

Passaggio 9: Syslog

Syslog
Syslog

Mancano due passi…

Questo è facile. Se sei ancora lì, e segui il blog di GK, questo è il passaggio 12. Devi fare esattamente quello che dice riguardo al file syslog. Ecco i passaggi abbreviati:

Conserva 2 mesi di dati syslog…

$ sudo vi /etc/logrotate.conf

Dobbiamo dirgli di usare 'una settimana' come misura, e poi conservarne 12. Hai bisogno delle seguenti due righe in questo file. Credo che dovrai cambiare le linee esistenti.

settimanaleruota 12

Salvarlo.

Passaggio 10: rilevamento delle intrusioni con Snort

Rilevamento delle intrusioni con Snort
Rilevamento delle intrusioni con Snort

L'ultima cosa che GK configura è il sistema snort. Consiglio anche questo. Puoi seguire le sue regole, e non le copierò tutte qui, con qualche piccola modifica. Le sue istruzioni sono per la distribuzione ArchLinux. Ecco le poche modifiche per la distribuzione Raspbian che stiamo usando qui. Il resto delle istruzioni funziona bene.

Innanzitutto, non utilizzare sudo pacman -S snort per scaricare e installare snort. Fare quanto segue:

$ sudo apt-get install snort

Secondo, non puoi verificare snort con sudo snort -version. Verificare l'installazione con:

$ sudo sbuffare -V

Infine, per farlo funzionare all'avvio, non modificare il file rc.conf, modificare il file rc.local (di nuovo)…

$ sudo vi /etc/rc.local

Aggiungi le seguenti righe alla fine del file:

echo “Caricamento sbuffo”

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

Ora riavvia e tutto dovrebbe funzionare magicamente.

$ sudo reboot

Passaggio 11: divertiti

Godere
Godere

Dovrebbe essere così!

Prima di tutto, non posso ringraziare abbastanza Guillaume Kaddouch! Ha ispirato questo.

In secondo luogo, se non hai già disconnesso la tastiera, il video e il mouse, puoi farlo. Usa SSH e VNC per rientrare, quando necessario.

Per finire, questo potrebbe non essere perfetto al 100%. Si prega di ripubblicare con modifiche/suggerimenti/raccomandazioni. Il mio obiettivo sarebbe che questo fosse l'inizio della discussione e che molte persone si divertissero!

Grazie!!

PS… L'immagine è un RPi4 all'interno di un case in alluminio FLIRC con una vecchia ventola Intel leggermente modificata e legata alla parte superiore. C'è anche la pasta termica sotto la ventola, nel caso ve lo steste chiedendo. Ho trovato qualcosa di simile su Internet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) e ho deciso di provarlo io stesso.

Passaggio 12: registro delle modifiche

Man mano che vengono apportate modifiche a questa istruzione, le documenterò qui. In caso di problemi, controlla qui per vedere se hai preso vecchie istruzioni o file.

25 settembre 2019:

  • Regole DHCP fisse in firewall.simple
  • Corretto l'intervallo DHCP nelle istruzioni (i file erano corretti)
  • Aggiunte assegnazioni di IP fisso alle istruzioni DHCP

13 ottobre 2019

  • Risolti più errori di battitura
  • Ho creato un secondo pi in modo da avere una scheda SD di prova da scambiare, se necessario

Consigliato: