Рубрики
Mikrotik Конспект

Конспект: mikrotik firewall

ссылки

https://ru.wikibooks.org/wiki/Iptables
https://tools.ietf.org/html/rfc1627
https://help.mikrotik.com/docs/display/ROS/Firewall
https://wiki.mikrotik.com/wiki/Basic_universal_firewall_script
https://wiki.mikrotik.com/wiki/Manual:IP/Firewall/Filter
https://help.mikrotik.com/docs/display/ROS/Building+Your+First+Firewall
mikrotik home config / firewall
https://youtu.be/F8sf6NUzQHA - видео mikrotik firewall Роман Козлов https://mum.mikrotik.com/2018/RUM/agenda/RU - видео firewall Васильев Кирилл https://www.youtube.com/watch?v=b-qFyuSnuBQ&feature=youtu.be&ab_channel=MikroTik - видео multiwan Васильев Кирилл
трафик_микротик трафик_mikrotik трафик_две_сетевушки chains netfilter

!!!

0. Правила в firewall доминирующие, то есть применяются  по порядку сверху в них.
1. Цепочка Input трафик идущий на роутер
2. Цепочка Output трафик идущий из роутера
3. Цепочка Forward трафик идущий через роутер

Bridge

/interface bridge
add name=br-lan

/interface bridge port
add bridge=br-lan interface=ether2
add bridge=br-lan interface=ether3
add bridge=br-lan interface=ether4
add bridge=br-lan interface=ether5

Интерфейс лист

/interface list
add name=WAN
add name=LAN

/interface list member
add interface=ether1 list=WAN
add interface=br-lan list=LAN

ip address

/ip address
add address=172.16.3.1/24 interface=br-lan network=172.16.3.0
add address=10.1.1.1/24 interface=br-lan network=10.1.1.0

DHCP

/ip pool
add name=dhcp_172.16.3 ranges=172.16.3.2-172.16.3.254

/ip dhcp-server
add address-pool=dhcp_172.16.3 disabled=no interface=br-lan name=br-lan

/ip dhcp-server network
add address=172.16.3.0/24 dns-server=172.16.3.1 gateway=172.16.3.1

DHCP client

/ip dhcp-client
add disabled=no interface=ether1

DNS

/ip dns
set allow-remote-requests=yes

Адрес листы для firewall

/ip firewall address-list
add address=192.168.15.0/24 list=admin
add address=172.16.3.0/24 list=admin
add address=10.0.0.0/24 list=admin
add address=10.1.1.2 list=user-block
add address=10.1.1.0/24 list=user-block
add address=10.1.1.2-10.1.1.10 list=user-block
add address=vk.com list=site-block
add address=172.16.3.0/24 list=users-pc

Счетчики пакетов в firewall

/ip firewall filter
add action=passthrough chain=forward
add action=passthrough chain=input
add action=passthrough chain=output

Логирование цепочки Input и forward, Log

/ip firewall filter
add action=log chain=forward disabled=yes log-prefix=Logging_Input
add action=log chain=forward disabled=yes log-prefix=Logging_Forward

Разрешаем подключение на mikrotik

/ip firewall filter
add action=accept chain=input dst-port=8291 in-interface=ether1 protocol=tcp src-address=192.168.15.0/24  - для сети 192.168.0.0/24
add action=accept chain=input dst-port=22,8291 in-interface-list=WAN protocol=tcp src-address-list=admin - для адрес листа admin порты 22 и 8291
add action=accept chain=forward dst-port=8291 in-interface=br-lan protocol=tcp - на интерфейс br-lan порт 8291 
add action=accept chain=forward dst-address=172.16.1.20 dst-port=8291 out-interface-list=LAN protocol=tcp   - на интерфейс LAN порт 8291 
add action=accept chain=input dst-port=1194 in-interface-list=WAN protocol=tcp

Добавление в адрес листы

!!! Может быть полезна для отлова и создания адрес листов
/ip firewall filter
add action=add-src-to-address-list address-list=ping_list address-list-timeout=none-dynamic chain=forward protocol=icmp
add action=add-src-to-address-list address-list=admin_8291 address-list-timeout=none-dynamic chain=forward dst-port=8291 protocol=tcp

add action=add-dst-to-address-list address-list=go_internet address-list-timeout=none-dynamic chain=output

Добавление в адрес листы на примере размера пакета ping

!!! может быть полезно для создания portknoking
!!! по умолчанию размер пакета ping равен 28
!!! Для windows:  ping -l 2 -n 5 10.0.0.25 - при такой команде будет послано пять пакетов размером 2 на адрес 10.0.0.5
!!! Для linux: ping -s 2 -c 5 10.0.0.25 - - при такой команде будет послано пять пакетов размером 2 на адрес 10.0.0.5
/ip firewall filter
add action=add-src-to-address-list address-list=ping_size_2_me address-list-timeout=10m chain=input in-interface-list=WAN packet-size=30 protocol=icmp


Состояние пакетов:

New - пакет открывает новое соединение

Established - пакет принадлежит к уже открытому соединению

Related - пакет открывает новое соединение, но оно имеет отношение к уже имеющемуся соединению

Invalid - пакет не принадлежит ни к одному из известных соединений

Untracked - пакет, настроенный для обхода отслеживания соединений в таблице RAW межсетевого экрана.

Правила разрешающие пакеты Established \ Related \ Untracker

!!! Эти правила не обходимы для построение firewall
!!! Разрешаются пакеты которые открыли соединение, создают соединение на основе открытого и разрешаются пакеты которые попали fastrack
add action=accept chain=forward comment=Established/Related/Untracker connection-state=established,related,untracked
add action=accept chain=input comment=Established/Related/Untracker connection-state=established,related,untracked


Добавления разрешающих правил для forward

!!! Пример для одного порта 
!!! Правилами злоупотреблять не стоит, и за за большого количества правил падает производительность и пропускная способность оборудования.(см у производителя)
!!! для уменьшения нагрузки можно создавать правила jamp, но они ухудшают читаемость правил firewall
/ip firewall filter
add action=accept chain=forward dst-port=80 out-interface=ether1 protocol=tcp
add action=accept chain=forward dst-port=443 out-interface=ether1 protocol=tcp
add action=accept chain=forward dst-port=8080 out-interface=ether1 protocol=tcp
add action=accept chain=forward ddst-port=25 out-interface=ether1 protocol=tcp
add action=accept chain=forward dst-port=110 out-interface=ether1 protocol=tcp
add action=accept chain=forward dst-port=143 out-interface=ether1 protocol=tcp

!!! Пример как можно указать правила выше
/ip firewall filter
add action=accept chain=forward dst-port=3389,443,80,8080,22,21,25 in-interface-list=WAN protocol=tcp
add action=accept chain=forward dst-port=5060,36600-39999 out-interface-list=WAN protocol=tcp


ICMP пример работы jamp (создание своей цепочки)

!!! создаем новую цепочку icmp и заворачиваем в нее трафик icmp
/ip firewall filter
add action=jump chain=input comment="GO TO ICPM INPUT" jump-target=icmp protocol=icmp
add action=jump chain=forward comment="GO TO ICPM FORWARD" jump-target=icmp protocol=icmp

!!! создаем правила в этой цепочки для трафика ICMP
/ip firewall filter
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:0 protocol=icmp
add action=accept chain=icmp comment="host unreachable" icmp-options=3:1 protocol=icmp
add action=accept chain=icmp comment="host unreachable fragmentation required" icmp-options=3:4 protocol=icmp
add action=accept chain=icmp comment="allow echo request" icmp-options=8:0 protocol=icmp
add action=accept chain=icmp comment="allow time exceed" icmp-options=11:0 protocol=icmp
add action=accept chain=icmp icmp-options=12:0 protocol=icmp
add action=drop chain=icmp comment="deny all other types"

!!! или вместо этого примерно такая затычка 
add action=accept chain=input connection-rate=128k-128k in-interface-list=WAN packet-size=0-2100 protocol=icmp

Пример блокировки reject

!!! Reject в отличии от drop позволяет сообщить почему не доступен ресурс.
!!! Reject в отличии от drop, нет задержки.
!!! Reject желательно использовать в своих сетях

!!! ниже пример блокировки 80,443,8080 портов
/ip firewall filter
add action=reject chain=forward dst-port=80,443,8080 out-interface=ether1 protocol=tcp reject-with=tcp-reset
add action=reject chain=input dst-port=80,443,8080 in-interface=ether1 protocol=tcp reject-with=tcp-reset

!!! Пример блокировки сайтов по адрес листу
add action=reject chain=forward comment="BLOCK VK" dst-address-list=site-block dst-port=80,443 out-interface-list=WAN protocol=tcp reject-with=tcp-reset src-address-list=user-block

!!! Пример блокировки сети all-ppp из сети из сети all-wireless, при этом сообщаем причину запрета icmp-net-prohibited
add action=reject chain=forward in-interface=all-ppp out-interface=all-wireless reject-with=icmp-net-prohibited

Пример блокировки tarpit

!!! Tarpit работает следующим образом, постучавшему в порт посылается ACK с нулевым размером окна
!!! Постучавший будет ожидать появления окна авторизации.
!!! Иногда полезно при борьбе с ботами

/ip firewall filter
add action=tarpit chain=input dst-port=3389 in-interface=ether1 protocol=tcp

Примеры блокировки drop

!!! Блокируем весь INVALID трафик INPUT,FORWARD, поступающий на интерфейс из списка WAN
/ip firewall filter
add action=drop chain=forward comment="DROP INVALID" connection-state=invalid in-interface-list=WAN
add action=drop chain=input comment="DROP INVALID" connection-state=invalid in-interface-list=WAN
!!! Блокируем весь трафик forward кроме dstnat поступающий на интерфейс из списка WAN
add action=drop chain=forward connection-nat-state=!dstnat connection-state="" in-interface-list=WAN

Включение fasttrack

!!! Обычно используется на домашних роутерах
!!! Fasttrack позволяет повысить производительность устройства
!!! Пакеты попавшие в conтectiont raker не обрабатываются firewall
!!! На эти соединения не действуют очереди и т.д.
/ip firewall filter
add action=fasttrack-connection chain=forward disabled=yes


NAT \ dst-nat \ src-nat

!!! dst-nat позволяет пробрасывать порт с микротока в локальную сеть например
!!! Гибко настраиваются, можно указывать списки, менять порты и т.д.
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=22 in-interface=ether1 protocol=tcp to-addresses=172.16.3.254
add action=dst-nat chain=dstnat dst-address=10.0.0.25 dst-port=22 in-interface=ether1 protocol=tcp to-addresses=172.16.3.254
add action=dst-nat chain=dstnat dst-address=10.0.0.25 dst-port=80,22,443 in-interface=ether1 protocol=tcp to-addresses=172.16.3.254
add action=dst-nat chain=dstnat dst-address=10.0.0.25 dst-port=33389 in-interface=ether1 protocol=tcp to-addresses=172.16.3.254 to-ports=3389

!!! src-nat и masquerade позволяет подменять ип и порты (отправителя\получателя)
!!! используется для получения интернета в локальной сети 
!!! masquerade в теории медленнее работает чем src-nat, так как ему каждый раз приходится уточнять внешний адрес роутера для подстановки
add action=masquerade chain=srcnat disabled=yes out-interface=ether1
!!! в теории srcnat работает быстрее mascarade, нужно просто указать внешний адрес роутера (в примере 10.0.0.25)
add action=src-nat chain=srcnat out-interface=ether1 to-addresses=10.0.0.25

!!! netmap нужен при пересечение сетей, пример ниже с vpn, за vpn у обоих роутеров локальная сеть 10.1.1.0/24, костыль. 
add action=netmap chain=srcnat disabled=yes out-interface=all-ppp src-address=10.1.1.0/24 to-addresses=10.2.1.0/24
add action=netmap chain=dstnat disabled=yes dst-address=10.1.1.0/24 in-interface=all-ppp to-addresses=10.2.1.0/24


Стандартный конфиг из конспекта

!!! локальная сеть 172.16.3.0/24 LAN
!!! интернет по dhcp 10.0.0.25 WAN
!!! fastеrack включен
!!! своя цепочка icmp
!!! проброс порта 22 на 172.16.3.254
!!! из локальной сети можно куда угодно (Можно изменить правило forward drop !dst-nat, но тогда нужно будет городить еще правила для выхода )

/interface bridge
add name=br-lan
/interface list
add name=WAN
add name=LAN
/ip pool
add name=dhcp_172.16.3 ranges=172.16.3.2-172.16.3.254
/ip dhcp-server
add address-pool=dhcp_172.16.3 disabled=no interface=br-lan name=br-lan
/interface bridge port
add bridge=br-lan interface=ether2
add bridge=br-lan interface=ether3
add bridge=br-lan interface=ether4
add bridge=br-lan interface=ether5
/ip neighbor discovery-settings
set discover-interface-list=!dynamic
/interface list member
add interface=ether1 list=WAN
add interface=br-lan list=LAN
/interface pptp-server server
set enabled=yes
/ip address
add address=172.16.3.1/24 interface=br-lan network=172.16.3.0
add address=10.1.1.1/24 interface=br-lan network=10.1.1.0
/ip dhcp-client
add disabled=no interface=ether1
/ip dhcp-server network
add address=172.16.3.0/24 dns-server=172.16.3.1 gateway=172.16.3.1
/ip dns
set allow-remote-requests=yes
/ip firewall address-list
add address=192.168.15.0/24 list=admin
add address=172.16.3.0/24 list=admin
add address=10.0.0.0/24 list=admin
add address=10.1.1.2 list=user-block
add address=10.1.1.0/24 list=user-block
add address=10.1.1.2-10.1.1.10 list=user-block
add address=vk.com list=site-block
add address=172.16.3.0/24 list=users-pc
/ip firewall filter
add action=passthrough chain=forward
add action=passthrough chain=input
add action=passthrough chain=output
add action=fasttrack-connection chain=forward
add action=jump chain=input comment="GO TO ICPM INPUT" jump-target=icmp protocol=icmp
add action=jump chain=forward comment="GO TO ICPM FORWARD" jump-target=icmp protocol=icmp
add action=accept chain=forward comment="Established Related Untracker" connection-state=established,related,untracked
add action=accept chain=input comment="Established Related Untracker" connection-state=established,related,untracked
add action=log chain=forward
add action=drop chain=forward comment="DROP INVALID" connection-state=invalid in-interface-list=WAN
add action=drop chain=input comment="DROP INVALID" connection-state=invalid in-interface-list=WAN
add action=accept chain=input dst-port=8291 in-interface-list=WAN protocol=tcp src-address-list=admin
add action=accept chain=forward dst-port=3389,22 in-interface-list=WAN protocol=tcp
add action=accept chain=forward dst-port=3389 out-interface-list=WAN protocol=tcp
add action=reject chain=forward comment="BLOCK VK" dst-address-list=site-block dst-port=80,443 out-interface-list=WAN protocol=tcp reject-with=tcp-reset src-address-list=user-block
add action=drop chain=forward connection-nat-state=!dstnat connection-state="" in-interface-list=WAN
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:0 protocol=icmp
add action=accept chain=icmp comment="host unreachable" icmp-options=3:1 protocol=icmp
add action=accept chain=icmp comment="host unreachable fragmentation required" icmp-options=3:4 protocol=icmp
add action=accept chain=icmp comment="allow echo request" icmp-options=8:0 protocol=icmp
add action=accept chain=icmp comment="allow time exceed" icmp-options=11:0 protocol=icmp
add action=accept chain=icmp icmp-options=12:0 protocol=icmp
add action=drop chain=icmp comment="deny all other types"
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=10.0.0.25 dst-port=22 in-interface=ether1 protocol=tcp to-addresses=172.16.3.254
add action=masquerade chain=srcnat disabled=yes out-interface=ether1
add action=src-nat chain=srcnat out-interface=ether1 to-addresses=10.0.0.25
/ip service
set ssh disabled=yes