# Mikrotik

# Защита

# Фильтрация по странам

Список стран:

> [http://www.iwik.org/ipcountry/](http://www.iwik.org/ipcountry/)

Поменять CN на необходимую страну, либо добавить дополнительные строки с нужными странами:

```JSON
/system scheduler
add disabled=no interval=1d name=CN on-event=backup policy=\
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
    start-date=jan/10/2020 start-time=00:00:01
/system script
add dont-require-permissions=no name=CN owner=admin policy=\
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\
    \n/tool fetch url=http://www.iwik.org/ipcountry/mikrotik/CN;\r\
    \n/import file-name=CN;\r\
    \n/file remove CN;\r\
    \n"
/ip firewall raw
    add chain=prerouting action=drop in-interface-list=WAN log=no log-prefix="" src-address-list=CN
```

# RDP сервер за NAT

Если сервер на другом порту, сменить 3389 на нужный

```Powershell
/ip firewall filter add action=reject chain=forward reject-with=icmp-network-unreachable src-address-list="Blocked bruteforcers"
/ip firewall filter add action=add-src-to-address-list address-list="Blocked bruteforcers" address-list-timeout=60m chain=forward connection-state=new in-interface=EXT dst-port=3389 log=yes log-prefix="RDP BRUTEFORCE - " protocol=tcp src-address-list=rdp_bruteforce3
/ip firewall filter add action=add-src-to-address-list address-list=rdp_bruteforce3 address-list-timeout=15m chain=forward connection-state=new in-interface=EXT dst-port=3389 protocol=tcp src-address-list=rdp_bruteforce2
/ip firewall filter add action=add-src-to-address-list address-list=rdp_bruteforce2 address-list-timeout=15m chain=forward connection-state=new in-interface=EXT dst-port=3389 protocol=tcp src-address-list=rdp_bruteforce1
/ip firewall filter add action=add-src-to-address-list address-list=rdp_bruteforce1 address-list-timeout=15m chain=forward connection-state=new in-interface=EXT dst-port=3389 protocol=tcp
```

# Общее

# Балансировка серверов

123.123.123.123 - внешний адрес

80 - порт сервиса для балансировки

192.168.0.1 и 192.168.0.2 - внутренние сервера

```Powershell
add action=dst-nat chain=dstnat dst-address=123.123.123.123 dst-port=80 per-connection-classifier=both-addresses-and-ports:2/0 protocol=tcp to-addresses=192.168.0.1
add action=dst-nat chain=dstnat dst-address=123.123.123.123 dst-port=80 per-connection-classifier=both-addresses-and-ports:2/1 protocol=tcp to-addresses=192.168.0.2
```

# Блокировка обновлений Microsoft

Вариант 1

```Powershell
/ip firewall raw
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=windowsupdate.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=*.windowsupdate.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=download.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=test.stats.update.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=ntservicepack.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=stats.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=wustat.windows.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=windowsupdate.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=download.windowsupdate.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=*.download.windowsupdate.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=update.microsoft.com
add action=drop chain=prerouting comment="WSUS" protocol=tcp tls-host=*.update.microsoft.com

/system scheduler
add name="WSUS_on" on-event="/ip firewall raw disable [find comment=\"WSUS\"]" start-date=Aug/12/2021 start-time=00:01:00 interval=7d comment="" disabled=no
add name="WSUS_off" on-event="/ip firewall raw enable [find comment=\"WSUS\"]" start-date=Aug/12/2021 start-time=00:08:00 interval=7d comment="" disabled=no
```

Вариант 2

```powershell
/ip firewall raw
add action=drop chain=prerouting comment="WSUS" content=windowsupdate.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=.windowsupdate.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=download.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=test.stats.update.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=ntservicepack.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=stats.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=wustat.windows.com
add action=drop chain=prerouting comment="WSUS" content=windowsupdate.com
add action=drop chain=prerouting comment="WSUS" content=download.windowsupdate.com
add action=drop chain=prerouting comment="WSUS" content=.download.windowsupdate.com
add action=drop chain=prerouting comment="WSUS" content=update.microsoft.com
add action=drop chain=prerouting comment="WSUS" content=.update.microsoft.com

/system scheduler
add name="WSUS_on" on-event="/ip firewall raw disable [find comment=\"WSUS\"]" start-date=Aug/12/2021 start-time=00:01:00 interval=7d comment="" disabled=no
add name="WSUS_off" on-event="/ip firewall raw enable [find comment=\"WSUS\"]" start-date=Aug/12/2021 start-time=00:08:00 interval=7d comment="" disabled=no
```

# Включение FastTrack

```haskell
/ip firewall filter add chain=forward action=fasttrack-connection connection-state=established,related
/ip firewall filter add chain=forward action=accept connection-state=established,related
```

# Использование DNS сервера для домена

Сменить &lt;123.123.123.123&gt; и &lt;.\*mynetname\\\\.net&gt; на нужные

```Powershell
/ip dns static add forward-to=<123.123.123.123> regexp="<.*mynetname\\.net>" ttl=10m type=FWD
```

# Исправление проблем с RDP

При использовании RDP соединений внутри VPN или туннелей иногда возникают проблемы с отвалом сессий. Причина в том, что RDP после подключения начинает открывать UDP сессии, помимо уже установленной TCP.

Решается блокировкой RDP трафика по UDP:

```shell
/ip firewall raw add chain=prerouting action=drop dst-port=3389 protocol=udp
```

# Ставим CHR на VDS

### Ubuntu

- Разворачиваем на хостинге Linux дистрибутив
- Логинимся на сервер и получаем права суперпользователя:

```bash
sudo -i
```

- Обновляем пакетную базу и устанавливаем необходимые пакеты:

```bash
apt update && apt -y install unzip wget
```

- Скачиваем raw образ системы (актуальные ссылки смотрим на сайте в разделе [загрузок](https://mikrotik.com/download)):

```bash
wget https://download.mikrotik.com/routeros/6.47.4/chr-6.47.4.img.zip
```

- Распаковываем образ:

```bash
unzip chr-6.47.4.img.zip
```

- Включаем сочетания SysRq:

```bash
echo "1" > /proc/sys/kernel/sysrq
```

- Переподключаем все файловые системы в режиме чтения:

```bash
echo u > /proc/sysrq-trigger
```

- Находим название системного диска:

```bash
lsblk
```

- Записываем на него образ:

```bash
dd if=chr-6.47.4.img of=/dev/vda bs=4M oflag=sync
```

- Перезагружаем виртуальную машину:

```bash
echo "b" > /proc/sysrq-trigger
```

- После перезапуска, вместо линукс системы, будет запущен Mikrotik CHR, развернутый на весь объем жесткого диска

### CentOS

- Разворачиваем на хостинге Linux дистрибутив
- Логинимся на сервер и получаем права суперпользователя:

```bash
sudo -i
```

- Обновляем пакетную базу и устанавливаем необходимые пакеты:

```bash
yum install wget unzip
```

- Монтируем tmpfs в /tmp:

```bash
mount -t tmpfs tmpfs /tmp
```

- Переходим в директорию tmp и скачиваем raw образ системы (актуальные ссылки смотрим на сайте в разделе [загрузок](https://mikrotik.com/download)):

```bash
cd /tmp && wget https://download.mikrotik.com/routeros/6.47.4/chr-6.47.4.img.zip
```

- Распаковываем образ:

```bash
unzip chr-6.47.4.img.zip
```

- Включаем сочетания SysRq:

```bash
echo "1" > /proc/sys/kernel/sysrq
```

- Находим название системного диска:

```bash
lsblk
```

- Записываем на него образ:

```bash
dd if=chr-6.47.4.img of=/dev/vda bs=4M oflag=sync
```

- Перезагружаем виртуальную машину:

```bash
echo "b" > /proc/sysrq-trigger
```

- После перезапуска, вместо линукс системы, будет запущен Mikrotik CHR, развернутый на весь объем жесткого диска

# Транзит одинаковых сетей

-&gt; Interface

Добавляем новый туннель до точки. В поле name указать тип туннеля, подключаемую компанию и удаленную точку (например ipip-kolobok-gw). Keepalive убрать.

-&gt; IP -&gt; Addresses

Добавляем новый адрес для туннеля. Адрес должен быть из свободного пула подсети 100.64.0.0/10 с маской 24 (например 100.80.23.1/24).

-&gt; IP -&gt; Firewall -&gt; Mangle

Добавляем правило prerouting и dst. address выставляем адрес фейковой сети из свободного пула 10.0.0.0/8 (например 10.51.0.0/24).

В action выставляем mark routing с new routing mark из названия туннеля без указания его типа (например kolobok-gw).

-&gt; IP -&gt; Firewall -&gt; NAT

Добавляем правило srcnat с src. address реальной сети удаленной стороны (например 192.168.0.0/24), out. interface ставим название туннеля (например ipip-kolobok-gw), в action ставим netmap на фэйковую сеть (например 10.51.0.0/24).

Добавляем правило dstnat с dst. address фэйковой сети (например 10.51.0.0/24), в action ставим netmap на реальную сеть удаленной стороны (например 192.168.0.0/24).

-&gt; IP -&gt; Routes

Добавляем правило dst. address фэйковой сети (например 10.51.0.0/24), в gateway название туннеля (например ipip-kolobok-gw) и distance 20.

Добавляем правило dst. address реальной сети удаленной стороны (например 192.168.0.0/24), в gateway название туннеля (например ipip-kolobok-gw), distance 30 и routing mark из названия туннеля без указания его типа (например kolobok-gw).

# Backup

# Вариант 1

Поменять &lt;SERVER&gt;, &lt;USER&gt; и &lt;PASSWORD&gt;на свои значения FTP сервера

```Powershell
/log info "backup starting";
:local CurrentTime [/system clock get time];
:local CurrentDate [/system clock get date];
:local Hour [:tostr [:pick $CurrentTime 0 2]];
:local Min [:tostr [:pick $CurrentTime 3 5]];
:local Day [:tostr [:pick $CurrentDate 4 6]];
:local Month [:tostr [:pick $CurrentDate 0 3]];
:local Year [:tostr [:pick $CurrentDate 7 [:len $CurrentDate]]];
:global name=backupfile value=([/system identity get name] ."__$Day_$Month_$Year__$Hour_$Min.backup")
:global name=scriptfile value=([/system identity get name] ."__$Day_$Month_$Year__$Hour_$Min.rsc")
/system backup save name=$backupfile;
/export verbose file=$scriptfile;
:delay 10s
/tool fetch address=<SERVER> src-path=$backupfile user=<USER> mode=ftp password=<PASSWORD> dst-path="backup/$backupfile" upload=yes;
/tool fetch address=<SERVER> src-path=$scriptfile user=<USER> mode=ftp password=<PASSWORD> dst-path="backup/$scriptfile" upload=yes;
:delay 20s
/file remove $backupfile;
/file remove $scriptfile;
/log info "backup finished";
```

# Вариант 2

Поменять &lt;SERVER&gt;, &lt;USER&gt; и &lt;PASSWORD&gt;на свои значения FTP сервера

```Powershell
/system scheduler
add disabled=no interval=5d name=backup on-event=backup policy=\
  ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
  start-date=jan/10/2020 start-time=00:00:01
/system script
add dont-require-permissions=no name=backup owner=su policy=\
  ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\
  log info \"backup starting\";\r\
  \n:local CurrentTime [/system clock get time];\r\
  \n:local CurrentDate [/system clock get date];\r\
  \n:local Hour [:tostr [:pick \$CurrentTime 0 2]];\r\
  \n:local Min [:tostr [:pick \$CurrentTime 3 5]];\r\
  \n:local Day [:tostr [:pick \$CurrentDate 4 6]];\r\
  \n:local Month [:tostr [:pick \$CurrentDate 0 3]];\r\
  \n:local Year [:tostr [:pick \$CurrentDate 7 [:len \$CurrentDate]]];\r\
  \n:global name=backupfile value=([/system identity get name] .\"__\$Day_\$\
  Month_\$Year__\$Hour_\$Min.backup\")\r\
  \n:global name=scriptfile value=([/system identity get name] .\"__\$Day_\$\
  Month_\$Year__\$Hour_\$Min.rsc\")\r\
  \n/system backup save name=\$backupfile;\r\
  \n/export verbose file=\$scriptfile;\r\
  \n:delay 10s\r\
  \n/tool fetch address=<SERVER> src-path=\$backupfile user=<USER>\
  r mode=ftp password=<PASSWORD> dst-path=\"backup/\$backupfil\
  e\" upload=yes;\r\
  \n/tool fetch address=<SERVER> src-path=\$scriptfile user=<USER>\
  r mode=ftp password=<PASSWORD> dst-path=\"backup/\$scriptfil\
  e\" upload=yes;\r\
  \n:delay 20s\r\
  \n/file remove \$backupfile;\r\
  \n/file remove \$scriptfile;\r\
  \n/log info \"backup finished\";\r\
  \n"
```