ссылки
1 2 3 4 5 6 7 8 9 10 |
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 https://b14esh.com/device-%d1%83%d1%81%d1%82%d1%80%d0%be%d0%b9%d1%81%d1%82%d0%b2%d0%b0-%d0%b6%d0%b5%d0%bb%d0%b5%d0%b7%d0%be/mikrotik/mikrotik-home-config-firewall.html 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 Васильев Кирилл |
!!!
1 2 3 4 |
0. Правила в firewall доминирующие, то есть применяются по порядку сверху в них. 1. Цепочка Input трафик идущий на роутер 2. Цепочка Output трафик идущий из роутера 3. Цепочка Forward трафик идущий через роутер |
Bridge
1 2 3 4 5 6 7 8 |
/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 |
Интерфейс лист
1 2 3 4 5 6 7 |
/interface list add name=WAN add name=LAN /interface list member add interface=ether1 list=WAN add interface=br-lan list=LAN |
ip address
1 2 3 |
/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
1 2 3 4 5 6 7 8 |
/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
1 2 |
/ip dhcp-client add disabled=no interface=ether1 |
DNS
1 2 |
/ip dns set allow-remote-requests=yes |
Адрес листы для firewall
1 2 3 4 5 6 7 8 9 |
/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
1 2 3 4 |
/ip firewall filter add action=passthrough chain=forward add action=passthrough chain=input add action=passthrough chain=output |
Логирование цепочки Input и forward, Log
1 2 3 |
/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
1 2 3 4 5 6 |
/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 |
Добавление в адрес листы
1 2 3 4 5 6 |
!!! Может быть полезна для отлова и создания адрес листов /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
1 2 3 4 5 6 |
!!! может быть полезно для создания 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 |
Состояние пакетов:
1 2 3 4 5 6 7 8 9 |
New - пакет открывает новое соединение Established - пакет принадлежит к уже открытому соединению Related - пакет открывает новое соединение, но оно имеет отношение к уже имеющемуся соединению Invalid - пакет не принадлежит ни к одному из известных соединений Untracked - пакет, настроенный для обхода отслеживания соединений в таблице RAW межсетевого экрана. |
Правила разрешающие пакеты Established \ Related \ Untracker
1 2 3 4 |
!!! Эти правила не обходимы для построение 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
!!! Пример для одного порта !!! Правилами злоупотреблять не стоит, и за за большого количества правил падает производительность и пропускная способность оборудования.(см у производителя) !!! для уменьшения нагрузки можно создавать правила 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 (создание своей цепочки)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
!!! создаем новую цепочку 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
!!! 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
1 2 3 4 5 6 |
!!! Tarpit работает следующим образом, постучавшему в порт посылается ACK с нулевым размером окна !!! Постучавший будет ожидать появления окна авторизации. !!! Иногда полезно при борьбе с ботами /ip firewall filter add action=tarpit chain=input dst-port=3389 in-interface=ether1 protocol=tcp |
Примеры блокировки drop
1 2 3 4 5 6 |
!!! Блокируем весь 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
1 2 3 4 5 6 |
!!! Обычно используется на домашних роутерах !!! Fasttrack позволяет повысить производительность устройства !!! Пакеты попавшие в conтectiont raker не обрабатываются firewall !!! На эти соединения не действуют очереди и т.д. /ip firewall filter add action=fasttrack-connection chain=forward disabled=yes |
NAT \ dst-nat \ src-nat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
!!! 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 |
Стандартный конфиг из конспекта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
!!! локальная сеть 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 |