Taula de continguts:

Tallafocs Raspberry Pi4: 12 passos
Tallafocs Raspberry Pi4: 12 passos

Vídeo: Tallafocs Raspberry Pi4: 12 passos

Vídeo: Tallafocs Raspberry Pi4: 12 passos
Vídeo: #shorts We like the Netgate 8200 running pfsense to mount it.. 2024, Desembre
Anonim
Tallafocs Raspberry Pi4
Tallafocs Raspberry Pi4

Amb el nou Raspbery Pi 4 (RPi4) que acaba de llançar-se, vaig decidir convertir-me en un tallafoc d’ús domèstic. Després d’ensopegar a Internet, vaig trobar un article fantàstic sobre el tema de Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). L’article és increïble i hauríeu de llegir-lo abans d’avançar; facilitarà el procés descrit aquí. El cas és que aquest article es va escriure el 2012 i es basa en la distribució ArchLinux. Res contra ArchLinux, però volia fer-ho amb la versió més habitual de Raspbian. El RPi4 pot gestionar els requisits de processament. Així doncs, gràcies, Guillaume, per la inspiració !! Aquesta instrucció es referirà a la publicació original de Guillaume ("GK" per abreujar), és probable que vulgueu obrir les dues pàgines al navegador.

Un parell de coses clau sobre el meu tallafoc:

  • Tinc el connector Ethernet (eth0) integrat que va a la LAN
  • L'encaminador ISP es troba a l'adaptador TRENDnet (eth1)
  • He desactivat activament l'adaptador sense fils (wlan0)
  • Això no està garantit per aconseguir-vos el 100% … espero que almenys el 99%:), així que si us plau, proporcioneu comentaris / comentaris
  • Aquest és el meu primer instructable. Ho sentim per qualsevol cosa que no compleixi les normes instrucables adequades.

Ara, divertim-nos …

Subministraments

  • Raspberry Pi 4

    • He utilitzat la versió de 4 GB, no dubteu a provar una versió diferent
    • Case (m'agrada el FLIRC, però aquesta és la vostra crida)
    • Adaptador de corrent
  • Targeta MicroSD de 32 GB o superior (he utilitzat una targeta de 64 GB)
  • Dongle Ethernet TRENDnet USB3.0 Gigabit (model: TU3-ETG)
  • Un parell de cables de xarxa RJ45
  • Teclat i ratolí USB
  • Un cable Micro-HDMI a HDMI (que es connecta a un monitor HDMI)

Aquest teclat, vídeo i ratolí es poden eliminar un cop hàgiu pogut executar SSH i VNC.

Pas 1: configuració inicial de RPi

Configuració inicial de RPi
Configuració inicial de RPi

El primer que cal fer és posar en funcionament el vostre RPi4 com a sistema nou. Descarregueu i instal·leu la distribució completa de Raspbian (Raspbian Buster amb ordinador i programari recomanat). Haureu de reiniciar un parell de vegades perquè es pugui expandir i aprofitar la targeta MicroSD completa.

En arrencar, haureu de respondre a preguntes sobre localitat, xarxa, teclat i ratolí. Connecteu-vos a una xarxa i deixeu-la actualitzar.

També permetem confirmar que tot s'ha actualitzat correctament i obtenir un parell de serveis públics que us poden ajudar a depurar-los més endavant:

$ sudo apt-get update

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

NO he instal·lat vim, ni he fet cap dels passos 8 de GK (configureu vim). Acabo d'utilitzar l'editor VI, ja que té la majoria d'aquestes característiques de totes maneres. Això també va estalviar temps i esforç.

Un cop acabat, configurem el RPi4 perquè puguem endollar un monitor en calent. El meu objectiu era que funcionés sense cap, però si necessito connectar un monitor, es reconeixeria.

$ sudo vi /boot/config.txt

En aquest fitxer:

descomenta (elimineu el símbol frontal #): hdmi_force_hotplug = 1

descomenta: hdmi_drive = 2

opcionalment, afegiu: enable_hdmi_sound

Pas 2: creació de xarxes

Xarxes
Xarxes
Xarxes
Xarxes

Si esteu seguint el lloc de GK, aquest és el pas 3. Però tingueu en compte que no vaig seguir molts dels seus primers passos per ordre exacte.

Quan vaig començar això, vaig connectar el RPi directament al meu encaminador ISP ("al costat de la meva xarxa existent"). Això em va permetre jugar amb la configuració sense afectar la xarxa. Connecteu el RPi4 RJ45 integrat al vostre encaminador (o sense fils, si voleu). Amb Raspbian, la manera més senzilla de fer-ho és mitjançant la GUI. A l’escriptori, feu clic a la icona de gerd> Preferències> Configuració de gerd Pi. Assegureu-vos d’activar SSH i VNC. Això instal·larà el client del servidor Real-VNC. He comprovat que si intenteu connectar-vos amb el client Tight VNC, donarà ajust i requerirà una configuració addicional. Per tant, en aquest moment instal·leu el client Real-VNC al vostre ordinador de sobretaula / portàtil principal (no al vostre RPi4).

SSH no funcionarà de manera immediata (pas 7 de GK). Hem de modificar algunes configuracions. En primer lloc, permetem modificar el fitxer de configuració ssh. Aquests són els canvis que he fet. Tingueu en compte que aquí no vaig estudiar l’impacte de tots els canvis. Vaig fer el que em suggeria el lloc de GK. És possible que alguns d'aquests canvis NO siguin necessaris.

$ sudo vi / etc / ssh / sshd_config

En aquest fitxer, descomenteu les línies següents:

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

Ignora Rhosts, sí

PrintMotd noPrintLastLog síTCPKeepAlive sí

I afegiu les línies següents:

Protocol 2 Utilitzeu el privilegi Separació yesKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentcation yesRhostsRSAAuthentication no

I modifiqueu les línies següents:

Port 15507LoginGraceTime 60PermitRootLogin núm

Parlem ràpidament d’aquesta primera modificació … el port 15507. SSH normalment s’executa al port 22. GK el va moure al 15507, no sé per què. Podeu modificar-lo de qualsevol manera o no … Si decidiu modificar-lo, haureu d'afegir "-p 15507" a qualsevol ordre SSH amb què intenteu connectar-vos. Si decidiu saltar-lo, vigileu els altres llocs on s’indica 15507 en aquestes instruccions i ignoreu-los, especialment les regles del tallafoc.

Per últim, per aquest pas, obtindrem l'adreça IP del RPi4 per saber a què ens hem de connectar:

$ ipconfig -a

Cerqueu la connexió de xarxa activa (probablement a eth0 o wlan0) i escriviu aquesta adreça IP. Ara teniu el que necessiteu per connectar-vos remotament al RPi4. Reiniciem abans de continuar:

$ sudo reiniciar

Pas 3: un altre usuari

Un altre usuari
Un altre usuari

El millor és no utilitzar el nom d'usuari RPi per defecte (pi) i, sens dubte, hauríeu de canviar la contrasenya. Per estar segur, afegiu un altre compte d'usuari que podeu utilitzar per connectar-vos de manera remota i continuar (pas 6 de GK). De nou al RPi, permet afegir un usuari nou i establir permisos per a l'usuari a SSH i emetre l'ordre sudo:

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

$ sudo passwd [USERNAME]

No dubteu a tancar la sessió o reiniciar-lo i utilitzar aquest compte de nova creació en el futur.

Pas 4: fitxer Syctl

Fitxer Syctl
Fitxer Syctl

El següent pas és modificar el fitxer /etc/sysctl.conf (pas 9 de GK). Aquest fitxer s’utilitza per canviar alguns paràmetres del nucli. Farem exactament el que diu GK. Aquí teniu un conjunt simplificat de passos.

$ sudo vi /etc/sysctl.conf

En aquest fitxer, descomenteu les línies següents:

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

I afegiu les línies següents:

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

Reinicieu el servei amb aquesta nova configuració i reinicieu:

$ sudo sysctl -p

$ sudo reiniciar

Pas 5: DHCP i DNS (primera part)

DHCP i DNS (primera part)
DHCP i DNS (primera part)

Per a mi, hi havia dues parts doloroses en aquest procés … Configuració de DHCP i DNS i configuració de les regles del tallafoc. Així doncs, aquí anem amb la primera part. Si esteu seguint el lloc de GK, anem al pas 10.

Per fer-ho, necessitareu algunes dades del vostre encaminador ISP (o del tallafoc actual):

  • L'adreça IP interna del router
  • Una adreça IP que podeu utilitzar per a la interfície del router RPi4
  • Les adreces IP d'un servidor de noms (o dos)
  • El nom de la interfície per a la connexió LAN (per exemple, eth0 o eth1)
  • El nom de la interfície per a la connexió ISP (per exemple, el que no hàgiu fet servir per a la LAN)

És possible que també hàgiu de modificar la configuració del router per donar al RPi4 una adreça IP estàtica (vinyeta 2, més amunt). Almenys, això és el que vaig fer.

En primer lloc, modificem el fitxer dhcpcd.conf …

$ sudo vi /etc/dhcpcd.conf

Descomenteu aquestes línies:

opció persistent_commitoption nom_domini_servidors, nom_domini, cerca_domini, nom_amfitrió interface_mtu

Per a cada interfície de xarxa, heu d’establir els detalls de la xarxa. Haurien de ser semblants a això:

# Estàtic per a la interfície amb 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 mètric 100 # Estàtic per a la interfície de la interfície LAN 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. # routers estàtics = 10.210.212.1 #static domain_name_servers = 8.8.8.8 # Descomenteu aquesta secció si voleu forçar una adreça IP en un dispositiu. El nom després de "host" # no té cap significat per al sistema. Introduïu l'adreça MAC del dispositiu, així com l'adreça #IP desitjada. Assegureu-vos que estigui fora del rang dhcp. Repetiu-ho si cal. #host [RES] {# hardware hardware xx: xx: xx: xx: xx: xx; # adreça fixa 10.210.212.250; #}

Assegureu-vos d’utilitzar números que us funcionin. Les adreces IP anteriors corresponen a la meva xarxa, a excepció dels servidors de noms que són Google. Tingueu en compte que també he establert la mètrica de l'ISP a 100 per obligar a que sigui el primer intent predeterminat per al trànsit de xarxa. També no he fet res específicament al meu adaptador sense fils (wlan0). Tinc la intenció de desactivar completament aquesta interfície, de manera que tenia sentit per a mi.

A més, si voleu forçar una adreça IP en un dispositiu (com un NAS), utilitzeu aquesta secció inferior. Poseu a l’amfitrió un nom que sigui significatiu per a vosaltres, però sabeu que mai no l’utilitza res. No oblideu els punts i coma.

Pas 6: DHCP i DNS (part 2)

DHCP i DNS (part 2)
DHCP i DNS (part 2)

El següent pas és modificar el fitxer dnsmasq.conf …

$ sudo vi /etc/dnsmasq.conf

Hem de descommentar algunes línies i editar-ne algunes. També haureu de copiar alguns paràmetres del fitxer dhcpcd.conf. Dues altres preguntes que heu de respondre per vosaltres mateixos són:

La LAN interna (per exemple, eth0) necessita DHCP i DNS? Quin rang de DHCP voleu per a la vostra LAN i quant de temps ha de durar cada contracte d'arrendament?

Comenceu per comentar algunes línies:

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

Establiu el vostre servidor de noms. Cerqueu la línia que inicia 'server =' i feu-la semblant a 'server = 8.8.8.8'.

Establiu el vostre interval DHCP. Hi ha moltes maneres de fer-ho. Vaig optar per proporcionar les dues adreces IP del final, la màscara i la durada del contracte d’arrendament. El meu abast era de 10.210.212.20-10.210.212.240, amb una màscara de xarxa de 255.255.255.0 i un temps d’arrendament de 12 hores. Us recomano que deixeu algunes adreces IP a la part superior i inferior del vostre abast en cas que hagueu de donar alguna cosa una adreça IP estàtica.

Establiu la interfície que obtindrà DNS i DHCP (la LAN) modificant la línia 'interface =' perquè sigui una cosa així com 'interface = eth0). Tingueu en compte que li he dit específicament que NO assigni una adreça IP DHCP a la meva xarxa sense fils. Una vegada més, tinc la intenció de desactivar completament aquesta interfície, de manera que tenia sentit per a mi.

Pas 7: DHCP i DNS (part 3)

DHCP i DNS (part 3)
DHCP i DNS (part 3)

Un desviament de les instruccions de GK per a aquest darrer pas …

Quan vaig anar a reiniciar el meu RPi en aquest moment, el procés dnsmasq no estava actiu. Una mica fent un cop d'ull i vaig trobar que les meves interfícies de xarxa eth0 i eth1 no estaven actives abans que s'iniciés dnsmasq, de manera que dnsmasq fallaria en iniciar-se. Hauria de connectar un teclat i un ratolí al RPi i reiniciar manualment dnsmasq. Això no és ideal amb una configuració sense cap. He llegit un munt de publicacions que deien fer diversos canvis a la configuració (per exemple, desactivar la interfície de vinculació) i altres coses. Res no funcionava. Al final, vaig decidir escriure simplement un script d’intèrpret d’ordres que s’executaria cada 2 minuts i comprovaria l’estat de dnsmasq. Si no funcionava, inicieu-lo. Suposo que aquesta situació no és exclusiva per a mi. Per tant, això és el que heu de fer:

Feu el següent codi en un fitxer anomenat "dns_masq_keepalive.sh" al vostre RPi.

#! / bin / bash

# Fitxer: dns_masq_keepalive.sh # Agost 2019 # Utilitzeu-ho amb crontab -e (* / 2 * * * * /etc/dns_masq_keepalive.sh) per assegurar-vos que dnsmasq s'executa. El servei s'aturarà si # totes les interfícies esmentades a dhcpcd.conf no estan activades abans que comenci. Això soluciona el problema. # Aquesta següent línia retornarà tots els treballs actius amb la paraula "dnsmasq". Per tant, no incloeu "dnsmasq" al nom d'aquest fitxer, en cas contrari el retornarà cada vegada i mai no reinicieu. 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

Tallar-lo i enganxar-lo si cal. Feu el que feu, no inclogueu "dnsmasq" al nom. El guió busca la paraula 'dnsmasq' i, si el guió el té al nom, assumirà que el servei s'està executant. A més, canvieu el nom del fitxer perquè acabi amb '.sh'. Intructables no em permetia penjar un fitxer ".sh", que és bo. La resta d’instruccions assumeixen que el fitxer existeix a: /etc/dns_masq_keepalive.sh.

En segon lloc, configureu els permisos al fitxer perquè es pugui executar:

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

Ara utilitzarem el sistema crontab per fer funcionar el programa cada 2 minuts de cada dia. Iniciar crontab:

$ sudo crontab -e

Us hauria de demanar que editeu amb vi o alguna cosa més. Qualsevol funcionarà. Un cop el pugueu editar, afegiu el següent al final del fitxer:

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

No hi ha espais al '* / 2', sinó espais entre els asteriscs. Deseu i deixeu de fer-ho. Us hauria de dir que la feina està programada o alguna cosa semblant.

Pas 8: el tallafoc

El tallafoc
El tallafoc

El següent procés dolorós és el tallafoc (pas 11 de GK). Raspbian utilitza el conegut sistema iptables. El bloc de GK proporciona tres fitxers per ajudar-vos a arribar-hi … firewall.simple, firewall.advanced i firewall.flows. Tot respecte a GK, però feu-vos-ho més fàcil i només cal que utilitzeu firewall.simple. Vaig passar molt de temps intentant esbrinar el sistema i les regles iptables. Estic contenta de fer-ho, però va ser dolorós. Per tant, us dono els dos fitxers adjunts per ajudar-vos … firewall.simple i firewall.clear. Copieu aquests dos fitxers a la vostra carpeta / etc i canvieu els permisos per fer-los executables:

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

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

Abans de configurar les regles del tallafoc, connecteu un escriptori / portàtil al port RPi eth0 i confirmeu que obté una adreça IP i que té DNS en execució. La forma més senzilla de fer-ho és provar de fer ping a un lloc genèric i després a una adreça IP coneguda. També feu ping al vostre encaminador RPi i ISP. Si obteniu resultats, tot estarà bé i els problemes de xarxa que ara tingueu seran conseqüència de problemes de tallafoc.

El primer fitxer proporcionat va començar originalment com el fitxer firewall.simple de GK (gràcies, de nou, GK!). Vaig fer un munt de canvis perquè funcionés en aquest sistema. Ha de permetre almenys HTTP, HTTPS, DNS, DHCP, ping, SSH intern, VNC intern i plex. És possible que Plex no tingui tots els ports oberts per a tots els dispositius possibles, però hi ha un munt de publicacions per solucionar-ho. A la part superior del fitxer hi ha valors que haureu de canviar a la configuració de xarxa.

El segon fitxer, firewall.clear, està pensat per ser utilitzat a mesura que proveu les regles del tallafoc. Quan executeu 'sudo /etc/firewall.clear', s'esborraran totes les regles del tallafoc i el sistema hauria d'estar completament connectat a Internet. Per tant, si no podeu fer que un servei de xarxa (com DNS) funcioni amb les regles firewall.simple, però comença a funcionar després d’executar firewall.clear, ja sabeu que teniu un problema amb les regles. Realment, això només serà fonamental en provar les vostres regles.

Per tant, tenim les regles del tallafoc allà, les hem de fer iniciar quan s’inicia el RPi. Per fer-ho, editarem el fitxer /etc/rc.local:

$ sudo vi /etc/rc.local

Un cop dins, afegiu el següent al final del fitxer:

eco "Carregant les regles d'iptables" /etc/firewall.simple >> / dev / null

Si decidiu afegir el sistema de detecció d’intrusions snort, haureu de tornar a editar aquest fitxer. De moment, només cal desar-lo i reiniciar.

$ sudo reiniciar

Pas 9: Syslog

Syslog
Syslog

Queden dos passos …

Això és fàcil. Si encara esteu allà i seguiu el bloc de GK, aquest és el pas 12. Heu de fer exactament el que diu pel que fa al fitxer syslog. Aquests són els passos abreujats:

Conserveu dades de syslog per valor de 2 mesos …

$ sudo vi /etc/logrotate.conf

Hem de dir-li que utilitzi "una setmana" com a mesura i que després en guardi 12. Necessiteu les dues línies següents en aquest fitxer. Crec que haureu de canviar les línies existents.

rotació setmanal 12

Guarda-ho.

Pas 10: Detecció d'intrusions amb Snort

Detecció d'intrusions amb Snort
Detecció d'intrusions amb Snort

L'últim que configura GK és el sistema de bufat. També ho recomano. Podeu seguir les seves regles i no les copiaré aquí, amb algunes modificacions menors. Les seves instruccions són per a la distribució ArchLinux. Aquests són els pocs canvis per a la distribució Raspbian que estem utilitzant aquí. La resta d’instruccions funcionen bé.

En primer lloc, no utilitzeu sudo pacman -S snort per descarregar i instal·lar snort. Feu el següent:

$ sudo apt-get install snort

En segon lloc, no es pot verificar snort amb sudo snort -version. Verifiqueu la instal·lació amb:

$ sudo snort -V

Finalment, perquè s’executi a l’inici, no modifiqueu el fitxer rc.conf, editeu el fitxer rc.local (de nou) …

$ sudo vi /etc/rc.local

Afegiu les línies següents al final del fitxer:

eco "Carregant bufat"

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

Ara, reinicieu i tot hauria de funcionar de manera màgica.

$ sudo reiniciar

Pas 11: gaudiu

Gaudeix
Gaudeix

Això hauria de ser!

En primer lloc, no puc agrair prou a Guillaume Kaddouch. Ell ho va inspirar.

En segon lloc, si encara no heu desconnectat el teclat, el vídeo i el ratolí, podeu fer-ho. Utilitzeu SSH i VNC per tornar-hi, quan calgui.

Per acabar, pot ser que això no sigui 100% perfecte. Envieu amb canvis / suggeriments / recomanacions. El meu objectiu seria que aquest fos el començament de la discussió i que gaudís molta gent.

Gràcies !!

PS … La imatge és un RPi4 dins d'una caixa d'alumini FLIRC amb un vell ventilador Intel lleugerament modificat i lligat amb cremallera a la part superior. També hi ha pasta tèrmica sota el ventilador, per si us ho preguntàveu. Vaig trobar alguna cosa similar a Internet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) i vaig decidir provar-ho jo mateix.

Pas 12: registre de canvis

A mesura que es facin canvis en aquesta instrucció, els documentaré aquí. En cas que tingueu algun problema, comproveu aquí si heu agafat instruccions o fitxers antics.

25 de setembre de 2019:

  • S'han corregit les regles DHCP a firewall.simple
  • S'ha corregit l'interval DHCP a les instruccions (els fitxers eren correctes)
  • S'han afegit assignacions IP fixes a les instruccions DHCP

13 d'octubre de 2019

  • S'han corregit diversos errors tipogràfics
  • Vaig crear un segon pi, de manera que tindria una targeta SD de prova per canviar-la, si calia

Recomanat: