Sadržaj:

Raspberry Pi4 zaštitni zid: 12 koraka
Raspberry Pi4 zaštitni zid: 12 koraka

Video: Raspberry Pi4 zaštitni zid: 12 koraka

Video: Raspberry Pi4 zaštitni zid: 12 koraka
Video: Замена отопления в новостройке. Подключение. Опрессовка. #17 2024, Jun
Anonim
Raspberry Pi4 zaštitni zid
Raspberry Pi4 zaštitni zid

S novim Raspbery Pi 4 (RPi4) koji je upravo izašao, odlučio sam si napraviti firewall za kućnu upotrebu. Nakon što sam posrnuo po internetu, pronašao sam sjajan članak o ovoj temi Guillaumea Kaddoucha (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Članak je nevjerojatan i trebali biste ga pročitati prije nego nastavite-olakšat će ovdje opisani proces. Činjenica je da je taj članak napisan 2012. godine i zasnovan je na ArchLinux distribuciji. Ništa protiv ArchLinux -a, ali htio sam to učiniti pomoću uobičajenije verzije Raspbian. RPi4 može podnijeti zahtjeve obrade. Dakle, hvala, Guillaume, na inspiraciji !! Ovo uputstvo će se odnositi na Guillaumeov (skraćeno "GK") originalni post, vjerovatno ćete htjeti da obje stranice budu otvorene u vašem pregledniku.

Nekoliko ključnih stvari o mom zaštitnom zidu:

  • Imam ugrađen ethernet priključak (eth0) koji ide na LAN
  • ISP usmjerivač je na TRENDnet adapteru (eth1)
  • Aktivno sam onemogućio bežični adapter (wlan0)
  • Ovo ne garantuje da ćete doći 100% tamo… nadajmo se barem 99%:) pa pošaljite povratne informacije/komentare
  • Ovo je moje prvo uputstvo. Žao mi je zbog svega što ne slijedi odgovarajuće instruktivne norme.

Hajde sad da se malo zabavimo…

Supplies

  • Raspberry Pi 4

    • Koristio sam verziju od 4 GB, slobodno isprobajte drugu verziju
    • Futrola (sviđa mi se FLIRC, ali to je vaš poziv)
    • Adapter za napajanje
  • MicroSD kartica, 32 GB ili veća (koristio sam karticu od 64 GB)
  • TRENDnet USB3.0 Gigabitni Ethernet ključ (model: TU3-ETG)
  • Par mrežnih kabela RJ45
  • USB tastatura i miš
  • Micro-HDMI na HDMI kabl (koji je priključen na HDMI monitor)

Ta tastatura, video i miš mogu se ukloniti kada uspijete pokrenuti SSH i VNC.

Korak 1: Početno podešavanje RPi

Početna postavka RPi
Početna postavka RPi

Prva stvar koju trebate učiniti je pokrenuti vaš RPi4 kao novi sistem. Preuzmite i instalirajte Raspbian potpunu distribuciju (Raspbian Buster sa radnom površinom i preporučenim softverom). Morat ćete ga ponovo pokrenuti nekoliko puta kako bi se mogao proširiti i iskoristiti potpunu MicroSD karticu.

Dok se pokreće, morat ćete odgovoriti na pitanja o lokaciji, mreži, tastaturi i mišu. Povežite se na mrežu i dopustite joj ažuriranje.

Potvrđujemo i da je sve ispravno ažurirano i nabavimo nekoliko uslužnih programa koji bi kasnije mogli pomoći u otklanjanju grešaka:

$ sudo apt-get update

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

NISAM instalirao vim, niti bilo koji od koraka 8 GK -a (konfigurirajte vim). Upravo sam koristio vi editor jer on ionako ima većinu tih funkcija. Ovo je uštedjelo i vrijeme i trud.

Kada se to završi, postavimo RPi4 tako da možemo vruće uključiti monitor. Moj cilj je bio da ga pokrenem bez glave, ali ako moram uključiti monitor, to će biti prepoznato.

$ sudo vi /boot/config.txt

U toj datoteci:

odjavite komentar (uklonite prednji #-simbol): hdmi_force_hotplug = 1

komentar: hdmi_drive = 2

opcionalno, dodajte: enable_hdmi_sound

Korak 2: Umrežavanje

Umrežavanje
Umrežavanje
Umrežavanje
Umrežavanje

Ako pratite GK -ovu web stranicu, ovo je korak 3. Ali imajte na umu da nisam slijedio puno njegovih prvih koraka tačnim redoslijedom.

Kad sam ovo započeo, spojio sam RPi direktno na svoj ISP usmjerivač ("pored postojeće mreže"). To mi je omogućilo da se igram sa konfiguracijom bez utjecaja na mrežu. Priključite ugrađeni RPi4 RJ45 na usmjerivač (ili bežični, ako želite). Uz Raspbian, najlakši način za to je korištenje grafičkog sučelja. Na radnoj površini kliknite ikonu Raspberry> Postavke> Raspberry Pi konfiguracija. Uključite SSH i VNC. Ovo će instalirati klijent poslužitelja Real-VNC. Otkrio sam da će, ako se pokušate povezati s klijentom Tight VNC, to biti neprikladno i zahtijevati dodatnu konfiguraciju. Dakle, u ovom trenutku instalirajte Real-VNC klijent na svoju primarnu radnu površinu/prijenosno računalo (ne na svoj RPi4).

SSH neće raditi "van kutije" (GK-ov korak 7). Moramo izmijeniti neke konfiguracije. Prvo, izmijenimo ssh konfiguracijsku datoteku. Evo promjena koje sam napravio. Imajte na umu da ovdje nisam proučavao utjecaj svake promjene. Uradio sam ono što je predložila stranica GK. Neke od ovih promjena NEĆE biti potrebne.

$ sudo vi/etc/ssh/sshd_config

U toj datoteci raskomentirajte sljedeće retke:

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

Zanemari duhove da

PrintMotd noPrintLastLog yesTCPKeepAlive yes

I dodajte sljedeće redove:

Protokol 2UsePrivilegeSeparacija yesKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentacija daRhostsRSAAuthentication ne

I izmijenite sljedeće retke:

Port 15507LoginGraceTime 60PermitRootLogin br

Hajdemo brzo govoriti o toj prvoj izmjeni … port 15507. SSH obično radi na portu 22. GK ga je premjestio na 15507-ne znam zašto. Možete ga promijeniti na bilo koji način ili ne … Ako ga odlučite izmijeniti, morat ćete dodati "-p 15507" u bilo koju SSH naredbu s kojom se pokušavate povezati. Ako ga odlučite preskočiti, pripazite na druga mjesta koja je 15507 spomenuta u ovim uputama i zanemarite ih, posebno pravila zaštitnog zida!

Na kraju, za ovaj korak, nabavimo IP adresu RPi4 -a kako bismo znali na šta se trebamo povezati:

$ ipconfig -a

Pronađite aktivnu mrežnu vezu (vjerovatno na eth0 ili wlan0) i zapišite tu IP adresu. Sada imate sve što vam je potrebno za daljinsko povezivanje s RPi4. Ponovo pokrenimo sistem prije nego nastavimo:

$ sudo ponovno pokretanje

Korak 3: Drugi korisnik

Drugi korisnik
Drugi korisnik

Najbolje je da ne koristite zadano korisničko ime za RPi (pi) i svakako biste trebali promijeniti lozinku. Radi sigurnosti, dopustimo dodavanje još jednog korisničkog računa koji možete koristiti za daljinsko povezivanje i nastavak (GK -ov korak 6). Nazad na RPi, dopuštamo dodavanje novog korisnika i postavljanje dozvola za korisnika na SSH i izdavanje sudo naredbe:

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

$ sudo passwd [USERNAME]

Slobodno se odjavite ili ponovo pokrenite i koristite taj novonastali račun za dalje.

Korak 4: Syctl datoteka

Syctl datoteka
Syctl datoteka

Sljedeći korak je izmjena /etc/sysctl.conf datoteke (GK -ov korak 9). Ova datoteka se koristi za promjenu nekoliko postavki jezgre. Učinit ćemo upravo ono što GK kaže. Evo pojednostavljenog skupa koraka.

$ sudo vi /etc/sysctl.conf

U toj datoteci raskomentirajte sljedeće retke:

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 dodajte sljedeće redove:

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

Ponovo pokrenite uslugu s ovim novim postavkama i ponovo pokrenite sistem:

$ sudo sysctl -p

$ sudo ponovno pokretanje

Korak 5: DHCP i DNS (dio 1)

DHCP i DNS (1. dio)
DHCP i DNS (1. dio)

Za mene su postojala dva bolna dijela ovog procesa… Postavljanje DHCP -a i DNS -a i postavljanje pravila zaštitnog zida. Dakle, idemo na prvi dio. Ako pratite na GK -ovoj web stranici, mi smo na koraku 10.

Da biste to učinili, trebat će vam nekoliko podataka s vašeg ISP usmjerivača (ili trenutnog vatrozida):

  • Interna IP adresa usmjerivača
  • IP adresa koju možete koristiti za sučelje RPi4 s usmjerivačem
  • IP -ovi za poslužitelj imena (ili dva)
  • Naziv sučelja za LAN vezu (npr. Eth0 ili eth1)
  • Naziv sučelja za ISP vezu (npr. Sve što niste koristili za LAN)

Možda ćete također morati promijeniti postavke usmjerivača kako biste RPi4 dali statičku IP adresu (znak 2, gore). Bar sam ja to uradio.

Prvo, izmijenimo datoteku dhcpcd.conf …

$ sudo vi /etc/dhcpcd.conf

Dekomentirajte ove retke:

persistentoption rapid_commitoption server_name_name_servers, domain_name, domain_search, host_nameoption interface_mtu

Za svako mrežno sučelje morate postaviti detalje o mreži. Trebali bi izgledati otprilike ovako:

# Statički za interfejs sa ISP -om

interfejs 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 metrički 100 # Statički za sučelje prema LAN sučelju 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 #Nekomentirajte ovaj odjeljak ako želite forsirati IP adresu na uređaju. Naziv nakon 'host' #sistemu je besmislen. Unesite MAC adresu uređaja kao i željenu #IP adresu. Uvjerite se da je izvan dhcp raspona. Ponovite po potrebi. #host [NIŠTA] { # hardverski ethernet xx: xx: xx: xx: xx: xx; # fiksna adresa 10.210.212.250; #}

Obavezno koristite brojeve koji vam odgovaraju. Gore navedeni IP -ovi su za moju mrežu, s izuzetkom poslužitelja imena koji su Google. Primijetite da sam metriku za ISP -a također postavio na 100 kako bih to bio zadani prvi pokušaj mrežnog prometa. Takođe nisam ništa uradio sa svojim bežičnim adapterom (wlan0). Namjeravam potpuno isključiti to sučelje, pa mi je to imalo smisla.

Također, ako želite forsirati IP adresu na uređaju (poput NAS -a), upotrijebite taj donji odjeljak. Dajte domaćinu ime koje vam znači, ali znajte da ga nikada ništa ne koristi. Ne zaboravite tačku -zarez.

Korak 6: DHCP i DNS (dio 2)

DHCP i DNS (dio 2)
DHCP i DNS (dio 2)

Sljedeći korak je izmjena datoteke dnsmasq.conf …

$ sudo vi /etc/dnsmasq.conf

Moramo dekomentirati nekoliko redaka i urediti nekoliko redaka. Također ćete morati kopirati nekoliko postavki iz datoteke dhcpcd.conf. Još dva pitanja na koja morate sami sebi odgovoriti su:

Trebaju li internom LAN -u (npr. Eth0) DHCP i DNS? Koji DHCP raspon želite za svoj LAN i koliko dugo bi svaki zakup trebao biti?

Počnite tako što ćete nekomentirati nekoliko redaka:

lažni-privno-dhcp-interface = wlan0bind-sučeljadhcp-name-match = set: wpad-ignore, wpaddhcp-ignore-names = tag: wpad-ignore

Postavite svoj server imena. Potražite liniju koja počinje 'server =' i učinite je nešto poput 'server = 8.8.8.8'.

Postavite svoj DHCP raspon. Postoji mnogo načina za to. Odlučio sam pružiti dva IP -a krajnje tačke, masku i trajanje najma. Moj raspon je bio 10.210.212.20-10.210.212.240, sa mrežnom maskom od 255.255.255.0 i vremenom zakupa od 12 sati. Preporučujem da ostavite neke IP adrese na vrhu i dnu raspona u slučaju da ikada budete morali nečemu dati statički IP.

Postavite sučelje koje će primati DNS i DHCP (LAN) mijenjanjem linije 'interface =' u nešto poput 'interface = eth0). Primijetite da sam mu izričito rekao da NE dodjeljuje DHCP IP adresu mojoj bežičnoj mreži. Opet namjeravam potpuno isključiti to sučelje pa mi je to imalo smisla.

Korak 7: DHCP i DNS (dio 3)

DHCP i DNS (dio 3)
DHCP i DNS (dio 3)

Odstupanje od uputa GK -a za ovaj posljednji korak …

Kada sam u ovom trenutku ponovno pokrenuo svoj RPi, proces dnsmasq nije bio aktivan. Malo sam se razgledao i otkrio sam da mi mrežni interfejsi eth0 i eth1 nisu bili aktivni prije pokretanja dnsmasq -a, pa bi dnsmasq pao pri pokretanju. Morao bih spojiti tastaturu i miša na RPi i ručno ponovo pokrenuti dnsmasq. Ovo nije idealno s postavljanjem bez glave. Pročitao sam hrpu postova u kojima se navodi da se mijenjaju postavke (npr. Onemogućuju bind-interface) i druge stvari. Ništa od toga nije uspjelo. Na kraju sam odlučio jednostavno napisati ljuskastu skriptu koja će se pokrenuti svake 2 minute i provjeriti status dnsmasq -a. Ako nije pokrenut, pokrenite ga. Pretpostavljam da ova situacija nije svojstvena samo meni. Dakle, evo što trebate učiniti:

Učinite sljedeći kod u datoteku pod nazivom 'dns_masq_keepalive.sh' na vašem RPi -u.

#!/bin/bash

# Datoteka: dns_masq_keepalive.sh # kolovoz 2019. # Upotrijebite ovo s crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh) kako biste bili sigurni da se dnsmasq izvodi. Usluga će se sama zaustaviti ako # sva sučelja spomenuta u dhcpcd.conf nisu pokrenuta prije nego što počne. Ovo rješava problem. # Ovaj sljedeći redak će vratiti sve aktivne poslove s riječju 'dnsmasq' u sebi. Dakle, nemojte uključivati 'dnsmasq' u ime ove # datoteke, u suprotnom će ga vratiti svaki put i nikada nećete imati ponovno pokretanje. dns_running = $ (ps -e | grep dnsmasq) echo $ dns_running if [-z "$ dns_running"] onda #echo Nema DNSMasq sudo /etc/init.d/dnsmasq restart #else #echo DNSMasq Pokretanje fi

Izrežite ga i zalijepite ako je potrebno. Šta god da radite, nemojte uključiti 'dnsmasq' u ime. Skripta traži riječ 'dnsmasq' i ako je skripta ima u imenu, pretpostavit će da je usluga pokrenuta. Takođe, preimenujte datoteku tako da završava sa '.sh'. Neupadljive stvari mi ne dopuštaju da postavim '.sh' datoteku-što je dobro. Preostale upute pretpostavljaju da datoteka postoji na: /etc/dns_masq_keepalive.sh.

Drugo, postavite dozvole za datoteku tako da se može izvršiti:

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

Sada ćemo koristiti sistem crontab za omogućavanje pokretanja programa svake 2 minute svakog dana. Pokreni crontab:

$ sudo crontab -e

Trebalo bi da vas zatraži da uredite pomoću vi ili nečeg drugog. Bilo koji će raditi. Nakon što ga možete urediti, dodajte sljedeće na kraj datoteke:

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

Nema razmaka u '*/2', već razmake između zvjezdica. Sačuvajte i odustanite. Trebalo bi vam reći da je posao zakazan ili nešto slično.

Korak 8: Vatrozid

Zaštitni zid
Zaštitni zid

Sljedeći bolan proces je zaštitni zid (GK -ov korak 11). Raspbian koristi dobro poznati sistem iptables. GK -ov blog nudi tri datoteke koje će vam pomoći da dođete do toga … firewall.simple, firewall.advanced i firewall.flows. Svaka čast GK -u, ali olakšajte sebi i samo idite uz firewall.simple. Proveo sam dosta vremena pokušavajući da shvatim sistem i pravila iptablesa. Drago mi je što jesam, ali bilo je bolno. Dakle, dajem vam dvije priložene datoteke koje će vam pomoći … firewall.simple i firewall.clear. Kopirajte obje ove datoteke u fasciklu /etc i promijenite dozvole kako bi bile izvršne:

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

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

Prije nego postavite bilo koja pravila zaštitnog zida, priključite radnu površinu/laptop na svoj RPi eth0 port i potvrdite da dobija IP adresu i da li je DNS pokrenut. Najlakši način za to je da pokušate pingati generičku web lokaciju, a zatim poznatu IP adresu. Pingirajte i svoj RPi i ISP usmjerivač. Ako dobijete rezultate, sve je u redu i svi mrežni problemi s kojima se sada susrećete vjerojatno će biti posljedica problema sa zaštitnim zidom.

Prva ponuđena datoteka prvobitno je započela kao GK -ova datoteka firewall.simple (hvala, opet, GK!). Napravio sam gomilu promjena kako bi funkcionirao za ovaj sistem. Trebao bi omogućiti barem HTTP, HTTPS, DNS, DHCP, ping, interni SSH, interni VNC i plex. Plex možda nema sve otvorene portove za svaki mogući uređaj, ali postoji hrpa postova koji to mogu popraviti. Pri vrhu datoteke nalaze se vrijednosti koje ćete morati promijeniti u konfiguraciju mreže.

Druga datoteka, firewall.clear, namjerava se koristiti za testiranje pravila vatrozida. Kada pokrenete 'sudo /etc/firewall.clear' sva pravila zaštitnog zida će se izbrisati i sistem bi trebao biti potpuno povezan s internetom. Dakle, ako ne možete učiniti da mrežna usluga (poput dns -a) radi s vatrozidom.jednostavna pravila, ali počinje raditi nakon što pokrenete firewall.clear, znate da imate problem s pravilom. Ovo će zaista biti kritično samo pri testiranju vaših pravila.

Dakle, tu imamo pravila zaštitnog zida, moramo ih natjerati da se pokrenu kada se pokrene RPi. Da bismo to učinili, uredit ćemo datoteku /etc/rc.local:

$ sudo vi /etc/rc.local

Kad uđete unutra, dodajte sljedeće na kraj datoteke:

echo “Učitavanje iptables pravila” /etc/firewall.simple >>/dev/null

Ako odlučite dodati sistem za otkrivanje upada snort -a, morat ćete ponovo urediti ovu datoteku. Za sada ga samo spremite i ponovo pokrenite.

$ sudo ponovno pokretanje

Korak 9: Syslog

Syslog
Syslog

Još dva koraka…

Ovo je lako. Ako ste još uvijek tamo i pratite GK -ov blog, ovo je korak 12. Morate učiniti upravo ono što on kaže u vezi sa datotekom syslog. Evo skraćenih koraka:

Čuvajte sistemske podatke u vrijednosti 2 mjeseca…

$ sudo vi /etc/logrotate.conf

Moramo mu reći da koristi 'jednu sedmicu' kao mjerenje, a zatim zadržati 12 od njih. U ovoj datoteci su vam potrebna sljedeća dva retka. Vjerujem da ćete morati promijeniti postojeće linije.

sedmično rotirati 12

Sačuvaj.

Korak 10: Otkrivanje upada pomoću Snort -a

Otkrivanje upada s hrkanjem
Otkrivanje upada s hrkanjem

Posljednja stvar koju GK konfigurira je sistem hrkanja. Preporučujem i ovo. Možete se pridržavati njegovih pravila, a ja ih neću kopirati ovdje, s nekoliko manjih izmjena. Njegova uputstva su za distribuciju ArchLinux. Evo nekoliko promjena za Raspbian distribuciju koje ovdje koristimo. Ostatak uputstava radi dobro.

Prvo, nemojte koristiti sudo pacman -S snort za preuzimanje i instaliranje snort. Učinite sljedeće:

$ sudo apt-get install snort

Drugo, ne možete provjeriti hrkanje pomoću sudo snort -verzije. Potvrdite instalaciju pomoću:

$ sudo snort -V

Konačno, da biste ga pokrenuli pri pokretanju, nemojte mijenjati datoteku rc.conf, uredite datoteku rc.local (ponovo)…

$ sudo vi /etc/rc.local

Dodajte sljedeće retke na kraj datoteke:

echo "Učitavanje hrkanja"

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

Sada, ponovo pokrenite sistem i sve bi trebalo čarobno funkcionirati.

$ sudo ponovno pokretanje

Korak 11: Uživajte

Uživajte
Uživajte

To bi trebalo biti to!

Prije svega, ne mogu se dovoljno zahvaliti Guillaumeu Kaddouchu! On je ovo inspirisao.

Drugo, ako već niste isključili tastaturu, video i miš, možete. Koristite SSH i VNC za povratak, kad je potrebno.

Na kraju, ovo možda nije 100% savršeno. Molimo vas da se javite sa promjenama/prijedlozima/preporukama. Moj cilj bi bio da ovo bude početak rasprave i da mnogi ljudi uživaju!

Hvala !!

PS… Slika je RPi4 u aluminijskom kućištu FLIRC sa starim Intelovim ventilatorom, malo izmijenjenim i zatvoren patentnim zatvaračem do vrha. Ispod ventilatora se nalazi termalna pasta, za slučaj da se pitate. Našao sam nešto slično na internetu (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) i odlučio sam to isprobati.

Korak 12: Dnevnik promjena

Kako se budu mijenjale ove upute, dokumentirat ću ih ovdje. U slučaju da imate problem, ovdje provjerite jeste li uzeli stara uputstva ili datoteke.

25. septembar 2019.:

  • Fiksna DHCP pravila u firewall.simple
  • Fiksni DHCP raspon u uputama (datoteke su bile ispravne)
  • DHCP instrukcijama su dodijeljeni dodijeljeni fiksni IP

13. oktobra 2019

  • Ispravljeno više pravopisnih grešaka
  • Napravio sam drugi pi pa bih imao testnu SD karticu koju bih zamijenio, ako je potrebno

Preporučuje se: