Cuprins:

Firewall Raspberry Pi4: 12 pași
Firewall Raspberry Pi4: 12 pași

Video: Firewall Raspberry Pi4: 12 pași

Video: Firewall Raspberry Pi4: 12 pași
Video: DON'T Use Raspberry Pis for Servers! (Use THIS) 2024, Iunie
Anonim
Firewall Raspberry Pi4
Firewall Raspberry Pi4

Odată cu lansarea noului Raspbery Pi 4 (RPi4), am decis să mă fac un firewall de uz casnic. După ce m-am poticnit pe internet, am găsit un articol minunat despre acest subiect de Guillaume Kaddouch (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Articolul este uimitor și ar trebui să-l citiți înainte de a merge mai departe - va ușura procesul descris aici. Problema este că articolul respectiv a fost scris în 2012 și se bazează pe distro ArchLinux. Nimic împotriva ArchLinux, dar am vrut să fac asta folosind cea mai comună versiune Raspbian. RPi4 poate face față cerințelor de procesare. Deci, mulțumesc, Guillaume, pentru inspirație !! Această instrucțiune va face trimitere înapoi la postarea originală a lui Guillaume („GK” pe scurt), probabil că veți dori să aveți ambele pagini deschise în browser.

Câteva lucruri cheie despre firewall-ul meu:

  • Am mufa Ethernet încorporată (eth0) care merge pe LAN
  • Ruterul ISP se află pe adaptorul TRENDnet (eth1)
  • Am dezactivat în mod activ adaptorul wireless (wlan0)
  • Acest lucru nu este garantat pentru a vă aduce 100% acolo … sperăm că cel puțin 99%:) așa că vă rugăm să furnizați feedback / comentarii
  • Acesta este primul meu instructable. Ne pare rău pentru orice lucru care nu respectă normele instrucabile adecvate.

Acum, hai să ne distrăm …

Provizii

  • Raspberry Pi 4

    • Am folosit versiunea de 4 GB, nu ezitați să încercați o altă versiune
    • Caz (îmi place FLIRC, dar acesta este apelul tău)
    • Adaptor de alimentare
  • Card MicroSD, 32 GB sau mai mare (am folosit un card de 64 GB)
  • TRENDnet USB3.0 Gigabit Ethernet Dongle (Model: TU3-ETG)
  • Câteva cabluri de rețea RJ45
  • Tastatură și mouse USB
  • Un cablu Micro-HDMI în HDMI (care este conectat la un monitor HDMI)

Tastatura, videoclipul și mouse-ul pot fi eliminate odată ce puteți să activați SSH și VNC.

Pasul 1: Configurarea inițială RPi

Configurare inițială RPi
Configurare inițială RPi

Primul lucru pe care trebuie să-l faceți este să puneți RPi4 în funcțiune ca un sistem nou. Descărcați și instalați distribuția completă Raspbian (Raspbian Buster cu desktop și software recomandat). Va trebui să reporniți de câteva ori, astfel încât să se poată extinde și să profite de cardul MicroSD complet.

Pe măsură ce pornește, va trebui să răspunzi la întrebări despre localitate, rețea, tastatură și mouse. Conectați-vă la o rețea și permiteți-i să se actualizeze.

Să confirmăm, de asemenea, că totul s-a actualizat corect și să obținem câteva utilități care pot ajuta la depanare ulterior:

$ sudo apt-get update

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

NU am instalat vim și niciunul dintre pasurile 8 ale GK (configurarea vim). Tocmai am folosit editorul vi, deoarece are oricum majoritatea acestor caracteristici. Acest lucru a economisit și ceva timp și efort.

Odată ce acest lucru este finalizat, permiteți configurarea RPi4 astfel încât să putem conecta la cald un monitor. Scopul meu era să-l fac să funcționeze fără cap, dar dacă ar trebui să conectez un monitor, acesta ar fi recunoscut.

$ sudo vi /boot/config.txt

În acel fișier:

decomentați (eliminați # -simbolul frontal): hdmi_force_hotplug = 1

necomentariu: hdmi_drive = 2

opțional, adăugați: enable_hdmi_sound

Pasul 2: Rețea

Rețele
Rețele
Rețele
Rețele

Dacă urmăriți site-ul GK, acesta este pasul 3. Dar rețineți că nu am urmat o mulțime de pași în ordinea exactă.

Când am început acest lucru, am conectat RPi direct la routerul meu ISP („lângă rețeaua mea existentă”). Acest lucru mi-a permis să mă joc cu configurația fără a afecta rețeaua. Conectați RPi4 RJ45 încorporat la router (sau wireless, dacă doriți). Cu Raspbian, cel mai simplu mod de a face acest lucru este utilizarea GUI. De pe desktop, faceți clic pe pictograma Raspberry> Preferințe> Configurare Raspberry Pi. Asigurați-vă că activați SSH și VNC. Aceasta va instala clientul serverului Real-VNC. Am constatat că, dacă încercați să vă conectați cu clientul Tight VNC, acesta va genera potriviri și va necesita o configurație suplimentară. Deci, în acest moment instalați clientul Real-VNC pe desktopul / laptopul principal (nu pe RPi4).

SSH nu va funcționa imediat (pasul 7 al lui GK). Trebuie să modificăm unele configurații. Mai întâi, permite modificarea fișierului de configurare ssh. Iată schimbările pe care le-am făcut. Rețineți că nu am studiat impactul fiecărei schimbări aici. Am făcut ceea ce sugerează site-ul GK. Este posibil ca unele dintre aceste modificări să NU fie necesare.

$ sudo vi / etc / ssh / sshd_config

În acel fișier, decomentați următoarele rânduri:

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

Ignora Rhosts da

PrintMotd noPrintLastLog yesTCPKeepAlive da

Și adăugați următoarele rânduri:

Protocol 2UsePrivilegeSeparation yesKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentcation yesRhostsRSAAuthentication no

Și modificați următoarele linii:

Port 15507LoginGraceTime 60PermitRootLogin nr

Să vorbim rapid despre prima modificare … portul 15507. SSH rulează în mod normal pe portul 22. GK l-a mutat în 15507 - nu știu de ce. Puteți merge în orice mod sau nu … Dacă alegeți să îl modificați, va trebui să adăugați „-p 15507” la orice comandă SSH cu care încercați să vă conectați. Dacă decideți să o omiteți, țineți cont de celelalte locuri în care este menționat 15507 în aceste instrucțiuni și ignorați-le, în special regulile firewall-ului!

În cele din urmă pentru acest pas, să obținem adresa IP a RPi4, astfel încât să știm la ce să ne conectăm:

$ ipconfig -a

Găsiți conexiunea de rețea activă (probabil pe eth0 sau wlan0) și scrieți adresa IP respectivă. Acum aveți de ce aveți nevoie pentru a vă conecta de la distanță la RPi4. Să repornim înainte de a continua:

$ sudo reporniți

Pasul 3: alt utilizator

Un alt utilizator
Un alt utilizator

Cel mai bine este să nu utilizați numele de utilizator RPi implicit (pi) și cu siguranță ar trebui să schimbați parola. Pentru a fi în siguranță, permiteți adăugarea unui alt cont de utilizator pe care îl puteți utiliza pentru a vă conecta de la distanță și pentru a continua (pasul 6 al lui GK). Înapoi pe RPi, permite adăugarea unui nou utilizator și setarea permisiunilor pentru utilizator la SSH și lansarea comenzii sudo:

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

$ sudo passwd [USERNAME]

Nu ezitați să vă deconectați sau să reporniți și să utilizați contul nou creat în viitor.

Pasul 4: Fișier Syctl

Fișier Syctl
Fișier Syctl

Următorul pas este modificarea fișierului /etc/sysctl.conf (pasul 9 al lui GK). Acest fișier este utilizat pentru a modifica câteva setări ale nucleului. Vom face exact ceea ce GK spune să facă. Iată un set simplificat de pași.

$ sudo vi /etc/sysctl.conf

În acel fișier, decomentați următoarele rânduri:

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 adăugați următoarele rânduri:

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

Reporniți serviciul cu aceste noi setări și reporniți:

$ sudo sysctl -p

$ sudo reporniți

Pasul 5: DHCP și DNS (partea 1)

DHCP și DNS (partea 1)
DHCP și DNS (partea 1)

Pentru mine, au existat două părți dureroase la acest proces … Configurarea DHCP și DNS și configurarea regulilor firewall-ului. Așadar, iată-ne cu prima parte. Dacă urmăriți pe site-ul GK, suntem la pasul 10.

Pentru a face acest lucru, veți avea nevoie de câteva informații de la routerul dvs. ISP (sau paravanul de protecție curent):

  • Adresa IP internă a routerului
  • O adresă IP pe care o puteți utiliza pentru interfața RPi4 cu routerul
  • Adresele IP pentru un server de nume (sau două)
  • Numele interfeței pentru conexiunea LAN (de exemplu, eth0 sau eth1)
  • Numele interfeței pentru conexiunea ISP (de exemplu, orice nu ați folosit pentru LAN)

De asemenea, este posibil să fie nevoie să modificați setările routerului pentru a oferi RPi4 o adresă IP statică (glonț 2, mai sus). Cel puțin asta am făcut.

Mai întâi, să modificăm fișierul dhcpcd.conf …

$ sudo vi /etc/dhcpcd.conf

Descomentați aceste linii:

opțiune persistentă rapid_commitoption nume_domeniu_servere, nume_domeniu, căutare domeniu, nume_hostăopțiune interface_mtu

Pentru fiecare interfață de rețea, trebuie să setați detaliile rețelei. Ar trebui să arate cam așa:

# Static pentru interfața cu 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 # Static pentru interfața la interfața 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. # routere statice = 10.210.212.1 #static domain_name_servers = 8.8.8.8 # Decomentați această secțiune dacă doriți să forțați o adresă IP pe un dispozitiv. Numele după „gazdă” # nu are sens pentru sistem. Introduceți adresa MAC a dispozitivului, precum și adresa #IP dorită. Asigurați-vă că este în afara domeniului dhcp. Repetați după cum este necesar. #host [ANYTHING] {# hardware ethernet xx: xx: xx: xx: xx: xx; # adresa fixă 10.210.212.250; #}

Asigurați-vă că utilizați numere care funcționează pentru dvs. IP-urile de mai sus sunt pentru rețeaua mea, cu excepția serverelor de nume care sunt Google. Observați că am setat și valoarea pentru ISP la 100 pentru a forța ca prima încercare implicită pentru traficul de rețea. De asemenea, nu am făcut nimic în mod specific adaptorului meu wireless (wlan0). Intenționez să dezactivez complet acea interfață, așa că a avut sens pentru mine.

De asemenea, dacă doriți să forțați o adresă IP pe un dispozitiv (cum ar fi un NAS), utilizați acea secțiune de jos. Dați gazdei un nume care să fie semnificativ pentru dvs., dar să știți că nu este folosit niciodată de nimic. Nu uitați de punct și virgulă.

Pasul 6: DHCP și DNS (partea 2)

DHCP și DNS (partea 2)
DHCP și DNS (partea 2)

Următorul pas este modificarea fișierului dnsmasq.conf …

$ sudo vi /etc/dnsmasq.conf

Trebuie să decomentăm câteva linii și să edităm câteva linii. De asemenea, va trebui să copiați câteva setări din fișierul dhcpcd.conf. Alte două întrebări la care trebuie să răspundeți sunt:

Are rețeaua LAN internă (de exemplu, eth0) nevoie de DHCP și DNS? Ce gamă DHCP doriți pentru rețeaua LAN și cât timp ar trebui să fie fiecare leasing?

Începeți prin a descomenta câteva rânduri:

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

Setați serverul de nume. Căutați linia care pornește „server =” și transformați-o în ceva de genul „server = 8.8.8.8”.

Setați gama DHCP. Există o mulțime de modalități de a face acest lucru. Am ales să furnizez cele două adrese IP endpoint, masca și durata contractului de închiriere. Intervalul meu a fost 10.210.212.20-10.210.212.240, cu o mască de rețea de 255.255.255.0 și un timp de închiriere de 12 ore. Vă recomand să lăsați câteva adrese IP în partea de sus și de jos a gamei dvs., în cazul în care vreodată trebuie să dați ceva unui IP static.

Setați interfața care va obține DNS și DHCP (LAN) modificând linia „interface =” pentru a fi ceva de genul „interface = eth0). Observați că i-am spus în mod specific să NU atribuie o adresă IP DHCP rețelei mele wireless. Din nou, intenționez să dezactivez complet acea interfață, așa că a avut sens pentru mine.

Pasul 7: DHCP și DNS (partea 3)

DHCP și DNS (partea 3)
DHCP și DNS (partea 3)

O deviere de la instrucțiunile GK pentru acest ultim pas …

Când m-am dus să-mi repornesc RPi în acest moment, procesul dnsmasq nu era activ. Un pic mișcându-mă și am constatat că interfețele mele de rețea eth0 și eth1 nu erau active ambele înainte ca dnsmasq să fie pornit, așa că dnsmasq ar eșua la pornire. Ar trebui să conectez o tastatură și un mouse la RPi și să repornesc manual dnsmasq. Acest lucru nu este ideal cu o configurare fără cap. Am citit o grămadă de postări care spuneau că fac diverse modificări la setări (de exemplu, dezactivează interfața bind) și alte lucruri. Nimic nu a funcționat. În cele din urmă, am decis să scriu pur și simplu un script shell care să ruleze la fiecare 2 minute și să verific starea dnsmasq. Dacă nu rulează, porniți-l. Presupun că această situație nu este unică pentru mine. Deci, iată ce trebuie să faceți:

Faceți următorul cod într-un fișier numit „dns_masq_keepalive.sh” de pe RPi.

#! / bin / bash

# Fișier: dns_masq_keepalive.sh # August 2019 # Utilizați acest lucru cu crontab -e (* / 2 * * * * /etc/dns_masq_keepalive.sh) pentru a vă asigura că dnsmasq rulează. Serviciul se va opri singur dacă # toate interfețele menționate în dhcpcd.conf nu sunt activate înainte de a începe. Aceasta rezolvă problema. # Următoarea linie va returna toate joburile active cu cuvântul „dnsmasq” în ele. Deci, nu includeți „dnsmasq” în numele acestui # fișier, altfel îl va returna de fiecare dată și nu veți mai reporni niciodată. 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

Tăiați-l și lipiți-l dacă aveți nevoie. Orice ai face, nu include „dnsmasq” în nume. Scriptul caută cuvântul „dnsmasq” și dacă scriptul îl are în nume, va presupune că serviciul rulează. De asemenea, redenumiți fișierul astfel încât să se termine cu „.sh”. Intructable nu mi-ar permite să încarc un fișier „.sh” - ceea ce este bine. Instrucțiunile rămase presupun că fișierul există la: /etc/dns_masq_keepalive.sh.

În al doilea rând, setați permisiunile pentru fișier, astfel încât să poată fi executat:

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

Acum vom folosi sistemul crontab pentru a face programul să ruleze la fiecare 2 minute din fiecare zi. Porniți crontab:

$ sudo crontab -e

Ar trebui să vă solicite să editați folosind vi sau altceva. Orice va funcționa. După ce îl puteți edita, adăugați următoarele la sfârșitul fișierului:

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

Nu există spații în „* / 2”, ci spații între asteriscuri. Salvează și închide. Ar trebui să vă spună că postul este programat sau ceva de genul acesta.

Pasul 8: Paravanul de protecție

Paravanul de protecție
Paravanul de protecție

Următorul proces dureros este firewall-ul (pasul 11 al lui GK). Raspbian folosește binecunoscutul sistem iptables. Blogul GK oferă trei fișiere pentru a vă ajuta să ajungeți acolo … firewall.simple, firewall.advanced și firewall.flows. Tot respectul față de GK, dar ușurează-l pe tine și mergi cu firewall.simple. Am petrecut mult timp încercând să dau seama de sistemul i regulile iptables. Mă bucur că am făcut-o, dar a fost dureros. Așadar, vă dau cele două fișiere atașate pentru a vă ajuta … firewall.simple și firewall.clear. Copiați aceste două fișiere în folderul / etc și modificați permisiunile pentru a le face executabile:

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

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

Înainte de a configura reguli de firewall, conectați un desktop / laptop la portul RPi eth0 și confirmați că primește o adresă IP și că DNS rulează. Cel mai simplu mod de a face acest lucru este să încercați să faceți ping pe un site generic și apoi pe o adresă IP cunoscută. De asemenea, trimiteți ping routerului RPi și ISP. Dacă obțineți rezultate, atunci totul este bun și orice problemă de rețea pe care o întâlniți acum va fi probabil rezultatul unor probleme de firewall.

Primul fișier furnizat a început inițial ca fișier firewall.simple al GK (mulțumesc, din nou, GK!). Am făcut o grămadă de modificări pentru ca acesta să funcționeze pentru acest sistem. Ar trebui să permită cel puțin HTTP, HTTPS, DNS, DHCP, ping, SSH intern, VNC intern și plex. Este posibil ca Plex să nu aibă toate porturile deschise pentru fiecare dispozitiv posibil, dar există o grămadă de postări acolo pentru a remedia problema. În partea de sus a fișierului sunt valori pe care va trebui să le modificați la configurația rețelei.

Al doilea fișier, firewall.clear, este destinat să fie utilizat pe măsură ce vă testați regulile de firewall. Când rulați „sudo /etc/firewall.clear” toate regulile firewallului vor fi șterse și sistemul ar trebui să fie complet conectat la Internet. Deci, dacă nu puteți face ca un serviciu de rețea (cum ar fi DNS) să funcționeze cu regulile firewall.simple, dar începe să funcționeze după ce rulați firewall.clear, știți că aveți o problemă de regulă. Acest lucru va fi cu adevărat critic numai atunci când vă testați regulile.

Deci, avem regulile firewall-ului acolo, trebuie să le facem să înceapă când pornește RPi. Pentru aceasta, vom edita fișierul /etc/rc.local:

$ sudo vi /etc/rc.local

Odată ajuns în interior, adăugați următoarele la sfârșitul fișierului:

ecou „Încărcarea regulilor iptables” /etc/firewall.simple >> / dev / null

Dacă alegeți să adăugați sistemul de detectare a intruziunilor snort, va trebui să editați din nou acest fișier. Deocamdată, salvați-l și reporniți.

$ sudo reporniți

Pasul 9: Syslog

Syslog
Syslog

Au mai rămas doi pași …

Acesta este unul ușor. Dacă sunteți încă acolo și urmați blogul lui GK, acesta este pasul 12. Trebuie să faceți exact ceea ce spune el cu privire la fișierul syslog. Iată pașii abreviați:

Păstrați date syslog în valoare de 2 luni …

$ sudo vi /etc/logrotate.conf

Trebuie să-i spunem să folosească „o săptămână” ca măsurare și apoi să păstrăm 12 dintre ele. Aveți nevoie de următoarele două linii în acest fișier. Cred că va trebui să schimbați liniile existente.

rotire săptămânală 12

Salvați-l.

Pasul 10: Detectarea intruziunilor cu Snort

Detectarea intruziunilor cu Snort
Detectarea intruziunilor cu Snort

Ultimul lucru pe care GK îl configurează este sistemul snort. Vă recomand și acest lucru. Puteți urma regulile sale și nu le voi copia aici, cu câteva modificări minore. Instrucțiunile sale sunt pentru distro ArchLinux. Iată câteva modificări pentru distribuția Raspbian pe care o folosim aici. Restul instrucțiunilor funcționează bine.

În primul rând, nu utilizați sudo pacman -S snort pentru a descărca și instala snort. Urmează următoarele instrucțiuni:

$ sudo apt-get install snort

În al doilea rând, nu puteți verifica snort cu sudo snort -version. Verificați instalarea cu:

$ sudo snort -V

În cele din urmă, pentru a-l rula la pornire, nu modificați fișierul rc.conf, editați fișierul rc.local (din nou) …

$ sudo vi /etc/rc.local

Adăugați următoarele rânduri la sfârșitul fișierului:

ecou „Încărcarea pufului”

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

Acum, reporniți și totul ar trebui să funcționeze în mod magic.

$ sudo reporniți

Pasul 11: Bucurați-vă

Bucurați-vă
Bucurați-vă

Asta ar trebui să fie!

În primul rând, nu-i pot mulțumi suficient lui Guillaume Kaddouch! El a inspirat acest lucru.

În al doilea rând, dacă nu v-ați deconectat deja tastatura, videoclipul și mouse-ul, puteți. Folosiți SSH și VNC pentru a vă întoarce, atunci când este necesar.

În final, este posibil ca acest lucru să nu fie 100% perfect. Vă rugăm să postați înapoi cu modificări / sugestii / recomandări. Scopul meu ar fi ca acesta să fie începutul discuției și mulți oameni să se bucure!

Mulțumiri!!

PS … Imaginea este un RPi4 în interiorul unei carcase din aluminiu FLIRC, cu un ventilator Intel vechi ușor modificat și legat cu fermoar de partea de sus. Există și pastă termică sub ventilator, doar în cazul în care vă întrebați. Am găsit ceva similar pe Internet (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) și am decis să încerc și eu.

Pasul 12: Changelog

Pe măsură ce se fac modificări la acest instructable, le voi documenta aici. În cazul în care aveți o problemă, verificați aici pentru a vedea dacă ați luat instrucțiuni sau fișiere vechi.

25 septembrie 2019:

  • S-au remediat regulile DHCP în firewall.simple
  • S-a rezolvat intervalul DHCP în instrucțiuni (fișierele erau corecte)
  • S-au adăugat alocări IP fixe la instrucțiunile DHCP

13 octombrie 2019

  • S-au remediat erori multiple
  • Am creat un al doilea pi, așa că aș avea o SDcard de test pe care să o schimb, dacă este nevoie

Recomandat: