RouterOS: Настройка Firewall

Записки и примеры конфигураций IOS/RouterOS

Модератор: ROOT

RouterOS: Настройка Firewall

Сообщение ROOT » 26 ноя 2024, 02:18

Оглавление


Список основных портов для TCP/UDP
UDP - 53, 123 лучше через forward не выпускать. Для локалки должен быть свой DNS и NTP
  • 53 - DNS
  • 123 - NTP
  • 443 - QUIC protocol

TCP
  • 80, 443 - HTTP/HTTPS
  • 25, 110, 143, 465, 587, 995, 993,- MAIL
  • 3389 - Remote Desktop Protocol (RDP)
Базовые команды для firewall
# Просмотр правил отдельных цепочек input or forward
Код: выделить все
/ip firewall filter print where chain=input
/ip firewall filter print where chain=forward
/ip firewall nat print

Удаление правил
Код: выделить все
/ip firewall filter remove [find dynamic=no]
/ip firewall nat remove [find dynamic=no]
/ip firewall raw remove [find dynamic=no]
/ip firewall mangle remove [find dynamic=no]
/ip firewall address-list remove [find dynamic=no]
/ip firewall layer7-protocol remove [find dynamic=no]
/ip firewall connection remove [find dynamic=no]

Состояния пакетов
Существуют четыре состояния пакетов:
  • new — новый пакет, не принадлежащий ни одному из известных потоков. Это может быть первый пакет для коннекта к серверу RDP, или первый пакет в потоке WinBox, или запрос к DNS. Система запоминает Source IP, Source Port, Destination IP, Destination Port и некоторые другие параметры и записывает эти данные в таблицу. Следующий пакет с такими же данными будет относиться к записанному потоку;
  • established — пакет, принадлежащий существующему потоку. То есть пакет, у которого Source IP, Source Port, Destination IP, Destination Port подходят под одну из записей таблицы ConnTrack (или обратный пакет);
  • related — пакет, порожденный другим потоком. Некоторые протоколы, такие как FTP, SIP, PPTP, используют для работы несколько потоков. Например, управляющие команды FTP ходят по порту TCP 21, но данные передаются с порта TCP 20. При попытке получения или отправки данных на FTP в потоке на порт 21 сервер сообщает: «А сейчас я открою 20-й порт, и ты забирай данные с него», после этого клиент посылает пакет на 20-й порт сервера. Этот пакет будет считаться related, так как он порожден потоком 21-го порта;
  • invalid — все, что не относится к перечисленным выше состояниям. Пример: сессия корректно закрылась, но из-за ошибок маршрутизации часть пакетов из середины сессии улетела другим путем. Когда они пришли, их сессия уже закрыта и роутер о них ничего не знает. Они не new и не относятся к существующим соединениям, поэтому считаем их invalid.

Пример базовой настройки firewall с пользовательскими цепочками
В данном варианте используется конфигурация из 19 правил, 5 адресных списков, так же используются следующие пользовательские цепочки:
  • FWD — Разрешающая цепочка, проходящего трафика через роутер, принадлежащего активным соединениям Established/Related и отбрасывание трафика Invalid
  • FWD_ALLOW — Разрешающая цепочка, проходящего трафика по отдельным портам через роутер, который только собирается устанавливать соединение
  • WAN_INPUT — Разрешающая цепочка, адресованного роутеру трафика, принадлежащего активным соединениям Established/Related и отбрасывание трафика Invalid
  • WAN_INPUT_ALLOW — Разрешающая цепочка, адресованного роутеру трафика по отдельным портам, который только собирается устанавливать соединение
Правила с action=jump должны иметь те же состояния соединений, что и правила внутри цепочек.
Код: выделить все
/ip firewall address-list
add address=10.10.10.0/24 list=LAN_NET
add address=195.0.1.3 list=admin
add address=195.0.1.0/24 list=WAN_NET
add address=195.0.1.14 list=WAN_IP
add address=10.10.10.254 list=LAN_IP
/ip firewall connection tracking
set tcp-established-timeout=1h
/ip firewall filter
add action=jump chain=forward comment="FWD for State Established/Related" connection-state=established,related \
    jump-target=FWD
add action=jump chain=forward comment="FWD_ALLOW For State NEW" connection-state=new jump-target=FWD_ALLOW
add action=jump chain=input comment="WAN_INPUT For State Established/Related" connection-state=established,related \
    in-interface-list=WAN_IF jump-target=WAN_INPUT
add action=jump chain=input comment="WAN_INPUT For State Invalid" connection-state=invalid disabled=yes \
    in-interface-list=WAN_IF jump-target=WAN_INPUT
add action=jump chain=input comment="WAN_INPUT_ALLOW For State NEW" connection-state=new in-interface-list=WAN_IF \
    jump-target=WAN_INPUT_ALLOW
add action=accept chain=FWD comment="Allow Established/Related Connections" connection-state=established,related \
    in-interface-list=LAN_IF out-interface-list=WAN_IF
add action=drop chain=FWD comment="Drop Invalid Forward" connection-state=invalid in-interface-list=WAN_IF
add action=return chain=FWD
add action=accept chain=FWD_ALLOW comment="Allow HTTP & HTTPS from LAN" connection-state=new dst-port=80,443 \
    in-interface-list=LAN_IF out-interface-list=WAN_IF protocol=tcp
add action=accept chain=FWD_ALLOW comment="Allow QUIC traffic from LAN" connection-state=new dst-port=443 \
    in-interface-list=LAN_IF out-interface-list=WAN_IF protocol=udp
add action=drop chain=FWD_ALLOW comment="Drop All Forward from LAN to WAN" in-interface-list=LAN_IF \
    out-interface-list=WAN_IF
add action=drop chain=FWD_ALLOW comment="Drop All Forward (not sourced NAT)" connection-nat-state=!dstnat
add action=drop chain=FWD_ALLOW comment="Drop New Connections from WAN to LAN" connection-nat-state=!dstnat \
    connection-state=new
add action=accept chain=WAN_INPUT comment="Allow Established/Related Connections" connection-state=\
    established,related in-interface-list=WAN_IF
add action=drop chain=WAN_INPUT comment="Drop Invalid Input" connection-state=invalid in-interface-list=WAN_IF
add action=return chain=WAN_INPUT
add action=accept chain=WAN_INPUT_ALLOW comment="Allow SSH/WinBox Admin Access" dst-port=22,8291 in-interface-list=\
    WAN_IF protocol=tcp src-address-list=admin
add action=add-src-to-address-list address-list="dns flood" address-list-timeout=1h chain=WAN_INPUT_ALLOW comment=\
    "Rate Limit DNS Requests from WAN" connection-state=new dst-port=53 in-interface-list=WAN_IF protocol=udp \
    src-address-list=!LAN_NET
add action=drop chain=WAN_INPUT_ALLOW comment="Drop excessive DNS Requests from WAN" connection-state=new dst-port=53 \
    in-interface-list=WAN_IF protocol=udp src-address-list="dns flood"
add action=accept chain=WAN_INPUT_ALLOW comment="ICMP Rate Limit to 128 bytes" connection-rate=0-128k \
    in-interface-list=WAN_IF packet-size=0-128 protocol=icmp
add action=drop chain=WAN_INPUT_ALLOW comment="Drop All Other Input" in-interface-list=WAN_IF src-address-list=\
    !LAN_NET

Найти подходящую цепочку и обработать с помощью её правил трафика значительно проще чем прогонять весь трафик через множество правил. Сначала обрабатываем транзитный трафик. Поскольку в нём львиная доля будет принадлежать установленным соединениям, то и разрешаем его не отходя от кассы, а заодно убиваем некорректный трафик, и возвращаемся обратно в цепочку forward. Далее проваливаемся в цепочку FWD_ALLOW для разрешения трафика с состоянием NEW, в конце убиваем весь не попавший под правила трафик.
Такие же действия проделываем с цепочками относящимися к input
Отключаем ненужные нам service-port
Код: выделить все
/ip firewall service-port
set tftp disabled=yes
set h323 disabled=yes
set sip disabled=yes
set pptp disabled=yes



SRC-NAT
Теперь настроем трансляцию сетевых адресов nat. Поскольку на внешнем интерфейсе статический IP, то нет необходимости организовывать nat с помощью masquerade, а следовательно правильным выбором в данной ситуации будет src-nat.
Код: выделить все
/ip firewall nat
add action=src-nat chain=srcnat out-interface-list=WAN_IF src-address-list=LAN_NET to-addresses=195.0.1.14



Сокращаем время жизни соединений
Проверяем текущие значения параметров connection tracking:
Код: выделить все
/ip firewall/connection/tracking/print

Нас интересует значение параметра tcp-established-timeout которое по умолчанию равно 24 часа. Сокращаем время жизни соединений до 1 часа:
Код: выделить все
/ip firewall/connection/tracking/set tcp-established-timeout=1h
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 436
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в CISCO / MikroTik

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1