Nyetél BGP pikeun ngahalangan blokiran, atanapi "Kumaha kuring ngeureunkeun sieun sareng murag asih sareng RKN"

Muhun, oke, ngeunaan "dipikacinta" mangrupa exaggeration. Sabalikna, "bisa hirup babarengan."

Sakumaha anjeun terang, saprak 16 April 2018, Roskomnadzor parantos ngahalangan aksés kana sumber-sumber dina Internét dina sakedapan anu lega, nambihan kana "Daftar Ngahijikeun nami domain, indéks halaman situs dina Internét sareng alamat jaringan anu ngamungkinkeun ngaidentipikasi situs. dina Internét," ngandung émbaran anu distribusina dilarang di Féderasi Rusia" (dina téks - ngan register a) ku /10 sakapeung. Hasilna, warga Féderasi Rusia jeung usaha anu sangsara, sanggeus leungit aksés ka sumber lengkep légal maranéhna butuh.

Saatos kuring nyarios dina koméntar ka salah sahiji tulisan ngeunaan Habré yén kuring siap ngabantosan korban kalayan nyetél skéma bypass, sababaraha jalma sumping ka kuring naroskeun pitulung sapertos kitu. Nalika sadayana dianggo pikeun aranjeunna, salah sahijina nyarankeun ngajelaskeun téknik dina tulisan. Saatos sababaraha pamikiran, abdi mutuskeun pikeun megatkeun tiiseun kuring dina loka jeung nyoba sakali nulis hal panengah antara hiji proyék jeung pos Facebook, i.e. habrapost. Hasilna aya di hareup anjeun.

Bantahan

Kusabab teu sah pisan nyebarkeun cara pikeun ngahalangan ngahalangan aksés kana inpormasi anu dilarang di wilayah Féderasi Rusia, tujuan tulisan ieu bakal ngobrol ngeunaan metode anu ngamungkinkeun anjeun pikeun ngajadikeun otomatis aksés kana sumber daya anu diidinan dina wewengkon Féderasi Rusia, tapi alatan lampah batur teu langsung diaksés ngaliwatan panyadia Anjeun. Sareng aksés ka sumber daya sanés anu dicandak salaku hasil tina tindakan tina tulisan éta mangrupikeun éfék samping anu hanjakal sareng sanés waé tujuan tulisan éta.

Ogé, saprak kuring utamina arsitek jaringan ku profési, padamelan sareng jalur kahirupan, program sareng Linux sanés titik anu kuat. Ku sabab kitu, tangtosna, naskah tiasa ditulis langkung saé, masalah kaamanan dina VPS tiasa didamel langkung jero, jsb. Saran anjeun bakal ditampi kalayan syukur, upami aranjeunna cekap lengkep - kuring bakal resep nambihanana kana téks tulisan.

TL; DR

Urang ngajadikeun otomatis aksés ka sumberdaya ngaliwatan torowongan anjeun aya ngagunakeun salinan pendaptaran jeung protokol BGP. Tujuanana nyaéta pikeun ngahapus sadaya lalu lintas anu ditujukan pikeun sumber anu diblokir kana torowongan. Penjelasan minimum, lolobana parentah hambalan-demi-hambalan.

Naon anu anjeun peryogikeun pikeun ieu?

Hanjakalna, tulisan ieu sanés kanggo sadayana. Pikeun ngagunakeun téknik ieu, anjeun kedah ngahijikeun sababaraha unsur:

  1. Anjeun kudu boga server linux wae di luar widang blocking. Atanapi sahenteuna kahayang pikeun gaduh server sapertos kitu - untungna ayeuna hargana tina $ 9 / taun, sareng kamungkinan kirang. Metodeu ogé cocog upami anjeun gaduh torowongan VPN anu misah, teras pangladén tiasa ditempatkeun di jero médan blocking.
  2. router Anjeun kudu cukup pinter mun bisa
    • naon waé klien VPN anu anjeun resep (Kuring resep OpenVPN, tapi tiasa PPTP, L2TP, GRE + IPSec atanapi pilihan sanés anu nyiptakeun antarmuka torowongan);
    • protokol BGPv4. Anu hartosna pikeun SOHO tiasa Mikrotik atanapi router naon waé anu nganggo OpenWRT / LEDE / firmware khusus anu sami anu ngamungkinkeun anjeun masang Quagga atanapi Bird. Ngagunakeun router PC ogé teu dilarang. Dina kasus hiji perusahaan, néangan rojongan BGP dina dokuméntasi pikeun router wates Anjeun.
  3. Anjeun kedah gaduh pamahaman ngeunaan panggunaan Linux sareng téknologi jaringan, kalebet protokol BGP. Atanapi sahenteuna hoyong nampi ide sapertos kitu. Kusabab kuring henteu siap pikeun nangkeup immensity waktos ieu, anjeun kedah diajar sababaraha aspék anu teu kaharti ku anjeun nyalira. Nanging, kuring bakal, tangtosna, ngajawab patarosan khusus dina koméntar sareng kuring sigana ngan ukur hiji anu ngajawab, janten entong ragu naroskeun.

Naon anu dipaké dina conto

  • A salinan register - ti https://github.com/zapret-info/z-i 
  • VPS - Ubuntu 16.04
  • Jasa routing- manuk 1.6.3   
  • Router - Mikrotik hAP ac
  • Polder anu dianggo - kumargi urang damel salaku akar, kalolobaanana bakal aya dina folder asal akar. Masing-masing:
    • /root/blacklist - polder damel sareng skrip kompilasi
    • /root/zi - salinan pendaptaran ti github
    • /etc/bird - polder standar pikeun setélan jasa manuk
  • Alamat IP éksternal tina VPS kalawan server routing sarta titik terminasi torowongan nyaeta 194.165.22.146, ASN 64998; alamat IP éksternal router - 81.177.103.94, ASN 64999
  • Alamat IP di jero torowongan nyaéta 172.30.1.1 sareng 172.30.1.2 masing-masing.

Nyetél BGP pikeun ngahalangan blokiran, atanapi "Kumaha kuring ngeureunkeun sieun sareng murag asih sareng RKN"

Tangtosna, anjeun tiasa nganggo router anu sanés, sistem operasi sareng produk parangkat lunak, nyaluyukeun solusi kana logikana.

Sakeudeung - logika solusi

  1. Laku préparasi
    1. Kéngingkeun VPS
    2. Ngangkat torowongan tina router ka VPS
  2. Kami nampi sareng rutin ngapdet salinan pendaptaran
  3. Masang sareng ngonpigurasikeun jasa routing
  4. Urang nyieun daptar ruteu statik pikeun layanan routing dumasar kana pendaptaran
  5. Urang sambungkeun router ka layanan jeung ngonpigurasikeun ngirim sakabeh lalulintas ngaliwatan torowongan.

Solusi sabenerna

Laku préparasi

Aya seueur jasa dina Internét anu nyayogikeun VPS pikeun harga anu lumayan. Sajauh Kuring geus kapanggih sarta ngagunakeun pilihan pikeun $ 9 / taun, tapi sanajan anjeun teu ganggu teuing, aya loba pilihan pikeun 1E / bulan on unggal juru. Patarosan milih VPS perenahna tebih saluareun ruang lingkup artikel ieu, jadi lamun batur teu ngartos hal ngeunaan ieu, nanya dina komentar.

Upami anjeun nganggo VPS henteu ngan ukur pikeun layanan routing, tapi ogé pikeun ngeureunkeun torowongan di dinya, anjeun kedah ngangkat torowongan ieu sareng, ampir pasti, ngonpigurasikeun NAT pikeun éta. Aya sajumlah ageung petunjuk ngeunaan tindakan ieu dina Internét, kuring moal ngulang deui di dieu. Sarat utama pikeun torowongan sapertos kitu kedah nyiptakeun antarmuka anu misah dina router anjeun anu ngadukung torowongan nuju VPS. Téknologi VPN anu paling dianggo nyumponan sarat ieu - contona, OpenVPN dina modeu tun sampurna.

Meunang salinan pendaptaran

Sakumaha ceuk Jabrail, "Sing saha anu ngahalangan urang bakal nulungan urang." Kusabab RKN nyiptakeun daptar sumber anu dilarang, janten dosa upami henteu nganggo register ieu pikeun ngajawab masalah urang. Kami bakal nampi salinan pendaptaran ti github.

Urang buka server Linux Anjeun, digolongkeun kana konteks root (sudo su -) sareng pasang git upami teu acan dipasang.

apt install git

Pindah ka diréktori asal anjeun sareng cabut salinan pendaptaran.

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

Kami nyetél update cron (Kuring ngalakukeun éta sakali unggal 20 menit, tapi anjeun tiasa milih interval anu dipikaresep anjeun). Jang ngalampahkeun ieu urang ngajalankeun -e crontab sareng tambahkeun garis di handap ieu:

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

Urang sambungkeun hook anu bakal nyieun file pikeun layanan routing sanggeus ngamutahirkeun pendaptaran. Jang ngalampahkeun ieu, jieun file /root/zi/.git/hooks/post-merge kalawan eusi handap:

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

sarta ulah poho sangkan eta executable

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

Urang bakal nyieun naskah makebgp nu hook nujul kana saeutik engké.

Masang sareng ngonpigurasikeun jasa routing

Pasang manuk. Hanjakalna, versi manuk anu ayeuna dipasang dina repositori Ubuntu tiasa dibandingkeun dina kesegaran sareng tai Archaeopteryx, janten urang kedah nambihan heula PPA resmi pamekar parangkat lunak kana sistem.

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

Saatos ieu, urang langsung nganonaktipkeun manuk pikeun IPv6 - urang henteu peryogina dina pamasangan ieu.

systemctl stop bird6
systemctl disable bird6

Di handap ieu mangrupakeun file konfigurasi jasa manuk minimalis (/etc/bird/bird.conf), anu cukup pikeun urang (sareng kuring ngingetkeun anjeun sakali deui yén teu aya anu nyaram ngembangkeun sareng nyetél ideu pikeun nyocogkeun ka kabutuhan anjeun)

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 - router identifier, nu visually kasampak kawas alamat IPv4, tapi teu salah. Dina kasus urang, éta tiasa janten nomer 32-bit dina format alamat IPv4, tapi bentuk anu saé pikeun nunjukkeun persis alamat IPv4 alat anjeun (dina hal ieu, VPS).

protokol langsung ngahartikeun mana interfaces bakal bisa dipaké jeung prosés routing. Conto masihan sababaraha conto nami, anjeun tiasa nambihan anu sanés. Anjeun ngan saukur tiasa ngahapus jalur; dina hal ieu, server bakal ngadangukeun sadaya antarmuka anu sayogi sareng alamat IPv4.

Protokol statik mangrupikeun sihir urang anu ngamuat daptar awalan sareng alamat IP (anu saleresna / 32 awalan, tangtosna) tina file pikeun pengumuman salajengna. Dimana daptar ieu asalna bakal dibahas di handap. Punten dicatet yén ngamuat alamat IP dikoméntarkeun sacara standar, alesan ieu nyaéta volume unggah anu ageung. Pikeun babandingan, dina waktos nyeratna, aya 78 garis dina daptar awalan, sareng 85898 dina daptar alamat IP. Abdi nyarankeun pisan ngamimitian sareng debugging ngan dina daptar awalan, sareng naha atanapi henteu ngaktipkeun IP loading di mangsa nu bakal datang téh nepi ka anjeun mutuskeun sanggeus experimenting kalawan router Anjeun. Henteu unggal sahijina bisa kalayan gampang nyerna 85 rébu éntri dina tabel routing.

protokol bgp, kanyataanna, nyetél bgp peering kalawan router Anjeun. Alamat IP mangrupikeun alamat antarmuka éksternal router (atanapi alamat antarmuka torowongan di sisi router), 64998 sareng 64999 mangrupikeun nomer sistem otonom. Dina hal ieu, aranjeunna tiasa ditugaskeun dina bentuk naon waé nomer 16-bit, tapi éta prakték anu saé ngagunakeun nomer AS tina rentang pribadi anu ditetepkeun ku RFC6996 - 64512-65534 inklusif (aya format pikeun ASN 32-bit, tapi dina hal urang ieu pasti overkill). Konfigurasi anu dijelaskeun nganggo peering eBGP, dimana jumlah sistem otonom tina jasa routing sareng router kedah béda.

Sakumaha anjeun tiasa tingali, jasa kedah terang alamat IP tina router, janten upami anjeun gaduh alamat pribadi dinamis atanapi non-routable (RFC1918) atanapi dibagikeun (RFC6598), anjeun henteu gaduh pilihan pikeun ngangkat peering dina éksternal. panganteur, tapi jasa bakal tetep dianggo di jero torowongan.

Éta ogé jelas yén tina hiji layanan anjeun tiasa nyayogikeun rute ka sababaraha router anu béda - ngan ukur duplikat setélan pikeun aranjeunna ku nyalin bagian protokol bgp sareng ngarobih alamat IP tatangga. Éta sababna conto nunjukkeun setélan pikeun ngintip di luar torowongan, salaku anu paling universal. Gampang ngahapus aranjeunna kana torowongan ku cara ngarobih alamat IP dina setélan anu sasuai.

Ngolah pendaptaran pikeun layanan routing

Ayeuna urang kudu, kanyataanna, nyieun daptar awalan jeung alamat IP, nu disebutkeun dina protokol statik dina tahap saméméhna. Jang ngalampahkeun ieu, urang nyokot file pendaptaran jeung nyieun payil nu urang butuhkeun ti eta ngagunakeun Aksara handap, disimpen dina /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'

Tong hilap ngajantenkeun éta tiasa dieksekusi

chmod +x /root/blacklist/makebgp

Ayeuna anjeun tiasa ngajalankeun sacara manual sareng ningali penampilan file dina /etc/bird.

Paling dipikaresep, manuk teu bisa dipake pikeun anjeun dina momen ieu, sabab dina tahap saméméhna anjeun nanya ka néangan payil nu teu acan aya. Ku kituna, urang ngajalankeun eta jeung pariksa yen eta geus dimimitian:

systemctl start bird
birdc show route

Kaluaran paréntah kadua kedah nunjukkeun sakitar 80 rékaman (ieu kanggo ayeuna, tapi nalika anjeun nyetél éta, sadayana gumantung kana getol RKN dina meungpeuk jaringan) sapertos kieu:

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

regu

birdc show protocol

bakal nunjukkeun status protokol dina jasa. Dugi ka geus ngonpigurasi router (tingali titik salajengna), protokol OurRouter bakal dina kaayaan mimiti (Connect atawa fase Active), sarta sanggeus sambungan suksés bakal balik ka kaayaan up (Fase ngadegkeun). Salaku conto, dina sistem kuring kaluaran paréntah ieu sapertos kieu:

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

Nyambungkeun router a

Sarerea meureun bosen maca footcloth ieu, tapi kudu ati - tungtungna geus deukeut. Sumawona, dina bagian ieu kuring moal tiasa masihan petunjuk léngkah-léngkah - éta bakal béda pikeun unggal produsén.

Nanging, kuring tiasa nunjukkeun anjeun sababaraha conto. Logika utama nyaéta pikeun ngangkat BGP peering sareng napelkeun nexthop ka sadaya awalan anu ditampi, nunjuk ka torowongan urang (upami urang kedah ngirim lalu lintas ngalangkungan antarmuka p2p) atanapi alamat IP nexthop upami lalu lintas bakal ka Ethernet).

Contona, dina Mikrotik di RouterOS ieu direngsekeun saperti kieu

/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

sarta di Cisco ios - kawas kieu

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

Upami torowongan anu sami dianggo pikeun peering BGP sareng pikeun ngirimkeun lalu lintas anu mangpaat, henteu kedah nyetél nexthop; éta bakal diatur leres nganggo protokol. Tapi upami anjeun nyetél sacara manual, éta ogé moal parah.

Dina platform anu sanés, anjeun kedah terang konfigurasi diri anjeun, tapi upami anjeun ngagaduhan kasusah, nyerat dina koméntar, kuring bakal nyobian ngabantosan.

Saatos sési BGP anjeun parantos ngamimitian, rute ka jaringan ageung parantos sumping sareng dipasang dina méja, lalu lintas parantos ngalir ka alamat ti aranjeunna sareng kabagjaan caket, anjeun tiasa uih deui ka jasa manuk sareng cobian uncomment éntri anu aya hubunganana. daptar alamat IP, laksana sanggeus éta

systemctl reload bird

tur tingal kumaha router Anjeun mindahkeun ieu 85 sarébu ruteu. Siap cabut sareng pikirkeun naon anu kudu dilakukeun ku éta :)

dina total

Sacara téoritis murni, saatos ngalengkepan léngkah-léngkah anu dijelaskeun di luhur, anjeun ayeuna gaduh jasa anu otomatis alihan lalu lintas ka alamat IP anu dilarang di Féderasi Rusia ngalangkungan sistem panyaring.

Éta tiasa, tangtosna, ningkat. Salaku conto, cukup gampang pikeun nyimpulkeun daptar alamat IP nganggo solusi perl atanapi python. Aksara Perl basajan ngalakukeun ieu ngagunakeun Net :: CIDR :: Lite ngarobah 85 sarébu awalan kana 60 (teu sarébu), tapi, tangtosna, nyertakeun sauntuyan loba nu leuwih gede alamatna ti diblokir.

Kusabab jasa éta beroperasi dina tingkat katilu model ISO / OSI, éta moal nyalametkeun anjeun tina blocking situs / kaca lamun eta resolves ka alamat salah sakumaha kacatet dina pendaptaran. Tapi bareng jeung pendaptaran, file nxdomain.txt datang ti github, nu ku sababaraha strokes naskah gampang robah jadi sumber alamat pikeun, contona, SwitchyOmega plugin dina Chrome.

Perlu disebatkeun ogé yén solusi butuh perbaikan tambahan upami anjeun henteu ngan ukur pangguna Internét, tapi ogé nyebarkeun sababaraha sumber nyalira (contona, situs wéb atanapi server mail dijalankeun dina sambungan ieu). Ngagunakeun sarana router, perlu mastikeun ngabeungkeut lalulintas kaluar ti layanan ieu ka alamat publik anjeun, disebutkeun anjeun bakal leungit konektipitas jeung sumber daya nu katutupan ku daptar prefixes narima router.

Upami anjeun aya patarosan, tanyakeun, kuring siap ngajawab.

UPD. hatur nuhun laut и TerAnYu pikeun parameter pikeun git anu ngamungkinkeun ngurangan volume download.

UPD2. Kolega, sigana kuring ngalakukeun kasalahan ku henteu nambihan petunjuk pikeun nyetél torowongan antara VPS sareng router kana tulisan. Seueur patarosan anu diangkat ku ieu.
Bisi wae, kuring bakal perhatikeun sakali deui yén sateuacan ngamimitian pituduh ieu, anjeun parantos ngonpigurasikeun torowongan VPN ka arah anu anjeun peryogikeun sareng pariksa pungsionalitasna (contona, ku cara ngarobah lalu lintas ka dinya sacara standar atanapi statis). Upami anjeun teu acan réngsé fase ieu acan, éta teu make loba akal pikeun nuturkeun léngkah dina artikel. Kuring henteu acan gaduh téks sorangan ngeunaan ieu, tapi upami anjeun google "nyetél server OpenVPN" sareng nami sistem operasi anu dipasang dina VPS, sareng "nyetél klien OpenVPN" kalayan nami router anjeun. , Anjeun paling dipikaresep bakal manggihan sababaraha artikel dina subjék ieu, kaasup dina Habré.

UPD3. Teu dikorbankeun Kuring nulis kode nu kabukti dump.csv kana file hasilna pikeun manuk kalawan summarization pilihan alamat IP. Ku alatan éta, bagian "Ngolah pendaptaran pikeun layanan routing" bisa diganti ku nelepon program na. https://habr.com/post/354282/#comment_10782712

UPD4. Karya sakedik ngeunaan kasalahan (kuring henteu nambihan kana téks):
1) tibatan systemctl reload manuk asup akal ngagunakeun paréntah birdc ngonpigurasikeun.
2) dina router Mikrotik, tinimbang ngarobah nexthop kana IP sisi kadua torowongan / routing filter nambahkeun aksi = narima ranté = dinamis-in protokol = bgp comment = »Setel nexthop» set-in-nexthop=172.30.1.1 asup akal pikeun nangtukeun jalur langsung ka panganteur torowongan, tanpa alamat / routing filter tambihan aksi = nampi ranté = dynamic-in protocol = bgp comment = »Setel nexthop» set-in-nexthop-langsung = <ngaran panganteur>

UPD5. Hiji layanan anyar geus mucunghul https://antifilter.download, ti mana anjeun tiasa nyandak daptar alamat IP anu siap-siap. Diropéa unggal satengah jam. Di sisi klien, sadaya anu tetep nyaéta pigura rékaman sareng "jalur ... nolak" anu saluyu.
Sarta dina titik ieu, meureun, éta cukup pikeun rag nini anjeun sarta ngapdet artikel.

UPD6. Versi révisi tina tulisan pikeun anu henteu hoyong terang, tapi hoyong ngamimitian - di dieu.

sumber: www.habr.com

Tambahkeun komentar