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
и автоматического добавления адресов в группу.
Автор: Sergey Lagovskiy
|