Kazalo:

Požarni zid Raspberry Pi4: 12 korakov
Požarni zid Raspberry Pi4: 12 korakov

Video: Požarni zid Raspberry Pi4: 12 korakov

Video: Požarni zid Raspberry Pi4: 12 korakov
Video: #shorts We like the Netgate 8200 running pfsense to mount it.. 2024, Junij
Anonim
Požarni zid Raspberry Pi4
Požarni zid Raspberry Pi4

S pravkar izdanim novim Raspbery Pi 4 (RPi4) sem se odločil, da si naredim požarni zid za domačo uporabo. Ko sem se spotaknil po internetu, sem našel odličen članek na to temo Guillaumea Kaddoucha (https://networkfilter.blogspot.com/2012/08/building-your-piwall-gateway-firewall.html). Članek je neverjeten in pred nadaljevanjem ga morate prebrati-olajšal bo postopek, opisan tukaj. Dejstvo je, da je bil ta članek napisan leta 2012 in temelji na distribuciji ArchLinux. Nič proti ArchLinux -u, vendar sem to želel narediti z uporabo bolj običajne gradnje Raspbian. RPi4 lahko obvlada zahteve obdelave. Torej, hvala, Guillaume, za navdih !! Ta navodila se bodo nanašala na prvotno objavo Guillaumea (na kratko "GK"). Verjetno boste želeli, da sta obe strani odprti v brskalniku.

Nekaj ključnih stvari o mojem požarnem zidu:

  • Imam vgrajen ethernet priključek (eth0), ki gre v LAN
  • Usmerjevalnik ISP je na adapterju TRENDnet (eth1)
  • Aktivno sem onemogočil brezžični adapter (wlan0)
  • To ne bo zagotovilo, da vas bo pripeljalo 100%… upam, da vsaj 99%:), zato prosim za povratne informacije/komentarje
  • To je moj prvi pouk. Oprostite za vse, kar ne sledi ustreznim normativom.

Zdaj pa se zabavajmo…

Zaloge

  • Malina Pi 4

    • Uporabil sem različico 4 GB, poskusite z drugo različico
    • Etui (všeč mi je FLIRC, ampak to je tvoj klic)
    • Polnilec
  • Kartica MicroSD, 32 GB ali več (uporabil sem kartico 64 GB)
  • TRENDnet USB3.0 Gigabit Ethernet ključ (model: TU3-ETG)
  • Nekaj omrežnih kablov RJ45
  • USB tipkovnica in miška
  • Kabel Micro-HDMI v HDMI (priključen na monitor HDMI)

To tipkovnico, video in miško lahko odstranite, ko lahko zaženete SSH in VNC.

1. korak: Začetna nastavitev RPi

Začetna nastavitev RPi
Začetna nastavitev RPi

Najprej morate RPi4 zagnati in zagnati kot nov sistem. Prenesite in namestite polno distribucijo Raspbian (Raspbian Buster z namizjem in priporočeno programsko opremo). Nekajkrat boste morali znova zagnati računalnik, da se lahko razširi in izkoristi polno kartico MicroSD.

Ko se zažene, boste morali odgovoriti na vprašanja o kraju, omrežju, tipkovnici in miški. Povežite se z omrežjem in dovolite, da se posodobi.

Potrdimo tudi, da je vse pravilno posodobljeno, in dobimo nekaj pripomočkov, ki bi lahko kasneje pomagali pri odpravljanju napak:

$ sudo apt-get posodobitev

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

Nisem namestil vima, prav tako ne nobenega od korakov 8 GK (konfigurirajte vim). Pravkar sem uporabil urejevalnik vi, saj ima vseeno večino teh funkcij. To je prihranilo tudi nekaj časa in truda.

Ko je to končano, nastavimo RPi4 tako, da lahko monitor vroče priključimo. Moj cilj je bil, da bi deloval brez glave, če pa bi moral priključiti monitor, bi bil to prepoznan.

$ sudo vi /boot/config.txt

V tej datoteki:

razkomentiraj (odstranite sprednji #-simbol): hdmi_force_hotplug = 1

komentar: hdmi_drive = 2

po želji dodajte: enable_hdmi_sound

2. korak: Mreženje

Mreženje
Mreženje
Mreženje
Mreženje

Če spremljate na spletnem mestu GK, je to 3. korak. Vendar ne pozabite, da nisem sledil veliko njegovim prvim korakom v natančnem vrstnem redu.

Ko sem to prvič začel, sem RPi priključil neposredno na usmerjevalnik ponudnika internetnih storitev ("poleg obstoječega omrežja"). To mi je omogočilo, da sem se igral s konfiguracijo, ne da bi to vplivalo na omrežje. Vgrajen RPi4 RJ45 povežite z usmerjevalnikom (ali brezžičnim, če želite). Z Raspbian je to najlažje storiti z uporabo grafičnega vmesnika. Na namizju kliknite ikono Raspberry> Nastavitve> Konfiguracija Raspberry Pi. Omogočite SSH in VNC. S tem boste namestili odjemalca strežnika Real-VNC. Ugotovil sem, da se bo, če se poskusite povezati s odjemalcem Tight VNC, izkazalo, da bo potreboval dodatno konfiguracijo. Na tej točki namestite odjemalca Real-VNC na primarno namizje/prenosnik (ne na vaš RPi4).

SSH ne bo deloval izven škatle (korak GK 7). Spremeniti moramo nekatere konfiguracije. Najprej spremenimo konfiguracijsko datoteko ssh. Tu so moje spremembe. Ne pozabite, da tukaj nisem preučeval vpliva vsake spremembe. Naredil sem, kar je predlagalo spletno mesto GK. Nekatere od teh sprememb morda NE bodo potrebne.

$ sudo vi/etc/ssh/sshd_config

V tej datoteki odkomentirajte naslednje vrstice:

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

Prezri Rhosts da

PrintMotd nePrintLastLog daTCPKeepAlive da

In dodajte naslednje vrstice:

Protokol 2UsePrivilege Ločitev yesKeyRegenerationInterval 3600ServerKeyBits 768RSAAuthentication daRhostsRSAAuthentication ne

In spremenite naslednje vrstice:

Port 15507LoginGraceTime 60PermitRootŠt. Prijave

Hitro se pogovorimo o tej prvi spremembi … vrata 15507. SSH običajno deluje na vratih 22. GK ga je premaknil na 15507-ne vem zakaj. Lahko ga spremenite tako ali drugače … Če se odločite za spremembo, boste morali vsakemu ukazu SSH, s katerim se želite povezati, dodati "-p 15507". Če se odločite, da ga boste preskočili, bodite pozorni na druga mesta, ki so v teh navodilih omenjena 15507, in jih ne upoštevajte, zlasti pravila požarnega zidu!

Nazadnje za ta korak dobimo naslov IP RPi4, da bomo vedeli, na kaj se povežemo:

$ ipconfig -a

Poiščite aktivno omrežno povezavo (verjetno na eth0 ali wlan0) in zapišite ta naslov IP. Zdaj imate vse, kar potrebujete za oddaljeno povezavo z RPi4. Preden nadaljujemo, znova zaženimo:

$ sudo ponovni zagon

3. korak: Drug uporabnik

Drugi uporabnik
Drugi uporabnik

Najbolje je, da ne uporabljate privzetega uporabniškega imena RPi (pi), geslo pa morate vsekakor spremeniti. Za varnost dodajte še en uporabniški račun, s katerim se lahko na daljavo povežete in nadaljujete (korak 6 GK). Nazaj na RPi, dodajmo novega uporabnika in uporabniku nastavimo dovoljenja za SSH ter izdamo ukaz sudo:

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

$ sudo passwd [USERNAME]

Odjavite se ali znova zaženite in uporabite nov ustvarjeni račun za naprej.

4. korak: Datoteka Syctl

Datoteka Syctl
Datoteka Syctl

Naslednji korak je spremeniti datoteko /etc/sysctl.conf (korak 9 GK). Ta datoteka se uporablja za spreminjanje nekaj nastavitev jedra. Naredili bomo točno to, kar pravi GK. Tu je poenostavljen niz korakov.

$ sudo vi /etc/sysctl.conf

V tej datoteki odkomentirajte naslednje vrstice:

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

In dodajte naslednje vrstice:

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

Znova zaženite storitev s temi novimi nastavitvami in znova zaženite:

$ sudo sysctl -p

$ sudo ponovni zagon

5. korak: DHCP in DNS (1. del)

DHCP & DNS (1. del)
DHCP & DNS (1. del)

Zame sta bila ta proces dva boleča dela: nastavitev DHCP in DNS ter nastavitev pravil požarnega zidu. Torej, gremo s prvim delom. Če spremljate stran GK, smo na 10. koraku.

Če želite to narediti, boste potrebovali nekaj podatkov iz usmerjevalnika ponudnika internetnih storitev (ali trenutnega požarnega zidu):

  • Notranji naslov IP usmerjevalnika
  • Naslov IP, ki ga lahko uporabite za vmesnik RPi4 do usmerjevalnika
  • IP za imenski strežnik (ali dva)
  • Ime vmesnika za povezavo LAN (npr. Eth0 ali eth1)
  • Ime vmesnika za povezavo ponudnika internetnih storitev (npr. Karkoli niste uporabili za LAN)

Morda boste morali spremeniti tudi nastavitve usmerjevalnika, da RPi4 dodeli statični naslov IP (točka 2 zgoraj). Vsaj jaz sem tako naredil.

Najprej spremenimo datoteko dhcpcd.conf …

$ sudo vi /etc/dhcpcd.conf

Odkomentirajte te vrstice:

persistentoption rapid_commitoption strežniki_ime_dome_domena, ime_domene, iskanje_domen, ime_gostiteljavmesnik_mtu

Za vsak omrežni vmesnik morate nastaviti podrobnosti o omrežju. Izgledati bi morali nekako takole:

# Statično za vmesnik do ponudnika internetnih storitev

vmesnik 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 metrika 100 # Statično za vmesnik vmesnika LAN eth0 static ip_address = 10.210.212.static routers = 10.210.212.1 static server_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 #Odkomentirajte ta razdelek, če želite vsiliti naslov IP v napravi. Ime za 'host' #za sistem nima pomena. Vnesite naslov MAC naprave in želeni naslov #IP. Prepričajte se, da je izven območja dhcp. Po potrebi ponovite. #host [KAJ] { # strojna oprema ethernet xx: xx: xx: xx: xx: xx; # fiksni naslov 10.210.212.250; #}

Uporabite številke, ki vam ustrezajo. Zgornji IP -ji so za moje omrežje, razen imenskih strežnikov, ki so Google. Upoštevajte, da sem metriko za ponudnika internetnih storitev nastavil tudi na 100, da bo to prvi privzeti poskus omrežnega prometa. Prav tako nisem naredil ničesar z brezžičnim vmesnikom (wlan0). Ta vmesnik nameravam popolnoma izklopiti, zato je bilo zame smiselno.

Če želite vsiliti naslov IP v napravi (kot je NAS), uporabite spodnji razdelek. Gostitelju dajte ime, ki je za vas pomembno, vendar vedite, da ga nikoli nič ne uporablja. Ne pozabite na podpičje.

6. korak: DHCP in DNS (2. del)

DHCP in DNS (2. del)
DHCP in DNS (2. del)

Naslednji korak je spremeniti datoteko dnsmasq.conf …

$ sudo vi /etc/dnsmasq.conf

Nekomentirati moramo nekaj vrstic in nekaj vrstic urediti. Prav tako boste morali kopirati nekaj nastavitev iz datoteke dhcpcd.conf. Še dve vprašanji, na katera morate sami odgovoriti, sta:

Ali notranji LAN (npr. Eth0) potrebuje DHCP in DNS? Kakšen obseg DHCP želite za vaš LAN in kako dolgo naj traja vsak najem?

Začnite tako, da komentirate nekaj vrstic:

lažni-privno-dhcp-vmesnik = wlan0bind-vmesnikidhcp-name-match = niz: wpad-ignore, wpaddhcp-ignore-names = tag: wpad-ignore

Nastavite svoj imenski strežnik. Poiščite vrstico, ki se začne 'server =', in naredite nekaj takega kot 'server = 8.8.8.8'.

Nastavite obseg DHCP. Obstaja veliko načinov za to. Odločil sem se, da navedem dva IP -ja končnih točk, masko in trajanje najema. Moj obseg je bil 10.210.212.20-10.210.212.240, z masko omrežja 255.255.255.0 in časom najema 12 ur. Priporočam, da pustite nekaj IP -jev na vrhu in na dnu vašega območja, če boste kdaj morali dati kakšen statični IP.

Nastavite vmesnik, ki bo dobil DNS in DHCP (LAN), tako da spremenite vrstico 'interface =' v nekaj podobnega 'interface = eth0). Upoštevajte, da sem mu izrecno rekel, naj svojemu brezžičnemu omrežju ne dodeli naslova IP DHCP. Ponovno nameravam popolnoma izklopiti ta vmesnik, zato je bilo zame smiselno.

7. korak: DHCP in DNS (3. del)

DHCP & DNS (3. del)
DHCP & DNS (3. del)

Odmik od navodil GK za ta zadnji korak …

Ko sem na tej točki znova zagnal RPi, postopek dnsmasq ni bil aktiven. Malo sem pobrskal in ugotovil sem, da moja omrežna vmesnika eth0 in eth1 nista bila aktivna pred zagonom dnsmasq, zato dnsmasq ob zagonu ne bi uspel. Tipkovnico in miško bi moral povezati z RPi in ročno znova zagnati dnsmasq. To ni idealno z brezglavo nastavitvijo. Prebral sem kup objav, ki naj bi spreminjale nastavitve (npr. Onemogočile vmesnik za vezavo) in druge stvari. Nič od tega ni delovalo. Na koncu sem se odločil, da preprosto napišem lupinski skript, ki se bo izvajal vsake 2 minuti in preveril stanje dnsmasq. Če se ne izvaja, ga zaženite. Predvidevam, da ta situacija zame ni edinstvena. Torej, tukaj morate storiti naslednje:

Naslednjo kodo pretvorite v datoteko z imenom 'dns_masq_keepalive.sh' na svojem RPi.

#!/bin/bash

# Datoteka: dns_masq_keepalive.sh # avgust 2019 # Uporabite to s crontab -e (*/2 * * * * /etc/dns_masq_keepalive.sh), da se prepričate, da se dnsmasq izvaja. Storitev se bo ustavila, če # vsi vmesniki, omenjeni v dhcpcd.conf, ne delujejo, preden se začne. To odpravi težavo. # Ta naslednja vrstica bo vrnila vsa aktivna opravila z besedo 'dnsmasq'. Zato v ime te datoteke ne vključite 'dnsmasq', sicer ga bo vsakič vrnil in nikoli ne boste imeli ponovnega zagona. dns_running = $ (ps -e | grep dnsmasq) odmeva $ dns_running če [-z "$ dns_running"] potem #echo Ni DNSMasq sudo /etc/init.d/dnsmasq znova zaženite #else #echo DNSMasq Teče fi

Če je potrebno, ga izrežite in prilepite. Karkoli naredite, v ime ne vključite 'dnsmasq'. Skript išče besedo 'dnsmasq' in če jo skript ima v imenu, bo domneval, da se storitev izvaja. Preimenujte tudi datoteko, tako da se konča z '.sh'. Neznosljivi mi ne dovolijo naložiti datoteke '.sh'-kar je dobro. Preostala navodila predvidevajo, da datoteka obstaja na: /etc/dns_masq_keepalive.sh.

Drugič, nastavite dovoljenja za datoteko, da jo lahko izvedete:

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

Zdaj bomo uporabili sistem crontab za zagon programa vsaki 2 minuti vsak dan. Začni crontab:

$ sudo crontab -e

Pozval bi vas k urejanju z uporabo vi ali česa drugega. Vsak bo deloval. Ko ga lahko uredite, na konec datoteke dodajte naslednje:

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

V '*/2' ni presledkov, ampak presledki med zvezdicami. Shranite in zapustite. Moral bi vam povedati, da je delo načrtovano ali kaj podobnega.

8. korak: Požarni zid

Požarni zid
Požarni zid

Naslednji boleč proces je požarni zid (korak 11 GK). Raspbian uporablja dobro znani sistem iptables. GK -jev blog ponuja tri datoteke, ki vam pomagajo priti do tja … firewall.simple, firewall.advanced in firewall.flows. Vse spoštovanje do GK, vendar si olajšajte in pojdite z firewall.simple. Veliko časa sem porabil za iskanje sistema in pravil iptables. Vesel sem, da sem to storil, vendar je bilo boleče. Torej, v prilogi vam dam dve datoteki … firewall.simple in firewall.clear. Kopirajte obe datoteki v mapo /etc in spremenite dovoljenja, da bodo izvedljivi:

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

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

Preden nastavite pravila požarnega zidu, priključite namizni računalnik/prenosni računalnik v vrata RPi eth0 in potrdite, da dobi naslov IP in da deluje DNS. Najlažji način za to je poskusiti ping generičnega spletnega mesta in nato znanega naslova IP. Prav tako ping vaš usmerjevalnik RPi in ISP. Če dobite rezultate, je vse v redu in vse težave z omrežjem, na katere zdaj naletite, bodo verjetno posledica težav s požarnim zidom.

Prva predložena datoteka se je prvotno začela kot datoteka GK firewall.simple (še enkrat hvala, GK!). Naredil sem veliko sprememb, da bi deloval v tem sistemu. Omogočati mora vsaj HTTP, HTTPS, DNS, DHCP, ping, notranji SSH, notranji VNC in plex. Plex morda nima vseh odprtih vrat za vsako možno napravo, vendar obstaja veliko objav, ki bi to popravili. Na vrhu datoteke so vrednosti, ki jih boste morali spremeniti v omrežno konfiguracijo.

Druga datoteka, firewall.clear, je namenjena uporabi pri preizkušanju pravil požarnega zidu. Ko zaženete 'sudo /etc/firewall.clear', bodo izbrisana vsa pravila požarnega zidu in sistem mora biti v celoti povezan z internetom. Če torej ne morete doseči, da bi omrežna storitev (na primer dns) delovala s požarnimi stenami. Preprosta pravila, ki pa začnejo delovati, potem ko zaženete firewall.clear, veste, da imate težave s pravilom. To bo res kritično le pri preizkušanju vaših pravil.

Torej imamo pravila požarnega zidu, ki jih moramo zagnati, ko se zažene RPi. Če želite to narediti, bomo uredili datoteko /etc/rc.local:

$ sudo vi /etc/rc.local

Ko ste notri, na konec datoteke dodajte naslednje:

echo »Nalaganje pravil iptables« /etc/firewall.simple >>/dev/null

Če se odločite dodati sistem za zaznavanje vdorov smrčanja, boste morali to datoteko znova urediti. Zaenkrat ga samo shranite in znova zaženite.

$ sudo ponovni zagon

9. korak: Syslog

Syslog
Syslog

Še dva koraka…

Ta je enostaven. Če ste še vedno tam in sledite GK -jevemu blogu, je to 12. korak. Narediti morate točno to, kar pravi, glede datoteke syslog. Tu so skrajšani koraki:

Shranite podatke sistemskega dnevnika za 2 meseca…

$ sudo vi /etc/logrotate.conf

Moramo mu povedati, da uporabi "en teden" za merjenje, nato pa jih hranimo 12. V tej datoteki potrebujete naslednji dve vrstici. Verjamem, da boste morali spremeniti obstoječe vrstice.

tedensko obračanje 12

Shrani.

10. korak: Zaznavanje vdorov s smrčanjem

Zaznavanje vdorov s smrčanjem
Zaznavanje vdorov s smrčanjem

Zadnja stvar, ki jo GK konfigurira, je sistem smrčanja. Priporočam tudi to. Lahko sledite njegovim pravilom in tukaj jih ne bom kopirala z nekaj manjšimi spremembami. Njegova navodila so za distribucijo ArchLinux. Tu je nekaj sprememb za distribucijo Raspbian, ki jih tukaj uporabljamo. Ostala navodila delujejo v redu.

Najprej ne uporabljajte sudo pacman -S snort za prenos in namestitev smrčanja. Naredite naslednje:

$ sudo apt-get install snort

Drugič, s sudo snort -version ne morete preveriti smrčanja. Namestitev preverite z:

$ sudo smrčanje -V

Nazadnje, če želite, da se zažene ob zagonu, ne spreminjajte datoteke rc.conf, uredite datoteko rc.local (znova) …

$ sudo vi /etc/rc.local

Na konec datoteke dodajte naslednje vrstice:

odmev »Nalaganje smrčanja«

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

Zdaj znova zaženite in vse bi moralo čarobno delovati.

$ sudo ponovni zagon

11. korak: Uživajte

Uživajte
Uživajte

To bi moralo biti to!

Najprej se ne morem dovolj zahvaliti Guillaumeu Kaddouchu! To je navdihnil.

Drugič, če še niste odklopili tipkovnice, videa in miške, lahko. Po potrebi uporabite SSH in VNC, če se želite vrniti.

Na koncu to morda ni 100% popolno. Pošljite sporočilo s spremembami/predlogi/priporočili. Moj cilj bi bil, da bi to bil začetek razprave in da bi veliko ljudi uživalo!

Hvala !!

PS … Slika je RPi4 v aluminijasto ohišje FLIRC s starim Intelovim ventilatorjem, rahlo spremenjenim in z zadrgo na vrhu. Pod ventilatorjem je tudi termalna pasta, če se sprašujete. Nekaj podobnega sem našel na internetu (https://www.reddit.com/r/raspberry_pi/comments/9bdgrr/it_turns_out_putting_a_heatsink_on_the_flirc_case/) in se odločil, da poskusim tudi sam.

12. korak: dnevnik sprememb

Ker se v tem navodilu spremenijo, jih bom tukaj dokumentiral. Če imate težave, preverite tukaj, če ste vzeli stara navodila ali datoteke.

25. september 2019:

  • Odpravljena pravila DHCP v požarnem zidu.simple
  • Fiksni obseg DHCP v navodilih (datoteke so bile pravilne)
  • Navodilom DHCP so dodane dodelitve fiksnega IP

13. oktober 2019

  • Popravljenih več tipkarskih napak
  • Ustvaril sem drugo pi, tako da bi imel po potrebi preskusno kartico SD, ki bi jo zamenjal

Priporočena: