ProHoster > Blogs > AdministrÄcija > BGP iestatÄ«Å”ana, lai apietu bloÄ·ÄÅ”anu vai "KÄ es pÄrstÄju baidÄ«ties un iemÄ«lÄjos RKN"
BGP iestatÄ«Å”ana, lai apietu bloÄ·ÄÅ”anu vai "KÄ es pÄrstÄju baidÄ«ties un iemÄ«lÄjos RKN"
Nu, labi, par āmÄ«lÄtuā ir pÄrspÄ«lÄts. DrÄ«zÄk "varÄja sadzÄ«vot ar".
KÄ jÅ«s visi zinÄt, kopÅ” 16. gada 2018. aprīļa Roskomnadzor ÄrkÄrtÄ«gi plaÅ”os vilcienos bloÄ·Ä piekļuvi resursiem internetÄ, pievienojot vienotajam domÄna vÄrdu reÄ£istram, vietÅu lapu indeksiem internetÄ un tÄ«kla adresÄm, kas ļauj identificÄt vietnes. internetÄā, kas satur informÄciju, kuras izplatÄ«Å”ana Krievijas FederÄcijÄ ir aizliegtaā (tekstÄ - tikai reÄ£istrs) ar /10 reizÄm. TÄ rezultÄtÄ cieÅ” Krievijas FederÄcijas pilsoÅi un uzÅÄmumi, kuri zaudÄjuÅ”i piekļuvi tiem nepiecieÅ”amajiem pilnÄ«gi legÄliem resursiem.
TÄ kÄ nav Ä«paÅ”i likumÄ«gi publicÄt veidus, kÄ apiet piekļuves bloÄ·ÄÅ”anu informÄcijai, kas aizliegta Krievijas FederÄcijas teritorijÄ, Ŕī raksta mÄrÄ·is bÅ«s runÄt par metodi, kas ļauj automatizÄt piekļuvi resursiem, kas ir atļauti Krievijas FederÄcijas teritorijÄ, bet kÄda cita darbÄ«bu dÄļ tie nav tieÅ”i pieejami caur jÅ«su pakalpojumu sniedzÄju. Un piekļuve citiem resursiem, kas iegÅ«ti darbÄ«bu rezultÄtÄ no raksta, ir neveiksmÄ«gs blakus efekts un nekÄdÄ gadÄ«jumÄ nav raksta mÄrÄ·is.
TurklÄt, tÄ kÄ pÄc profesijas, aicinÄjuma un dzÄ«ves ceļa esmu galvenokÄrt tÄ«kla arhitekts, programmÄÅ”ana un Linux nav manas stiprÄs puses. TÄpÄc, protams, skriptus var uzrakstÄ«t labÄk, droŔības problÄmas VPS var izstrÄdÄt dziļÄk utt. JÅ«su ieteikumi tiks pieÅemti ar pateicÄ«bu, ja tie bÅ«s pietiekami detalizÄti - ar prieku pievienoÅ”u raksta tekstam.
TL; DR
MÄs automatizÄjam piekļuvi resursiem, izmantojot jÅ«su esoÅ”o tuneli, izmantojot reÄ£istra kopiju un BGP protokolu. MÄrÄ·is ir noÅemt tunelÄ« visu bloÄ·Ätajiem resursiem adresÄto trafiku. Paskaidrojumu minimums, galvenokÄrt soli pa solim sniegtas instrukcijas.
Kas jums ir vajadzīgs Ŕim nolūkam?
DiemžÄl Å”is ieraksts nav paredzÄts visiem. Lai izmantotu Å”o paÅÄmienu, jums bÅ«s jÄsaliek kopÄ vairÄki elementi:
Jums ir jÄbÅ«t Linux serverim kaut kur Ärpus bloÄ·ÄÅ”anas lauka. Vai vismaz vÄlme iegÅ«t Å”Ädu serveri - par laimi tas tagad maksÄ no 9 USD/gadÄ, un, iespÄjams, mazÄk. Metode ir piemÄrota arÄ« tad, ja jums ir atseviŔķs VPN tunelis, tad serveris var atrasties bloÄ·ÄÅ”anas laukÄ.
JÅ«su marÅ”rutÄtÄjam ir jÄbÅ«t pietiekami gudram, lai tas bÅ«tu iespÄjams
jebkurŔ VPN klients, kas jums patīk (es dodu priekŔroku OpenVPN, bet tas var būt PPTP, L2TP, GRE+IPSec vai jebkura cita opcija, kas izveido tuneļa saskarni);
BGPv4 protokols. Tas nozÄ«mÄ, ka SOHO tas varÄtu bÅ«t Mikrotik vai jebkurÅ” marÅ”rutÄtÄjs ar OpenWRT/LEDE/lÄ«dzÄ«gu pielÄgotu programmaparatÅ«ru, kas ļauj instalÄt Quagga vai Bird. ArÄ« datora marÅ”rutÄtÄja izmantoÅ”ana nav aizliegta. UzÅÄmuma gadÄ«jumÄ meklÄjiet BGP atbalstu sava robežas marÅ”rutÄtÄja dokumentÄcijÄ.
Jums ir jÄbÅ«t izpratnei par Linux lietoÅ”anu un tÄ«kla tehnoloÄ£ijÄm, tostarp BGP protokolu. Vai vismaz vÄlas iegÅ«t Å”Ädu ideju. TÄ kÄ Å”oreiz neesmu gatavs aptvert neizmÄrojamÄ«bu, jums bÅ«s paÅ”am jÄizpÄta daži aspekti, kas jums ir nesaprotami. TomÄr es, protams, atbildÄÅ”u uz konkrÄtiem jautÄjumiem komentÄros un diez vai bÅ«Å”u vienÄ«gais, kas atbildÄs, tÄpÄc nevilcinieties jautÄt.
Darba mapes - tÄ kÄ mÄs strÄdÄjam kÄ root, lielÄkÄ daļa no visa atradÄ«sies saknes mÄjas mapÄ. AttiecÄ«gi:
/root/blacklist ā darba mape ar kompilÄcijas skriptu
/root/zi ā reÄ£istra kopija no github
/etc/bird - standarta mape putnu pakalpojuma iestatījumiem
VPS ÄrÄjÄ IP adrese ar marÅ”rutÄÅ”anas serveri un tuneļa beigu punktu ir 194.165.22.146, ASN 64998; marÅ”rutÄtÄja ÄrÄjÄ IP adrese - 81.177.103.94, ASN 64999
IP adreses tunelī ir attiecīgi 172.30.1.1 un 172.30.1.2.
Protams, jÅ«s varat izmantot jebkurus citus marÅ”rutÄtÄjus, operÄtÄjsistÄmas un programmatÅ«ras produktus, pielÄgojot risinÄjumu to loÄ£ikai.
ÄŖsumÄ - risinÄjuma loÄ£ika
SagatavoÅ”anas aktivitÄtes
VPS iegūŔana
Tuneļa pacelÅ”ana no marÅ”rutÄtÄja uz VPS
MÄs saÅemam un regulÄri atjauninÄm reÄ£istra kopiju
MarÅ”rutÄÅ”anas pakalpojuma instalÄÅ”ana un konfigurÄÅ”ana
MÄs izveidojam statisku marÅ”rutu sarakstu marÅ”rutÄÅ”anas pakalpojumam, pamatojoties uz reÄ£istru
MÄs savienojam marÅ”rutÄtÄju ar pakalpojumu un konfigurÄjam visas trafika nosÅ«tÄ«Å”anu caur tuneli.
Faktiskais risinÄjums
SagatavoÅ”anas aktivitÄtes
InternetÄ ir daudz pakalpojumu, kas nodroÅ”ina VPS par ÄrkÄrtÄ«gi saprÄtÄ«gÄm cenÄm. LÄ«dz Å”im esmu atradis un izmantoju iespÄju par 9 ASV dolÄri gadÄ, taÄu pat tad, ja jÅ«s pÄrÄk neuztraucaties, ir daudz iespÄju par 1 E/mÄnesÄ« uz katra stÅ«ra. JautÄjums par VPS izvÄli ir tÄlu Ärpus Ŕī raksta darbÄ«bas jomas, tÄpÄc, ja kÄds kaut ko nesaprot, jautÄjiet komentÄros.
Ja izmantojat VPS ne tikai marÅ”rutÄÅ”anas pakalpojumam, bet arÄ« lai pÄrtrauktu tajÄ esoÅ”o tuneli, jums ir jÄpaaugstina Å”is tunelis un gandrÄ«z noteikti tam jÄkonfigurÄ NAT. InternetÄ ir liels skaits norÄdÄ«jumu par Ŕīm darbÄ«bÄm, es tos Å”eit neatkÄrtoÅ”u. GalvenÄ prasÄ«ba Å”Ädam tunelim ir tÄda, ka tam marÅ”rutÄtÄjÄ ir jÄizveido atseviŔķs interfeiss, kas atbalsta tuneli virzienÄ uz VPS. LielÄkÄ daļa izmantoto VPN tehnoloÄ£iju atbilst Å”ai prasÄ«bai - piemÄram, OpenVPN tun režīmÄ ir ideÄls.
Reģistra kopijas iegūŔana
KÄ teica Džabrails: "Tas, kas mums traucÄ, mums palÄ«dzÄs." TÄ kÄ RKN veido aizliegto resursu reÄ£istru, bÅ«tu grÄks neizmantot Å”o reÄ£istru mÅ«su problÄmas risinÄÅ”anai. MÄs saÅemsim reÄ£istra kopiju no github.
MÄs ejam uz jÅ«su Linux serveri, nonÄkam saknes kontekstÄ (sudo su ā) un instalÄjiet git, ja tas vÄl nav instalÄts.
apt install git
Dodieties uz savu mÄjas direktoriju un izvelciet reÄ£istra kopiju.
cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i
MÄs uzstÄdÄ«jÄm cron atjauninÄjumu (es to daru reizi 20 minÅ«tÄs, bet jÅ«s varat izvÄlÄties jebkuru jums interesÄjoÅ”u intervÄlu). Lai to izdarÄ«tu, mÄs palaižam crontab -e un pievienojiet tam Å”Ädu rindu:
*/20 * * * * cd ~/z-i && git pull && git gc
MÄs savienojam ÄÄ·i, kas pÄc reÄ£istra atjauninÄÅ”anas izveidos failus marÅ”rutÄÅ”anas pakalpojumam. Lai to izdarÄ«tu, izveidojiet failu /root/zi/.git/hooks/post-merge ar Å”Ädu saturu:
PÄc tam mÄs nekavÄjoties atspÄjojam putnu IPv6 ā mums tas nebÅ«s vajadzÄ«gs Å”ajÄ instalÄcijÄ.
systemctl stop bird6
systemctl disable bird6
ZemÄk ir minimÄlistisks putnu pakalpojuma konfigurÄcijas fails (/etc/bird/bird.conf), ar ko mums pilnÄ«gi pietiek (un vÄlreiz atgÄdinu, ka neviens neaizliedz ideju attÄ«stÄ«t un pieskaÅot savÄm vajadzÄ«bÄm)
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 - marÅ”rutÄtÄja identifikators, kas vizuÄli izskatÄs pÄc IPv4 adreses, bet nav viens. MÅ«su gadÄ«jumÄ tas var bÅ«t jebkurÅ” 32 bitu skaitlis IPv4 adreses formÄtÄ, taÄu ir laba forma, lai precÄ«zi norÄdÄ«tu jÅ«su ierÄ«ces (Å”ajÄ gadÄ«jumÄ VPS) IPv4 adresi.
Protocol direct nosaka, kuras saskarnes darbosies marÅ”rutÄÅ”anas procesÄ. PiemÄrÄ ir sniegti pÄris piemÄru nosaukumi, varat pievienot citus. JÅ«s varat vienkÄrÅ”i izdzÄst rindu; Å”ajÄ gadÄ«jumÄ serveris klausÄ«sies visas pieejamÄs saskarnes ar IPv4 adresi.
Protocol static ir mÅ«su maÄ£ija, kas ielÄdÄ prefiksu un IP adreÅ”u sarakstus (kas, protams, faktiski ir /32 prefiksi) no failiem turpmÄkai paziÅoÅ”anai. TÄlÄk tiks apspriests, no kurienes nÄk Å”ie saraksti. LÅ«dzu, Åemiet vÄrÄ, ka IP adreÅ”u ielÄde pÄc noklusÄjuma tiek komentÄta, jo iemesls ir lielais augÅ”upielÄdes apjoms. SalÄ«dzinÄjumam raksta rakstÄ«Å”anas laikÄ prefiksu sarakstÄ ir 78 rindas, bet IP adreÅ”u sarakstÄ - 85898. Es ļoti iesaku sÄkt un atkļūdot tikai prefiksu sarakstÄ un vai iespÄjot IP ielÄdi nÄkotne ir jÅ«su ziÅÄ pÄc eksperimentÄÅ”anas ar marÅ”rutÄtÄju. Ne katrs no viÅiem var viegli sagremot 85 tÅ«kstoÅ”us ierakstu marÅ”rutÄÅ”anas tabulÄ.
protokols bgp faktiski iestata bgp peering ar jÅ«su marÅ”rutÄtÄju. IP adrese ir marÅ”rutÄtÄja ÄrÄjÄs saskarnes adrese (vai tuneļa saskarnes adrese marÅ”rutÄtÄja pusÄ), 64998 un 64999 ir autonomo sistÄmu numuri. Å ajÄ gadÄ«jumÄ tos var pieŔķirt jebkuru 16 bitu numuru veidÄ, taÄu laba prakse ir izmantot AS numurus no privÄtÄ diapazona, ko nosaka RFC6996 - 64512-65534 ieskaitot (ir 32 bitu ASN formÄts, bet mÅ«su gadÄ«jumÄ tas noteikti ir pÄrspÄ«lÄts). AprakstÄ«tajÄ konfigurÄcijÄ tiek izmantota eBGP peering, kurÄ marÅ”rutÄÅ”anas pakalpojuma un marÅ”rutÄtÄja autonomo sistÄmu numuriem ir jÄbÅ«t atŔķirÄ«giem.
KÄ redzat, pakalpojumam ir jÄzina marÅ”rutÄtÄja IP adrese, tÄdÄļ, ja jums ir dinamiska vai nemarÅ”rutÄjama privÄtÄ (RFC1918) vai koplietojamÄ (RFC6598) adrese, jums nav iespÄjas palielinÄt peering ÄrÄjÄ tÄ«klÄ. interfeisu, taÄu pakalpojums joprojÄm darbosies tunelÄ«.
Ir arÄ« pilnÄ«gi skaidrs, ka no viena pakalpojuma jÅ«s varat nodroÅ”inÄt marÅ”rutus vairÄkiem dažÄdiem marÅ”rutÄtÄjiem - vienkÄrÅ”i dublÄjiet tiem iestatÄ«jumus, nokopÄjot protokola bgp sadaļu un mainot kaimiÅa IP adresi. TÄpÄc piemÄrÄ kÄ universÄlÄkie ir parÄdÄ«ti skatÄ«Å”anÄs Ärpus tuneļa iestatÄ«jumi. Tos ir viegli noÅemt tunelÄ«, attiecÄ«gi mainot IP adreses iestatÄ«jumos.
Notiek reÄ£istra apstrÄde marÅ”rutÄÅ”anas pakalpojumam
Tagad mums faktiski ir jÄizveido prefiksu un IP adreÅ”u saraksti, kas tika minÄti protokola statiskÄ iepriekÅ”ÄjÄ posmÄ. Lai to izdarÄ«tu, mÄs paÅemam reÄ£istra failu un izveidojam no tÄ nepiecieÅ”amos failus, izmantojot Å”Ädu skriptu, kas ievietots /root/blacklist/makebgp
Tagad varat to palaist manuÄli un novÄrot failu izskatu mapÄ /etc/bird.
VisticamÄk, putns Å”obrÄ«d jums nedarbojas, jo iepriekÅ”ÄjÄ posmÄ jÅ«s lÅ«dzÄt tam meklÄt failus, kas vÄl neeksistÄja. TÄpÄc mÄs to palaižam un pÄrbaudÄm, vai tas ir palaists:
systemctl start bird
birdc show route
OtrÄs komandas izvadei vajadzÄtu parÄdÄ«t apmÄram 80 ierakstus (pagaidÄm tas ir, bet, kad to iestatÄ«sit, viss bÅ«s atkarÄ«gs no RKN dedzÄ«bas bloÄ·Äjot tÄ«klus) apmÄram Å”Ädi:
parÄdÄ«s pakalpojuma protokolu statusu. KamÄr nebÅ«siet konfigurÄjis marÅ”rutÄtÄju (skatiet nÄkamo punktu), OurRouter protokols bÅ«s sÄkuma stÄvoklÄ« (Connect vai Active) un pÄc veiksmÄ«ga savienojuma izveidoÅ”anas pÄries uz augÅ”u (IzveidotÄ fÄze). PiemÄram, manÄ sistÄmÄ Å”Ä«s komandas izvade izskatÄs Å”Ädi:
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
MarÅ”rutÄtÄja pievienoÅ”ana
Visiem droÅ”i vien ir apnicis lasÄ«t Å”o kÄju lupatu, bet esiet droÅ”s - beigas ir tuvu. TurklÄt Å”ajÄ sadaÄ¼Ä es nevarÄÅ”u sniegt soli pa solim instrukcijas - katram ražotÄjam tas bÅ«s atŔķirÄ«gs.
TomÄr es varu jums parÄdÄ«t pÄris piemÄrus. GalvenÄ loÄ£ika ir palielinÄt BGP peering un pieŔķirt nexthop visiem saÅemtajiem prefiksiem, norÄdot uz mÅ«su tuneli (ja mums ir jÄnosÅ«ta trafika caur p2p interfeisu) vai nexthop IP adresi, ja satiksme tiks novirzÄ«ta uz Ethernet).
PiemÄram, Mikrotik sistÄmÄ RouterOS tas tiek atrisinÄts Å”Ädi
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
Ja vienu un to paÅ”u tuneli izmanto gan BGP peering, gan noderÄ«gas trafika pÄrsÅ«tÄ«Å”anai, nav nepiecieÅ”ams iestatÄ«t nexthop, tas tiks iestatÄ«ts pareizi, izmantojot protokolu. Bet, ja to iestatÄ«sit manuÄli, tas arÄ« nepasliktinÄs.
CitÄs platformÄs konfigurÄcija bÅ«s jÄizdomÄ paÅ”am, bet ja ir kÄdas grÅ«tÄ«bas, rakstiet komentÄros, mÄÄ£inÄÅ”u palÄ«dzÄt.
Kad jÅ«su BGP sesija ir sÄkusies, marÅ”ruti uz lielajiem tÄ«kliem ir ieraduÅ”ies un ir uzstÄdÄ«ti tabulÄ, satiksme no tiem ir plÅ«dusi uz adresÄm un laime ir tuvu, varat atgriezties putnu servisÄ un mÄÄ£inÄt atkomentÄt ierakstu, kas savieno IP adreÅ”u sarakstu, izpildiet pÄc tam
systemctl reload bird
un skatiet, kÄ jÅ«su marÅ”rutÄtÄjs pÄrsÅ«tÄ«ja Å”os 85 tÅ«kstoÅ”us marÅ”rutu. Esiet gatavs atvienot un domÄt, ko ar to darÄ«t :)
KopÄ
TÄ«ri teorÄtiski pÄc iepriekÅ” aprakstÄ«to darbÄ«bu veikÅ”anas jums tagad ir pakalpojums, kas automÄtiski novirza trafiku uz IP adresÄm, kuras ir aizliegtas Krievijas FederÄcijÄ, pÄrsniedzot filtrÄÅ”anas sistÄmu.
To, protams, var uzlabot. PiemÄram, ir diezgan viegli apkopot IP adreÅ”u sarakstu, izmantojot perl vai python risinÄjumus. VienkÄrÅ”s Perl skripts, kas to dara, izmantojot Net::CIDR::Lite, pÄrvÄrÅ” 85 tÅ«kstoÅ”us prefiksu par 60 (nevis tÅ«kstoÅ”os), bet, protams, aptver daudz lielÄku adreÅ”u diapazonu, nekÄ tiek bloÄ·Äts.
TÄ kÄ pakalpojums darbojas ISO/OSI modeļa treÅ”ajÄ lÄ«menÄ«, tas nepasargÄs jÅ«s no vietnes/lapas bloÄ·ÄÅ”anas, ja tas atrisinÄs uz nepareizo adresi, kas reÄ£istrÄta reÄ£istrÄ. TaÄu kopÄ ar reÄ£istru no github atnÄk fails nxdomain.txt, kas ar dažiem skripta sitieniem viegli pÄrvÄrÅ”as par adreÅ”u avotu, piemÄram, pÄrlÅ«kprogrammas Chrome spraudnim SwitchyOmega.
JÄpiemin arÄ« tas, ka risinÄjums prasa papildu precizÄjumus, ja neesat tikai interneta lietotÄjs, bet arÄ« pats publicÄjat dažus resursus (piemÄram, uz Ŕī savienojuma darbojas vietne vai pasta serveris). Izmantojot marÅ”rutÄtÄja lÄ«dzekļus, ir stingri jÄsaista Ŕī pakalpojuma izejoÅ”Ä trafika ar savu publisko adresi, pretÄjÄ gadÄ«jumÄ jÅ«s zaudÄsit savienojumu ar tiem resursiem, uz kuriem attiecas marÅ”rutÄtÄja saÅemto prefiksu saraksts.
Ja ir kÄdi jautÄjumi, jautÄjiet, esmu gatavs atbildÄt.
UPD3. NeupurÄts Es uzrakstÄ«ju kodu, kas pÄrvÄrÅ” dump.csv par iegÅ«to failu putnam ar neobligÄtu IP adreÅ”u kopsavilkumu. TÄpÄc sadaļu āReÄ£istra apstrÄde marÅ”rutÄÅ”anas pakalpojumamā var aizstÄt, izsaucot tÄ programmu. https://habr.com/post/354282/#comment_10782712
UPD4. Nedaudz piestrÄdÄt pie kļūdÄm (tekstam tÄs nepievienoju):
1) vietÄ systemctl pÄrlÄdÄt putnu ir jÄga izmantot komandu birdc konfigurÄÅ”ana.
2) Mikrotik marÅ”rutÄtÄjÄ, nevis nomainÄ«t nexthop uz tuneļa otrÄs puses IP /routing filter add action=accept chain=dynamic-in protocol=bgp comment=Ā»IestatÄ«t nexthopĀ» set-in-nexthop=172.30.1.1 ir jÄga norÄdÄ«t marÅ”rutu tieÅ”i tuneļa saskarnÄ, bez adreses /routing filter add action=accept chain=dynamic-in protocol=bgp comment=Ā»IestatÄ«t nexthopĀ» set-in-nexthop-direct=<interfeisa nosaukums>
UPD5. Ir parÄdÄ«jies jauns pakalpojums https://antifilter.download, no kurienes var paÅemt gatavus IP adreÅ”u sarakstus. AtjauninÄts ik pÄc pusstundas. Klienta pusÄ atliek tikai ierÄmÄt ierakstus ar atbilstoÅ”o āmarÅ”ruts... noraidÄ«tā.
Un Å”ajÄ brÄ«dÄ«, iespÄjams, pietiek ar vecmÄmiÅas lupatu un raksta atjauninÄÅ”anu.
UPD6. Raksta pÄrskatÄ«ta versija tiem, kas nevÄlas to izdomÄt, bet vÄlas sÄkt - Å”eit.