Киберзащита за малкия бизнес (част 7): свързване на офиси с WireGuard (site-to-site VPN)
Седма част от поредицата ни за киберзащита на малкия и среден бизнес. Досега защитихме един обект — рутер, сървър, частен облак, SIEM, мониторинг и филтриращ DNS. Но какво става, когато фирмата има повече от един офис? Как два (или десет) офиса да работят като една мрежа, сигурно, без да излагаме нищо към интернет?
Свързваме офисите с криптиран WireGuard тунел — и те се виждат, все едно са една локална мрежа.
В тази част правим site-to-site VPN между два MikroTik рутера с WireGuard: всеки офис си рутира мрежата към другия през криптиран тунел. Резултат: компютрите в офис А виждат тези в офис Б по реалните им адреси, трафикът е шифрован, а интернет не вижда нито една от вътрешните мрежи. И най-хубавото — офисите може да са много, WireGuard се мащабира без проблем. Адресите в примерите са генерализирани.
Защо WireGuard
WireGuard е модерен VPN протокол — вграден в RouterOS (7.x), в ядрото на Linux, бърз, с малко код (по-малка повърхност за атака) и проста конфигурация с двойка ключове. В сравнение със старите IPsec/OpenVPN е по-лесен за настройка, по-бърз и по-надежден. За свързване на офиси е практически идеален.
Най-важното решение: адресацията
Преди каквото и да било — всеки офис трябва да е на различна подмрежа. Това е правило №1 и често пренебрегвано (ние самите се препънахме в него: два офиса бяха случайно на една и съща подмрежа). Не можеш да рутираш между две мрежи с еднакъв обхват — устройство, което търси адрес от „своята“ подмрежа, никога няма да го прати през тунела.
Затова задаваме чиста схема — по една подмрежа на офис:
| Обект | Публичен IP | Локална мрежа |
|---|---|---|
| Офис 1 | 203.0.113.1 | 192.168.1.0/24 |
| Офис 2 | 203.0.113.2 | 192.168.2.0/24 |
| Тунел | — | 10.10.10.0/30 (.1 и .2) |
(За повече офиси: офис 3 = 192.168.3.0/24, офис 4 = 192.168.4.0/24 и т.н.)
Стъпка 1: WireGuard интерфейс и ключове
На всеки рутер създаваме WireGuard интерфейс. RouterOS сам генерира частния ключ; ние взимаме публичния (той се споделя с отсрещната страна — частният никога не напуска рутера).
# Офис 1 /interface/wireguard/add name=wg-office2 listen-port=51820 /interface/wireguard/print # → запиши public-key на Офис 1 # Офис 2 /interface/wireguard/add name=wg-office1 listen-port=51820 /interface/wireguard/print # → запиши public-key на Офис 2
Стъпка 2: адрес, peer и маршрут
На всеки рутер: даваме тунелен адрес, добавяме peer (отсрещния — с неговия публичен ключ, публичен адрес и кои мрежи са „позволени“ през него) и маршрут към отсрещната LAN.
Офис 1:
/ip/address/add address=10.10.10.1/30 interface=wg-office2
/interface/wireguard/peers/add interface=wg-office2 \
public-key="ПУБЛИЧЕН_КЛЮЧ_НА_ОФИС_2" \
endpoint-address=203.0.113.2 endpoint-port=51820 \
allowed-address=10.10.10.2/32,192.168.2.0/24 \
persistent-keepalive=25s
/ip/route/add dst-address=192.168.2.0/24 gateway=wg-office2
Офис 2 (огледално):
/ip/address/add address=10.10.10.2/30 interface=wg-office1
/interface/wireguard/peers/add interface=wg-office1 \
public-key="ПУБЛИЧЕН_КЛЮЧ_НА_ОФИС_1" \
endpoint-address=203.0.113.1 endpoint-port=51820 \
allowed-address=10.10.10.1/32,192.168.1.0/24 \
persistent-keepalive=25s
/ip/route/add dst-address=192.168.1.0/24 gateway=wg-office1
Тук е сърцето: allowed-address казва „тези мрежи се криптират и пращат към този peer“, а маршрутът насочва трафика за отсрещната LAN през тунела.
Стъпка 3: защитна стена
Три неща, по едно на всеки рутер:
1) Отваряме UDP 51820 само за публичния адрес на отсрещния офис (тунелът да се вдигне):
# на Офис 1
/ip firewall filter add chain=input action=accept protocol=udp \
dst-port=51820 src-address=203.0.113.2 comment="WireGuard Office2"
2) Разрешаваме трафика през тунела в forward веригата (ако рутерът има строга политика):
/ip firewall filter add chain=forward action=accept in-interface=wg-office2 /ip firewall filter add chain=forward action=accept out-interface=wg-office2
3) НЕ маскираме (NAT) тунелния трафик. Обикновено правилото за masquerade е само out-interface=ether1 (към интернет). Трафикът към другия офис излиза през WireGuard интерфейса, не през ether1 — затова не се NAT-ва и двата офиса виждат реалните IP адреси. Точно каквото искаме.
Стъпка 4: проверка
Проверяваме, че има handshake (тунелът е жив) и че двете локални мрежи се пингат:
/interface/wireguard/peers/print detail # → last-handshake, rx/tx /ping 192.168.2.1 src-address=192.168.1.1 # офис1 LAN → офис2 LAN
Ако отговаря — готово. Компютър в офис 1 вече достига сървър/принтер/споделена папка в офис 2 по реалния му адрес, и обратно. Всичко криптирано, нищо изложено към интернет.
А когато офисите са много?
Тук WireGuard блести — няма ограничение в броя офиси. Най-чистият модел е hub-and-spoke (звезда):
- Един централен офис (hub) има по един peer за всеки клон.
- Всеки клон (spoke) има само един peer — към центъра — и маршрут към всички останали мрежи през него.
- Централният рутер рутира трафика между клоновете.
Добавянето на нов офис е просто: нова подмрежа (192.168.N.0/24), нов WireGuard peer на hub-а, и готово — новият офис веднага е част от общата мрежа. Десет офиса, петдесет офиса — същата проста схема.
Заключение
С WireGuard превърнахме няколко отделни офиса в една сигурна, частна мрежа — криптирана от край до край, без скъп хардуер и без да излагаме каквото и да било към интернет. Колегите между обектите работят, все едно са в една сграда, а трафикът им е напълно защитен.
Това допълва картината на нашата серия: вече не само всеки обект е защитен отвътре, а и обектите помежду си са свързани сигурно. Многослойна киберзащита — рутер, сървър, облак, откриване, мониторинг, DNS филтър и вече сигурна връзка между офисите — изцяло на собствено оборудване и с отворени технологии.
Тази серия е част от усилията ни сериозната киберзащита да стане достъпна за българския малък и среден бизнес.