BGP blokeatzea saihesteko konfiguratzea edo "Nola utzi nion beldurra izateari eta maitemindu nintzen RKNrekin"

Beno, ados, "maitemindu" buruz gehiegikeria bat da. Baizik eta "elkarrekin bizi zitekeen".

Denok dakizuenez, 16ko apirilaren 2018az geroztik, Roskomnadzor-ek sareko baliabideetarako sarbidea blokeatzen ari da oso trazu zabalarekin, domeinu-izenen Erregistro bateratuan, Interneteko guneetako orrien erakusleak eta sareko helbideak gehitzen dituena. identifikatu Interneteko guneak, informazioa duten eta horien zabalkundea debekatuta dagoen Errusiako Federazioan” (testuan - erregistro bat besterik ez) /10 batzuetan. Ondorioz, Errusiar Federazioko herritarrek eta enpresek sufritzen dute, behar dituzten baliabide guztiz legaletarako sarbidea galdu dutelako.

HabrΓ©-ri buruzko artikuluetako baten iruzkinetan biktimei saihesbide-eskema bat ezartzen laguntzeko prest nengoela esan ondoren, hainbat pertsona jarri ziren nirekin harremanetan laguntza hori eskatuz. Dena funtzionatu zuenean, horietako batek teknika artikulu batean deskribatzea gomendatu zuen. Hausnarketan, gunearen isiltasuna hautsi eta behingoz proiektu baten eta Facebookeko mezu baten artean tarteko zerbait idazten saiatzea erabaki nuen, hau da. habrapost. Emaitza zure aurrean dago.

Lege-oharra

Errusiar Federazioko lurraldean debekatuta dagoen informaziorako sarbidea blokeatzeko moduak argitaratzea oso legezkoa ez denez, artikulu honen helburua lurraldean baimenduta dauden baliabideetarako sarbidea automatizatzeko aukera ematen duen metodo bati buruz hitz egitea izango da. Errusiako Federazioaren, baina zure hornitzailearen bidez zuzenean eskuraezinak diren norbaiten ekintzak direla eta. Eta beste baliabide batzuetarako sarbidea, artikuluaren ekintzen ondorioz lortutakoa, albo-ondorio tamalgarria da eta ez da inola ere artikuluaren helburua.

Gainera, lanbidez, bokazioz eta bizi-ibilbidez batez ere sareko arkitektoa naizenez, programazioa eta Linux ez dira nire indarguneak. Hori dela eta, noski, gidoiak hobeto idatzi daitezke, VPS-en segurtasun arazoak sakonago landu daitezke, etab. Zure iradokizunak esker onez onartuko dira, nahikoa zehatzak badira - pozik gehituko ditut artikuluaren testuan.

TL; DR

Lehendik dagoen tunelaren bidez baliabideetarako sarbidea automatizatzen dugu erregistroaren kopia bat eta BGP protokoloa erabiliz. Helburua blokeatutako baliabideei zuzendutako trafiko guztia tunelera kentzea da. Gutxieneko azalpena, gehienetan urratsez urrats argibideak.

Zer behar duzu horretarako

Zoritxarrez, mezu hau ez da guztiontzat. Teknika hau erabiltzeko, elementu batzuk elkartu beharko dituzu:

  1. Blokeo eremutik kanpo linux zerbitzari bat izan behar duzu. Edo, gutxienez, zerbitzari bat abiarazteko gogoa - orain 9 $ / urteko kostua baita, eta agian gutxiago. Metodoa ere egokia da VPN tunel bereizi bat baduzu, orduan zerbitzaria bloke eremuaren barruan egon daiteke.
  2. Zure bideratzaileak nahikoa adimentsu izan behar du ahal izateko
    • nahi duzun edozein VPN bezero (nik nahiago dut OpenVPN, baina PPTP, L2TP, GRE+IPSec eta tunel interfazea sortzen duen beste edozein aukera izan daiteke);
    • BGPv4 protokoloa. Horrek esan nahi du SOHOrako Mikrotik edo Quagga edo Bird instalatzeko aukera ematen duen OpenWRT/LEDE/antzeko firmware pertsonalizatua duen edozein bideratzaile izan daitekeela. Ordenagailuko bideratzailea erabiltzea ere ez dago debekatuta. Enpresa batentzat, ikusi zure mugako bideratzailearen dokumentazioa BGP laguntzarako.
  3. Linuxen erabilera eta sareko teknologiak ezagutu behar dituzu, BGP barne. Edo behintzat ideia hori lortu nahi. Oraingoan izugarritasuna hartzeko prest ez nagoenez, zure kabuz aztertu beharko dituzu ulertezinak diren puntu batzuk. Hala ere, noski, galdera zehatzak erantzungo ditut iruzkinetan eta nekez izango naiz erantzungo duen bakarra, beraz, lasai galdetu.

Adibidean zer erabiltzen den

  • Erregistroaren kopia https://github.com/zapret-info/z-i 
  • VPS - Ubuntu 16.04
  • Bideratze zerbitzua - txoria 1.6.3   
  • Bideratzailea - Mikrotik hAP ac
  • Laneko karpetak - root gisa lan egiten ari garenez, dena gehien erro etxeko karpetan jarriko da. Hurrenez hurren:
    • /root/blacklist - laneko karpeta konpilazio scriptarekin
    • /root/zi - github-eko erregistroaren kopia bat
    • /etc/bird - hegazti zerbitzuaren ezarpenen karpeta estandarra
  • 194.165.22.146, ASN 64998 onartzen dugu VPSaren kanpoko IP helbide gisa bideratze zerbitzariarekin eta tunelaren amaiera-puntuarekin; bideratzailearen kanpoko IP helbidea - 81.177.103.94, ASN 64999
  • Tunel barruko IP helbideak 172.30.1.1 eta 172.30.1.2 dira, hurrenez hurren.

BGP blokeatzea saihesteko konfiguratzea edo "Nola utzi nion beldurra izateari eta maitemindu nintzen RKNrekin"

Jakina, beste edozein bideratzaile, sistema eragile eta software produktu erabil ditzakezu, soluzioa haien logikaren arabera egokituz.

Laburbilduz - erabakiaren logika

  1. Prestaketa ekintzak
    1. VPS bat lortzea
    2. Tunela igotzen dugu bideratzailetik VPSera
  2. Erregistroaren kopia bat lortzea eta aldian-aldian eguneratzea
  3. Bideratze-zerbitzua instalatzea eta konfiguratzea
  4. Sortu bideratze-zerbitzurako ibilbide estatikoen zerrenda erregistroan oinarrituta
  5. Bideratzailea zerbitzura konektatzen dugu eta trafiko guztia tuneletik bidaltzea konfiguratzen dugu.

Benetako erabakia

Prestaketa ekintzak

Sarearen zabaltasunean, oso arrazoizko diruaren truke VPS eskaintzen duten zerbitzu asko daude. Orain arte, $ 9 / urteko aukera aurkitu eta erabili dut, baina benetan trabarik ez baduzu ere, 1E / hilabeterako aukera asko daude bazter guztietan. VPS bat aukeratzeko galdera artikulu honen esparrutik kanpo dago, beraz, norbaitek zerbait argi ez badu honi buruz, galdetu iruzkinetan.

VPS bideratze-zerbitzurako ez ezik, bertan tunel bat amaitzeko ere erabiltzen baduzu, tunel hau altxatu eta, ia zalantzarik gabe, horretarako NAT konfiguratu behar duzu. Ekintza hauetarako argibide ugari daude sarean, ez ditut hemen errepikatuko. Tunel horretarako baldintza nagusia da zure bideratzailean tunela VPSrantz onartzen duen interfaze bereizi bat sortu behar duela. Erabilitako VPN teknologia gehienek baldintza hori betetzen dute; adibidez, OpenVPN tun moduan ondo dago.

Eskuratu erregistroaren kopia

Jabrayilek zioen bezala: "Oztopatzen gaituenak lagunduko digu". RKN debekatutako baliabideen erregistroa sortzen ari denez, bekatua litzateke erregistro hau ez erabiltzea gure arazoa konpontzeko. Github-en erregistroaren kopia bat jasoko dugu.

Zure Linux zerbitzarira joaten gara, root'a-ren testuinguruan sartzen gara (sudo su-) eta instalatu git dagoeneko instalatuta ez badago.

apt install git

Joan zure hasierako direktoriora eta atera erregistroaren kopia bat.

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

Konfiguratu cron eguneratze bat (20 minuturo daukat, baina interesatzen zaizun edozein tarte aukeratu dezakezu). Horretarako, martxan jartzen dugu crontab -e eta gehitu lerro hau:

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

Erregistroa eguneratu ondoren bideratze zerbitzurako fitxategiak sortuko dituen kako bat konektatzen dugu. Horretarako, fitxategi bat sortuko dugu /root/zi/.git/hooks/post-merge eduki honekin:

#!/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"

eta ez ahaztu exekutagarria izatea

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

Amuak erreferentzia egiten dion makebgp scripta geroago sortuko da.

Bideratze-zerbitzua instalatzea eta konfiguratzea

Instalatu txoria. Zoritxarrez, Ubunturen biltegietan gaur egun argitaratutako txoriaren bertsioa Archaeopteryxen gorotzekin parekoa da freskotasunean, beraz, lehenik eta behin software-garatzaileen PPA ofiziala gehitu behar dugu sistemara.

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

Horren ostean, berehala desgaitzen dugu bird IPv6rako; instalazio honetan ez dugu beharko.

systemctl stop bird6
systemctl disable bird6

Jarraian, hegazti zerbitzuaren konfigurazio fitxategi minimalista bat dago (/etc/bird/bird.conf), nahikoa da guretzat (eta berriro ere gogorarazten dizut inork ez duela debekatzen ideia garatzea eta zure beharretara egokitzea)

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 - bideratzailearen identifikatzailea, bisualki IPv4 helbide baten itxura du, baina ez da. Gure kasuan, 32 biteko edozein zenbaki izan daiteke IPv4 helbide formatuan, baina praktika ona da zure gailuaren IPv4 helbidea (kasu honetan, VPS) bertan zehaztea.

protocol direct-ek bideratze-prozesuarekin zein interfaze funtzionatuko duen zehazten du. Adibideak izenen adibide pare bat ematen ditu, gehiago gehi ditzakezu. Linea ere ezabatu dezakezu, kasu horretan zerbitzariak eskuragarri dauden interfaze guztietan entzungo du IPv4 helbide batekin.

protokolo estatikoa aurrizkien eta ip helbideen zerrendak (noski, /32 aurrizkiak dira) fitxategietatik kargatzen dituen gure magia da, geroago iragartzeko. Zerrenda horiek nondik datozen aztertuko da jarraian. Kontuan izan ip helbideen karga lehenespenez iruzkintzen dela, honen arrazoia kargatze kopuru handia dela. Konparazio baterako, artikulua idazteko unean, aurrizkien zerrendan 78 lerro daude, eta ip helbideen zerrendan 85898. Biziki gomendatzen dizut aurrizkien zerrendan bakarrik hastea eta araztea, eta erabakitzea ala ez. zure bideratzailearekin esperimentatu ondoren, etorkizunean ip kargatzea gaitzeko. Horietako bakoitzak ezin ditu erraz digeritzen bideratze-taulan 85 mila sarrera.

protokoloa bgp-k benetan bgp peering-a konfiguratzen du zure bideratzailearekin. ip-helbidea bideratzailearen kanpoko interfazearen helbidea da (edo bideratzailearen alboko tunelaren interfazearen helbidea), 64998 eta 64999 sistema autonomoen zenbakiak dira. Kasu honetan, 16 biteko edozein zenbakitan esleitu daitezke, baina praktika ona da RFC6996 - 64512-65534 barne zehaztutako AS zenbakiak erabiltzea (32 biteko ASN formatua dago, baina gure kasuan, zalantzarik gabe, gehiegizkoa da). Deskribatutako konfigurazioak eBGP peering-a erabiltzen du, bideratze-zerbitzuaren eta bideratzailearen sistema autonomoen zenbakiak desberdinak izan behar baitute.

Ikus dezakezunez, zerbitzuak bideratzailearen IP helbidea ezagutu behar du, beraz, helbide pribatu dinamikoa edo bideragarria ez den (RFC1918) edo partekatua (RFC6598) baduzu, ez duzu kanpoko interfazean peering-a igotzeko aukerarik, baina zerbitzuak oraindik ere funtzionatuko du tunel barruan.

Nahiko gardena da, gainera, hainbat bideratzaile desberdin eskain ditzakezula zerbitzu batetik ibilbideekin - bikoiztu haien ezarpenak protokolo bgp atala kopiatuz bizilagunaren IP helbidea aldatuz. Horregatik, tuneletik kanpo peering-eko ezarpenak erakusten ditu adibidean, unibertsalenak bezala. Ez da zaila tunelera kentzea ezarpenetan IP helbideak horren arabera aldatuz.

Bideratze Zerbitzuaren Erregistro Izapidetzea

Orain, hain zuzen ere, aurrizki eta ip-helbideen zerrendak sortu behar ditugu, aurreko urratsean protokolo estatikoan aipatzen direnak. Horretarako, erregistro-fitxategia hartu eta behar ditugun fitxategiak aterako ditugu hurrengo script-arekin, /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'

Ez ahaztu exekutagarria izatea

chmod +x /root/blacklist/makebgp

Orain eskuz exekutatu dezakezu eta fitxategien itxura ikusi dezakezu /etc/bird-en.

Seguruenik, momentu honetan txoriak ez dizu funtzionatzen, aurreko fasean oraindik existitzen ez ziren fitxategiak bilatzea proposatu zenuelako. Hori dela eta, abiarazten dugu eta abiatzen dela kontrolatzen dugu:

systemctl start bird
birdc show route

Bigarren komandoaren irteerak 80 sarrera inguru erakutsi beharko lituzke (une honetan dago, eta konfiguratzen duzunean, dena sareak blokeatzeko ILVren zelotasunaren araberakoa izango da) honela:

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

Team

birdc show protocol

zerbitzuaren barruko protokoloen egoera erakutsiko du. Bideratzailea konfiguratu arte (ikusi hurrengo paragrafoa), OurRouter protokoloa hasierako egoeran egongo da (Konektatu edo Aktibo faseak), eta konexio arrakastatsua egin ondoren, gorako egoerara joango da (Fase Ezarri). Adibidez, nire sisteman, komando honen irteera honelakoa da:

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

Bideratzaile bat konektatzea

Ziurrenik denak nekatuta daude oinetako oihal hau irakurtzeaz, baina anima zaitez - amaiera gertu dago. Gainera, atal honetan ezingo ditut urratsez urrats eman argibideak - fabrikatzaile bakoitzarentzat desberdina izango da.

Hala ere, adibide pare bat erakutsi dizkizut. Logika nagusia BGP peering-a igotzea eta nexthop eranstea da jasotako aurrizki guztiei, gure tunelera seinalatzen (trafikoa p2p interfazearen bidez atera behar baduzu) edo nexthop ip-helbidea, trafikoa ethernet-era joaten bada).

Adibidez, RouterOS-en Mikrotik-en, hau honela konpontzen da

/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

eta Cisco IOS-en - honela

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

Bai BGP peering-erako bai trafiko erabilgarria transmititzeko tunel bera erabiltzen bada, ez da beharrezkoa nexthop ezarri, protokoloaren bidez behar bezala ezarriko da. Baina eskuz ezartzen baduzu, ez da okerrago egingo.

Beste plataformetan, zuk zeuk asmatu beharko duzu konfigurazioa, baina zailtasunik baduzu, idatzi iruzkinetan, laguntzen saiatuko naiz.

Zure BGP saioa igo ondoren, sare handietarako ibilbideak iritsi eta taulan instalatuta daude, haien helbideetarako trafikoa joan da eta zoriontasuna gertu dago, hegazti zerbitzura itzul zaitezke eta bertan lotzen duen sarrerari iruzkinak kentzen saiatu. ip helbideen zerrenda, exekutatu ondoren

systemctl reload bird

eta ikusi nola transferitu dituen zure bideratzaileak 85 mila ibilbide hauek. Presta zaitez itzaltzeko eta pentsatu zer egin horrekin πŸ™‚

Guztira

Teorikoki, goiko urratsak egin ondoren, trafikoa automatikoki birbideratzen duen zerbitzu bat duzu Errusiako Federazioan iragazketa sistematik kanpo debekatuta dauden IP helbideetara.

Hobetu daiteke, noski. Esate baterako, nahikoa erraza da perl edo python soluzioen bidez ip helbideen zerrenda laburtzea. Net::CIDR::Lite-rekin hori egiten duen Perl script soil batek 85 mila aurrizki bihurtzen ditu 60 (ez mila), baina, jakina, blokeatuta dagoena baino askoz helbide sorta handiagoa estaltzen du.

Zerbitzuak ISO / OSI ereduaren hirugarren mailan funtzionatzen duenez, ez zaitu gune / orrien blokeotik salbatuko erregistroan erregistratutako helbidera konpontzen ez bada. Baina github-eko erregistroarekin batera, nxdomain.txt fitxategia iristen da, script-aren trazu batzuekin erraz bihurtzen dena, adibidez, Chrome-ko SwitchyOmega pluginaren helbide iturri.

Aipatu behar da, halaber, irtenbideak zorroztasun gehigarria behar duela Interneteko erabiltzailea ez bazara, baina zuk zeuk baliabide batzuk argitaratzen badituzu (adibidez, webgune edo posta zerbitzari bat konexio honetan exekutatzen da). Bideratzailearen bidez, zerbitzu honetatik irteerako trafikoa zure helbide publikora gogor lotu behar duzu, bestela bideratzaileak jasotako aurrizkien zerrendak jasotzen dituen baliabide horiekiko konektibitatea galduko duzu.

Galderarik baduzu - galdetu, erantzuteko prest.

UPD. Eskerrik asko naboia ΠΈ TerAnYu git-en deskarga-bolumenak murrizteko aukeretarako.

UPD2. Lankideok, badirudi akats bat egin nuela artikuluari VPS eta bideratzailearen artean tunel bat ezartzeko argibideak ez gehituta. Galdera asko sortzen dira honek.
Badaezpada, berriro ohartzen naiz - gida honetako urratsak hasi aurretik VPN tunela behar duzun norabidean konfiguratu duzula eta bere errendimendua egiaztatu duzula suposatzen da (adibidez, trafikoa lehenespenez edo estatikoki biltzea). Oraindik fase hau amaitu ez baduzu, ez du zentzurik artikuluko urratsak jarraitzeak. Oraindik ez dut nire testurik honi buruz, baina "OpenVPN zerbitzariaren konfigurazioa" Googlen sartzen baduzu VPSan instalatutako sistema eragilearen izenarekin eta "OpenVPN bezeroaren konfigurazioa" zure bideratzailearen izenarekin, ziurrenik gai honi buruzko hainbat artikulu aurkituko ditu, besteak beste, HabrΓ©-ri buruz.

UPD3. Sakrifiziorik gabekoa dump.csv-tik hegaztiaren emaitza den fitxategia ip helbideen batuketarekin batera egiten duen kodea idatzi zuen. Hori dela eta, "Erregistroaren tramitazioa bideratze-zerbitzuaren" atala bere programarako dei batekin ordezkatu daiteke. https://habr.com/post/354282/#comment_10782712

UPD4. Akatsei buruzko lan txiki bat (ez du ekarpenik egin testuan):
1) ordez systemctl birkargatu bird zentzuzkoa da komandoa erabiltzea birdc konfiguratu.
2) Mikrotik bideratzailean, hurrengo saltoa tunelaren bigarren alboko IPra aldatu beharrean /routing filter add action=onartu chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1 zentzuzkoa da ibilbidea zuzenean tunelaren interfazera zehaztea, helbiderik gabe /routing filter add action=onartu chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop-direct=<interfazearen izena>

UPD5. Zerbitzu berri bat iritsi da https://antifilter.download, bertatik ip-helbideen zerrendak har ditzakezu. Ordu erdiro eguneratzen da. Bezeroaren aldetik, sarrerak dagokion β€œibilbidea... baztertzea” besterik ez da geratzen.
Eta seguruenik nahikoa izango da nire amona zipriztindu eta artikulua eguneratzeko.

UPD6. Artikuluaren bertsio berritua ulertu nahi ez dutenentzat, baina hasi nahi dutenentzat - Hemen.

Iturria: www.habr.com

Gehitu iruzkin berria