Configurazione di BGP per scaccià u bluccatu, o "Cumu aghju cessatu di avè paura è mi sò innamuratu di RKN"

Ebbè, va bè, di "innamurà" hè una esagerazione. Piuttostu "puderia coesiste cù".

Cum'è tutti sapete, da u 16 d'aprile di u 2018, Roskomnadzor hà bluccatu l'accessu à e risorse in a reta cù tratti estremamente largu, aghjunghjendu à u Registru Unificatu di nomi di duminiu, punters à pagine di siti in Internet è indirizzi di rete chì permettenu identificà siti in Internet, chì cuntenenu infurmazione, a diffusione di quale hè pruibita in a Federazione Russa "(in u testu - solu un registru) / 10 volte. In u risultatu, i citadini di a Federazione Russa è l'imprese soffrenu, avè persu l'accessu à e risorse assolutamente legale chì anu bisognu.

Dopu avè dettu in i cumenti à unu di l'articuli nantu à Habré chì eru prontu à aiutà e vittimi cù a creazione di un schema di bypass, parechje persone m'hà cuntattatu per dumandà un tali aiutu. Quandu tuttu hà travagliatu per elli, unu d'elli ricumandemu di descriverà a tecnica in un articulu. À a riflessione, aghju decisu di rompe u mo silenziu nantu à u situ è ​​pruvà per una volta di scrive qualcosa intermediate trà un prughjettu è un postu in Facebook, i.e. abrapost. U risultatu hè davanti à voi.

Légales

Siccomu ùn hè micca assai legale per pubblicà modi per bypassà l'accessu à u bloccu di l'infurmazioni pruibiti nantu à u territoriu di a Federazione Russa, u scopu di questu articulu serà di parlà di un metudu chì vi permette di automatizà l'accessu à e risorse chì sò permessi nantu à u territoriu. di a Federazione Russa, ma per via di l'azzioni di qualcunu inaccessibili direttamente attraversu u vostru fornitore. È l'accessu à l'altri risorse, ottenutu com'è u risultatu di l'azzioni da l'articulu, hè un effettu latu disgraziatu è ùn hè micca u scopu di l'articulu.

Inoltre, postu chì sò principalmente un architettu di rete per professione, vocazione è percorsu di vita, a prugrammazione è Linux ùn sò micca i mo punti di forza. Dunque, sicuru, i script ponu esse scritti megliu, i prublemi di sicurezza in VPS ponu esse elaborati più profondamente, etc. I vostri suggerimenti seranu accettati cun gratitùdine, s'ellu sò abbastanza detallati - seraghju felice di aghjunghje à u testu di l'articulu.

TL; DR

Automatizemu l'accessu à e risorse attraversu u vostru tunnel esistente utilizendu una copia di u registru è u protocolu BGP. L'obiettivu hè di sguassà tuttu u trafficu indirizzatu à e risorse bluccate in u tunnel. Spiegazione minima, soprattuttu struzzioni passu à passu.

Chì avete bisognu per questu

Sfurtunatamente, stu postu ùn hè micca per tutti. Per aduprà sta tecnica, vi tuccherà à cullà uni pochi di elementi:

  1. Duvete avè un servitore Linux in un locu fora di u campu di bloccu. O almenu u desideriu di inizià un tali servitore - postu chì avà costa da $ 9 / annu, è possibbilmente menu. U metudu hè ancu adattatu si avete un tunnel VPN separatu, allura u servitore pò esse situatu in u campu di bloccu.
  2. U vostru router deve esse abbastanza intelligente per pudè
    • qualsiasi cliente VPN chì ti piace (preferite OpenVPN, ma pò esse PPTP, L2TP, GRE + IPSec, è qualsiasi altra opzione chì crea una interfaccia di tunnel);
    • protocolu BGPv4. Chì significa chì per SOHO pò esse Mikrotik o qualsiasi router cù OpenWRT / LEDE / firmware persunalizatu simili chì permette di installà Quagga o Bird. L'usu di un router per PC ùn hè ancu pruibitu. Per una impresa, vede a documentazione per u vostru router di fruntiera per u supportu BGP.
  3. Duvete esse familiarizatu cù l'usu di Linux è e tecnulugia di rete, cumpresu BGP. O almenu vulete piglià sta idea. Siccomu ùn sò micca prontu à abbraccià l'immensità sta volta, avete da studià qualchi punti chì sò incomprensibili per voi da sè stessu. In ogni casu, naturalmente, risponderaghju à e dumande specifiche in i cumenti è hè improbabile di esse l'unicu chì risponde, dunque sentite liberu di dumandà.

Ciò chì hè utilizatu in l'esempiu

  • Copia di u registru https://github.com/zapret-info/z-i 
  • VPS - Ubuntu 16.04
  • serviziu di routing - ucellu 1.6.3   
  • router - Mikrotik hAP ac
  • Cartulari di travagliu - postu chì avemu travagliatu cum'è root, a maiò parte di tuttu serà piazzatu in u cartulare di casa radicali. Rispettivamente:
    • /root/blacklist - cartulare di travagliu cù script di compilazione
    • /root/zi - una copia di u registru da github
    • /etc/bird - cartulare di paràmetri di serviziu di uccelli standard
  • Accettamu 194.165.22.146, ASN 64998 cum'è l'indirizzu IP esternu di u VPS cù u servitore di routing è u puntu di terminazione di u tunnel; indirizzu IP esternu di u router - 81.177.103.94, ASN 64999
  • L'indirizzi IP in u tunnel sò 172.30.1.1 è 172.30.1.2, rispettivamente.

Configurazione di BGP per scaccià u bluccatu, o "Cumu aghju cessatu di avè paura è mi sò innamuratu di RKN"

Di sicuru, pudete aduprà qualsiasi altri routers, sistemi operativi è prudutti di software, aghjustendu a suluzione per adattà à a so logica.

In breve - a logica di a suluzione

  1. Attività preparatorii
    1. Ottene un VPS
    2. Aumentemu u tunnel da u router à u VPS
  2. Ottene è aghjurnà regularmente una copia di u registru
  3. Stallà è cunfigurà u serviziu di routing
  4. Crea una lista di rotte statiche per u serviziu di routing basatu annantu à u registru
  5. Cunnetteremu u router à u serviziu è cunfigurà l'inviu di tuttu u trafficu attraversu u tunnel.

A decisione vera

Attività preparatorii

In a vastità di a reta, ci sò parechji servizii chì furnisce VPS per soldi estremamente raghjone. Finu a ora, aghju trovu è aduprà l'opzione per $ 9 / annu, ma ancu s'ellu ùn avete micca veramente fastidiu, ci sò parechje scelte per 1E / mese in ogni angulu. A quistione di sceglie un VPS si trova assai fora di u scopu di stu articulu, perchè se qualcosa ùn hè micca chjaru à qualchissia nantu à questu, dumandate in i cumenti.

Se utilizate VPS micca solu per u serviziu di routing, ma ancu per finisce un tunnellu nantu à questu, avete bisognu di elevà stu tunnel è, quasi inequivocamente, cunfigurà NAT per questu. Ci hè un gran numaru d'istruzzioni nantu à a reta per queste azzioni, ùn aghju micca ripetutu quì. U requisitu principalu per un tali tunnel hè chì deve creà una interfaccia separata in u vostru router chì sustene u tunnel versu u VPS. A maiò parte di e tecnulugie VPN aduprate risponde à questu requisitu - per esempiu, OpenVPN in modu tun hè bè.

Ottene una copia di u registru

Cum'è Jabrail hà dettu: "Quellu chì ci impedisce ci aiuterà". Siccomu u RKN crea un registru di risorsi pruibiti, seria un peccatu per ùn aduprà stu registru per risolve u nostru prublema. Riceveremu una copia di u registru da github.

Andemu à u vostru servitore Linux, falà in u cuntestu di root'a (sudo su-) è installate git s'ellu ùn hè micca digià stallatu.

apt install git

Andate à u vostru cartulare di casa è tira fora una copia di u registru.

cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i 

Configurate un cron update (l'aghju ogni 20 minuti, ma pudete sceglie qualsiasi intervallu chì vi interessa). Per fà questu, lanciamu crontab -e è aghjunghje a seguente linea:

*/20 * * * * cd ~/z-i && git pull && git gc

Cunnetteremu un ganciu chì creà schedarii per u serviziu di routing dopu l'aghjurnà u registru. Per fà questu, creamu un schedariu /root/zi/.git/hooks/post-merge cù u seguenti cuntenutu:

#!/usr/bin/env bash
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_run() {
    echo "$changed_files" | grep --quiet "$1" && eval "$2"
}
check_run dump.csv "/root/blacklist/makebgp"

è ùn vi scurdate di rende eseguibile

chmod +x /root/z-i/.git/hooks/post-merge

U script makebgp riferitu da u ganciu serà creatu dopu.

Stallà è cunfigurà u serviziu di routing

Installa ucellu. Sfurtunatamente, a versione attualmente publicata di l'uccelli in i repositori di Ubuntu hè paragunabile in freschezza à i feci di Archeopteryx, cusì avemu bisognu di prima aghjunghje u PPA ufficiale di i sviluppatori di software à u sistema.

add-apt-repository ppa:cz.nic-labs/bird
apt update
apt install bird

Dopu quì, disattivemu immediatamente bird per IPv6 - in questa installazione ùn avemu micca bisognu.

systemctl stop bird6
systemctl disable bird6

Quì sottu hè un schedariu di cunfigurazione minimalista per u serviziu di uccelli (/etc/bird/bird.conf), chì hè abbastanza per noi (è una volta vi ricurdò chì nimu pruibisce di sviluppà è sintonizza l'idea per adattà à i vostri bisogni)

log syslog all;
router id 172.30.1.1;

protocol kernel {
        scan time 60;
        import none;
#       export all;   # Actually insert routes into the kernel routing table
}

protocol device {
        scan time 60;
}

protocol direct {
        interface "venet*", "tun*"; # Restrict network interfaces it works with
}

protocol static static_bgp {
        import all;
        include "pfxlist.txt";
        #include "iplist.txt";
}

protocol bgp OurRouter {
        description "Our Router";
        neighbor 81.177.103.94 as 64999;
        import none;
        export where proto = "static_bgp";
        local as 64998;
        passive off;
        multihop;
}

router id - identificatore di u router, visualmente chì pare un indirizzu IPv4, ma ùn hè micca. In u nostru casu, pò esse qualsiasi numeru 32-bit in u formatu di l'indirizzu IPv4, ma hè una bona pratica per specificà l'indirizzu IPv4 di u vostru dispositivu (in questu casu, VPS) quì.

protokollu direttu determina quale interfacce travaglià cù u prucessu di routing. L'esempiu dà un paru di esempi di nomi, pudete aghjunghje più. Pudete ancu sguassate a linea, in quale casu u servitore ascolterà tutte l'interfaccia dispunibuli cù un indirizzu IPv4.

protokollu static hè a nostra magia chì carica listi di prefissi è indirizzi IP (chì sò, sicuru, / 32 prefissi) da i schedarii per annunziu dopu. Da induve venenu sti listi seranu discututi quì sottu. Per piacè nutate chì a carica di l'indirizzi IP hè cummentata per automaticamente, u mutivu di questu hè a grande quantità di carica. Per paragunà, à u mumentu di a scrittura di l'articulu, ci sò 78 linii in a lista di prefissi, è 85898 in a lista di l'indirizzi IP. I ricumandemu fermamente chì avete principiatu è debug solu nantu à a lista di prefissi, è decide si o micca. per attivà a carica IP in u futuru dopu avè sperimentatu cù u vostru router. Micca tutti ponu facilmente digerirà 85 mila entrate in a tabella di routing.

protocolu bgp in realtà stabilisce bgp peering cù u vostru router. IP-address hè l'indirizzu di l'interfaccia esterna di u router (o l'indirizzu di l'interfaccia di u tunnel da u latu di u router), 64998 è 64999 sò i numeri di sistemi autonomi. In questu casu, ponu esse attribuiti in a forma di qualsiasi numeri di 16 bit, ma hè una bona pratica di utilizà numeri AS da a gamma privata definita da RFC6996 - 64512-65534 inclusive (ci hè un formatu ASN di 32 bit, ma in u nostru casu questu hè definitivamente eccessiva). A cunfigurazione descritta usa eBGP peering, in quale i numeri di u sistema autonomu di u serviziu di routing è u router devenu esse sfarenti.

Comu pudete vede, u serviziu hà bisognu di cunnosce l'indirizzu IP di u router, perchè s'è vo avete un indirizzu privatu dinamicu o non-routable (RFC1918) o spartutu (RFC6598), ùn avete micca opzione per elevà peering in l'interfaccia esterna, ma u serviziu hà da travaglià sempre in u tunnel.

Hè ancu abbastanza trasparente chì pudete furnisce parechji routers diffirenti cù rotte da un serviziu - basta duplicà i paràmetri per elli copiendu a sezione di protocolu bgp cù cambià l'indirizzu IP di u vicinu. Hè per quessa chì l'esempiu mostra i paràmetri per peering fora di u tunnel cum'è u più universale. Ùn hè micca difficiule di sguassà in u tunelu cambiendu l'indirizzi IP in i paràmetri in cunsequenza.

Trattamentu di u Registru per u serviziu di routing

Avà avemu bisognu, in fattu, di creà listi di prefissi è indirizzi ip, chì sò citati in u passu precedente in u protocolu static. Per fà questu, pigliamu u schedariu di registru è facemu i schedari chì avemu bisognu di ellu cù u script seguente, situatu in /root/blacklist/makebgp

#!/bin/bash
cut -d";" -f1 /root/z-i/dump.csv| tr '|' 'n' |  tr -d ' ' > /root/blacklist/tmpaddr.txt
cat /root/blacklist/tmpaddr.txt | grep / | sed 's_.*_route & reject;_' > /etc/bird/pfxlist.txt
cat /root/blacklist/tmpaddr.txt | sort | uniq | grep -Eo "([0-9]{1,3}[.]){3}[0-9]{1,3}" | sed 's_.*_route &/32 reject;_' > /etc/bird/iplist.txt
/etc/init.d/bird reload
logger 'bgp list compiled'

Ùn vi scurdate di rende eseguibile

chmod +x /root/blacklist/makebgp

Avà pudete eseguisce manualmente è osservà l'apparenza di i schedari in /etc/bird.

Hè assai prubabile, in questu mumentu l'uccello ùn viaghja micca per voi, perchè in u stadiu precedente avete suggeritu chì cercate i schedari chì ùn esistenu micca. Per quessa, u lanciamu è cuntrullemu chì principia:

systemctl start bird
birdc show route

L'output di u sicondu cumandamentu deve mostra circa 80 entrate (questu hè in u mumentu, è quandu avete stallatu, tuttu dipenderà da u zealousness di l'ILV in bluccatu rete) cusì:

54.160.0.0/12      unreachable [static_bgp 2018-04-19] * (200)

squadra

birdc show protocol

mostrarà u statutu di i protokolli in u serviziu. Finu à cunfigurà u router (vede u prossimu paràgrafu), u protokollu OurRouter serà in u statu di iniziu (fasi di cunnessione o attiva), è dopu una cunnessione successu, andrà in u statu up (fase stabilita). Per esempiu, nantu à u mo sistema, l'output di stu cumandimu pare cusì:

BIRD 1.6.3 ready.
name     proto    table    state  since       info
kernel1  Kernel   master   up     2018-04-19
device1  Device   master   up     2018-04-19
static_bgp Static   master   up     2018-04-19
direct1  Direct   master   up     2018-04-19
RXXXXXx1 BGP      master   up     13:10:22    Established
RXXXXXx2 BGP      master   up     2018-04-24  Established
RXXXXXx3 BGP      master   start  2018-04-22  Connect       Socket: Connection timed out
RXXXXXx4 BGP      master   up     2018-04-24  Established
RXXXXXx5 BGP      master   start  2018-04-24  Passive

Cunnettendu un router

Tutti sò prubabilmente digià stanchi di leghje stu tovagliolu, ma pigliate u core - a fine hè vicinu. Inoltre, in questa sezione ùn puderà micca dà struzzioni passu à passu - serà diversu per ogni fabricatore.

Tuttavia, vi possu mostrà un paru di esempi. A logica principale hè di elevà u peering BGP è aghjunghje nexthop à tutti i prefissi ricevuti, indicà à u nostru tunelu (se avete bisognu di u trafficu di u trafficu attraversu l'interfaccia p2p) o l'indirizzu ip nexthop se u trafficu và à ethernet).

Per esempiu, nantu à Mikrotik in RouterOS, questu hè risoltu cusì

/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=172.30.1.2
/routing bgp peer add in-filter=dynamic-in multihop=yes name=VPS remote-address=194.165.22.146 remote-as=64998 ttl=default
/routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1

è in Cisco IOS - cum'è questu

router bgp 64999
  neighbor 194.165.22.146 remote-as 64998
  neighbor 194.165.22.146 route-map BGP_NEXT_HOP in
  neighbor 194.165.22.146 ebgp-multihop 250
!
route-map BGP_NEXT_HOP permit 10
  set ip next-hop 172.30.1.1

In l'eventu chì u stessu tunnellu hè utilizatu sia per u peering BGP sia per a trasmissione di u trafficu utile, ùn hè micca necessariu di stabilisce nexthop, serà stabilitu currettamente per mezu di u protocolu. Ma s'ellu si mette manualmente, ùn sarà micca peghju.

Nant'à altre piattaforme, avete da capisce a cunfigurazione sè stessu, ma s'ellu avete qualchì difficultà, scrivite in i cumenti, pruvate d'aiutà.

Dopu chì a vostra sessione BGP hà risuscitatu, i percorsi à e grande rete sò ghjunti è sò stallati in a tavula, u trafficu à l'indirizzi da elli hè andatu è a felicità hè vicinu, pudete turnà à u serviziu di l'uccelli è pruvate à uncomment l'entrata quì chì cunnetta u lista di indirizzi IP, eseguite dopu

systemctl reload bird

è vede cumu u vostru router hà trasfirutu sti 85 mila rotte. Preparate à spegnellu è pensate à ciò chì fà cun ellu 🙂

Tuttu

Puramente teoricamente, dopu avè realizatu i passi sopra, avete un serviziu chì redirige automaticamente u trafficu à l'indirizzi IP pruibiti in a Federazione Russa passatu u sistema di filtrazione.

Si pò, sicuru, esse migliuratu. Per esempiu, hè abbastanza faciule per riassume una lista di indirizzi IP per solu solu perl o python. Un script perl simplice chì face questu cù Net::CIDR::Lite trasforma 85 mila prefissi in 60 (micca milla), ma naturalmente copre una gamma assai più larga di indirizzi chì hè bluccatu.

Siccomu u serviziu opera à u terzu livellu di u mudellu ISO / OSI, ùn vi salverà micca da u bloccu di u situ / pagina s'ellu ùn risolve micca à l'indirizzu chì hè registratu in u registru. Ma cù u registru da github, u schedariu nxdomain.txt ghjunghje, chì cù uni pochi colpi di u script si trasforma facilmente in una fonte di indirizzi per, per esempiu, u plugin SwitchyOmega in Chrome.

Ci vole ancu esse mintuatu chì a suluzione richiede un sharpening supplementu sè ùn site micca solu un utilizatore d'Internet, ma ancu pubblicà alcune risorse da sè stessu (per esempiu, un situ web o un servitore di mail corre nantu à sta cunnessione). Per mezu di u router, avete bisognu di ligà u trafficu in uscita da stu serviziu à u vostru indirizzu publicu, altrimente perderà a cunnessione cù quelli risorse chì sò cuparti da a lista di prefissi ricevuti da u router.

Sì avete qualchì quistione - dumandate, prontu à risponde.

UPD. Grazie navi и TerAnYu per l'opzioni per git per riduce i volumi di scaricamentu.

UPD2. Colleghi, pare ch'e aghju fattu un sbagliu per ùn aghjunghje struzzioni per a stallazione di un tunnel trà u VPS è u router à l'articulu. Un saccu di dumande sò causati da questu.
In casu, aghju nutatu di novu - si assume chì prima di principià i passi in questa guida, avete digià cunfiguratu u tunnel VPN in a direzzione chì avete bisognu è verificatu u so rendiment (per esempiu, impacchendu u trafficu quì per difettu o staticu). Se ùn avete micca finitu sta fase, ùn hè micca veramente sensu per seguità i passi da l'articulu. Ùn aghju micca u mo propiu testu annantu à questu, ma se cercate in Google "Configurazione di u servitore OpenVPN" cù u nome di u sistema operatore installatu nantu à u VPS, è "Configurazione di u cliente OpenVPN" cù u nome di u vostru router, probabilmente avete truverete una quantità di articuli nantu à questu sughjettu, ancu nantu à Habré.

UPD3. Unsacrifice hà scrittu un codice chì face u schedariu resultanti per l'uccello da dump.csv cù sommazione opzionale di l'indirizzi ip. Per quessa, a sezione "Trattamentu di u Registru per u serviziu di routing" pò esse rimpiazzata cù una chjama à u so prugramma. https://habr.com/post/354282/#comment_10782712

UPD4. Un pocu travagliu nantu à l'errori (ùn hà micca cuntribuitu in u testu):
1) invece systemctl reload bird hè sensu à aduprà u cumandamentu cunfigurazione birdc.
2) in u router Mikrotik, invece di cambià u prossimu-hop à l'IP di a seconda parte di u tunnel. / filtru di routing add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1 hè sensu per specificà a strada direttamente à l'interfaccia di u tunnel, senza l'indirizzu / filtru di routing add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop-direct=<nome di l'interfaccia>

UPD5. Un novu serviziu hè ghjuntu https://antifilter.download, da induve pudete piglià listi pronti di indirizzi ip. Aghjurnatu ogni meza ora. Da u latu di u cliente, tuttu ciò chì resta hè di frammentà e entrate cù u currispundente "route ... rifiutà".
E questu hè probabilmente abbastanza per chjappà a mo nanna è aghjurnà l'articulu.

UPD6. Una versione rivista di l'articulu per quelli chì ùn volenu micca capisce, ma volenu principià - ccà.

Source: www.habr.com

Add a comment