
Hello sa lahat. Ang artikulong ito ay inilaan para sa mga may malaking network ng Mikrotik at gustong makamit ang maximum na pagkakaisa nang hindi kinakailangang kumonekta sa bawat device nang paisa-isa. Sa artikulong ito, ilalarawan ko ang isang proyekto na, sa kasamaang-palad, ay hindi nakarating sa produksyon dahil sa pagkakamali ng tao. Sa madaling salita: higit sa 200 mga router, mabilis na pag-setup at pagsasanay sa kawani, pag-iisa ayon sa rehiyon, network at pag-filter ng host, ang kakayahang madaling magdagdag ng mga panuntunan sa lahat ng mga device, pag-log, at kontrol sa pag-access.
Ang inilalarawan sa ibaba ay hindi nilalayong maging kumpletong pag-aaral ng kaso, ngunit umaasa akong kapaki-pakinabang ito kapag pinaplano ang iyong mga network at pinapaliit ang mga error. Marahil ang ilang mga punto at solusyon ay tila hindi ganap na tama sa iyo—kung gayon, mangyaring ipaalam sa akin sa mga komento. Ang pagpuna, sa kasong ito, ay magiging isang nakabahaging karanasan sa pag-aaral. Samakatuwid, mambabasa, mangyaring suriin ang mga komento; marahil ang may-akda ay nakagawa ng isang malubhang pagkakamali-ang komunidad ay magiging masaya na tumulong.
Mayroong 200-300 router na nakakalat sa iba't ibang lungsod na may iba't ibang kalidad ng koneksyon sa internet. Ang lahat ay kailangang idisenyo nang maganda at ipinaliwanag nang malinaw sa mga lokal na administrador kung paano ito gagana.
Kaya, saan magsisimula ang anumang proyekto? Siyempre, kasama TK.
- Organisasyon ng isang network plan para sa lahat ng sangay ayon sa mga kinakailangan ng customer, network segmentation (mula 3 hanggang 20 network sa mga sangay depende sa bilang ng mga device).
- Setup ng device sa bawat branch. Pagsubok sa aktwal na bilis ng throughput ng provider sa ilalim ng iba't ibang mga kondisyon ng operating.
- Pag-aayos ng proteksyon ng device, pamamahala sa whitelist, awtomatikong pag-detect ng mga pag-atake na may awtomatikong blacklisting para sa isang partikular na yugto ng panahon, pagliit ng paggamit ng iba't ibang teknikal na paraan na ginagamit upang maharang ang kontrol na pag-access at pagtanggi sa serbisyo.
- Pagtatatag ng mga secure na koneksyon sa VPN gamit ang pag-filter ng network ayon sa mga kinakailangan ng customer. Hindi bababa sa tatlong koneksyon sa VPN mula sa bawat sangay patungo sa sentral na opisina.
- Batay sa mga punto 1 at 2, pumili ng pinakamainam na mga landas para sa pagbuo ng mga fault-tolerant na VPN. Maaaring pumili ang kontratista ng dynamic na teknolohiya sa pagruruta na may wastong katwiran.
- Pag-prioritize ng trapiko batay sa mga protocol, port, host, at iba pang partikular na serbisyo na ginagamit ng customer (VOIP, mga host na may mga kritikal na serbisyo)
- Pag-aayos ng pagsubaybay at pag-log ng mga kaganapan sa router para tumugon ang mga kawani ng teknikal na suporta.
Tulad ng naiintindihan namin, sa ilang mga kaso, ang mga pagtutukoy ay batay sa mga kinakailangan. Ako mismo ang bumalangkas sa mga kinakailangang ito pagkatapos makinig sa mga pangunahing isyu. Pinahintulutan ko ang posibilidad na may ibang kumuha sa pagpapatupad ng mga puntong ito.
Anong mga tool ang gagamitin upang matugunan ang mga kinakailangang ito:
- ELK stack (pagkatapos ng ilang oras, naging malinaw na fluentd ang gagamitin sa halip na logstash).
- Ansible. Para sa kadalian ng pangangasiwa at kontrol sa pag-access, gagamitin namin ang AWX.
- GITLAB. Hindi na kailangang ipaliwanag ito. Hindi namin magagawa nang walang kontrol sa bersyon ng aming mga configuration.
- PowerShell. Magkakaroon ng simpleng script para sa paunang pagbuo ng configuration.
- Isang wiki para sa pagsulat ng dokumentasyon at mga gabay. Sa kasong ito, ginagamit namin ang habr.com.
- Ang pagsubaybay ay isasagawa sa pamamagitan ng Zabbix. Ang isang diagram ng koneksyon ay ibibigay din para sa pangkalahatang pag-unawa.
EFK tuning points
Tungkol sa unang punto, ilalarawan ko lamang ang ideolohiya kung saan itatayo ang mga indeks. marami naman
Napakahusay na mga artikulo sa pag-set up at pagtanggap ng mga log mula sa mga aparatong Mikrotik.
Hayaan akong tumuon sa ilang mga punto:
1. Ayon sa diagram, sulit na isaalang-alang ang pagtanggap ng mga log mula sa iba't ibang lokasyon at sa iba't ibang port. Para dito, gagamit kami ng log aggregator. Nais din naming lumikha ng mga pangkalahatang graph para sa lahat ng mga router na may kakayahang paghiwalayin ang pag-access. Pagkatapos ay bubuo kami ng mga index tulad ng sumusunod:
Narito ang isang snippet ng fluentd config. uri ng elasticsearch
totoo ang logstash_format
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
host : 9200
port 9200
Sa ganitong paraan, maaari nating pagsamahin ang mga router at i-segment ang mga ito ayon sa plano: mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Bakit masyadong kumplikado ang mga bagay? Nauunawaan namin na magkakaroon kami ng 200 o higit pang mga device. Imposibleng masubaybayan ang lahat. Sa ElasticSearch na bersyon 6.8, mayroon kaming access sa mga setting ng seguridad (nang hindi bumibili ng lisensya), na nagpapahintulot sa amin na ipamahagi ang mga karapatan sa panonood sa mga kawani ng teknikal na suporta o mga lokal na administrator ng system.
Mga talahanayan, mga graph - dito kailangan mo lang sumang-ayon - gamitin ang pareho, o ginagawa ito ng lahat sa paraang pinaka-maginhawa para sa kanila.
2. Tungkol sa pagtotroso. Kung pinagana namin ang pag-log in sa mga panuntunan ng firewall, gagawin namin ang mga pangalan nang walang mga puwang. Makikita mo na sa pamamagitan ng paggamit ng isang simpleng configuration sa fluentd, maaari naming i-filter ang data at lumikha ng mga maginhawang dashboard. Ang larawan sa ibaba ay nagpapakita ng aking home router.

3. Sa pamamagitan ng espasyo at mga tala. Sa karaniwan, na may 1000 mensahe kada oras, ang mga log ay tumatagal ng 2-3 MB bawat araw, na, sasang-ayon ka, ay hindi gaanong. Elasticsearch bersyon 7.5.
ANSIBLE.AWX
Sa kabutihang-palad para sa amin, mayroon kaming handa na module para sa mga routero
Nabanggit ko ang AWX, ngunit ang mga utos sa ibaba ay nalalapat lamang sa purong Ansible. Sa tingin ko ang mga nakatrabaho sa Ansible ay walang problema sa paggamit ng AWX sa pamamagitan ng GUI.
Sa totoo lang, tumingin na ako sa iba pang mga gabay gamit ang SSH dati, at lahat sila ay may iba't ibang mga isyu sa oras ng pagtugon at isang bungkos ng iba pang mga problema. Muli, hindi ito naging masama 🙂 Isaalang-alang ang impormasyong ito bilang isang eksperimento na hindi lumampas sa isang 20-router setup.
Kailangan nating gumamit ng certificate o account. Bahala na, pero pabor ako sa mga certificate. Mayroong isang banayad na isyu sa mga pahintulot. Nagbibigay ako ng mga pahintulot sa pagsulat—kahit na ang pag-reset ng config ay hindi gagana.
Hindi dapat magkaroon ng anumang mga problema sa pagbuo, pagkopya, at pag-import ng certificate:
Maikling listahan ng mga utosSa iyong PC
ssh-keygen -t RSA, sagutin ang mga tanong, i-save ang susi.
Kopyahin sa mikrotik:
user ssh-keys import public-key-file=id_mtx.pub user=ansible
Una, kailangan mong lumikha ng isang account at italaga ito ng mga karapatan.
Sinusuri ang koneksyon gamit ang sertipiko
ssh -p 49475 -i /keys/mtx ansible@192.168.0.120
Nagsusulat kami ng vi /etc/ansible/hosts
MT01 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
MT02 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
MT03 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
MT04 ansible_network_os=routeros ansible_ssh_port=49475 ansible_ssh_user= ansible
Well, narito ang isang halimbawa ng playbook: — pangalan: add_work_sites
mga host: testmt
serye: 1
koneksyon: network_cli
remote_user: mikrotik.west
gather_facts: oo
gawain:
— pangalan: magdagdag ng Work_sites
routeros_command:
utos:
— /ip firewall address-list magdagdag ng address=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
— /ip firewall address-list magdagdag ng address=habr.com list=work_sites comment=for_habr
Tulad ng nakikita mo mula sa pagsasaayos sa itaas, ang paggawa ng iyong sariling mga playbook ay hindi mahirap. Ang isang mahusay na kaalaman sa Mikrotik cli ay sapat na. Isipin natin ang isang sitwasyon kung saan kailangan nating alisin ang isang listahan ng address na may partikular na data mula sa lahat ng mga router. Pagkatapos:
Hanapin at tanggalin/ip firewal address-list alisin [hanapin kung saan list="gov.ru"]
Sinadya kong hindi isama ang buong listahan ng firewall dito, dahil magiging partikular ito sa bawat proyekto. Ngunit isang bagay ang sigurado: gamitin lamang ang listahan ng address.
Ang lahat ay malinaw sa GITLAB. Hindi na ako magtatagal sa puntong ito. Ang lahat ay nakaayos nang maganda sa mga indibidwal na gawain, mga template, at mga tagapangasiwa.
Powershell
Magkakaroon ng tatlong mga file dito. Bakit PowerShell? Maaari kang pumili ng anumang tool para sa pagbuo ng mga config, anuman ang pinaka-maginhawa para sa iyo. Sa kasong ito, lahat ay nagpapatakbo ng Windows sa kanilang PC, kaya bakit gumamit ng Bash kapag ang PowerShell ay mas maginhawa? Ito ay isang bagay ng kagustuhan.
Ang script mismo (simple at malinaw):[cmdletBinding()]
Paraan(
[Parameter(Mandatory=$true)]
[string]$EXTERNALIPADDRESS,
[Parameter(Mandatory=$true)]
[string]$EXTERNALIPROUTE,
[Parameter(Mandatory=$true)]
[string]$BWorknets,
[Parameter(Mandatory=$true)]
[string]$CWorknets,
[Parameter(Mandatory=$true)]
[string]$BVoipNets,
[Parameter(Mandatory=$true)]
[string]$CVoipNets,
[Parameter(Mandatory=$true)]
[string]$CClients,
[Parameter(Mandatory=$true)]
[string]$BVPNGAWA,
[Parameter(Mandatory=$true)]
[string]$CVPNGAWA,
[Parameter(Mandatory=$true)]
[string]$BVPNCLIENTs,
[Parameter(Mandatory=$true)]
[string]$cVPNCLIENTs,
[Parameter(Mandatory=$true)]
[string]$NAMEROUTER,
[Parameter(Mandatory=$true)]
[string]$ServerCertificates,
[Parameter(Mandatory=$true)]
[string]$infile,
[Parameter(Mandatory=$true)]
[string]$outfile
)
Kumuha ng Nilalaman $infile | Foreach-Object {$_.Replace("EXTERNIP", $EXTERNALIPADDRESS)} |
Foreach-Object {$_.Replace("EXTROUTE", $EXTERNALIPROUTE)} |
Foreach-Object {$_.Replace("BWorknet", $BWorknets)} |
Foreach-Object {$_.Replace("CWorknet", $CWorknets)} |
Foreach-Object {$_.Replace("BVoipNet", $BVoipNets)} |
Foreach-Object {$_.Replace("CVoipNet", $CVoipNets)} |
Foreach-Object {$_.Replace("CClients", $CClientss)} |
Foreach-Object {$_.Replace("BVPNWORK", $BVPNWORKs)} |
Foreach-Object {$_.Replace("CVPNWORK", $CVPNWORKs)} |
Foreach-Object {$_.Replace("BVPNCLIENTS", $BVPNCLIENTSs)} |
Foreach-Object {$_.Replace("CVPNCLIENTS", $cVPNCLIENTSs)} |
Foreach-Object {$_.Replace("MYNAMERROUTER", $NAMEROUTER)} |
Foreach-Object {$_.Replace("ServerCertificate", $ServerCertificate)} | Set-Content $outfile
Patawarin mo ako, hindi ko mailatag ang lahat ng mga patakaran, dahil hindi ito magiging maganda. Maaari kang lumikha ng sarili mong mga panuntunan, na sumusunod sa pinakamahuhusay na kagawian.
Halimbawa, narito ang isang listahan ng mga link na sinundan ko::Securing_Your_Router
:IP/Firewall/Filter
:OSPF-mga halimbawa
:Winbox
:Upgrading_RouterOS
:IP/Fasttrack — mahalagang tandaan na kapag pinagana ang fasttrack, hindi gagana ang prioritization ng trapiko at mga panuntunan sa paghubog—kapaki-pakinabang para sa mas mahihinang device.
Mga karaniwang notasyon para sa mga variable:Ang mga sumusunod na network ay kinuha bilang isang halimbawa:
192.168.0.0/24 network ng trabaho
172.22.4.0/24 VOIP network
10.0.0.0/24 network para sa mga kliyenteng walang access sa lokal na network
192.168.255.0/24 VPN network para sa malalaking sangay
172.19.255.0/24 VPN network para sa maliliit na negosyo
Ang network address ay binubuo ng 4 na decimal na numero, ayon sa pagkakabanggit ABCD, ang kapalit ay gumagana sa parehong prinsipyo, kung sa pagsisimula ay humihingi ito ng B, pagkatapos ay kailangan mong ipasok ang numero 0 para sa network 192.168.0.0/24, at para sa C = 0.
$EXTERNALIPADDRESS — nakatuong address mula sa provider.
$EXTERNALIPROUTE — default na ruta sa network 0.0.0.0/0
$BWorknets — Network ng trabaho, sa aming halimbawa ito ay magiging 168
$CWorknets — Network ng trabaho, sa aming halimbawa ito ay magiging 0
$BVoipNets — ang VOIP network sa aming halimbawa ay 22
$CVoipNets — VOIP network sa aming halimbawa dito 4
$CClientss — Network para sa mga kliyente – Internet access lamang, sa aming kaso ito ay 0
$BVPNWORKs — VPN network para sa malalaking sangay, sa aming halimbawa 20
$CVPNWORKs — VPN network para sa malalaking sangay, sa aming halimbawa 255
$BVPNCLIENTS — VPN network para sa maliliit na sangay, ibig sabihin 19
$CVPNCLIENTS — VPN network para sa maliliit na sangay, ibig sabihin ay 255
$NAMEROUTER — pangalan ng router
$ServerCertificate - ang pangalan ng certificate na una mong ini-import
$infile — Tukuyin ang path patungo sa file kung saan babasahin natin ang config, halimbawa D:config.txt (mas maganda ang English path na walang quotes at spaces)
$outfile — tukuyin ang path kung saan ise-save, halimbawa D:MT-test.txt
Sinadya kong palitan ang mga address sa mga halimbawa para sa mga malinaw na dahilan.
Na-miss ko ang punto tungkol sa pag-detect ng mga pag-atake at maanomalyang pag-uugali—na nararapat sa isang hiwalay na artikulo. Gayunpaman, nararapat na tandaan na ang kategoryang ito ay maaaring gumamit ng data ng pagsubaybay mula sa Zabbix at naprosesong curl data mula sa elasticsearch.
Anong mga punto ang dapat mong pagtuunan ng pansin:
- Plano ng network. Pinakamainam na gawin ito kaagad sa isang nababasang format. Ang Excel ay sapat. Sa kasamaang palad, madalas kong nakikita ang mga network na nilikha batay sa prinsipyo ng "Isang bagong sangay ang binuksan, narito ang /24." Walang nakakaalam kung ilang device ang inaasahan sa isang partikular na lokasyon at kung may anumang paglago sa hinaharap. Halimbawa, kung magbubukas ang isang maliit na tindahan, malinaw na sa simula na hindi ito magkakaroon ng higit sa 10 device. Bakit maglaan ng /24? Para sa mas malalaking sangay, ito ay kabaligtaran: inilalaan nila ang /24, ngunit nauuwi sa 500 na device. Maaari ka lang magdagdag ng network, ngunit gusto mong pag-isipan ang lahat mula sa simula.
- Mga panuntunan sa pag-filter. Kung ang proyekto ay nagsasangkot ng network separation at maximum segmentation, ang pinakamahuhusay na kagawian ay nagbabago sa paglipas ng panahon. Dati, pinaghiwalay ang mga PC network at printer network, ngunit ngayon ay ganap na katanggap-tanggap na panatilihing hiwalay ang mga network na ito. Mahalagang gumamit ng common sense at iwasang gumawa ng maraming subnet kung saan hindi kailangan ang mga ito at iwasang pagsamahin ang lahat ng device sa iisang network.
- "Golden" na mga setting sa lahat ng router. Iyon ay, kung nagpasya ka sa isang plano. Ito ay nagkakahalaga ng pagpaplano nang maaga at subukang tiyakin na ang lahat ng mga setting ay magkapareho—magkaiba lang ang mga listahan ng address at IP address. Kung may mga problema, magiging mas mabilis ang pag-troubleshoot.
- Ang mga aspeto ng organisasyon ay hindi gaanong mahalaga kaysa sa mga teknikal. Ang mga tamad na empleyado ay madalas na nagpapatupad ng mga rekomendasyong ito nang manu-mano, nang hindi gumagamit ng mga handa na pagsasaayos at script, na sa huli ay humahantong sa mga problema nang wala saan.
Tungkol sa dinamikong pagruruta, ginamit ang OSPF na may zonal partitioning. Ngunit ito ay isang testbed; mas kawili-wili ang pag-configure ng mga ganitong bagay sa produksyon.
Sana walang magalit na hindi ko na-post ang mga configuration ng router. Sa tingin ko ang mga link ay sapat, at pagkatapos ang lahat ay nakasalalay sa mga kinakailangan. At siyempre, kailangan ang pagsubok—kailangan ng mas maraming pagsubok.
Hangad ko ang tagumpay ng lahat sa pagsasakatuparan ng kanilang mga proyekto sa bagong taon. Maaaring mabigyan ka ng access!!!
Pinagmulan: www.habr.com
