Звоните нам: +375 (29) 5622507, +375 (44) 7669997, +375 (25) 7707103

Настройка Firewall на MikroTik. Описание правил фильтрации.

by on 28 Июнь, 2013

Межсетевой экран, брендмауэр или Firewall выполняет фильтрацию пакетов являясь таким образом инструментом обеспечивающим безопасность и управление потоками данных, проходящими через маршрутизатор. Вместе с трансляцией сетевых адресов NAT файервол служит инструментом предотвращения несанкционированного проникновения в сеть компании. Возможно и наоборот применением фильтрации пакетов совместно с транспарентными Proxy серверами и NAT добиться запрета на использование определённых ресурсов и внешних сетей. Полезно Firewall использовать для ограничения доступа к заведомо незащищенным службам. Он может служить препятствием для внедрения ложных данных с помощью уязвимых служб злоумышленником. Также через него возможен контроль доступа к узлам сети, регистрирование попыток доступа как извне, так и из внутренней сети. Можно регламентировать порядок доступа к сети, осуществлять уведомление о подозрительной деятельности, попытках зондирования или атаки на узлы сети или сам экран. 

Файервол Mikrotik RouterOS обладает мощными функциями и включает следующие возможности:

• Фильтрация пакетов; 
• Фильтрация p2p протоколов
• Классификация трафика по:
o исходный MAC-адрес;
o IP-адрес (сеть или список) и тип адреса (бродкаст, локальный, мультикаст, юникаст);
o Порт или список портов;
o IP-протокол;
o Опции протокола (ICMP тип и другие коды, TCP флаги, IP опции и MSS)
o Интерфейс, откуда получен пакет или куда он назначается
o Внутренний поток или маркированное подключение
o Байт ToS (DSCP)
o Содержимое пакета
o Скорость получения пакетов и количество последовательностей
o Размер пакета
o Время получения пакета

Основные принципы фильтрации
Оперирование файерволом осуществляется посредством правил. Правило определяет выражение, которое говорит роутеру что делать с индивидуальным IP-пакетом. Каждое правило состоит из двух частей: первое описывает параметры, по которым должны классифицироваться приходящие пакеты, второе отвечает за действие над пакетом. Правила, для лучшего управления, организованы в цепочки.
Устройство фильтра по-умолчанию имеет три цепочки: input, forward и output, которые отвечают за приходяший, перемещаемый внутри роутера и исходящий трафик соответственно. Пользователь может добавить новые цепочки, если это будет нужно.
Под эти цепочки трафик по-умолчанию не попадает. Для этого используется метод action=jump с параметром jump-target в одной из предустановленных цепочек.
Цепочки фильтра
Как говорилось раньше, правила фильтрации в файерволе сгруппированы в цепочки. Это позволяет пакету попавшему под некий критерий в одной цепочке переходить к следующему правилу и следующим цепочкам. К примеру пакетам с определённого адреса и порта нужно применить много правил. Конечно, эти правила можно перечислить в цепочке forward, однако правильнее будет создать для них отдельную цепочку, перебросить туда попавшие под условие пакеты и выполнить над ними нужные нам действия: /ip firewall filter add src-address=1.1.1.2/32 jump-target="mychain". Это правило создаст новую цепочку mychain, в которую попадут все пакеты с адресом источника 1.1.1.2/32.
Три предустановленных цепочки, которые не могут быть удалены:
• Input-применимо к пакетам, приходящим на маршрутизатор, у которых адрес получателя такой же, как и у интерфейса, на который этот пакет поступил. Пакеты, проходящие через маршрутизатор не попадают под действие правил цепочки input.
• Forward – применимо к пакетам, проходящим через маршрутизатор;
• Output – применимо к пакетам созданным маршратизатором, которые покидают его через один из интерфейсов. Пакеты, проходящие через маршрутизатор не попадают под действие цепочки output.
При попадании пакета в одну из цепочек, правила применяются от верхего к нижнему. Если пакет попадает под критерий одного из правил, над ним выполняется указанное в правиле действие и этот пакет не попадает больше под действие других правил из этой цепочки (исключение составляет только действие passthrough). Если пакет не попадает под действие ни одного из правил цепочки, к нему по умолчанию применяется действие Accept.
Описание параметров:
action (accept | add-dst-to-address-list | add-src-to-address-list | drop | jump | log | passthrough | reject | return | tarpit; default: accept) – применяемое действие, если пакет совпал с правилом
accept – принять пакет. Не подразумевает каких-либо действий. Если пакет был принят, к нему больше не применяется никаких действий в цепочке.
add-dst-to-address-list – добавить адрес назначения пакета в address list , указанный в параметре address-list
add-src-to-address-list - добавить адрес источника пакета в address list , указанный в параметре address-list
drop – разрушить пакет (без посылки сообщения ICMP reject)
jump – перепрыгнуть в цепочку, указанную в параметре jump-target
log – каждое совпадение с этим действием добавит в системный лог сообщение
passthrough – игнорировать это правило и перейти к следующему
reject –отбросить этот пакет и постать сообщение ICMP reject
return – вернуть пакет в цепочку, из которой он был переброшен
tarpit – захватить и удерживать входящие TCP подключения (отвечать SYN/ACK на входящий TCP SYN пакет)
address-list (name) – указывает имя списка адресов, в которых хранятся IP-адреса из действий action=add-dst-to-address-list или action=add-src-to-address-list. Эти списки могут быть похже использованы в других правилах.
address-list-timeout (time; default: 00:00:00) – интервал времени, через который адреса будут удалены из списка, указанного в параметре address-list . Используется в сочетании с действиями add-dst-to-address-list или add-src-to-address-list .00:00:00 – означает оставить адреса в списке навсегда.
chain (forward | input | output | name) – указывает цепочку, в которую следует поместить правило. Разные типы трафика проходят через разные цепочки, поэтому будьте в курсе своего выбора, указывая то или иное значение этого параметра. Если указанное значение цепочки не совпадает ни с одним из уже существующих, система создаст новое правило с указанным именем.
comment (text) – комментарий описывает правило. В скриптах комментарии обычно служат для идентификации правил.
connection-bytes (integer-integer) – применять правило, если количество переданных байт через подключение превысило указанное значение. 0 – не ограничено, пример: connection-bytes=2000000-0 сработает в том случае, если количество данных, переданных через открытое подключение превысило 2MB;
connection-limit (integer,netmask) – ограничивает количество доступных подключений на адрес или блок адресов;
connection-mark (name) –пакеты, попавшие под действие правил в mangle и названные в соответствии с параметром connection mark
connection-state (established | invalid | new | related) – интерпретация состояния подключения посредством анализа данных из connection tracking .
established – пакет, принадлежащийa уже установленному подключению. К примеру ответ от маршрутизатора.
invalid – пакет, который не может быть идентифицирован по какой-либо причине. К примеру это может быть переполнение памяти и ICMP ошибки. К таким пакетам нужно применять действие DROP
new – пакет, начинающий создание TCP подключения
related – запрошенный пакет, который не принадлежит уже установленным подключениям. К примеру ICMP ошибки, или пакет, начинающий передачу данных по протоколу FTP( /ip firewall service-port)
connection-type (ftp | gre | h323 | irc | mms | pptp | quake3 | tftp) – определение типа подключения, базирующееся на использовании данных из connection tracking. Конфигурирование производится в /ip firewall service-port
content (text) – содержимое текстового пакета
dst-address (IP address/netmask | IP address-IP address) – указывает диапазон адресов, у которых IP-адрес назначения совпадает с параметром. При неправильном введении пары address/netmask система сама подстроит эти параметры. К примеру:1.1.1.1/24 будет заменено на 1.1.1.0/24
dst-address-list (name) – совпадение адреса назначения пакета с определенными ранее значениями в address list
dst-address-type (unicast | local | broadcast | multicast) – совпадение типа адреса назначения пакета с заданным предустановленным значением:
unicast – IP-адреса, используемые ля передачи от одной точки к другой. В таком типе пакетов существует только один отправитель и один получатель
local – совпадеине с адресами, назначенными сетевым интерфейсам маршрутизатора
broadcast – IP-пакет, посылаемый сразу всем членам подсети
multicast – этот тип пакета используется для передачи данных от одного отправителя многим получателям в сети.
dst-limit (integer/time{0,1},integer,dst-address | dst-port | src-address{+},time{0,1}) – ограничивает скорость пакетов в секунду (packet per second (pps)) на IP-адрес или порт.
В результате работы правила каждый IP-адрес или порт назначения получает свой лимит.
Параметр имеет следующие опции:
Count – среднее количество пакетов в секунду (packets per second (pps))за время Time
Time – интервал времени, за который производится подсчёт среднего количества пакетов
Burst – количество пакетов в пике
Mode – классификатор для ограничения скорости пакетов
Expire - указывает интервал, через который записанные IP адреса /порты будут удалены
dst-port (integer: 0..65535-integer: 0..65535{*}) – интервал портов назначения
hotspot (multiple choice: from-client | auth | local-dst | http) – сравнивает пакеты полученные от клиентов с различными хот-спотами. все значения могут быть отклонены/инвертированы
from-client - true, если пакеты получены от Hot-Spot клиента
auth - true, если пакеты получены от авторизированного Hot-Spot клиента
local-dst - true, если пакет имеет локальный адрес назначения
hotspot - true, если TCP пакет от клиента и назначается на 80 порт прозрачного прокси сервера или клиент имеет адрес прокси сконфигурированный и аналогичный адресу:порту пакета
icmp-options (integer:integer) - совпадение полей ICMP Type:Code
in-interface (name) – интерфейс, с которого пакет поступил в маршратизатор
ipv4-options (any | loose-source-routing | no-record-route | no-router-alert | no-source-routing | no-timestamp | none | record-route | router-alert | strict-source-routing | timestamp) – совпадение параметров заголовка ipv4
any – совпадает по крайней мере один пакет с установленной ipv4 опцией
loose-source-routing – пакеты с опцией loose source routing. Эта опция используется для направления интернет дейтаграм основаных на информации поставляемой источником
no-record-route – пакеты с опцией no record route. Эта опция используется для направления интернет дейтаграм основаных на информации поставляемой источником
no-router-alert – совпадение пакетов с опцией no router alter
no-source-routing – совпадение пакетов с опцией no source routing
no-timestamp – совпадение пакетов с опцией with no timestamp
record-route – совпадение пакетов с опцией record route
router-alert - совпадение пакетов с опцией router alter
strict-source-routing - совпадение пакетов с опцией strict source routing
timestamp – совпадение пакетов со штампом времени
jump-target (forward | input | output | name) – имя целевой цепочки куда должен быть отправлен пакет при использовании action=jump.
limit (integer/time{0,1},integer) – ограничивает поток пакетов. Используется для уменьшения количества сообщений в логах
Count – максимальное среднее количество пакетов, указанное в пакетах в секунду (PPS Packet Per Second) за время в опции Time
Time – указывает интервал времени за который будет производиться подсчёт среднего количества пакетов
Burst – количество пакетов при пике
log-prefix (text) – все сообщения, записываемые в лог, будут иметь этот префикс. Используется вместе с опцией action=log
nth (integer,integer: 0..15,integer{0,1}) – совпадение каждого n-ного пакета, попавшего в правило. Всего доступно 16 счётчиков
Every – совпадение каждого Every+1th пакета. К примеру, если Every=1 тогда под действие правила попадёт каждый второй пакет
Counter – указывает какой счётчик будет использоваться. Счётчик увеличивается на 1 с каждым новым правилом где указанна опция nth
Packet -совпадает с номером данного пакета. Значение по очевидным причинам должно быть между нулем и Every. Если опиция используется для данного счетчика, тогда должно быть по крайней мере Every+1 правило с этой опцией, охватывающее все значения между 0 и Every включительно out-interface (name) – интерфейс, через который пакеты будут покидать маршрутизатор
p2p (all-p2p | bit-torrent | blubster | direct-connect | edonkey | fasttrack | gnutella | soulseek | warez | winmx) – совпадение пакетов протоколов peer-to-peer (P2P)
packet-mark (text) – цепочка пакетов, промаркированная в разделе mangle файервола
packet-size (integer: 0..65535-integer: 0..65535{0,1}) – размер пакета в байтах
Min – указывает нижний предел диапазона размера пакета
Max - указывает верхний предел диапазона размера пакета

phys-in-interface (name) – физический интерфейс, указанный в качестве порта моста, по которому пакет поступил в маршрутизатор
phys-out-interface (name) - физический интерфейс, указанный в качестве порта моста, по которому пакет выйдет из маршрутизатора
protocol (ddp | egp | encap | ggp | gre | hmp | icmp | idrp-cmtp | igmp | ipencap | ipip | ipsec-ah | ipsec-esp | iso-tp4 | ospf | pup | rdp | rspf | st | tcp | udp | vmtp | xns-idp | xtp | integer) – совпадение IP протокола. Указывается имя протокола или его номер. Вы должны указать эту опцию, чтобы получить доступ к специфическим параметрам для каждого протокола.
psd (integer,time,integer,integer) – попытка определения сканирования TCP и UDP портов. Необходимо назначить меньшее значение портам с высокими номерами для того, чтобы уменьшить количество ложных срабатываний. К примеру, при использовании пассивного режима FTP.
WeightThreshold – полный вес последних TCP/UDP пакетов с различными портами назначения, поступающими с одного хоста, которые распознанные как один из методов сканирования
DelayThreshold – задержка между пакетами с разными портами назначения, поступающие с одного хоста и распознанные как возможная последовательность сканирования
LowPortWeight – вес пакетов при сканировании привилегированных портов (<=1024)
HighPortWeight – вес пакетов на непривилегированные порты назначения
random (integer: 1..99) – совпадение пакетов с заданным уровнем случайности
reject-with (icmp-admin-prohibited | icmp-echo-reply | icmp-host-prohibited | icmp-host-unreachable | icmp-net-prohibited | icmp-network-unreachable | icmp-port-unreachable | icmp-protocol-unreachable | tcp-reset | integer) – указывает причину по которой был отброшен пакет в action=reject
routing-mark (name) – совпадение пакетов, обозначенных в цепочке mangle параметром routing mark
src-address (IP address/netmask | IP address-IP address) – указывает диапазон адресов IP пакетов поступивших извне. Замечание: консоль конвертирует неправильно набранные IP значения address/netmask в правильный сетевой адрес. К примеру:1.1.1.1/24 будет конвертирован в 1.1.1.0/24
src-address-list (name) – совпадение адреса источника с списком IP-адресов в предустановленном пользователе address list
src-address-type (unicast | local | broadcast | multicast) – совпадение типа IP-адреса:
unicast - IP адрес используется для передачи данных между двумя узлами, где только один отправитель и один получатель
local – совпадение адреса, назначенного одному из интерфейсов маршрутизатора
broadcast - IP пакет был отправлен из одной точки всем получателям и IP подсети
multicast – этот типа IP адресации ответственен за передачу между одной или несколькими точками одной или набору других точек
src-mac-address (MAC address) - MAC адрес источника
src-port (integer: 0..65535-integer: 0..65535{*}) – диапазон портов источника
tcp-flags (ack | cwr | ece | fin | psh | rst | syn | urg) - tcp флаги
ack – запрос данных
cwr – принимающее окно уменьшено
ece - ECN-флаг echo (explicit congestion notification)
fin – закрытие подключения
psh – функция push
rst – разорвать подключение
syn – новое подключение
urg - urgent data
tcp-mss (integer: 0..65535) - совпадение значения TCP MSS IP пакета
time (time-time,sat | fri | thu | wed | tue | mon | sun{+}) – позволяет создать фильтр, базирующийся на времени получения пакета или дате. Для локально созданных пакетов дате отправки
tos (max-reliability | max-throughput | min-cost | min-delay | normal) – совпадение с полем «тип сервиса» Type of Service (ToS) в IP загаловке
max-reliability – максимальная надёжность (ToS=4)
max-throughput – максимальная пропускная способность (ToS=8)
min-cost – минимальная стоимость (ToS=2)
min-delay – минимальная задержка (ToS=16)
normal – нормальное обслуживание (ToS=0)

Правила NAT применяются первыми, и это нужно помнить при создании правил файервола, так как оригинальные пакеты могли быть модифицированы в NAT.

Примеры применения:
Защита вашего маршрутизатора RouterOS
Для защиты вашего маршрутизатора сменить пароль администратора недостаточно и нужно воспользоваться фильтрацией пакетов. Все пакеты с адресом назначения маршрутизатора попадают во входную цепочку файервола INPUT. Заметьте, что попавшие в цепочку INPUT пакеты не будут проходить через маршрутизатор.

/ip firewall filter 
add chain=input connection-state=invalid action=drop \
comment="Drop Invalid connections"
add chain=input connection-state=established action=accept \
comment="Allow Established connections"
add chain=input protocol=udp action=accept \
comment="Allow UDP"
add chain=input protocol=icmp action=accept \
comment="Allow ICMP"
add chain=input src-address=192.168.0.0/24 action=accept \
comment="Allow access to router from known network"
add chain=input action=drop comment="Drop anything else"

Для защиты сети проверяется весь трафик проходящий через маршрутизатор и блокировать нежелательные пакеты:

/ip firewall filter
add chain=forward protocol=tcp connection-state=invalid \
action=drop comment="drop invalid connections"
add chain=forward connection-state=established action=accept \
comment="allow already established connections"
add chain=forward connection-state=related action=accept \
comment="allow related connections"

Блокировать IP адреса, названные "bogons":
add chain=forward src-address=0.0.0.0/8 action=drop
add chain=forward dst-address=0.0.0.0/8 action=drop
add chain=forward src-address=127.0.0.0/8 action=drop
add chain=forward dst-address=127.0.0.0/8 action=drop
add chain=forward src-address=224.0.0.0/3 action=drop
add chain=forward dst-address=224.0.0.0/3 action=drop

Перебросить их в другую цепочку:
add chain=forward protocol=tcp action=jump jump-target=tcp
add chain=forward protocol=udp action=jump jump-target=udp
add chain=forward protocol=icmp action=jump jump-target=icmp

Создать цепочку tcp и запретить некоторые tcp порты:
add chain=tcp protocol=tcp dst-port=69 action=drop \
comment="deny TFTP"
add chain=tcp protocol=tcp dst-port=111 action=drop \
comment="deny RPC portmapper"
add chain=tcp protocol=tcp dst-port=135 action=drop \
comment="deny RPC portmapper"
add chain=tcp protocol=tcp dst-port=137-139 action=drop \
comment="deny NBT"
add chain=tcp protocol=tcp dst-port=445 action=drop \
comment="deny cifs"
add chain=tcp protocol=tcp dst-port=2049 action=drop comment="deny NFS"
add chain=tcp protocol=tcp dst-port=12345-12346 action=drop comment="deny NetBus"
add chain=tcp protocol=tcp dst-port=20034 action=drop comment="deny NetBus"
add chain=tcp protocol=tcp dst-port=3133 action=drop comment="deny BackOriffice"
add chain=tcp protocol=tcp dst-port=67-68 action=drop comment="deny DHCP"

Запретить udp порты в цепочке udp:
add chain=udp protocol=udp dst-port=69 action=drop comment="deny TFTP"
add chain=udp protocol=udp dst-port=111 action=drop comment="deny PRC portmapper"
add chain=udp protocol=udp dst-port=135 action=drop comment="deny PRC portmapper"
add chain=udp protocol=udp dst-port=137-139 action=drop comment="deny NBT"
add chain=udp protocol=udp dst-port=2049 action=drop comment="deny NFS"
add chain=udp protocol=udp dst-port=3133 action=drop comment="deny BackOriffice"

Разрешить только необходимые коды icmp в цепочке с именем icmp:
add chain=icmp protocol=icmp icmp-options=0:0 action=accept \
comment="drop invalid connections"
add chain=icmp protocol=icmp icmp-options=3:0 action=accept \
comment="allow established connections"
add chain=icmp protocol=icmp icmp-options=3:1 action=accept \
comment="allow already established connections"
add chain=icmp protocol=icmp icmp-options=4:0 action=accept \
comment="allow source quench"
add chain=icmp protocol=icmp icmp-options=8:0 action=accept \
comment="allow echo request"
add chain=icmp protocol=icmp icmp-options=11:0 action=accept \
comment="allow time exceed"
add chain=icmp protocol=icmp icmp-options=12:0 action=accept \
comment="allow parameter bad"
add chain=icmp action=drop comment="deny all other types"

 

 

 

2 Comments

  • Володя

    Спасибо большое за статью. Возникла проблема, в логах постоянно появляется: login failure for user root from . . . . . via telnet. была проблема до этого с 22 портом я его перекинул только на локальную сеть, а что делать с 23 портом? закрыть? или можно как-то настроить что бы не лезли?

    Ответ: Перекиньте и его только на локалку, или в input firewall filter закройте порт тсп 22 и 23!

    Володя   Пятница, 16 Май 2014 05:48
  • Дмитрий

    Большое спасибо за статью, очень полезно.

    Дмитрий   Воскресенье, 22 Сентябрь 2013 13:43

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены

Последние комментарии

  • Игорь Ноябрь 24, 2016 Добрый день! настроил все как у вас написано, роутеры видят друг друга, но в интернет со второго роутера не выходить,…
  • Вячеслав Ноябрь 15, 2016 Здравствуйте. прочитал Вашу инструкцию, но всё-равно не могу решить проблему. Есть основной роутер, который раздаёт интернет с включенным DHCP и…

banner 3

Авторизация