Показаны сообщения с ярлыком router. Показать все сообщения
Показаны сообщения с ярлыком router. Показать все сообщения

понедельник, 19 октября 2009 г.

Mikrotik - QoS / Bandwidth Control / Индивидуальные правила



В предыдущей статье я рассказал как максимально быстро и просто организовать механизм ограничения по скорости, теперь я хочу рассказать, как построить цепочку из правил, что бы пользователь был не просто ограничен по скорости, а что бы различные ограничения действовали на различные сервисы, а так же, что бы ограничение было не таким жестким и при относительно свободном канале предоставлялась большая скорость.

Начнем как всегда - с обрисовки ситуации, которую необходимо решить.

Есть офис с доступом к сети Интернет через одного провайдера, этот провайдер предоставляет скорость равную 2Мб/с. В офисе есть два сервера, почтовый и web, которым необходимо обеспечить стабильный канал независимо как от рабочих станций, так и от самих себя. Так же в офисе есть несколько рабочих мест, которые имеют доступ к сервисам web и icq, так же есть машина системного администратора, которая имею доступ к сервисам без ограничений, но с внутренними правилами распределения трафика.



Чем сложнее задача, тем меньше шансов решить ее в одно-два действия.

Начнем с серверов, считаем, что им для нормальной работы требуется скорость в 512Кб/с, но если канал будет свободен, то пускай пользуются им во всю.

Первым шагом выделим все соединения, которые открывают сервера. Для этого маркируем все соединения, которые открывает web сервер маркером c-srv-web, а соединения, которые открывает почтовый сервер маркером c-srv-mail.
[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address="192.168.1.1"
action=mark-connection new-connection-mark="c-srv-web"

[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address="192.168.1.2"
action=mark-connection new-connection-mark="c-srv-mail"

Маркируем все пакеты от веб сервера маркером p-srv-web.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark="c-srv-web"
action=mark-packet new-packet-mark="p-srv-web"

Для работы же почтового сервера требуется большее количество портов (smtp, pop, imap...), может быть бывают ситуации, когда необходимо серверу закручивать гайки на столько, что бы ограничивать в скорости каждый сервис индивидуально, но у нас простой случай, по этому маркируем весь трафик почтового сервера маркером p-srv-mail.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark="c-srv-mail"
action=mark-packet new-packet-mark="p-srv-mail"

Теперь настало время создать правила для ограничения скорости. Первое условие - сервера гарантированно получают по 512кб/с, второе условие - не мешать друг другу (т.е. нельзя занимать весь канал, даже если он свободен), как следствие из второго максимальное ограничение это весь канал, минус гарантированная ширина для второго сервера, т.е. 1,5Мб/с.

[mkt@OFFICE] > queue tree add name="web server" parent=global-total
packet-mark=p-srv-web limit-at=512000 max-limit=1500000

[mkt@OFFICE] > queue tree add name="mail server" parent=global-total
packet-mark=p-srv-mail limit-at=512000 max-limit=1500000

Создадим правила для рядовых пользователей, считаем, что все они объединены общей группой client, лимит для них 64кб/с - гарантировано и 128кб/с - верхний предел на download и 32кб/с - гарантированно и 64кб/с - верхний предел на upload.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address-list=client
action=mark-connection new-connection-mark=c-client

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark=c-client
action=mark-packet new-packet-mark=p-client

[mkt@OFFICE] > queue tree add name="client download" parent=local
packet-mark=p-client limit-at=64000 max-limit=128000

[mkt@OFFICE] > queue tree add name="client upload" parent=isp
packet-mark=p-client limit-at=32000 max-limit=64000
local - это локальный интерфейс, а isp - это интерфейс, смотрящий в внешнюю сеть.

При таких лимитах у нас смогут спокойно работать до 16 клиентов не мешая друг другу и серверам, занимая при этом весь позволенный им канал (гарантированный), в реальности же придется давать кому то большую скорость, кому то меньшую.

Осталось настроить машину системного админисратора, которая не имеет ограничений по сервисам, но имеет общий лимит по скорости, а так же внутри этого лимита есть лимиты между сервисами. Допустим, что общий лимит это 256кб/с - гарантированно и 512кб/с - верхний предел. Для доступа к web лимит в 64кб/с - гарантировано и 256кб/с верхний предел, для доступа к p2p сетям 128 кб/с - гарантированно и 512кб/с - верхний предел, остальной трафик получает весь оставшийся канал, который остается исходя из общего лимита.

Маркируем соединения.
[mkt@OFFICE] > ip firewall mangle add chain=prerouting src-address="192.168.1.100"
action=mark-connection new-connection-mark=c-admin

Теперь маркируем все пакеты, пакеты с 80 порта, и пакеты с p2p сетей.

[mkt@OFFICE] > ip firewall mangle add chain=prerouting connection-mark=c-admin
action=mark-packet new-packet-mark=p-admin-total

[mkt@OFFICE] > ip firewall mangle add chain=prerouting protocol=tcp src-port=80
connection-mark=c-admin action=mark-packet new-packet-mark=p-admin-web

[mkt@OFFICE] > ip firewall mangle add chain=prerouting p2p=all-p2p
connection-mark=c-admin action=mark-packet new-packet-mark=p-admin-p2p

Создаем ограничения, первое это общее ограничение, потом два дочерних от него, для web и p2p.

[mkt@OFFICE] > queue tree add name="admin-total" parent=global-total
packet-mark=p-admin-total limit-at=256000 max-limit=512000

[mkt@OFFICE] > queue tree add name="admin-web" parent=admin-total
packet-mark=p-admin-web limit-at=64000 max-limit=256000

[mkt@OFFICE] > queue tree add name="admin-p2p" parent=admin-total
packet-mark=p-admin-p2p limit-at=128000 max-limit=512000
В результате получим такую "ступеньку".


На этом все.
Продолжение следует...
Progg it

Читать дальше...

суббота, 3 октября 2009 г.

Mikrotik - QoS / Bandwidth Control / Простое ограничение



Quality of Service (QoS) это комплекс мер по обеспечению качества обслуживания компьютерной сети, который можно характеризовать несколькими параметрами:
# Полоса пропускания (Bandwidth).
# Задержка при передаче пакета (Delay).
# Колебания (дрожание) задержки при передаче пакетов — джиттер (Jitter).
# Потеря пакетов (Packet loss).

В следующих примерах я продемонстрирую как организовать простой механизм ограничения скорости, используя MikroTik Router OS.
Придумаем виртуальную схему сети и создадим конфигурацию роутера для нее.


Итак, два филиала, в филиале А находится несколько рабочих мест, почтовый сервер и web сервер, роутер этого филиала подключен одновременно к двум провайдерам, провайдер ISP1 предоставляет 100Мб внутри своей сети, внутренний трафик не тарифицируется, второй провайдер ISP2 предоставляет безлимитный доступ к сети Internet. В филиале В находится терминальный сервер, этот филиал так же подключен к провайдеру ISP1.

Вся дальнейшая настройка будет делаться для роутера филиала А.
В этой статье дается описание настройки ограничения по скорости доступа все остальные настройки можно найти в предыдущих статьях.


Необходимо:
  1. Работа по каналу провайдера ISP2
    1. Ограничить скорость доступа офисным машинам к сети Internet:
      • Машины 192.168.1.10-192.168.1.15 - Download = 64kb/s, Upload = 32kb/s
      • Машина 192.168.1.20 - Download = 256kb/s, Upload = 128kb/s
    2. Ограничить скорость доступа почтового сервера - Donwload = 1Mb/s, Upload = 1Mb/s
    3. Ограничить скорость доступа web сервера - Download = 1Mb/s, Upload = 4Mb/s
  2. Работа по каналу провайдера IPS1
    1. Ограничить скорость доступа офисным машинам 192.168.1.10-192.168.1.15 до уровня, достаточного для работы с 1-2 одновременными терминальными сеансами (RDP) - 1Mb/s
    2. Ограничить скорость доступа машины 192.168.1.20 до 10Mb/s
    3. Ограничить скорость доступа серверов до 10Mb/s
Самым простым механизмом ограничения скорости доступа является /queue simple, ограничения задаются в виде правил, правила обрабатываются по порядку от меньшего номера к большему (сверху вниз).

Т.к. оговорено, что провайдер IPS1 предоставляет доступ ко внутренней сети, то известна подсеть, которую будут использовать филиалы для совместной работы.

Первым шагом создадим правила для серверов.

[mkt@MikroTik] > queue simple add name="mail to branch" target-addresses=192.168.1.2
dst-address=195.82.111.0/24 interface=ISP1 max-limit=10000000/10000000
target-addresses - адрес, который ограничиваем.
dst-address - назначение, в нашем случае это подсеть внутри провайдера.
interface - интрефес, через который буду проходить пакеты от target-addresses к dst-address.
max-limit - значение максимальной скорости (target upload/download)

Теперь тоже, но для веб сервера и 192.168.1.20.

[mkt@MikroTik] > queue simple add name="web to branch" target-addresses=192.168.1.3
dst-address=195.82.111.0/24 interface=ISP1 max-limit=10000000/10000000

[mkt@MikroTik] > queue simple add name="192.168.1.20 to branch"
target-addresses=192.168.1.20 dst-address=195.82.111.0/24 interface=ISP1
max-limit=10000000/10000000

Значение name должно быть уникальным!


Теперь правило для машин 192.168.1.10-192.168.1.15.

[mkt@MikroTik] > queue simple add name="192.168.1.10-15 to branch"
target-addresses=192.168.1.10,192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,
192.168.1.15 dst-address=195.82.111.0/24 interface=ISP1 max-limit=1000000/1000000

В target-addresses можно указать перечисление адресов, на которые распространяется это правило.


Считаем, что с правилами маршрутизации проблем нет и то, что должно пойти по не тарифицируемому каналу, то по нему пойдет и не свернет случайно на второй интерфейс, который со стороны филиала А безлимитный, а вот со стороны филиала В находится уже другой провайдер, который выставит счет за такую ошибку. А вдруг что то не так? Или этими настройками занимается другой человек, лучше себя подстраховать!
Защитится от этого можно одним простым правилом, все, что не предназначено подсети, в которой находятся наши филиалы, должно быть ограничено до скорости в 10b/s.
Можно перефразировать задачу по другому, учитывая, что правилами, которые стоят выше, оговорены ограничения для доступа к филиалам через интерфейс ISP1, остальные соединения, проходящие через интерфейс ISP1 ограничить скоростью в 10b/s.

[mkt@MikroTik] > queue simple add name="not to branch" interface=ISP1
max-limit=10/10

Теперь настало время прописать ограничения для работы со вторым провайдером.


Начнем так же с серверов.

Почтовый серер - 1Mb/s, Upload = 1Mb/s

[mkt@MikroTik] > queue simple add name="mail to external"
target-addresses=192.168.1.2 interface=ISP2 max-limit=1000000/1000000

Веб сервер - Download = 1Mb/s, Upload = 4Mb/s.


[mkt@MikroTik] > queue simple add name="web to external"
target-addresses=192.168.1.3 interface=ISP2 max-limit=4000000/1000000

Теперь машина 192.168.1.20 - Download = 256kb/s, Upload = 128kb/s


[mkt@MikroTik] > queue simple add name="192.168.1.20 to external"
target-addresses=192.168.1.20 interface=ISP2 max-limit=128000/256000

В заключение одним правилом для машин 192.168.1.10-192.168.1.15 - Download = 64kb/s, Upload = 32kb/s


[mkt@MikroTik] > queue simple add name="192.168.1.10-15 to external"
target-addresses=192.168.1.10,192.168.1.11,192.168.1.12,192.168.1.13,192.168.1.14,
192.168.1.15 interface=ISP2 max-limit=32000/64000

Продублируем защиту для интрефейса ISP2, что бы все выходящее с него в подсеть филиалов ограничивалось скоростью в 10b/s.


[mkt@MikroTik] > queue simple add name="ISP2 to branch" dst-address=195.82.111.0/24
interface=ISP2 max-limit=10/10
Посмотрим, что у нас получилось.
[mkt@MikroTik] > queue simple print
Flags: X - disabled, I - invalid, D - dynamic
0 name="web to branch" target-addresses=192.168.1.3/32
dst-address=195.82.111.0/24 interface=ISP1 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=10000000/10000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

1 name="192.168.1.20 to branch" target-addresses=192.168.1.20/32
dst-address=195.82.111.0/24 interface=ISP1 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=10000000/10000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

2 name="192.168.1.10-15 to branch"
target-addresses=192.168.1.10/32,192.168.1.11/32,192.168.1.12/32,
192.168.1.13/32,192.168.1.14/32,192.168.1.15/32
dst-address=195.82.111.0/24 interface=ISP1 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=1000000/1000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

3 name="not to branch" dst-address=0.0.0.0/0 interface=ISP1 parent=none
direction=both priority=8 queue=default-small/default-small
limit-at=0/0 max-limit=10/10 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

4 name="mail to external" target-addresses=192.168.1.2/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=1000000/1000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

5 name="web to external" target-addresses=192.168.1.3/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=4000000/1000000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

6 name="192.168.1.20 to external" target-addresses=192.168.1.20/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=128000/256000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

7 name="192.168.1.10-15 to external"
target-addresses=192.168.1.10/32,192.168.1.11/32,192.168.1.12/32,
192.168.1.13/32,192.168.1.14/32,192.168.1.15/32
dst-address=0.0.0.0/0 interface=ISP2 parent=none direction=both
priority=8 queue=default-small/default-small limit-at=0/0
max-limit=32000/64000 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small

8 name="ISP2 to branch" dst-address=195.82.111.0/24 interface=ISP2
parent=none direction=both priority=8 queue=default-small/default-small
limit-at=0/0 max-limit=10/10 burst-limit=0/0 burst-threshold=0/0
burst-time=0s/0s total-queue=default-small



Это самый простой из механизмов ограничения скорости и обеспечения качества сервиса.
Progg it
Продолжение следует...
Читать дальше...

среда, 2 сентября 2009 г.

MikroTik - Winbox & Console



MikroTik Router OS предоставляет несколько инструментов для настройки и управления системой, пожалуй, основными являются консоль (telnet, ssh) и winbox.
В этой статье я попробую рассказать про плюсы и минусы обоих методов, а так же как читать консольные команды и представлять их в виде графического интерфейса winbox.



Winbox представляет из себя небольшую утилиту, размером в несколько десятков килобай. При запуске будет выдан запрос адреса устройства, к которому необходимо подключиться, а так же имя и пароль.


Старый интерфейс

Новый интерфейс со списком устройств

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

Следующим шагом winbox скачивает с роутера файлы интерфейса, причем от версии к версии эти файлы меняются, так что будьте готовы к тому, что до 20мб трафика на это уйдет.

Если все нормально, то попадаем в интерфейс winbox:

интерфес к версии 2.5

интерфес к версии 2.7

интерфес к версии 2.9

интерфес к версии 3,20

Как видно от версии к версии основное меню все так же остается на прежнем месте, вертикальный список с левой стороны, оно практически полностью повторяет основное меню консольного интерфейса:

[mkt@MikroTik] >
certificate -- Certificate management
driver -- Driver management
file -- Local router file storage.
import --
interface --
ip --
ipv6 --
isdn-channels -- ISDN channel status info
log -- System logs
password -- Change password
ping -- Send ICMP Echo packets
port -- Serial ports
ppp -- Point to Point Protocol
queue -- Bandwidth management
quit -- Quit console
radius -- Radius client settings
redo -- Redo previosly undone action
routing --
setup -- Do basic setup of system
snmp -- SNMP settings
special-login -- Special login users
store --
system --
tool --
undo -- Undo previous action
user --
xen --
export -- Print or save an export script that can
be used to restore configuration
Второй уровень меню точно так же похож на консольное, в этом пожалуй, первое преимущество графического интерфейса - удовольствие кликать по меню мышкой, а если серьезно, то когда только начинаешь знакомиться с системой, то лучше что бы все доступное было перед глазами и переход от одного раздела к другому занимал секунды, пускай по началу обилие всего будет пугать и глаза будут разбегаться, но потом все встанет на свои места. К тому же если на моменте установки ограничиться только теми пакетами, которые на самом деле нужны, то количество пунктов в меню заметно уменьшится.

Практически каждое окно настроек содержит одинаковый набор инструментов:


Добавить элемент, аналогично консольной команде add.
Удалить выбранный элемент, консольная команда remove.
Сделать выбранный элемент активным, в консоле это выглядит как enable.
Сделать выбранный элемент не активным, в консоле это выглядит как disable.
Добавить комментарий к выбранному элементу (работает не на всех элементах), то же в консоле comment="".
Открывает дополнительную панель фильтрации, в консоле для тех же функций используется команда find.
Сброс счетчика пакетов и трафика для выбранного элемента, или же reset-counters.
Сброс всех счетчиков, равносильно команде reset-counters-all.
В версии 3 появляется возможность быстрого поиска.
Быстрый фильтр по типам элементов.

Рассмотрим несколько примеров работы с интерфейсом.

Добавление адреса сетевому интерфейсу:

Вводим адрес в поле Address, через "/" указываем маску, поля Network и Broadcast будут автоматически рассчитаны.

В поле Interface выбираем интерфейс, которому назначается адрес.

По нажатию на кнопку Comment можно добавить комментарий.

Кнопками Enable/Disable активируется или выключается этот адрес.

Кнопкой Copy можно продублировать запись, кнопка Remove удаляет адрес.

Тоже самое можно записать в виде консольной команды:
[mkt@MikroTik] > ip address add address=192.168.0.1/24 interface=LOCAL
comment="Local network"
Попробую представить это все вместе и разделить действие на блоки, каждому блоку назначу определенный цвет.

ОписаниеКонсоль
Добавить ip адрес 192.168.0.1 с маской 255.255.255.0 на сетевой интерфейс LOCAL и вставить комментарий "Local network"
ip address add address=192.168.0.1/24 interface=LOCAL
comment="Local network"
Winbox

Добавление правила в Firewall rules:

Разрешить трафик с адреса 192.168.0.2 на любые адреса по 80 порту, плюс добавить комментарий к правилу. Набор кнопок тот же самый, только добавляется возможность сброса счетчиков.

Теперь тоже самое, но в консоле:
[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2 protocol=tcp
dst-port=80 action=accept comment="Allow http for server (out)"
Можно сказать, что в консоле все гораздо красивее и понятнее, практически как звучит само описание правила, так она и записана.
Но! Теперь мы сталкиваемся с ситуацией, что после добавления наше правило попадает в конец списка, это вполне нормально, если настройка идет в первый раз, набор правил уже известен, только и набирай, а если в таблице уже существует под 50 строк правил и новое добавляется где-то в середину?
В консоле на набираем:
[mkt@MikroTik] > ip firewall filter print

Flags: X - disabled, I - invalid, D - dynamic
0 ;;; Drop invalid connection
chain=forward action=drop connection-state=invalid

1 ;;; Allow established connections
chain=forward action=accept connection-state=established

2 ;;; Allow related connections
chain=forward action=accept connection-state=related

3 ;;; Allow UDP
chain=forward action=accept protocol=udp

4 ;;; Allow ICM Ping
chain=forward action=accept protocol=icmp

5 ;;; Allow all for admin
chain=forward action=accept dst-address=192.168.0.10

6 ;;; Allow all for admin
chain=forward action=accept src-address=192.168.0.10

-- [Q quit|D dump|down]

И получаем список правил, который уместился в размер окна, клавишами вверх и вниз ищем нужное место, запоминаем порядковый номер правила, после которого соответствующими командами перемещаем новое правило туда. Прямо по хакерски!
А как же обстоит дело в графическом интерфейсе?

Все просто, находим нужное место и мышкой перетаскиваем туда правило, в колонке Bytes и Packets начинают увеличиваться счетчики, значит правило заработало, так что некоторое преимущество на лицо.

Вернемся опять к нашему правилу и допустим, что нам нужно, что бы оно работало не постоянно, а только в определенные часы, на пример с 9-00 до 17-00 в будние дни. В графическом интерфейсе все очень просто, переходим на вкладку Extra и в разделе Time выставляем параметры.

А что же в консоле?
[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2 protocol=tcp
dst-port=80 action=accept comment="Allow http for server (out)"
time=9h-17h,mon,tue,wed,thu,fri
Вот так постепенно в принципе простая команда "обрастает" множеством параметров, а если добавим сюда еще парочку, как то ограничение на подключения, обработку не конкретного адреса, а группы адресов, и получим хорошую поэму в 5-7 строк!

Теперь тоже самое, все вместе и с выделением блоков.

ОписаниеКонсоль
Добавить новое правило фильтрации в firewall. Разрешить исходящий трафик с адреса 192.168.0.2 любой по протоколу tcp, на 80 порт. Добавить комментарий "Allow http for server (out)". Правило должно действовать в будние дни с 9-00 до 17-00.
ip firewall filter add chain=forward src-address=192.168.0.2 protocol=tcp dst-port=80 action=accept сomment="Allow http for server (out)" time=9h-17h,mon,tue,wed,thu,fri
Winbox


Настройка DNS:

Прописать в настройках DNS в качестве первичного сервера 208.67.222.222, а в качестве резервного 208.67.220.220, а так же разрешить удаленные запросы.

Консольная команда будет выглядеть так:
[mkt@MikroTik] > ip dns set primary-dns=208.67.222.222 secondary-dns=208.67.220.220
allow-remote-requests=yes
Теперь добавим статическую DNS запись, что бы обращение к supersite.ru вели к локальному веб серверу по адресу 192.168.0.2, а так же укажем TTL для этой записи в 600сек.


Консоль:
[mkt@MikroTik] > ip dns static add name=supersite.ru address=192.168.0.2 ttl=00:
10:00
Все вместе с разделением на блоки:

ОписаниеКонсоль
Прописать в настройках DNS в качестве первичного сервера 208.67.222.222, а в качестве резервного 208.67.220.220, разрешить удаленные запросы.ip dns set primary-dns=208.67.222.222 secondary-dns=208.67.220.220 allow-remote-requests=yes
Winbox



ОписаниеКонсоль
Добавить статическую DNS запись, что бы обращение к supersite.ru вели к адресу 192.168.0.2, TTL равно 600секip dns static add name=supersite.ru address=192.168.0.2 ttl=00:10:00
Winbox

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

Пожалуй стоит отметить большой набор утилит, которые включены в MikroTik router OS. Они доступны как с графического интерфейса, так и с консоли.


Но чего уж тут хитрить, в консоле с ними гораздо сложнее работать, чем графическом интерфейсе, разговор о них этой уже отдельная тема.

Но все же у winbox-а есть один недостаток, он очень любит хорошие и быстрые каналы. Отображать на экране несколько десятков правил и в реальном времени обновлять значения счетчиков, да еще на нескольких экранах сразу, а добавим сюда еще монитор соединений в реальном времени и получим, что надо иметь хотя бы 1-2мб/с для таких игр, хотя если сократить количество открытых одновременно окон до одного - двух, то можно ужиться и на gps соединении.

Winbox очень помогает в настройке, возможность видеть все и сразу сильно облегчает поиск проблем в сети, но знание консольных команд тоже дорогого стоит, особенно когда поймешь, что любая команда очень легко интерпретируется в графический интерфейс (по моему на примерах выше это хорошо видно).

П
родолжение следует...
Progg it

Читать дальше...

понедельник, 17 августа 2009 г.

MiktoTik - Два провайдера - распределение по каналам


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

На пример веб сервер, выведенный через NAT на IP адрес первого провайдера получает запрос, а вот вероятность того, что ответ пойдет по нужному каналу уже не 100%. Какой же он после этого веб сервер?


Решить эту проблему нам поможет механизм маркировки пакетов.

Таблица MANGLE предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов.
В частности нас интересует цепочка PREROUTING, которая позволяет маркировать пакет до маршрутизации.

Попробуем разобраться с веб сервером.

Допустим у нас настроен NAT 80 порта с внешнего IP 192.168.1.116 (ISP1, первый провайдер) на 80 порт веб сервера в локальной сети и необходимо гарантировать, что все ответы, которые буду идти от веб сервера попадали на шлюз первого провайдера.


Вот правило для таблицы NAT.
[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.1.116
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80
comment="NAT 80 port from ISP1 to local web server"

[mkt@MikroTik] > ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=masquerade out-interface=!LOCAL

1 ;;; NAT 80 port from ISP1 to local web server
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80
protocol=tcp dst-address=192.168.1.116 dst-port=80

Первым шагом создадим правило в таблице MANGLE.
[mkt@MikroTik] > ip firewall mangle add chain=prerouting  src-address=192.168.0.2
protocol=tcp src-port=80 action=mark-routing new-routing-mark=to-isp1

[mkt@MikroTik] > ip firewall mangle print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=prerouting action=add-src-to-address-list protocol=tcp
address-list=test_list address-list-timeout=0s dst-port=23

1 chain=prerouting action=mark-routing new-routing-mark=to-isp1
passthrough=yes protocol=tcp src-address=192.168.0.2 src-port=80

Пакеты с локального адреса 192.168.0.2 с 80 порта буду маркироваться как to-isp1.

Вторым шагом добавим правило в таблицу маршрутизации.

[mkt@MikroTik] > ip route add gateway=192.168.1.249 routing-mark=to-isp1


[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 A S 0.0.0.0/0 192.168.1.249 r... 1
192.168.1.249 r...
192.168.222.1 r...
2 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
3 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
4 ADC 192.168.222.0/24 192.168.222.100 ISP2 0
Все что приходит с маркером to-isp1 отправляется на шлюз первого провайдера.

Теперь усложним ситуацию, допустим второй провайдер предоставят на выгодных условиях большую локальную сеть по всему городу и через эту сеть объединены все 10 филиалов вашей фирмы. Все филиалы и офис пользуются тем же сайтом, но какой смысл ходить на него через первого провайдера, когда можно настроить доступ к нему практически локально.

В первую очередь добавляем правило в таблицу NAT, по которому все запросы, пришедшие на внешний IP адрес, который предоставляет 2-ой провайдер, на 80 порт будут переадресовываться на 80 порт локального веб сервера.
[mkt@MikroTik] > ip firewall nat add chain=dstnat dst-address=192.168.222.100
protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.0.2 to-ports=80
comment="NAT 80 port from ISP2 to local web server"

[mkt@MikroTik] > ip firewall nat print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=masquerade out-interface=!LOCAL

1 ;;; NAT 80 port from ISP1 to local web server
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80
protocol=tcp dst-address=192.168.1.116 dst-port=80

2 ;;; NAT 80 port from ISP2 to local web server
chain=dstnat action=dst-nat to-addresses=192.168.0.2 to-ports=80
protocol=tcp dst-address=192.168.222.100 dst-port=80


Следующим шагом добавим в таблицу MANGLE еще одно правило:
[mkt@MikroTik] > ip firewall mangle add chain=prerouting src-address=192.168.0.2
protocol=tcp src-port=80 dst-address=192.168.222.0/24 action=mark-routing
new-routing-mark=to-isp2

[mkt@MikroTik] > ip firewall mangle print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=prerouting action=add-src-to-address-list protocol=tcp
address-list=test_list address-list-timeout=0s dst-port=23

1 chain=prerouting action=mark-routing new-routing-mark=to-isp2
passthrough=yes protocol=tcp src-address=192.168.0.2
dst-address=192.168.222.0/24 src-port=80

2 chain=prerouting action=mark-routing new-routing-mark=to-isp1
passthrough=yes protocol=tcp src-address=192.168.0.2 src-port=80

Пакеты с локального адреса 192.168.0.2 с 80 порта буду маркироваться как to-isp2 если они предназначены для подсети второго провайдера.

Ну и в заключении правило в таблице маршрутизации:

[mkt@MikroTik] > ip route add gateway=192.168.222.1 routing-mark=to-isp2

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 A S 0.0.0.0/0 192.168.222.1 r... 1
2 A S 0.0.0.0/0 192.168.1.249 r... 1
192.168.1.249 r...
192.168.222.1 r...
3 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
4 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
5 ADC 192.168.222.0/24 192.168.222.100 ISP2 0
Теперь на запросы, пришедшие со стороны первого провайдера, ответ пойдет на шлюз первого провайдера, а на запросы со стороны второго провайдера и из подсети второго провайдера ответ пойдет на шлюз второго провайдера.

Продолжение следует.

Progg it

Читать дальше...

суббота, 1 августа 2009 г.

MiktoTik - Два провайдера - балансировка нагрузки



В последнее время ситуация, когда доступны несколько провайдеров не нова, MikroTik Router OS позволяет настроить доступ сразу по нескольким сетевым интерфейсам, а так же настроить балансировку нагрузки в зависимости от ограничений, которые выставляет провайдер.





Первым шагом настроим дополнительный интерфейс.

Инициализируем сам интерфейс.
[mkt@MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R ether1 ether 1500
1 R ether2 ether 1500
2 X ether3 ether 1500

[mkt@MikroTik] /interface> enable 2

[mkt@MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R ether1 ether 1500
1 R ether2 ether 1500
2 R ether3 ether 1500

Для удобства все же пора дать более понятные имена интерфейсам.

[mkt@MikroTik] /interface> set ether1 name="ISP1"

[mkt@MikroTik] /interface> set ether2 name="LOCAL"

[mkt@MikroTik] /interface> set ether3 name="ISP2"

[mkt@MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
# NAME TYPE MTU
0 R ISP1 ether 1500
1 R LOCAL ether 1500
2 R ISP2 ether 1500

Теперь назначим IP адрес новому интерфейсу.

[mkt@MikroTik] > ip address add address=192.168.222.100/24 interface=ISP2

[mkt@MikroTik] > ip address print
Flags: X - disabled, I - invalid, D - dynamic
# ADDRESS NETWORK BROADCAST INTERFACE
0 192.168.1.116/24 192.168.1.0 192.168.1.255 ISP1
1 192.168.0.1/24 192.168.0.0 192.168.0.255 LOCAL
2 192.168.222.100/24 192.168.222.0 192.168.222.255 ISP2

Настало время изменить маршрутизацию по умолчанию. Для начала допустим, что оба провайдера предоставляют одинаковую скорость доступа к сети Internet, значит настроим балансировку (это когда для исходящих соединений каналы чередуются), так что бы запросы распеределялись равномерно, т.е. 50/50. Прежде всего удалим старый шлюз по умолчанию.

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

[mkt@MikroTik] > ip route remove 0

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
1 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
2 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

И добавим новый, точнее новые.

[mkt@MikroTik] > ip route add dst-address=0.0.0.0/0
gateway=192.168.1.249,192.168.222.1

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.1.249 r... 1
192.168.222.1 r...
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0

Предположим, что у первого провайдера скорость доступа в два раза выше чем у второго, тогда 2/3 исходящих запросов надо направить на первого, а оставшиеся 1/3 на второго.

[mkt@MikroTik] > ip route add dst-address=0.0.0.0/0
gateway=192.168.1.249,192.168.1.249,192.168.222.1

[mkt@MikroTik] > ip route print
Flags: X - disabled, A - active, D - dynamic,
C - connect, S - static, r - rip, b - bgp, o - ospf, m - mme,
B - blackhole, U - unreachable, P - prohibit
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 A S 0.0.0.0/0 192.168.222.1 r... 1
192.168.1.249 r...
192.168.1.249 r...
1 ADC 192.168.0.0/24 192.168.0.1 LOCAL 0
2 ADC 192.168.1.0/24 192.168.1.116 ISP1 0
3 ADC 192.168.222.0/24 192.168.222.100 ISP2 0


Это простейший вариант настройки, при котором получаем выход в интернет с балансировкой нагрузки, но у такого подхода есть ряд недостатков, на пример не будет работать доступ через на NAT к локальному серверу (сервисы web, smtp, pop, которые были настроены
ранее), но не такая большая проблема, но об этом в следующий раз.

Продолжение следует.
Progg it

Читать дальше...

среда, 15 июля 2009 г.

MikroTik - Списки и группы адресов



Когда настраивается маршрутизатор, который отвечает за доступ к сети для нескольких человек, то достаточно прописать правила для конкретных адресов в firewall filter rules и на этом успокоится, но когда ip, которым нужно прописать доступ, не один десяток?

Для решения проблемы управления большим количеством ip адресов в MiktoTik Router OS есть механизм сознания списков адресов и объединения их в группы. Дальше составления правил для firewall-а идет на основании этих групп. Адреса можно добавлять как в ручную, так и динамически с помощью правил.

Рассмотрим ручное добавление адресов:

Перейдем в раздел address-list.
/ip firewall address-list

Для дальнейших примеров будем использовать описанную ранее конфигурацию сети.

  • Mikrotik - 192.168.0.1

  • PC 5 - 192.168.0.2, web, ftp, mail сервер

  • PC 4 - 192.168.0.10, Администратор, полный доступ

  • PC 1 - 192.168.0.20, Простой доступ: http, https, icq, jabber, ftp

  • PC 2 - 192.168.0.21, Простой доступ: http, https, icq, jabber, ftp

  • PC 3 - 192.168.0.22, Простой доступ: http, https, icq, jabber, ftp


Сразу видно, что адреса можно разделить на три группы доступа:

  • SERVER (192.168.0.2)

  • FULL (192.168.0.10)

  • USER (192.168.0.20, 192.168.0.21, 192.168.0.22)


Группа создается простым упоминанием о ней. Добавим адрес 192.168.0.2 в группу SERVER:

[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.2/32"
list="SERVER" comment="web, ftp, mail server"

Адрес 192.168.0.10 в группу FULL:
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.10/32"
list="FULL" comment="Administrator"

Адресa 192.168.0.20, 192.168.0.21, 192.168.0.22 в группу USER:
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.20/32"
list="USER" comment="User #1"
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.21/32"
list="USER" comment="User #2"
[mkt@MikroTik] /ip firewall address-list> add address="192.168.0.22/32"
list="USER" comment="User #3"

Посмотрим, что у нас получилось:
[mkt@MikroTik] /ip firewall address-list> print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22

Теперь можно пересмотреть наши правила, созданные раннее.
Правила для администратора, написанные ранее:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.10/32
action=accept comment="Allow all for admin"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.10/32
action=accept comment="Allow all for admin"

Можно переписать так:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="FULL
action=accept comment="Allow all for group FULL"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="FULL
action=accept comment="Allow all for group FULL"

Изменим правила сервера, созданные ранне:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=80 action=accept comment="Allow http for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=80 action=accept comment="Allow http for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=25 action=accept comment="Allow smtp for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=25 action=accept comment="Allow smtp for server (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.2/32
protocol=tcp src-port=110 action=accept comment="Allow pop for server (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.2/32
protocol=tcp dst-port=110 action=accept comment="Allow pop for server (out)"

На эти:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=80 action=accept comment="Allow http for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=80 action=accept comment="Allow http for group SERVER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=25 action=accept comment="Allow smtp for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=25 action=accept comment="Allow smtp for group SERVER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="SERVER"
protocol=tcp src-port=110 action=accept comment="Allow pop for group SERVER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="SERVER"
protocol=tcp dst-port=110 action=accept comment="Allow pop for group SERVER (out)"

Пока что оптимизация не большая, но сейчас займемся правилами для доступа простых пользователей и вместо блока, повторяющегося 3-и раза для каждой машины:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=80 action=accept comment="Allow http for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=80 action=accept comment="Allow http for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=443 action=accept comment="Allow https for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=443 action=accept comment="Allow https for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=21 action=accept comment="Allow ftp for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=21 action=accept comment="Allow ftp for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5190 action=accept comment="Allow icq for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=5190 action=accept comment="Allow icq for pc1 (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address=192.168.0.20/32
protocol=tcp src-port=5222 action=accept comment="Allow jabber for pc1 (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address=192.168.0.20/32
protocol=tcp dst-port=5222 action=accept comment="Allow jabber for pc1 (out)"

Создадим блок правил для группы USER:
[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=80 action=accept comment="Allow http for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=80 action=accept comment="Allow http for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=443 action=accept comment="Allow https for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=443 action=accept comment="Allow https for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=21 action=accept comment="Allow ftp for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=21 action=accept comment="Allow ftp for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=5190 action=accept comment="Allow icq for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=5190 action=accept comment="Allow icq for group USER (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="USER"
protocol=tcp src-port=5222 action=accept comment="Allow jabber for group USER (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="USER"
protocol=tcp dst-port=5222 action=accept comment="Allow jabber for group USER (out)"

Теперь, когда в сети появляется новая машина, которой нужно дать права для доступ в сеть, то достаточно добавить ее в соответствующую группу адресов.
На пример у нас появляется новая машина с адресом 192.168.0.23, которой нужен доступ как и остальных пользователей группы USER, но за исключением доступа к ICQ и JABBER, ну уж очень болтливый пользователь :)
Добавим его в группу USER, а так же в новую группу BLOCK_IM
[mkt@MikroTik] > ip firewall address-list add address="192.168.0.23/32"
list="USER" comment="User #4"
[mkt@MikroTik] > ip firewall address-list add address="192.168.0.23/32"
list="BLOCK_IM" comment="User #4"

Получим:
[mkt@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22
5 ;;; User #4
USER 192.168.0.23
6 ;;; User #4
BLOCK_IM 192.168.0.23

Теперь машина с ip адресом 192.168.0.23 уже имеет доступ, оговоренный для группы USER, но не блокируется траффик ICQ и JABBER.
Создадим дополнительные правила для группы BLOCK_IM.
[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="BLOCK_IM"
protocol=tcp dst-port=5190 action=drop comment="Drop icq for group BLOCK_IM (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="BLOCK_IM"
protocol=tcp src-port=5190 action=drop comment="Drop icq for group BLOCK_IM (in)"

[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list="BLOCK_IM"
protocol=tcp dst-port=5222 action=drop comment="Drop jabber for group BLOCK_IM (out)"

[mkt@MikroTik] > ip firewall filter add chain=forward dst-address-list="BLOCK_IM"
protocol=tcp src-port=5222 action=drop comment="Drop jabber for group BLOCK_IM (in)"

Посмотрим, что получилось:
[mkt@MikroTik] > ip firewall filter print
Flags: X - disabled, I - invalid, D - dynamic
0 ;;; Drop invalid connection
chain=forward action=drop connection-state=invalid

1 ;;; Allow established connections
chain=forward action=accept connection-state=established

2 ;;; Allow related connections
chain=forward action=accept connection-state=related

3 ;;; Allow UDP
chain=forward action=accept protocol=udp

4 ;;; Allow ICM Ping
chain=forward action=accept protocol=icmp

5 ;;; Allow all for group FULL
chain=forward action=accept dst-address-list=FULL

6 ;;; Allow all for group FULL
chain=forward action=accept src-address-list=FULL

7 ;;; Allow http for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=80

8 ;;; Allow http for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=80

9 ;;; Allow smtp for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=25

10 ;;; Allow smtp for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=25

11 ;;; Allow pop for group SERVER (in)
chain=forward action=accept protocol=tcp dst-address-list=SERVER src-port=110

12 ;;; Allow pop for group SERVER (out)
chain=forward action=accept protocol=tcp src-address-list=SERVER dst-port=110

13 ;;; Allow http for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=80

14 ;;; Allow http for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=80

15 ;;; Allow https for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=443

16 ;;; Allow https for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=443

17 ;;; Allow ftp for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=21

18 ;;; Allow ftp for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=21

19 ;;; Allow icq for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=5190

20 ;;; Allow icq for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=5190

21 ;;; Allow jabber for group USER (in)
chain=forward action=accept protocol=tcp dst-address-list=USER src-port=5222

22 ;;; Allow jabber for group USER (out)
chain=forward action=accept protocol=tcp src-address-list=USER dst-port=5222

23 ;;; Drop all
chain=forward action=drop

24 ;;; Drop icq for group BLOCK_IM (out)
chain=forward action=drop protocol=tcp src-address-list=BLOCK_IM dst-port=5190

25 ;;; Drop icq for group BLOCK_IM (in)
chain=forward action=drop protocol=tcp dst-address-list=BLOCK_IM src-port=5190

26 ;;; Drop jabber for group BLOCK_IM (out)
chain=forward action=drop protocol=tcp src-address-list=BLOCK_IM dst-port=5222

27 ;;; Drop jabber for group BLOCK_IM (in)
chain=forward action=drop protocol=tcp dst-address-list=BLOCK_IM src-port=5222

В таком варианте блокирование траффика IM не будет т.к. правила разрешающие его 19, 20, 21, 22 стоят выше, чем блокирующие 24, 25, 26, 27. Поднимем их повыше.
[mkt@MikroTik] > ip firewall filter move 24 5
[mkt@MikroTik] > ip firewall filter move 25 5
[mkt@MikroTik] > ip firewall filter move 26 5
[mkt@MikroTik] > ip firewall filter move 27 5

Теперь все работает, что надо пропустить - пропускается, что надо заблокирова - блокируется.

Но адреса можно добавлять не только в ручную, но и динамически, для этого используется таблица Mengle.

Рассмотрим динамическое добавление адресов.

К примеру, нам необходимо заблокировать пользователей, подключающихся из вне к маршрутизатору по протоколу Telnet.
Создаем правило в таблице Mangle, которое добавляет ip адрес источника при попытке подключиться по протоколу tcp на 23 порт через интерфейс ether1, который подключен к провайдеру в группу BLOCK.
[mkt@MikroTik] > ip firewall mangle add chain=prerouting protocol=tcp dst-port=23
in-interface=ether1 action=add-src-to-address-list address-list="BLOCK"

Теперь создадим правило, которое будет блокировать ip адреса, внесенные в группу BLOCK, а заодно поднимем правило на самый верх таблицы.
[mkt@MikroTik] > ip firewall filter add chain=forward src-address-list=BLOCK
action=drop comment="Block incomming from group BLOCK"

[mkt@MikroTik] > ip firewall filter move 28 0

После того, как кто то попробует подключиться к маршрутизатору из вне, то, он автоматически будет включен в группу BLOCK, как это получилось с адресом 192.168.1.217.
[mkt@MikroTik] > ip firewall address-list print
Flags: X - disabled, D - dynamic
# LIST ADDRESS
0 ;;; web, ftp, mail server
SERVER 192.168.0.2
1 ;;; Administrator
FULL 192.168.0.10
2 ;;; User #1
USER 192.168.0.20
3 ;;; User #2
USER 192.168.0.21
4 ;;; User #3
USER 192.168.0.22
5 ;;; User #4
USER 192.168.0.23
6 ;;; User #4
BLOCK_IM 192.168.0.23
7 D BLOCK 192.168.1.217

Это ни в коем случае не "рабочее" решение по защите маршрутизатора, а просто демонстрация работы таблицы Mangle и автоматического добавления адресов в группу.

Продолжение следует.
Progg it

Читать дальше...