diff --git a/routeros/README.md b/routeros/README.md index 2f0e5b5..cc33cb4 100644 --- a/routeros/README.md +++ b/routeros/README.md @@ -5,7 +5,8 @@ | Файл | Назначение | |---|---| | `autorun.rsc` | Шаблон первичной настройки роутера: адресация, отключение небезопасных сервисов (telnet, ftp, api и т.д.), NTP, часовой пояс. Замените `CHANGE_ME` на свои значения. | -| `initial-setup.rsc` | Расширенный шаблон настройки: bridge, interface-lists (WAN/LAN/StS/VPN), полный firewall (port knocking, anti-bruteforce, ICMP), NAT, DNS, харднинг сервисов, OSPF-фильтры, автообновление прошивки. | +| `initial-setup-ros7.rsc` | Расширенный шаблон настройки для **RouterOS 7**: bridge, interface-lists (WAN/LAN/StS/VPN), полный firewall (port knocking, anti-bruteforce, ICMP), NAT, DNS, харднинг сервисов, OSPF-фильтры, автообновление прошивки. | +| `initial-setup-ros6.rsc` | То же для **RouterOS 6** (6.41+): отличается синтаксисом NTP-клиента, отключением IPv6 через `/system package disable`, ROS6-фильтрами маршрутов и топиками логирования. | | `check-isp.rsc` | Проверка доступности двух провайдеров пингом и сброс соединений упавшего канала (для dual-WAN). | | `rdp-bruteforce.rsc` | Защита от перебора RDP (TCP/3389): ступенчатое (`rdp_stage1`…`rdp_stage5`) добавление источников в `black-list attackers` с баном на 4w2d и правилом `drop` в filter. Списки `RDP` (доверенные клиенты) и `management` заполняются вручную; `192.168.0.0/16` не банится. | | `cloudflare-ip-updater.rsc` | Обновление address-list `CF` актуальными IPv4-подсетями Cloudflare (по расписанию). | diff --git a/routeros/initial-setup-ros6.rsc b/routeros/initial-setup-ros6.rsc new file mode 100644 index 0000000..5df9041 --- /dev/null +++ b/routeros/initial-setup-ros6.rsc @@ -0,0 +1,197 @@ +# Скрипт первичной настройки RouterOS 6 +# На основе routeros/autorun.scr, расширен списками интерфейсов и правилами firewall. +# Для RouterOS 7 используйте initial-setup-ros7.rsc (отличается синтаксис NTP / +# IPv6 / фильтров маршрутов / топиков логирования). +# +# Использование: +# 1. Просмотрите и поправьте плейсхолдеры CHANGE_ME / <...> ниже. +# 2. Назначьте реальные интерфейсы спискам LAN / WAN / StS / VPN в +# секции "/interface list member". +# 3. Загрузите на роутер и выполните: /import file-name=initial-setup-ros6.rsc +# 4. Правила firewall "drop all other" намеренно используют action=passthrough: +# на этапе первичной настройки трафик НЕ отбрасывается, а только логируется, +# чтобы не потерять доступ к роутеру. После проверки логов и уверенности, +# что вы себя не заблокируете, смените эти правила (в цепочках input и +# forward) на action=drop. +# +# Примечания: +# StS = туннели site-to-site, VPN = удалённые VPN-клиенты. +# Последовательность port knocking: 1234 -> 2345 -> 3456, затем подключение к 12345. +# Требуется RouterOS 6.41+ (списки интерфейсов / in-interface-list). + +# Настройки, зависящие от провайдера (адреса, маршруты, dhcp-клиент, пароли +# пользователей) намеренно НЕ включены — настраивайте их отдельно для каждого +# аплинка / развёртывания. + +# --------------------------------------------------------------------------- +# Мост (bridge) +# --------------------------------------------------------------------------- +/interface bridge +add name=bridge comment="Local bridge" +# Порты намеренно не привязаны здесь — добавляйте их под каждое развёртывание, напр.: +# /interface bridge port +# add bridge=bridge interface=ether2 + +# --------------------------------------------------------------------------- +# Списки интерфейсов +# --------------------------------------------------------------------------- +/interface list +add name=WAN comment="Uplinks / Internet-facing interfaces" +add name=LAN comment="Local trusted networks" +add name=StS comment="Site-to-Site tunnels" +add name=VPN comment="Remote-access VPN clients" + +/interface list member +# Назначьте здесь свои реальные интерфейсы, примеры ниже: +# add list=WAN interface=ether1 +add list=LAN interface=bridge +# add list=StS interface= +# add list=VPN interface= + +# --------------------------------------------------------------------------- +# Firewall filter +# --------------------------------------------------------------------------- +/ip firewall filter +add action=accept chain=input comment="accept established, related connections" connection-state=established,related +add action=drop chain=input comment="drop invalid connections" connection-state=invalid log-prefix="DROP INPUT INVALID:" +add action=jump chain=input comment="jump for icmp input flow" jump-target=icmp protocol=icmp +add action=jump chain=input comment="detect intrusion" connection-state=new jump-target=detect-intrusion src-address-list=!management +add action=jump chain=input comment="port knocking" connection-state=new dst-port=1234,2345,3456 in-interface-list=WAN jump-target=pk log=yes protocol=tcp +add action=drop chain=input dst-port=12345 in-interface-list=WAN protocol=tcp src-address-list=!pk-1 +add action=drop chain=input dst-port=12345 in-interface-list=WAN protocol=tcp src-address-list=!pk-2 +add action=add-src-to-address-list address-list=management address-list-timeout=1d chain=input connection-state=new dst-port=12345 in-interface-list=WAN log=yes log-prefix=ACCESS! protocol=tcp src-address-list=pk-3 +add action=accept chain=input comment="accept management" connection-state=new dst-port=22,8291,8729 log=yes log-prefix=ACCESS! protocol=tcp src-address-list=management +add action=accept chain=input comment="accept LAN" in-interface-list=LAN +add action=accept chain=input comment="accept StS" in-interface-list=StS +add action=accept chain=input comment="accept VPN" in-interface-list=VPN +# VPN / туннельные протоколы (GRE / L2TP / IPsec): правила выключены (disabled=yes), +# включите нужные (disabled=no) при терминировании туннелей на роутере. +add action=accept chain=input comment="accept IPsec IKE (500,4500)" disabled=yes dst-port=500,4500 in-interface-list=WAN protocol=udp +add action=accept chain=input comment="accept IPsec ESP" disabled=yes in-interface-list=WAN protocol=ipsec-esp +add action=accept chain=input comment="accept IPsec AH" disabled=yes in-interface-list=WAN protocol=ipsec-ah +add action=accept chain=input comment="accept L2TP (1701)" disabled=yes dst-port=1701 in-interface-list=WAN protocol=udp +add action=accept chain=input comment="accept GRE" disabled=yes in-interface-list=WAN protocol=gre +add action=passthrough chain=input comment="drop all other (see usage note 4: passthrough)" log-prefix="IN DROP" +add action=accept chain=forward comment="accept established, related connections" connection-state=established,related +add action=drop chain=forward comment="drop invalid connections" connection-state=invalid log-prefix="INV FWD" +add action=accept chain=forward comment="accept DST-NAT" connection-nat-state=dstnat +add action=drop chain=forward comment="WAN -X" in-interface-list=WAN log-prefix=FWD +add action=jump chain=forward comment=ICMP jump-target=icmp protocol=icmp +add action=accept chain=forward comment="LAN -> WAN" in-interface-list=LAN out-interface-list=WAN +add action=accept chain=forward comment="LAN -> StS" in-interface-list=LAN out-interface-list=StS +add action=accept chain=forward comment="LAN -> VPN" in-interface-list=LAN out-interface-list=VPN +add action=accept chain=forward comment="StS -> LAN" in-interface-list=StS out-interface-list=LAN +add action=accept chain=forward comment="VPN -> LAN" in-interface-list=VPN out-interface-list=LAN +add action=passthrough chain=forward comment="drop all other (see usage note 4: passthrough)" log-prefix=FWD +add action=accept chain=icmp comment="echo request" icmp-options=8:0 protocol=icmp +add action=accept chain=icmp comment="echo reply" icmp-options=0:0 protocol=icmp +add action=accept chain=icmp comment="net unreachable" icmp-options=3:3 protocol=icmp +add action=accept chain=icmp comment="host unreachable fragmentation required" icmp-options=3:4 protocol=icmp +add action=accept chain=icmp comment="time exceed" icmp-options=11:0 protocol=icmp +add action=drop chain=icmp comment="drop all other types" +add action=add-src-to-address-list address-list=pk-1 address-list-timeout=1m chain=pk comment=port-knocking dst-port=1234 protocol=tcp +add action=add-src-to-address-list address-list=pk-2 address-list-timeout=1m chain=pk connection-state="" dst-port=2345 protocol=tcp +add action=add-src-to-address-list address-list=pk-3 address-list-timeout=1m chain=pk connection-state="" dst-port=3456 protocol=tcp +add action=return chain=detect-intrusion comment="detect intrusion" dst-limit=30,256,src-and-dst-addresses/1s +add action=add-src-to-address-list address-list="black-list attackers" address-list-timeout=1d chain=detect-intrusion +add action=drop chain=detect-intrusion src-address-list="black-list attackers" + +# --------------------------------------------------------------------------- +# Firewall NAT +# --------------------------------------------------------------------------- +/ip firewall nat +add action=masquerade chain=srcnat comment="LAN -> Internet" out-interface-list=WAN + +# --------------------------------------------------------------------------- +# DNS — резолвер для клиентов LAN / VPN / StS +# --------------------------------------------------------------------------- +/ip dns +set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8 +# DNS-запросы принимаются от LAN / VPN / StS правилами цепочки input выше +# и по умолчанию отбрасываются со стороны WAN. + +# --------------------------------------------------------------------------- +# Сервисы / усиление безопасности управления +# --------------------------------------------------------------------------- +/ip service +set telnet disabled=yes +set ftp disabled=yes +set www disabled=yes +set api disabled=yes +set api-ssl disabled=no +/ip neighbor discovery-settings +set discover-interface-list=LAN +# MAC-сервер ограничен списком LAN: MAC-telnet / MAC-winbox доступны только +# из локальной сети и недоступны со стороны WAN. +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool mac-server ping +set enabled=no +# Отключаем сервер bandwidth-test (по умолчанию открыт, частый вектор атаки). +/tool bandwidth-server +set enabled=no + +# --------------------------------------------------------------------------- +# Отключение неиспользуемых пакетов (только RouterOS 6) +# Отключает пакеты hotspot, ipv6 и mpls. Изменения применяются после +# перезагрузки роутера. Отключение пакета ipv6 — это способ полностью +# выключить IPv6 в RouterOS 6 (в ней нет настройки "/ipv6 settings +# set disable-ipv6" монолитного пакета). +# --------------------------------------------------------------------------- +/system package disable hotspot,ipv6,mpls + +# --------------------------------------------------------------------------- +# Время / NTP +# --------------------------------------------------------------------------- +/system clock +set time-zone-name=Asia/Yekaterinburg +# RouterOS 6: NTP-клиент использует server-dns-names / primary-ntp (без "servers"). +/system ntp client +set enabled=yes server-dns-names=pool.ntp.org + +# Работать как NTP-сервер для нижестоящих клиентов. +# ПРИМЕЧАНИЕ: в RouterOS 6 NTP-сервер входит в отдельный пакет "ntp" — +# этот блок работает только если пакет установлен. +/system ntp server +set enabled=yes + +# --------------------------------------------------------------------------- +# Логирование — подавить info-сообщения для DHCP и беспроводной сети +# --------------------------------------------------------------------------- +# В RouterOS 6 нет топика "wifi"; используйте "wireless". Если на устройстве +# вообще нет беспроводного пакета — уберите !wireless, оставив только info,!dhcp. +/system logging +set [find where topics="info"] topics=info,!dhcp,!wireless + +# --------------------------------------------------------------------------- +# Канал обновления пакетов RouterOS — использовать ветку long-term (стабильную) +# --------------------------------------------------------------------------- +/system package update +set channel=long-term + +# --------------------------------------------------------------------------- +# Авто-обновление прошивки RouterBOARD +# Обновляет прошивку RouterBOARD при старте, если доступна более новая, +# затем перезагружается для её применения. +# --------------------------------------------------------------------------- +/system scheduler +add name=routerboard_fwupgrade policy=reboot,read,write,sensitive start-time=startup \ + on-event="if ([/system routerboard get current-firmware] != [/system routerboard get upgrade-firmware]) do={\r\ + \n/system routerboard upgrade\r\ + \n:delay 15s\r\ + \n/system reboot\r\ + \n}" + +# --------------------------------------------------------------------------- +# Фильтры маршрутизации OSPF — принимать только локальные (RFC1918) префиксы вх/исх +# Синтаксис фильтров маршрутов RouterOS 6 (prefix / prefix-length / action). +# --------------------------------------------------------------------------- +/routing filter +add chain=ospf-in prefix=192.168.0.0/16 prefix-length=16-32 action=accept +add chain=ospf-in prefix=10.0.0.0/8 prefix-length=8-32 action=accept +add chain=ospf-in prefix=172.16.0.0/12 prefix-length=12-32 action=accept +add chain=ospf-out prefix=192.168.0.0/16 prefix-length=16-32 action=accept +add chain=ospf-out prefix=10.0.0.0/8 prefix-length=8-32 action=accept +add chain=ospf-out prefix=172.16.0.0/12 prefix-length=12-32 action=accept diff --git a/routeros/initial-setup.rsc b/routeros/initial-setup-ros7.rsc similarity index 58% rename from routeros/initial-setup.rsc rename to routeros/initial-setup-ros7.rsc index 1a7f964..1d16fa2 100644 --- a/routeros/initial-setup.rsc +++ b/routeros/initial-setup-ros7.rsc @@ -1,31 +1,38 @@ -# RouterOS initial setup script -# Based on routeros/autorun.scr, extended with interface lists and firewall rules. +# Скрипт первичной настройки RouterOS 7 +# На основе routeros/autorun.scr, расширен списками интерфейсов и правилами firewall. +# Для RouterOS 6 используйте initial-setup-ros6.rsc (отличается синтаксис NTP / +# IPv6 / фильтров маршрутов / топиков логирования). # -# Usage: -# 1. Review and adjust the placeholders marked CHANGE_ME / <...> below. -# 2. Assign real interfaces to the LAN / WAN / StS / VPN lists in the -# "/interface list member" section. -# 3. Upload to the router and run: /import file-name=initial-setup.rsc -# 4. -# Notes: -# StS = Site-to-Site tunnels, VPN = remote-access VPN clients. -# Port knocking sequence: 1234 -> 2345 -> 3456, then connect to 12345. +# Использование: +# 1. Просмотрите и поправьте плейсхолдеры CHANGE_ME / <...> ниже. +# 2. Назначьте реальные интерфейсы спискам LAN / WAN / StS / VPN в +# секции "/interface list member". +# 3. Загрузите на роутер и выполните: /import file-name=initial-setup-ros7.rsc +# 4. Правила firewall "drop all other" намеренно используют action=passthrough: +# на этапе первичной настройки трафик НЕ отбрасывается, а только логируется, +# чтобы не потерять доступ к роутеру. После проверки логов и уверенности, +# что вы себя не заблокируете, смените эти правила (в цепочках input и +# forward) на action=drop. +# +# Примечания: +# StS = туннели site-to-site, VPN = удалённые VPN-клиенты. +# Последовательность port knocking: 1234 -> 2345 -> 3456, затем подключение к 12345. -# Per-provider settings (addresses, routes, dhcp-client, user passwords) -# are intentionally NOT included here — configure them separately for each -# uplink / deployment. +# Настройки, зависящие от провайдера (адреса, маршруты, dhcp-клиент, пароли +# пользователей) намеренно НЕ включены — настраивайте их отдельно для каждого +# аплинка / развёртывания. # --------------------------------------------------------------------------- -# Bridge +# Мост (bridge) # --------------------------------------------------------------------------- /interface bridge add name=bridge comment="Local bridge" -# Ports are intentionally not bound here — add them per deployment, e.g.: +# Порты намеренно не привязаны здесь — добавляйте их под каждое развёртывание, напр.: # /interface bridge port # add bridge=bridge interface=ether2 # --------------------------------------------------------------------------- -# Interface lists +# Списки интерфейсов # --------------------------------------------------------------------------- /interface list add name=WAN comment="Uplinks / Internet-facing interfaces" @@ -34,7 +41,7 @@ add name=StS comment="Site-to-Site tunnels" add name=VPN comment="Remote-access VPN clients" /interface list member -# Assign your real interfaces here, examples below: +# Назначьте здесь свои реальные интерфейсы, примеры ниже: # add list=WAN interface=ether1 add list=LAN interface=bridge # add list=StS interface= @@ -56,7 +63,14 @@ add action=accept chain=input comment="accept management" connection-state=new d add action=accept chain=input comment="accept LAN" in-interface-list=LAN add action=accept chain=input comment="accept StS" in-interface-list=StS add action=accept chain=input comment="accept VPN" in-interface-list=VPN -add action=passthrough chain=input comment="drop all other" log-prefix="IN DROP" +# VPN / туннельные протоколы (GRE / L2TP / IPsec): правила выключены (disabled=yes), +# включите нужные (disabled=no) при терминировании туннелей на роутере. +add action=accept chain=input comment="accept IPsec IKE (500,4500)" disabled=yes dst-port=500,4500 in-interface-list=WAN protocol=udp +add action=accept chain=input comment="accept IPsec ESP" disabled=yes in-interface-list=WAN protocol=ipsec-esp +add action=accept chain=input comment="accept IPsec AH" disabled=yes in-interface-list=WAN protocol=ipsec-ah +add action=accept chain=input comment="accept L2TP (1701)" disabled=yes dst-port=1701 in-interface-list=WAN protocol=udp +add action=accept chain=input comment="accept GRE" disabled=yes in-interface-list=WAN protocol=gre +add action=passthrough chain=input comment="drop all other (see usage note 4: passthrough)" log-prefix="IN DROP" add action=accept chain=forward comment="accept established, related connections" connection-state=established,related add action=drop chain=forward comment="drop invalid connections" connection-state=invalid log-prefix="INV FWD" add action=accept chain=forward comment="accept DST-NAT" connection-nat-state=dstnat @@ -67,7 +81,7 @@ add action=accept chain=forward comment="LAN -> StS" in-interface-list=LAN out-i add action=accept chain=forward comment="LAN -> VPN" in-interface-list=LAN out-interface-list=VPN add action=accept chain=forward comment="StS -> LAN" in-interface-list=StS out-interface-list=LAN add action=accept chain=forward comment="VPN -> LAN" in-interface-list=VPN out-interface-list=LAN -add action=passthrough chain=forward comment="drop all other" log-prefix=FWD +add action=passthrough chain=forward comment="drop all other (see usage note 4: passthrough)" log-prefix=FWD add action=accept chain=icmp comment="echo request" icmp-options=8:0 protocol=icmp add action=accept chain=icmp comment="echo reply" icmp-options=0:0 protocol=icmp add action=accept chain=icmp comment="net unreachable" icmp-options=3:3 protocol=icmp @@ -88,15 +102,15 @@ add action=drop chain=detect-intrusion src-address-list="black-list attackers" add action=masquerade chain=srcnat comment="LAN -> Internet" out-interface-list=WAN # --------------------------------------------------------------------------- -# DNS — resolver for LAN / VPN / StS clients +# DNS — резолвер для клиентов LAN / VPN / StS # --------------------------------------------------------------------------- /ip dns set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8 -# DNS queries are accepted from LAN / VPN / StS by the input chain rules above -# and dropped from WAN by default. +# DNS-запросы принимаются от LAN / VPN / StS правилами цепочки input выше +# и по умолчанию отбрасываются со стороны WAN. # --------------------------------------------------------------------------- -# Service / management hardening +# Сервисы / усиление безопасности управления # --------------------------------------------------------------------------- /ip service set telnet disabled=yes @@ -106,66 +120,53 @@ set api disabled=yes set api-ssl disabled=no /ip neighbor discovery-settings set discover-interface-list=LAN -# MAC-server is left enabled on all interfaces so the router stays reachable -# via MAC-telnet / MAC-winbox during initial setup from any port, before it has -# an IP address. NOTE: this also exposes MAC access on WAN — restrict to a -# management interface list once setup is complete. +# MAC-сервер ограничен списком LAN: MAC-telnet / MAC-winbox доступны только +# из локальной сети и недоступны со стороны WAN. /tool mac-server set allowed-interface-list=LAN /tool mac-server mac-winbox set allowed-interface-list=LAN /tool mac-server ping set enabled=no -# Disable the bandwidth-test server (open by default, common attack vector). +# Отключаем сервер bandwidth-test (по умолчанию открыт, частый вектор атаки). /tool bandwidth-server set enabled=no - -# Для ROS7 +# Полностью отключаем IPv6 (в RouterOS 7 IPv6 входит в монолитный пакет, +# поэтому выключается настройкой, а не удалением пакета). /ipv6 settings set disable-ipv6=yes # --------------------------------------------------------------------------- -# Time / NTP +# Время / NTP # --------------------------------------------------------------------------- /system clock set time-zone-name=Asia/Yekaterinburg -/system ntp client -set enabled=yes - -# Для ROS7 +# RouterOS 7: серверы NTP задаются свойством клиента (подменю "servers" нет). /system ntp client set enabled=yes servers=pool.ntp.org -# Для ROS6 -/system ntp client -set enabled=yes server-dns-names=pool.ntp.org - -# Act as an NTP server for downstream clients. +# Работать как NTP-сервер для нижестоящих клиентов. /system ntp server set enabled=yes # --------------------------------------------------------------------------- -# Logging — suppress info-level messages for DHCP and Wireless +# Логирование — подавить info-сообщения для DHCP и беспроводной сети # --------------------------------------------------------------------------- +# RouterOS 7 с драйвером wifi (wifiwave2) использует топик "wifi". Если на +# устройстве legacy-пакет wireless — замените !wifi на !wireless. /system logging -set [find where topics="info"] topics=info,!dhcp - -# для ROS6 или ROS7 c WiFi (пакет wireless) -set [find where topics="info"] topics=info,!dhcp,!wireless - -# Для ROS7 с WiFI (пакет wifi) set [find where topics="info"] topics=info,!dhcp,!wifi # --------------------------------------------------------------------------- -# RouterOS package update channel — use the long-term (stable) release branch +# Канал обновления пакетов RouterOS — использовать ветку long-term (стабильную) # --------------------------------------------------------------------------- /system package update set channel=long-term # --------------------------------------------------------------------------- -# RouterBOARD firmware auto-upgrade -# Upgrades the RouterBOARD firmware on startup when a newer one is available, -# then reboots to apply it. +# Авто-обновление прошивки RouterBOARD +# Обновляет прошивку RouterBOARD при старте, если доступна более новая, +# затем перезагружается для её применения. # --------------------------------------------------------------------------- /system scheduler add name=routerboard_fwupgrade policy=reboot,read,write,sensitive start-time=startup \ @@ -176,7 +177,8 @@ add name=routerboard_fwupgrade policy=reboot,read,write,sensitive start-time=sta \n}" # --------------------------------------------------------------------------- -# OSPF routing filters — accept only local (RFC1918) prefixes in/out +# Фильтры маршрутизации OSPF — принимать только локальные (RFC1918) префиксы вх/исх +# Синтаксис фильтров маршрутов RouterOS 7 (rule="if (...) {accept;}"). # --------------------------------------------------------------------------- /routing filter rule add chain=ospf-in disabled=no rule="if (dst in 192.168.0.0/16 && dst-len in 16-32) {accept;}"