[Updated] Настройка firewall MicroTik
Задачи:
- Настройка односторонней связи между узлами.
- Установить DNS для конкретного адреса чтобы работать с доменом прозрачно.
- Настроить VPN для выхода через него в сеть во избежание блокировок некоторых ресурсов, таких как торрент.
- UPD: пример, с объяснением, базовой конфигурации брандмауэра.
Существует два основных подхода в настройке Firewall:
- Все разрешено и запрещен конкретный трафик
- Запрещено все и разрешен конкретный трафик. Первый вариант значительно проще, его используют большинство. В этой статье я предлагаю рассмотреть второй вариант, на примере распространённого сетевого оборудования фирмы MicroTik.
Пропуская базовую настройку, сразу переходим к брандмауэру.
Важно: последовательность правил крайне важна, так как при поступлении пакета, он идет сверху вниз, достигая правила, которое его обрабатывает останавливается. То есть вначале должны быть правила охватывающие большую часть трафика
Создаем правило Deny all
Если необходимо настроить одностороннюю связь между, например сервером и клиентом, тогда необходимо создать ОБЯЗАТЕЛЬНО два правила, в обе стороны, иначе работать ничего не будет.
На первом скриншоте трафик от клиента серверу разрешен, а на втором, путем установки значения connection State !new
запрещается обратный трафик, в обоих случаях action = accept.
Важно: всегда указывайте In. Interface и Out. Interface чтобы трафик обрабатывался от конкретных сегментов. И вообще, чем подробнее вы настроите правило тем меньше казусов будет будущем.
При работе с доменом зачастую используется префикс NAMEPC.name.loc его можно настроить следующим образом.
IP > DHCP Server > Option > add
Далее, конкретному клиенту в DHCP Server > Leases
добавляем этот параметр DHCP Options
После переподключения данный префикс подтянется.
Для того чтобы в существующей сети конкретный IP пробросить через VPN нужно, трафик, не касающийся локальной сети пометить и пробросить по другому шлюзу.
На этом все, в данной статье были описаны приемы, которые могут помочь в настройке сети под свою нужды.
UPD: Данную задачу также можно реализовать через IP > MANGLE > action route
UPD: описание фаервола по умолчанию: Правило которое пропускает пакеты прошедшие все проверки ниже, чтобы не перегружать CPU в цепочке forward
;;; Established/Related/Untracked [use if cpu highload]
chain=forward action=accept connection-state=established,related,untracked log=no log-prefix=""
Правило которое пропускает пакеты прошедшие все проверки ниже, чтобы не перегружать CPU в цепочке input
2 X ;;; Established/Related/Untracked [use if cpu highload]
chain=input action=accept connection-state=established,related,untracked log=no log-prefix=""
Отбрасывание invalid пакетов, в цепочке forward, по мнению роутера. Важно указывать данное правило на внешние интерфейсы, т.к. если внутри сети используется маршрутизация, это правило может стать проблемой.
3 ;;; Basic drop: invalid packages
chain=forward action=drop connection-state=invalid in-interface-list=WAN log=no log-prefix=""
Отбрасывание invalid пакетов, в цепочке input, по мнению роутера. Важно указывать данное правило на внешние интерфейсы, т.к. если внутри сети используется маршрутизация, это правило может стать проблемой.
4 ;;; Basic drop: invalid packages
chain=input action=drop connection-state=invalid in-interface-list=WAN log=no log-prefix=""
Проверка трафика на сканирование портов, в цепочке forward, при выявлении сканирования, IP адресс добавлятся в соответсвующий список на блокировку.
5 ;;; PSD check
chain=forward action=add-src-to-address-list psd=21,3s,3,1 src-address-list=!4_ExceptionList address-list=w_psd address-list-timeout=none-dynamic log=no log-prefix=""
Проверка трафика на сканирование портов, в цепочке input, при выявлении сканирования, IP адресс добавлятся в соответсвующий список на блокировку.
6 ;;; PSD check
chain=input action=add-src-to-address-list psd=21,3s,3,1 src-address-list=!4_ExceptionList address-list=w_psd_i address-list-timeout=none-dynamic log=no log-prefix=""
Создание своей цепочки forward, где НОВЫЙ трафик с внешнего интерфейса не пропускается в внутреннию.
7 ;;; Drop: WAN > LAN
chain=forward action=jump jump-target=FWD_WAN_TO_LAN connection-state=!new in-interface-list=WAN out-interface-list=LAN log=no log-prefix=""
Создание своей цепочки forward, где трафик с внутренний сети пропускается в внешнюю.
8 ;;; Jump: LAN > WAN
chain=forward action=jump jump-target=FWD_LAN_TO_WAN in-interface-list=LAN out-interface-list=WAN log=no log-prefix=""
Правило-дубликат правил выше, с измененной цепочкой и действием. Для разгрузки CPU.
9 ;;; Drop: WAN > LAN
chain=FWD_WAN_TO_LAN action=fasttrack-connection hw-offload=yes connection-state=!new in-interface-list=WAN out-interface-list=LAN log=no log-prefix=""
Правило-дубликат правил выше, с измененной цепочкой и действием. Для разгрузки CPU.
10 ;;; Accept: LAN > WAN
chain=FWD_LAN_TO_WAN action=fasttrack-connection hw-offload=yes in-interface-list=LAN out-interface-list=WAN log=no log-prefix=""
Правило которое определяет доступ к внешней сети через основной канал связи устройств.
11 ;;; Drop: WAN [General] > LAN
chain=FWD_WAN_TO_LAN action=accept connection-state=!new dst-address-list=1_InternetAccess in-interface=ether1-wan out-interface-list=LAN log=no log-prefix=""
12 ;;; Accept: LAN > WAN [General]
chain=FWD_LAN_TO_WAN action=accept src-address-list=1_InternetAccess out-interface=ether1-wan in-interface-list=LAN log=no log-prefix=""
Правила которые определяет доступ к внешней сети через резервный канал связи устройств.
13 ;;; Drop: WAN [Reserve] > LAN
chain=FWD_WAN_TO_LAN action=accept connection-state=!new dst-address-list=2_InternetAccess in-interface=ether2-wan out-interface-list=LAN log=no log-prefix=""
14 ;;; Accept: LAN > WAN [Reserve]
chain=FWD_LAN_TO_WAN action=accept src-address-list=2_InternetAccess out-interface=ether2-wan in-interface-list=LAN log=no log-prefix=""
Правила определяющие доступ клиентов по VPN в внутреннею сеть.
15 ;;; Accept: WGLP > LAN
chain=forward action=accept dst-address=192.168.30.0/24 in-interface=WGLP out-interface-list=LAN log=no log-prefix=""
16 ;;; Drop: LAN > WGLP
chain=forward action=accept connection-state=!new src-address=192.168.30.0/24 out-interface=WGLP in-interface-list=LAN log=no log-prefix=""
Открытие портов для работы WireGuard
17 ;;; Accept input: WireGuard
chain=input action=accept protocol=udp dst-port=25724 log=no log-prefix=""
Отрытие доступа для работы DNS-серверов.
18 ;;; Accept input: DNS-servers
chain=input action=accept src-address-list=3_InputAccess log=no log-prefix=""
Отрытие доступа для работы NTP-клиента.
19 ;;; Accept input: NTP-servers
chain=input action=accept protocol=udp src-address-list=5_NTP in-interface-list=WAN src-port=123 log=no log-prefix=""
Блокировка трафика, который мы не ждём в цепочке input.
20 ;;; Deny all
chain=input action=drop log=no log-prefix="input_deny_all"
Блокировка трафика, который мы не ждём в цепочке forward. С исключением проброса портов с помощью функции dstnat. При перезапуске данного правила необходимо сбрасывать все подключения, будет кратковременно падение сети.
21 ;;; Deny all [do not forget reset connection list]
chain=forward action=drop connection-nat-state=!dstnat log=no log-prefix="forward_deny_all"
Для функционирования данных правил прилагаются соответсвующие аддресс листы:
1_InternetAccess_general - клиенты имеющие право "ходить" через основной внешний канал.
1_InternetAccess_reserve - клиенты имеющие право "ходить" через резервный внешний канал.
3_InputAccess - клиенты имеющие право обращаться к роутеру, например, для получения DNS.
4_ExeptionList - адреса исключения, могут использоваться в правилах PSD.
5_NTP - адреса NTP серверов, чтобы роутер могу получать актуальное время.
9_BlackList_PSD_forward - черный список PSD в цепочке forward.
9_BlackList_PSD_input - черный список PSD в цепочке input.