
大家好。本文適用於擁有多台 Mikrotik 裝置並且希望實現最大程度統一以便不必單獨連接每台裝置的使用者。在本文中,我將描述一個不幸由於人為因素而未能達到戰鬥條件的項目。簡而言之:超過 200 台路由器、快速設定和員工培訓、按區域統一、網路和特定主機的過濾、輕鬆為所有設備添加規則的能力、日誌和存取控制。
以下所描述的並不是一個現成的案例,但我希望它能在您規劃人脈和減少錯誤時有所幫助。也許有些觀點和解決方案對您來說似乎不太正確 - 如果是這樣,請在評論中寫下來。在這種情況下,批評將成為一種有益於共同利益的經驗。因此,讀者,請看一下評論,也許作者犯了一個嚴重的錯誤——社區會提供幫助。
路由器數量在200-300個,分散在不同的城市,網路連線品質各有不同。有必要使一切變得美好,並向當地管理員清楚地解釋一切將如何運作。
那麼,任何專案從哪裡開始呢?當然, 傳統知識.
- 根據客戶要求組織各分公司的網路規劃,進行網路分段(依設備數量,分公司的網路分為3個到20個)。
- 在各分公司設置設備。檢查不同操作條件下提供者的實際頻寬速度。
- 組織設備保護、白名單管理、自動偵測攻擊並在一定時間內自動列入黑名單、盡量減少使用各種用於攔截控制存取和拒絕服務的技術手段。
- 根據客戶要求組織具有網路過濾的安全 VPN 連線。每個分支到中心至少有 3 個 vpn 連接。
- 根據1、2點,選擇建立容錯VPN的最佳方式。表演者可以有正確的理由選擇動態路由技術。
- 根據客戶使用的協定、連接埠、主機和其他特定服務來組織流量優先順序。 (VOIP、提供重要服務的主機)
- 組織對路由器事件的監控和記錄,以便技術支援人員做出回應。
據我們了解,在許多情況下,技術規格都是基於要求的。我在聽取了主要問題後自己制定了這些要求。我考慮到其他人可能會承擔起實施這些要點的責任。
將使用哪些工具來滿足這些要求:
- ELK 堆疊(一段時間後,很明顯將使用 fluentd 代替 logstash)。
- 安西波。為了方便管理和存取共享,我們將使用 AWX。
- GITLAB。這個沒必要解釋。如果我們沒有配置版本控制,我們會怎麼樣?
- PowerShell。將會有一個簡單的腳本用於初始生成配置。
- Doku wiki,用於編寫文件和指南。在這種情況下,我們使用 habr.com。
- 監控將透過 zabbix 進行。那裡還會繪製一個連結圖,讓大家能理解。
EFK 設定點
關於第一點,我只描述建構指數的想法。有許多
關於設定和接收運行 mikrotik 的設備日誌的優秀文章。
我將詳細論述以下幾點:
1.根據方案,值得考慮從不同地方、不同連接埠接收日誌。為此,我們將使用日誌聚合器。我們還希望為所有路由器製作具有分離存取能力的通用圖表。然後我們建構如下指標:
這是 fluentd 的配置 鍵入 elasticsearch
logstash_format true
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
刷新間隔 10 秒
主機 :9200
9200口
這樣,我們就可以根據計劃組合路由器和段 - mikrotiklogs.west,mikrotiklogs.south,mikrotiklogs.east。為什麼要弄這麼複雜?我們了解到我們將擁有 200 台或更多的設備。不可能追蹤所有的事情。從 elasticsearch 6.8 版本開始,我們可以存取安全性設定(無需購買許可證),因此,我們可以在技術支援人員或本機系統管理員之間指派檢視權限。
表格、圖表——這裡您只需同意——要么使用相同的,要么每個人都以對他們來說最方便的方式來做。
2.關於日誌記錄。如果我們在防火牆規則中啟用日誌記錄,那麼我們會使名稱不帶空格。很明顯,透過在 fluentd 中使用簡單的配置,我們可以過濾資料並製作方便的面板。下圖是我家的路由器。

3.按佔用空間及日誌。平均而言,每小時有 1000 條訊息,日誌每天佔用 2-3 MB,你必須承認,這並不多。 Elasticsearch 版本 7.5。
ANSIBLE.AWX
幸運的是,我們有一個現成的 Routeros 模組
我指定了 AWX,但下面的命令僅與純形式的 ansible 有關 - 我認為對於使用 ansible 的人來說,透過 gui 使用 awx 不會有問題。
我坦白承認,在此之前我看過其他使用 ssh 的指南,每個人都遇到了不同的回應時間問題和其他一系列問題。我再說一遍,它沒有打起來,把這些資訊當作一個不超過 20 台路由器的實驗。
我們需要使用憑證或帳戶。由你決定,我支持證書。關於權利的一個微妙的觀點。我授予了寫入權限——即使“重置配置”也不起作用。
產生、複製和匯入憑證應該沒有問題:
指令簡要列表在您的電腦上
ssh-keygen -t RSA,回答問題,儲存金鑰。
複製到 mikrotik:
使用者 ssh-keys 導入公鑰檔案=id_mtx.pub 使用者=ansible
首先,您需要建立帳戶並為其指派權限。
使用證書檢查連接
ssh -p 49475 -i /keys/mtx ansible@192.168.0.120
我們寫入 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
好吧,這是一個劇本的例子: — 名稱:add_work_sites
主機:testmt
序列號:1
連線:network_cli
遠端使用者:mikrotik.west
收集事實:是的
任務:
— 名稱:新增 Work_sites
路由命令:
命令:
— /ip 防火牆位址清單新增位址=gov.ru 清單=work_sites 評論=Ticket665436_Ochen_nado
— /ip 防火牆位址清單新增位址=habr.com 清單=work_sites 註解=for_habr
從上面的配置可以看出,創建自己的劇本並不困難。掌握好cli mikrotik就夠了。讓我們想像一下需要刪除所有路由器上包含某些資料的位址清單的情況,然後:
尋找並刪除/ip 防火牆位址清單刪除 [find where list="gov.ru"]
我故意沒有在這裡插入整個防火牆列表,因為...每個項目都是單獨的。但有一件事我可以肯定地說,只使用地址清單。
關於GITLAB一切都清楚了。我不想再詳細討論這一點。單獨的任務、範本和處理程序中的一切都很美好。
PowerShell的
這裡會有 3 個檔案。為什麼要使用 powershell?您可以選擇任何工具來產生配置,只要對您來說更方便即可。在這種情況下,每個人的電腦上都有 Windows,那麼現在 powershell 更方便,為什麼還要在 bash 中執行此操作呢?只要對您來說更方便即可。
腳本本身(簡單明了):[cmdletBinding()]
參數(
[Parameter(Mandatory=$true)]
[字串]$EXTERNALIPADDRESS,
[Parameter(Mandatory=$true)]
[字串]$EXTERNALIPROUTE,
[Parameter(Mandatory=$true)]
[字串]$BWorknets,
[Parameter(Mandatory=$true)]
[字串]$CWorknets,
[Parameter(Mandatory=$true)]
[字串]$BVoipNets,
[Parameter(Mandatory=$true)]
[字串]$CVoipNets,
[Parameter(Mandatory=$true)]
[字串]$CClientss,
[Parameter(Mandatory=$true)]
[字串]$BVPNWORKS,
[Parameter(Mandatory=$true)]
[字串]$CVPNWORKS,
[Parameter(Mandatory=$true)]
[字串]$BVPNCLIENTSs,
[Parameter(Mandatory=$true)]
[字串]$cVPNCLIENTSs,
[Parameter(Mandatory=$true)]
[string]$NAMEROUTER,
[Parameter(Mandatory=$true)]
[string]$ServerCertificates,
[Parameter(Mandatory=$true)]
[string]$infile,
[Parameter(Mandatory=$true)]
[字串]$輸出文件
)
取得內容$infile | Foreach 物件 {$_.Replace("EXTERNIP", $EXTERNALIPADDRESS)} |
Foreach 物件 {$_.Replace("EXTROUTE", $EXTERNALIPROUTE)} |
Foreach 物件 {$_.Replace("BWorknet", $BWorknets)} |
Foreach 物件 {$_.Replace("CWorknet", $CWorknets)} |
Foreach 物件 {$_.Replace("BVoipNet", $BVoipNets)} |
Foreach 物件 {$_.Replace("CVoipNet", $CVoipNets)} |
Foreach 物件 {$_.Replace("CClients", $CClientss)} |
Foreach 物件 {$_.Replace("BVPNWORK", $BVPNWORKs)} |
Foreach 物件 {$_.Replace("CVPNWORK", $CVPNWORKs)} |
Foreach 物件 {$_.Replace("BVPNCLIENTS", $BVPNCLIENTSs)} |
Foreach 物件 {$_.Replace("CVPNCLIENTS", $cVPNCLIENTSs)} |
Foreach 物件 {$_.Replace("MYNAMERROUTER", $NAMEROUTER)} |
Foreach 物件 {$_.Replace("ServerCertificate", $ServerCertificates)} |設定內容$outfile
請原諒我,我無法發布所有規則,因為......這會不太美觀。您可以按照最佳實務自行建立規則。
例如,以下是我關注的連結列表::保護你的路由器
:IP/防火牆/過濾器
:OSPF範例
:Winbox
:升級_RouterOS
:IP/Fasttrack — 這裡您需要知道,當啟用快速通道時,優先權和流量整形規則將不起作用 — 對於較弱的設備很有用。
變數的常規符號:以下列網絡為例:
192.168.0.0/24 工作網絡
172.22.4.0/24 VOIP 網路
10.0.0.0/24 網絡,適用於無法存取本機網路的用戶端
192.168.255.0/24 大型分行的 VPN 網路
172.19.255.0/24 小型 VPN 網路
網路位址由4個十進制數字組成,分別為ABCD,替換的原理相同,如果啟動時要求輸入B,則表示對於網路192.168.0.0/24,需要輸入數字0,對於C = 0。
$EXTERNALIPADDRESS — 來自提供者的專用位址。
$EXTERNALIPROUTE — 到網路 0.0.0.0/0 的預設路由
$BWorknets — 工作網,在我們的例子中為 168
$CWorknets — 工作網絡,在我們的例子中它將是 0
$BVoipNets — 此處範例中的 VOIP 網路 22
$CVoipNets — 此處範例中的 VOIP 網路 4
$CClientss — 用戶端網路 – 僅存取互聯網,在我們的例子中為 0
$BVPNWORKS — 大型分支機構的 VPN 網絡,在我們的範例中為 20
$CVPNWORKS — 大型分支機構的 VPN 網絡,在我們的範例中為 255
$BVPNCLIENTS — 小型分支機構的 VPN 網絡,因此 19
$CVPNCLIENTS — 用於小型分支機構的 VPN 網絡,因此為 255
$NAMEROUTER — 路由器名稱
$ServerCertificate - 您先前匯入的憑證的名稱
$infile — 指定我們將從中讀取配置的檔案路徑,例如 D:\config.txt(最好是沒有引號和空格的英文路徑)
$outfile — 指定儲存路徑,例如 D:\MT-test.txt
出於顯而易見的原因,我故意更改了範例中的地址。
我錯過了檢測攻擊和異常行為的要點——這值得一篇單獨的文章。但值得注意的是,在這個類別中您可以使用來自Zabbix的監控資料值+來自elasticsearch的經過處理的curl資料。
您應該關注哪些方面:
- 網路規劃。最好立即以可讀的形式寫出來。 Excel 就足夠了。不幸的是,我經常看到網路是根據「出現了一個新分支,這裡為您提供 /24」的原則創建的。沒有人知道該位置預計會有多少台設備以及是否會進一步成長。例如開了一家小店,一開始就明確設備不會超過10台,為什麼要分配/24?相反,對於大型分支機構,分配了 /24,並且有 500 台設備 - 您可以簡單地添加一個網絡,但您需要一次考慮所有事情。
- 過濾規則。如果項目假設網路將會分離並最大程度地分段。最佳實踐隨著時間而改變。以前PC網路和印表機網路是分開的,但現在不分開這兩個網路是很正常的。值得使用常識,不要在不需要的地方創建多個子網,也不要將所有設備合併到一個網路中。
- 所有路由器上的“黃金”設定。那些。如果你已經決定了計劃。值得立即考慮所有事情並嘗試確保所有設定都相同 - 只有位址清單和 IP 位址不同。一旦出現問題,調試時間就會減少。
- 組織方面的重要性不亞於技術方面。懶惰的員工經常會「手動」遵循建議,而不使用現成的配置和腳本,最終導致問題莫名其妙地出現。
透過動態路由。使用了具有區域劃分的 OSPF。但這是一個試驗台;在戰鬥條件下設置這些東西會更有趣。
我希望沒有人因為我沒有發布路由器配置而感到不高興。我認為鏈接就足夠了,然後一切都取決於要求。當然還需要進行測試,更多的測試。
祝福大家在新的一年都能實現自己的目標。祝您訪問順利! ! !
來源: www.habr.com
