Mangle Спецификации Требуемые пакеты: system Требуемый уровень лицензии: Level1 Уровень подменю: /ip firewall mangle Стандарты и технологии: IP Аппаратное обеспечение: Зависит от количества правил mangle Mangle Уровень подменю: /ip firewall mangle Описание Mangle это как бы "маркер" который маркирует паке ты специальными марками для дальнейшей обработки. Многие другие средства в RouterOS используют эти марки, например такие как деревья очередей и NAT. Они идентифицируют пакеты по их маркам и соответственно обрабатывая их. Марки mangle используются только мар шрутизатором, они не передаются по сети. Описание свойств action (accept | add-dst-to-address-list | add-src-to-address-list | change-dscp | change-mss | change-ttl | jump | log | mark-connection | mark-packet | mark-routing | passthrough | return | set - priority | strip-ipv4-options; по умолчанию: accept) - предпринимаемое действие, если пакет соответствует правилу accept - принять пакет. Ничего не делать, т.е. пакет проследует через маршрутизатор и не одно правило не будет применятся к нему . add-dst-to-address-list - добавить адрес назначения IP пакета в список адресов определенный параметром address-list add-src-to-address-list - добавить адрес источника IP пакета в список адресов определенный параметром address-list change-dscp - изменение дифференцированной служебной кодовой точки(DSCP) значение поля определяющее параметр new-dscp change-mss - изменение максимального размера сегмента пакета на значение определенное параметром new-mss change-ttl - изменение параметра время жизни пакета на значение определенное параметром new-ttl jump - переход в цепочку определенную значением параметра jump-target log - каждое соответствие этому действию будет добавлять сообщение в системный журна mark-connection - маркировка, определенная параметром new-connection на всем соединении которое соответствует правилу mark-packet маркировка, определенная параметром new-packet-mark на пакете, который соответствует правилу mark-routing маркировка пакета определенная параметр ом new-routing-mark. Этот вид маркировки используется только для политики маршрутизации. passthrough - игнорировать это правило и перейти к следующему return - вернуть контроль назад в правило, из которого был осуществлен переход set-priority - установить приоритет, определенный параметром new-priority на пакеты, посылаемые наружу через соединение, которое способно транспортировать приоритет(VLAN или WMM -enabled беспроводной интерфейс) strip-ipv4-options - отделение IPv4 опций полей от IP пакета address-list(name) - имя списка адресов в котором собранны IP адреса из правила действиями action=add-dst-to-address или action=add-src-to-address-list. Этот список адресов должен быть создан ранее. address-list-timeout(time; по умолчанию: 00:00:00) - интервал, по истечении которого адрес будет удален из списка адресов определенного параметром address-list. Используется в совокупности с дествием add-dst-to-address-list или add-src-to-address- list 00:00:00 - удалить адрес из списка навсегда chain (forward | input | output | postrouting | prerouting) - цепочка для добавления в нее определенного правила. Так как определенный трафик идет через определенные цепочки, будьте осторожны в выборе цепочки для нового правила. Даже если правило не имеет смысла или оно уже было созда но ранее оно все равно будет создано comment(text) свободная форма текстового комментария для правила. Комментарий может быть использован для обращение к сценарию. connection-bytes(integer-integer) - соответствие пакетов только если определенное кол-во байт было передано через определенное соединение 0 - бесконечное применение, например: connection-bytes=2000000-0 соответсвует правилу если более чем 2Мб было передано через маршрутизатор в выбранном соединении connection-limit(integer, netmask) - ограничивать соединение лимитирование производить по адресу или заблокировать адрес connection-mark(name) - соответствие пакетов промаркированных средством mangle определенному промаркированному соединению connection-state (estabilished | invalid | new | related) - отслеживание состояния соединения established - пакет принадлежит установленному соединению, например пакет ответа или пакет который уже принадлежит установленному соединению invalid - пакет который не может быть идентифици рован по некоторым причинам. Это может происходить при нехватке памяти и ICMP ошибках, которые не принадлежат другим известным соединениям. Это главный критерий для сброса пакета new - первый пакет в соединении related - пакет связанный с существующим соед инением, но не являющейся частью этого соединения, например как ICMP ошибки или пакет который начинает FTP передачу(последнее требует включения трассировщика FTP соединения при помощи /ip firewall service-port) connection-type (ftp | gre | h323 | irc | mms | pptp | quake3 | tftp) - информация о соответствии пакетов из связанных соединений, полученных из их вспомогательных трассировщиков соединений. Трассировщики должны быть включены в /ip firewall service-port content(text) - текст который должны содержат ь пакеты для соответствия правилу. dscp (integer: 0..63) - DSCP (ex-ToS) - значение полей заголовка IP пакета 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) - соответствие адресу назначения пакета определенному пользователем в списке адресов. dst-address-type (unicast | local | broadcast | multicast) - соответствие адреса назначения IP пакета одному из типов: unicast - IP адреса для передачи типа точка точка. В данном случае существует только один отправитель и один получатель local - соответствие адресам присвоеных интерфейс ам маршрутизатора broadcast - IP пакет посланый от одной точки к другим точкам IP подсети multicast - данный тип IP адресации предназначен для передачи от одной или более точек к другим точкам dst-limit (integer/time{0,1},integer,dst -address | dst-port | src-address{+},time{0,1}) - ограничение кол-ва пакетов в секунду идущих на IP адрес назначения или порт назначения. Как противоположность лимитирования пакетов, каждый адрес назначения / порт назначения использует это лимитирование. Опции перечислены ниже(в порядке появления): count - максимальное среднее значения нормирования, ограничивает к ол-во пакетов в секунду(pps), если не сопровождается опцией time time - определенный временной интервал через который будет происходить нормирование пакетов. burst - кол-во пакетов соответствующих взрыву mode - классификатор для лимитирования пакетов expire - определенный интервал по истечении которого записанный IP адрес / порт будут удалены dst-port - (integer: 0..65535-integer: 0..65535{*}) - порт или диапазон портов назначения fragment (yes | no) - является ли пакет фрагментом IP пакета. Стартовый пакет(т.е первый фрагмент) не считается. Примечание если включен трассировщик соединений, фрагментирования происходить не б удет так как система автоматически соберет каждый пакет hotspot (multiple choice: auth | from -client | http | local-dst | to-client) - соответствие пакетов полученных от клиента условия HotSpot. auth - правда, если пакет пришел от аутентифицированного HotSpot клиента from-client - правда, если пакет пришел от любого другого HotSpot клиента http - правда, если HotSpot клиент посылает пакет на адрес и порт определенный для proxy сервера (Universal Proxy t echnique) или если порт назначения 80 и включено прозрачное проксирование для данного клиента local-dst - правда, если пакет имеет локальный IP адрес назначения to-client правда, если пакет посылается клиенту icmp-options (integer.integer) - соответствие ICMP типа: кодовым полям in-bridge-port (name) - актуальный интерфейс на который заходит пакет следующий через маршрутизатор(если бридж,то это свойство соответствует актуальному порту бриджа, пока in-interface является бриджом) соответственно. in-interface (name) - интерфейс на который заходит пакет следующий через маршрутизатор(если интерфейс забриджован, то пакет будет определятся как пришедший с интерфейса бридж) ingress-priority (integer: 0..63) - INGRESS(полученный) приоритет пакета, если установлен(0 в другом случае). Приоритет может быть получен также от VLAN или WMM 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 - соответствие пакетов опции свободный источник маршрутизации. Эта опция используется для маршрутизации дэйтаграм и базируется на информации поставляемой источником no-record-route - соответствие пакетов опции нет записи маршрута. Эта опция используется для марщрутизации дэйтаграм и базируется на информации поставляемой источником no-router-alert - соответствие пакетов опции нет сообщения трево ги от маршрутизатора no-source-routing - соответствие пакетов опции нет источника маршрутизации no-timestamp - соответствие пакетов опции timestamp record-route - соответствие пакетов опции запись маршрута router-alert - соответствие пакетов опции сообщени е тревоги от маршрутизатора strict-source-routing - соответствие пакетов опции строгая маршрутизация источника timestamp - соответствие пакетов timestamp jump-target (forward | input | output | postrouting | prerouting name) - название целевой цепочки для перехода в неё, если action=jump используется layer7-protocol (name) - Layer 7 название фильтра установленного в /ip firewall layer7- protocol меню. Предостережение: при использовании необходима большая вычислительная мощность limit (integer/time{0,1},integer) - ограничить пакет согласно взятому лимиту. Используется для уменьшения кол-ва записей в системном журнале. count максимальное среднее нормирование пакета, ограничивает к ол-во пакетов в секунду(pps), если сопровождается опцией time time - определенный временной интервал по истечении, которого будет происходить ограничение пакета burst - к-во пакетов соответствующих взрыву log-prefix (text) - определение нового значения маркированного соединения которое будет использоваться в паре с action=mark-connection new-dscp (integer: 0..63) - определение нового значения поля DSCP которое будет использоваться в паре с action=change-dscp new-mss (integer) - определение значения MSS которое будет использоваться в паре с action=change-mss new-packet-mark(name) - определение нового значения маркировки пакета которое будет использоваться в паре сaction-mark-packet new-priority (integer) - определение нового значения приритета пакета для включения приоритета интерфейса, используется в паре с action=set-priority from-dscp - установить приоритет пакета взятого из значения его поля DSCP from-ingress - установить приоритет пакета взятого из INGRESS(в случае если пакет был получен от интерфейса который поддерживает свойства VLAN или WMM - включенный на радиоинерфейсе; 0 если не установлено) new-routing-mark (name) - определение нового значения маркировки маршрута используется в паре с action=mark-routing new-ttl (decrement | increment | set:integer) - определение нового значения поля TTL используется в паре с action=change-ttl decrement - значение поля TTL будет декрементировано на указанное значение increment - значение поля TTL будет инкре ментировано на указанное значение set: значение поля TTL будет установлено в указанное значение nth (integer,integer: 0..15,integer{0,1}) - соответствие пакету определенному Nth полученному из правила. Для подсчета пакетов может быть использован один из 16 доступных счетчиков every - соответствие каждому+1 пакету. Для примера, если каждый+1 тогда правилу соответствует каждый второй пакет counter определение используемого счетчика. Счетчик инкрементируется каждый раз когда в правиле содержится соответствие nth packet соответствие конкретно взятому(по номеру) пакету. Значение соответственно должно находиться между 0 и every Если эта опция включена для определенного счетчика, тогда должно быть, по крайней мере, одно every+1 правило соответствующее этой опции покрывающее все значения между 0 и every включительно. out-bridge-port(name) - актуальный интерфейс через который транзитный пакет покидает маршрутизатор(если это бридж, то это свойство соответствует актуальному порту бриджа, до тех пор пока out-interface является бриджом) out-interface (name) - интерфейс через который транзитный пакет покидает маршрутизатор(если это бридж, то пакет будет является пакетом проходящим через бридж соответственно) p2p (all-p2p | bit-torrent | direct-connect | edonkey | fasttrack | gnutella | soulseek | warez | winmx) - соответствие пакетов соединениям принадлежащим одному из перечисленных протоколов P2P packet-mark (name) - соответствие пакетов маркам проставленным средствами mangle packet-mark packet-size (integer: 0..65535-integer: 0..65535{0,1})-соответствие пакета определенному размеру или диапазону указанному в байтах min - определяет нижнюю границу диапазона max - определяет верхнюю границу диапазона passthrough (yes | no; по умолчанию: yes) - разрешено ли пакету следовать далее после маркировки данной марки(свойство действительно только если действие маркирует пакет, соединение или маршрут) port (port{0-16}) - соответствует если другой(источник или назначение) порт соответствует определенному в списку портов или диапазону портов(примечание при этом должен быть выбран протокол, также как и при использовании соответстви й src-port и dst-port) 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) - соответствие спецефичному проток олу определяемому по имени или по номеру. При использовании портов вам необходимо определять специфичный протокол. psd (integer,time,integer,integer) - попытка определения TCP и UDP сканеров. Это свойство применяется для присвоения более низкой значимости портам с высокими номерами, для уменьшения частоты негативных обращений, как например при пассивной FTP передачи WeightThreshold - общий объем последних TCP/UDP пакетов с непривилегированными портами назначения пришедшими от некоторого хоста и определенный как последовательный сканер портов DelayThreshold - задержка пакетов с непривилегированными портами назначения пришедшими от некоторого хоста и определенный как возможный подпоследовательный сканер портов LowPortWeight - объем пакетов с привилегированными (ниже 1024) портами назначения HighPortWeight - объем пакетов с непривилегированными портами назначения random (integer: 1..99) - соответствие пакета взятого наугад routing-mark (name) - соответствие пакетов промарки рованных определенной маркой маршрута src-address (IP address/netmask | IP address -IP address) - диапазон адресов, от которых пришел IP пакет. Примечание консоль конвертирует ввод значение address/netmask в действительный адрес т.е 1.1.1..1/24 конвертируется в 1.1.1.0/24 src-address-list (name) - соответствие адреса источника пакета значению определенному в списке адресов 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 (multiple choice: ack | cwr | ece | fin | psh | rst | syn | urg) ниже перечислены tcp флаги ack - подтверждение данных cwr - уменьшение окна скопления ece - ECH-echo флаг(явное уведомление о скоплении) fin - закрытие соединения psh - функция проталкивания rst - сбросить соединение syn - новое соединение urg - срочные данные tcp-mss (integer: 0..65535) - соответствие IP пакета значению TCP MSS time (time-time,sat | fri | thu | wed | tue | mon | sun{+}) - принять создание фильтра в назначеное время или сгенерировать пакеты в исходное время Примечание Вместо маркировки двух правил если вы хотите например маркировать пакет - соединения или маршрут и больше не использовать таблицу mangle в данном действии(другими словами промаркировать и принять пакет), вы должны отключить установленное по умолчанию свойство passthrough промаркированного правила. Как правило маркировка маршрута не используется для P2P, так как маршрутизация P2P трафика всегда ведется через шлюз по умолчанию. Пример использования В следующей секции обсуждаются некоторые примеры использования средства mangle Peer-to-Peer Traffic Marking Для гарантированного улучшения качества работы сетевых соединений, интерактивный трафик такой как VoIP и HTTP должен быть приоритетен по отношению к неинтерактивному, такому как peer -to-peer. В RouterOS QOS использует для этого в первую очередь маркировку типа трафика, и затем помещает его в очереди с различными лимитами. Представленый ниже пример пр едоставляет P2P трафику не более чем 1 Mbps всей полосы, а всему остальному трафику разрешает использовать всю полосу: [admin@MikroTik] > /ip firewall mangle add chain=forward ... p2p=all-p2p action=mark-connection new-connection-mark=p2p_conn [admin@MikroTik] > /ip firewall mangle add chain =forward ... connection-mark=p2p_conn action=mark-packet new-packet-mark=p2p [admin@MikroTik] > /ip firewall mangle add chain=forward ... connection-mark=!p2p_conn action=mark -packet new-packet-mark=other [admin@MikroTik] > / ip firewall mangle print Flags: X - disabled, I - invalid, D - dynamic 0 chain=forward p2p=all-p2p action=mark-connection new-connection- mark=p2p_conn 1 chain=forward connection -mark=p2p_conn action=mark-packet new-packet- mark=p2p 2 chain=forward packet-mark=!p2p_conn action=mark-packet new-packet- mark=other [admin@MikroTik] > [admin@MikroTik] > /queue tree add parent=Public packet -mark=p2p limit- at=1000000 ... max-limit=100000000 priority=8 [admin@MikroTik] > / queue tree add parent=Local packet-mark=p2p limit- at=1000000 ... max-limit=100000000 priority=8 [admin@MikroTik] > /queue tree add parent=Public packet -mark=other limit- at=1000000 ... max-limit=100000000 priority=1 [admin@MikroTik] > /queue tree add parent =Local packet-mark=other limit- at=1000000 ... max-limit=100000000 priority=1 Маркировка по MAC адресам Для маркировки трафика по известным МАС адресам которые проходят к/через маршрутизатор выполните следующее: [admin@MikroTik] > / ip firewall mangle add chain=prerouting ... src-mac-address=00:01:29:60:36:E7 action=mark -connection new-connection- mark=known_mac_conn [admin@MikroTik] > / ip firewall mangle add chain =prerouting ... connection-mark=known_mac_conn action =mark-packet new-packet- mark=known_mac Смена MSS Всем известно что VPN соединения гоняют маленькие пакеты встроенные в заголовок. Большие пакеты с MSS который превышает MSS для VPN соединения может быть предварительно фрагментирован для посылки через данный вид соединения. Однако если в пакете установлен флаг DF, то он не может быть фрагментирован и быть удален. В соединениях которые имеют неверный MTU (PMTUD) это может создать ряд проблем, включая проблемы с FTP и HTTP соединениями а также почтовыми с ервисами. В случае соединений с потерянными PTUMD, уменьшение MSS пакетов проходящих через VPN соединения решает эту проблему. Приведенный ниже пример демонстрирует, как можно уменьшить значение MSS средствами mangle [admin@MikroTik] > /ip firewall mangle add out-interface=pppoe-out ... protocol=tcp tcp -flags=syn action=change -mss new-mss=1300 chain=forward [admin@MikroTik] > / ip firewall mangle print Flags: X - disabled, I - invalid, D - dynamic 0 chain=forward out-interface=pppoe-out protocol=tcp tcp-flags=syn action=change-mss new-mss=1300 [admin@MikroTik] >