Instalarea și configurarea sigură a unui router cu OpenWrt 23.05

OpenWrt este un sistem de operare pentru routere bazat pe Linux ce are ca principale avantaje securitatea și performanța. Fiind open-source, oferă garanția că router-ul nu are posibilități de backdoor management, ceea ce routerele instalate cu closed-source factory firmware nu îți pot oferi, indiferent de reputația producătorului (și putem afirma acest lucru fără să fim acuzați că suntem conspiraționiști).

Scopurile acestui ghid

  • instalarea și configurarea routerului cu un resolver DNS cu un nivel de securitate ridicat – Stubby, care utilizează DoT (DNS over TLS);
  • configurare interfețe separate (vLAN) pentru LAN, Guest, IoT pentru mai mult control asupra rețelei;
  • configurare Port Forward dinamic pentru VPN.

Necesar

un router compatibil cucerințele OpenWrt, cu minim 8MB memorie Flash și 64MB memorie RAM. Vezi lista cu routere compatibile aici (de ex. un router bun, disponibil momentan și pe piața din România este routerul ASUS TUF Gaming AX4200). Nu achiziționați routerul cu livrare prin curier pentru că securitatea dispozitivului poate fi compromisă pe parcursul livrării (a se citi „compromisă intenționat”, chiar dacă vom fi acuzați că suntem conspiraționiști 🙂

un computer sigur cu Linux. Scopul configurării routerului nostru este de securizare a rețelei LAN de acasă. Nu folosiți deci în această rețea computere al căror nivel de securitate nu poate fi evaluat sau controlat, sau computere care rulează actualizări automate și greu de verificat precum face sistemul de operare Windows. Vezi ghidul separat pentru instalarea și configurarea sigură a unui computer cu sistemul de operare Ubuntu.

Pași de urmat

1. Instalare OpenWrt pe router

2. Configurare router și securizare firewall

3. Instalare și configurare Stubby

4. Configurare interfețe separate LAN, Guest, IoT (opțional)

5. Configurarea unui server VPN și setarea unui Port Forward dinamic

1. Instalare OpenWrt pe router

Dacă ați ales un router din lista de dispozitive compatibile, veți găsi pe site-ul openwrt.org instrucțiunile de instalare a sistemului de operare OpenWrt pentru routerul dvs.

2. Configurare router și securizare firewall

Accesați interfața web a routerului, denumită LuCI, folosind adresa IP 192.168.1.1.

La prima accesare parola nu este încă stabilită, apăsați butonul Login pentru a continua, după care vi se va solicita definirea unei parole. Aceasta va fi și parola cu care puteți stabili conexiunea SSH cu routerul la pașii următori.

În general, setările inițiale standard OpenWrt sunt concepte pentru a oferi un nivel ridicat de securitate. Acesta este motivul pentru care interfața wireless este dezactivată și ar fi recomandat să nu o activați decât temporar, atunci când aveți nevoie de ea.

Pentru a preveni diferite tipuri de atacuri DDoS, accesați Network > Firewall > Traffic rules și dezactivați permisiunile cu originea în WAN care nu sunt strict necesare. În majoritatea cazurilor, probabil doar regula Allow-DHCP-Renew este necesară.

3. Instalare și configurare Stubby

Stubby este un resolver DNS prin TLS (DNS over TLS, sau DoT). Practic, în loc să fie folosit portul 53 pentru DNS transparent, sunt folosite porturile 853 sau 443 pentru DNS criptat. Criptarea TLS oferă răspunsurilor DNS un nivel ridicat de securitate, întrucât acestea nu mai pot fi modificate în tranzit. În acest fel putem fi siguri că sursa informațiilor pe care le descărcăm este cea corectă, sau mai bine zis este indicată corect. În mod similar, criptarea informațiilor în sine (i.e. folosirea https în loc de http) ne oferă certitudinea că informațiile în sine sunt întocmai cu cele oferite de sursă, adică nu au fost modificate în tranzit. De aceea este important ca toate descărcările de software pentru instalări și actualizări să se facă prin https.

Revenind la Stubby, prin instalarea acestuia pe router se realizează securizarea informațiilor DNS pentru întreaga rețea LAN deservită de router.

Pentru instalare, realizați o conexiune SSH cu router-ul. Userul este „root”, iar parola este cea definită anterior.

Introduceți comenzile:

opkg update
opkg install stubby

După instalare, vom configura Stubby pentru a folosi un server DNS de încredere, precum Clouflare sau OpenDNS. Stubby poate fi configurat direct editând fișierul /etc/config/stubby.

Vom face o copie de siguranță după care vom edita acest fișier:

cd /etc/config/
cp stubby stubby_backup
vim stubby

În fereastra care se deschide, apăsați tasta i pentru a edita textul. Anulați toate secțiunile config resolver prin inserarea unui # în fața tuturor liniilor din aceste secțiuni, cu excepția următoarelor linii (sau, dacă nu sunt deja în fișier, introduceți manual liniile de mai jos):

config resolver
       option address '1.1.1.1'
       option tls_auth_name 'cloudflare-dns.com'
config resolver                                              
       option address '1.0.0.1'                                                                      
       option tls_auth_name 'cloudflare-dns.com'

Apăsați Escape, apoi introduceți :wq și apăsați Enter pentru a salva modificările făcute. Reporniți Stubby folosind următoarea comandă:

service stubby restart

După această configurare, vom face setările necesare pentru ca routerul să folosească Stubby. Deschideți interfața web LuCI și accesați Network > DHCP and DNS.

În secțiunea General settings, introduceți următoarele câmpuri la DNS forwardings:

127.0.0.1#5453
0::1#5453

Acestea sunt adresele IP și portul unde rulează Stubby.

Mergeți apoi la secțiunea Resolv and Hosts Files și bifați căsuța Ignore resolv file pentru a folosi Stubby în locul configurației DNS standard din OpenWrt. Faceți click pe Save & Apply.

Pentru ca schimbările să aibă efect, modulul dnsmasq trebuie repornit. Accesați System > Startup și dați restart ladnsmasq.

Verificați care sunt serverele DNS folosite acum accesând dnsleaktest.com. Folosiți Extended test. Aici ar trebui să apară doar serverele DNS configurate anterior în fișierul /etc/config/stubby. Pentru Cloudflare vor apărea servele DNS Cloudflare din România.

Verificați dacă Stubby funcționează corect accesând Browsing Experience Security de la Cloudflare. Câmpul Secure DNS indică utilizarea DoT. În plus față de acesta, ar trebui să avem confirmări și pentru DNSSEC și TLS 1.3, iar dacă folosim browserul Chromium ar trebui să avem și confirmarea pentru Secure SNI.

Dacă totul este în regulă, ca măsură de siguranță, pentru a ne asigura că solicitările și răspunsurile DNS sunt în permanență criptate, vom bloca accesul la WAN pentru portul 53, atât pentru router cât și pentru toate zonele de firewall definite. Accesați Network > Firewall > Traffic Rules și introduceți următoarele două reguli noi:

Protocol: TCP/UDP
Source zone: Device (output)
Output zone: wan
Destination port: 53
Action: reject

Protocol: TCP/UDP
Source zone: Any zone (forward)
Destination zone: wan
Destination port: 53
Action: reject

După adăugarea acestor două reguli faceți click pe Save & Apply.

4. Configurare interfețe separate LAN, Guest, IoT (opțional)

Pentru majoritatea routerelor, cu OpenWrt există posibilitatea separării rețelei LAN în mai multe rețele care pot fi conectate între ele sau pot fi complet separate.

Un scenariul uzual este acesta:

– o rețea „LAN” pentru utilizarea curentă cu dispozitive sigure;

– o rețea „Guest” pentru utilizare ocazională cu dispozitive care pot fi considerate nesigure;

– o rețea „IoT” pentru aplicațiile smart home și CCTV, pentru utilizare cu dispozitive al căror acces la internet se dorește a fi restricționat.

O astfel de configurare are două avantaje:

– se pot conecta la internet dispozitive considerate nesigure fără a pune în pericol securitatea întregii rețele;

– putem fi siguri că ne păstrăm intimitatea folosind dispozitive de tip smart home sau un sistem CCTV al cărui acces la internet este blocat permanent, aceste dispozitive putând fi accesate doar prin intermediul rețelei private de acasă, sau printr-un VPN prin intermediul căruia se realizează conexiunea la rețeaua noastră privată.

Detaliile realizării acestei configurări depășesc scopul acestui ghid, însă pașii principali sunt:

1) crearea zonelor de firewall „GUESTzone” și „IOTzone” în Network > Firewall > Zones;

2) crearea VLAN-urilor pentru interfețe în Network > Interfaces > Devices (Device type: VLAN 802.1q);

3) crearea interfețelor „GUEST” și „IOT” în Network > Interfaces;

4) configurarea porturilor switch-ului în Network > Interfaces > Devices > br-lan > Configure > Bridge VLAN filtering.

Alternativ, blocarea accesului la internet al diferitelor dispozitive se poate realiza individual prin Firewall, asigurând un IP static pentru respectivul dispozitiv blocat, fără a se mai separa rețeaua LAN în mai multe rețele.

5. Configurarea unui server VPN și setarea unui Port Forward dinamic

Pentru a accesa de la distanță rețeaua LAN de acasă, cea mai bună soluție este VPN-ul open-source Wireguard. Wireguard folosește un protocol performant, rapid și sigur.

Wireguard poate fi instalat pe un computer dedicat (un Raspberry Pi 4 sau 5 cu Ubuntu Server fiind suficient pentru acest scop).

Alternativ, Wireguard poate fi instalat direct pe router-ul OpenWrt.

Pentru a fi posibil accesul de la distanță prin VPN, este necesar ca rețeaua LAN de acasă să aibe un IP public (poate fi un IP dinamic, dar trebuie configurat un serviciu DDNS, cum este, de exemplu, cel oferit de digi). În plus, este necesară deschiderea unui port pe router (prin Port Forwarding) către adresa IP locală a serverului Wireguard.

Un port permanent deschis crează însă o vulnerabilitate la atacurile de tip DDoS (distributed denial-of-service). Pentru a rezolva această problemă, putem concepe un script Python care ia ca date de intrare data și ora curente și calculează printr-un anumit algoritm (care trebuie să rămână secret) numărul portului care va fi deschis, de exemplu, pentru o perioadă de 15 minute, după care portul respectiv va fi închis și se va deschide un alt port, calculat cu ajutorul aceluiaș algoritm.

Algoritmul trebuie să fie suficient de complex pentru a nu putea fi dedus (de exemplu 10 iterații de operații matematice complexe și variate care returnează doar restul împărțirii la numărul maxim de porturi, respectiv 65535). De asemenea, algoritmul trebuie să returneze același număr într-o fereastră de timp de 15 minute, un număr diferit în fereastra următoare, etc.

Atâta timp cât ora și data sunt setate corect, rulând acealși script pe orice alt computer, vom obține același rezultat. Rulând deci scriptul pe terminalul de pe care vrem să ne conectăm, vom afla exact numărul portului deschis momentan și vom putea iniția conexiunea VPN.

Vulnerabilitatea sistemului constă acum în dificultatea de a menține ora exactă pe serverul Wireguard din rețeaua LAN de acasă, în situația în care un atacator (profitând de susținerea sau ignoranța furnizorului nostru de servicii de internet) ar manipula mesajele NTP primite de la un server extern, întrucât aceste mesaje în mod obișnuit nu sunt criptate.

De aici rezultă necesitatea instalării unui server NTP în rețeaua LAN de acasă, care poate fi configurat pe un Raspberry Pi 4 cu o mică interfață GPS și o antenă GPS.

Încheiere

Principalele avantaje ale unui router performant configurat cu sistemul de operare OpenWrt ilustrate în acest ghid sunt:

– posibilitea criptării DNS, cu avantaje privind securitatea și intimitatea;

– posibilitatea blocării accesului la internet pentru dispozitivele de tip smart home sau CCTV pentru a ne asigura că acestea nu sunt accesate din exterior fără ca noi să știm;

– posibilitatea configurării unui Port Forward dinamic pentru conexiunea VPN, pentru a elimina complet vulnerabilitatea la atacurile DDoS.

Protejarea rețelei

Routerul este componenta principală de securitate a unei rețele casnice. Ca măsură principală de siguranță, în afara celor menționate detaliat în acest ghid, este necesară configurarea cât mai restrictivă a firewall-ului. Desigur, este necesară protejarea router-ului cu o parolă puternică.

Redundanță

Pentru siguranță e bine să aveți un router de rezervă configurat în mod similar cu routerul principal, eventual protejat de o parolă diferită.

OpenWrt permite exportarea și importarea fidelă a configurației, așa că puteți transfera cu ușurință configurația de la un router la altul. Trebuie desigur instalate în prealabil toate pachetele din configurația pe care o preluați.