大家好。 本文適用於那些在公園裡擁有大量 Mikrotik 設備並且希望實現最大程度的統一以免分別連接到每個設備的人。 在這篇文章中,我將描述一個不幸的是由於人為因素而未能達到戰鬥條件的項目。 簡而言之:超過 200 個路由器、快速設置和員工培訓、按區域統一、過濾網絡和特定主機、輕鬆向所有設備添加規則、日誌記錄和訪問控制的能力。
下面描述的內容並不假裝是現成的案例,但我希望它對您規劃網絡和最大限度地減少錯誤時有用。 也許有些觀點和決定對您來說似乎不太正確 - 如果是這樣,請寫在評論中。 這種情況下的批評將是一個普通存錢罐中的經歷。 因此,讀者,看看評論,也許作者犯了一個嚴重的錯誤——社區會提供幫助。
路由器數量為200-300個,分散在不同城市,互聯網連接質量不同。 有必要讓一切變得美麗,並以一種易於理解的方式向當地管理員解釋一切將如何運作。
那麼每個項目從哪裡開始呢? 當然,與 傳統知識.
- 根據客戶要求組織所有分支機構的網絡規劃,網絡分段(分支機構3到20個網絡,具體取決於設備數量)。
- 在每個分支機構設置設備。 檢查提供商在不同工作條件下的真實帶寬。
- 組織設備保護、白名單控制、自動檢測攻擊並在一定時間內自動列入黑名單,最大限度地減少使用各種技術手段來攔截控制訪問和拒絕服務。
- 根據客戶要求組織安全 VPN 連接和網絡過濾。 從每個分支機構到中心至少有 3 個 VPN 連接。
- 基於第 1、2 點。選擇構建容錯 VPN 的最佳方法。 承包商可以在有正確理由的情況下選擇動態佈線技術。
- 按協議、端口、主機和客戶使用的其他特定服務組織流量優先級。 (VOIP、提供重要服務的主機)
- 組織監控和記錄路由器事件,以便技術支持人員做出響應。
據我們了解,在某些情況下,TOR 是根據要求編寫的。 我在聽取主要問題後,自己制定了這些要求。 他承認其他人可以負責實施這些要點。
將使用哪些工具來滿足這些要求:
- ELK 堆棧(一段時間後,了解到將使用 Fluentd 代替 Logstash)。
- 安西布爾。 為了便於管理和共享訪問,我們將使用 AWX。
- GITLAB。 這裡無需解釋。 我們的配置沒有版本控制。
- 電源外殼。 將有一個用於初始生成配置的簡單腳本。
- Doku wiki,用於編寫文檔和手冊。 在本例中,我們使用 habr.com。
- 監控將通過zabbix完成。 還會有一個連接圖,方便大家有個大概的了解。
EFK 設置點
關於第一點,我將僅描述索引構建的意識形態。 有許多
關於從運行 mikrotik 的設備設置和接收日誌的優秀文章。
我將詳細闡述以下幾點:
1.根據方案,值得考慮的是從不同地方、不同端口接收日誌。 為此,我們將使用日誌聚合器。 我們還希望為所有具有共享訪問能力的路由器製作通用圖形。 然後我們構建索引如下:
這是 fluidd 的一段配置 彈性搜索
Logstash_format true
索引名稱 mikrotiklogs.north
logstash_prefix mikrotiklogs.north
刷新間隔 10s
主機
9200口
因此,我們可以根據計劃組合路由器和分段 - mikrotiklogs.west、mikrotiklogs.south、mikrotiklogs.east。 為什麼讓事情變得如此困難? 我們知道我們將擁有 200 台或更多設備。 不要遵循一切。 從elasticsearch 6.8版本開始,我們可以使用安全設置(無需購買許可證),因此,我們可以在技術支持員工或本地系統管理員之間分配查看權限。
表格、圖表——這裡你只需要同意——要么使用相同的,要么每個人都這樣做,因為這對他來說很方便。
2. 通過日誌記錄。 如果我們在防火牆規則中啟用登錄,那麼我們的名稱中不包含空格。 可以看出,在fluidd中使用簡單的配置,我們就可以過濾數據並製作方便的面板。 下圖是我家的路由器。
3.根據佔用空間和日誌。 平均而言,每小時 1000 條消息,日誌每天佔用 2-3 MB,您會發現,這並不算多。 彈性搜索版本 7.5。
ANSIBLE.AWX
幸運的是,我們有一個現成的 routeros 模塊
我指出了關於 AWX 的問題,但下面的命令只是關於 ansible 最純粹的形式 - 我認為對於那些使用過 ansible 的人來說,通過 gui 使用 awx 不會有任何問題。
老實說,在此之前我查看了其他使用 ssh 的指南,每個人都有不同的響應時間問題和一堆其他問題。 我再說一遍,它沒有進入戰鬥,將此信息作為一個不超過 20 台路由器的實驗。
我們需要使用證書或帳戶。 這由你決定,我要證書。 關於權利的一些微妙觀點。 我授予寫入權限-至少“重置配置”不起作用。
生成、複製證書和導入應該沒有問題:
命令簡要列表在您的電腦上
ssh-keygen -t RSA,回答問題,保存密鑰。
複製到 mikrotik:
用戶 ssh-keys 導入 public-key-file=id_mtx.pub user=ansible
首先,您需要創建一個帳戶並為其分配權限。
檢查與證書的連接
ssh -p 49475 -i /keys/mtx [電子郵件保護]
寫入 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
收集事實:是的
任務:
名稱:添加工作站點
路由器命令:
命令:
- /ip 防火牆地址列表添加地址=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
- /ip 防火牆地址列表添加地址=habr.com 列表=work_sites 註釋=for_habr
從上面的配置可以看出,編譯自己的劇本是一件簡單的事情。 掌握 cli mikrotik 就足夠了。 想像一下這樣的情況,你需要刪除所有路由器上包含某些數據的地址列表,那麼:
查找並刪除/ip 防火牆地址列表刪除 [查找 list="gov.ru" 的位置]
我故意沒有在此處列出整個防火牆列表。 每個項目都是單獨的。 但我可以肯定地說一件事,只使用地址列表。
根據 GITLAB 的說法,一切都清楚了。 我不會詳述這一刻。 就單個任務、模板、處理程序而言,一切都很漂亮。
PowerShell的
將有 3 個文件。 為什麼要使用powershell? 任何更熟悉的人都可以選擇用於生成配置的工具。 既然如此,每個人的 PC 上都有 Windows,那麼當 powershell 更方便時為什麼要在 bash 上呢? 誰更舒服。
腳本本身(簡單易懂):[cmdletBinding()] 參數(
[參數(強制=$true)] [字符串]$EXTERNALIPADDRESS,
[參數(強制=$true)] [字符串]$EXTERNALIPROUTE,
[參數(強制=$true)] [字符串]$BWorknets,
[參數(強制=$true)] [字符串]$CWorknets,
[參數(強制=$true)] [字符串]$BVoipNets,
[參數(強制=$true)] [字符串]$CVoipNets,
[參數(強制=$true)] [字符串]$CClientss,
[參數(強制=$true)] [字符串]$BVPNWORKs,
[參數(強制=$true)] [字符串]$CVPNWORKs,
[參數(強制=$true)] [字符串]$BVPNCLIENTSs,
[參數(強制=$true)] [字符串]$cVPNCLIENTSs,
[參數(強制=$true)] [字符串]$NAMEROUTER,
[參數(強制=$true)] [字符串]$ServerCertificates,
[參數(強制=$true)] [字符串]$infile,
[參數(強制=$true)] [字符串]$outfile
)
獲取內容 $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", $ServerCertificates)} | 設置內容 $outfile
抱歉,我無法列出所有規則。 它不會很漂亮。 您可以在最佳實踐的指導下自己制定規則。
例如,以下是我所引導的鏈接列表:
變量約定:以下面的網絡為例:
192.168.0.0/24工作網絡
172.22.4.0/24 網絡電話
10.0.0.0/24 網絡,適用於無法訪問 LAN 的客戶端
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
$CVNCLIENTS - 小型分支機構的 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