Функция Firewall – это неотъемлемая часть всех маршрутизаторов, отвечающая за контроль и фильтрацию проходящих через них сетевых пакетов. Главная задача этой функции – защита компьютерных сетей от посягательств извне и защита от нежелательного и «мусорного» трафика, который может повлиять на работу этой сети.
В маршрутизаторах компании Mikrotik, в отличии от большинства устройств предназначенных для SOHO сегмента других производителей, эта функция имеет довольно широкий диапазон настроек, позволяющих полностью контролировать весь входящий, проходящий и исходящий трафик. Но есть один нюанс, изначально Firewall в Mikrotik RouterOS не имеет должных настроек. Поэтому сегодня мы рассмотрим один из вариантов более расширенных правил, чем предоставляются в дефолтной настройке этой крайне важной функции.
Сразу хочу сказать, что задавать все правила можно как при помощи графического интерфейса утилиты Winbox, так и при помощи консоли. Но в первом случае, этот процесс может занять намного больше времени, поэтому я буду создавать правила для работы с терминалом. А в конце, для приверженцев графического интерфейса, покажу, как это делать с его помощью.
Итак, начнём. Нам необходимо задать ряд правил для цепочек input (входящий в роутер трафик) и forward (проходящий через роутер трафик). Для этого мы подключаемся к нашему роутеру и переходим в раздел IP -> Firewall при помощи команды
[admin@MikroTik] > ip firewall filter
И командой print проверяем, есть ли у нас какие-то правила. Если есть, то нам сперва нужно их удалить, для этого используем команду
[admin@MikroTik] /ip firewall filter> remove numbers=0,1,2,3,4
где numbers=0,1,2,3,4, это номера наших правил.
После чего, командой print еще раз проверяем, и убеждаемся, что правил больше нет.
Теперь приступим к созданию новых правил для Firewall. Не покидая раздел /ip firewall filter> задаём следующие правила:
Разрешаем пинг для цепочек input и forward, командами:
add chain=input protocol=icmp action=accept comment=”Allow Ping”
add chain=forward protocol=icmp action=accept
Разрешаем успешно установленные соединения для цепочек input и forward, командами:
add chain=input connection-state=established action=accept comment=”Accept established connections”
add chain=forward connection-state=established action=accept
Разрешаем родственные соединения для цепочек input и forward, командами:
add chain=input connection-state=related action=accept comment=”Accept related connections”
add chain=forward connection-state=related action=accept
Запрещаем недействительные соединения для цепочек input и forward, командами:
add chain=input connection-state=invalid action=drop comment=”Drop invalid connections”
add chain=forward connection-state=invalid action=drop
Разрешаем UDP протокол для цепочек input и forward, командами:
add chain=input protocol=udp action=accept comment=”Allow UDP”
add chain=forward protocol=udp action=accept
Командой
add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”
мы разрешаем выход в интернет, для нашей локально сети. Только вместо 192.168.0.0/24 вы должны указать префикс именно вашей локальной сети. А вместо ether2, интерфейс, к которому у вас подключена локальная сеть. В случае, когда вы подключаетесь к провайдеру по протоколу PPPoE или любому другому туннельному протоколу (VPN), вместо имени физического порта, нужно указывать имя вашего подключения, например pppoe-out1.
Ещё одним правилом, мы ограничиваем доступ к нашему роутеру, только адресами нашей локально сети:
add chain=input src-address=192.168.0.0/24 action=accept comment=”Access to Mikrotik only from our local network”
Здесь, как и в предыдущем случае, вместо 192.168.0.0/24, вы должны указать реальный префикс именно вашей локально сети.
Последние два правила запрещают прохождение всех остальных пакетов:
add chain=input action=drop comment=”All other drop”
add chain=forward action=drop
После чего, уже знакомой нам командой print, мы можем проверить, что все правила у нас верны.
Так же, все правила можно посмотреть в графическом интерфейсе в разделе IP -> Firewall на вкладке Filter Rules
И, как я обещал ранее, для приверженцев графического интерфейса, можно добавить все правила через него. Так как привала зависимы от их порядка в списке, то добавлять их надо точно в таком же порядке как они описаны. Делается это так:
В разделе меню IP -> Firewall на вкладке Filter Rules, добавляем новое правило красной кнопкой + в левом верхнем углу окна.
Для примера я возьму первое правило:
add chain=input protocol=icmp action=accept comment=”Allow Ping”
В открывшемся окне, на вкладке General, мы выбираем цепочку Chain – input, а протокол, Protocol – icmp.
Переходим на вкладку Action, где в поле Action выбираем acept.
И если нужно добавить комментарий, то нажимаем в правой части окна кнопку Comment и добавляем необходимый комментарий.
После чего сохраняем правило.
Повторяем эти действия для всех необходимых нам правил, придерживаясь параметров указанных в них.
Однако, есть ещё и способ для ленивых. Все эти правила, можно добавить одним действием при помощи скрипта. Вот этот скрипт:
#######################
# ip firewall filter rules add
#######################
/ip firewall filter
add chain=input protocol=icmp action=accept comment=”Allow Ping”
add chain=forward protocol=icmp action=accept
add chain=input connection-state=established action=accept comment=”Accept established connections”
add chain=forward connection-state=established action=accept
add chain=input connection-state=related action=accept comment=”Accept related connections”
add chain=forward connection-state=related action=accept
add chain=input connection-state=invalid action=drop comment=”Drop invalid connections”
add chain=forward connection-state=invalid action=drop
add chain=input protocol=udp action=accept comment=”Allow UDP”
add chain=forward protocol=udp action=accept
add chain=forward src-address=192.168.0.0/24 in-interface=ether2 action=accept comment=”Access to Internet from local network”
add chain=input src-address=192.168.0.0/24 action=accept comment=”Access to Mikrotik only from our local network”
add chain=input action=drop comment=”All other drop”
add chain=forward action=drop
Копируем этот скрипт, переходим в раздел меню System -> Scripts, добавляем новый скрипт, нажимаем кнопку Apply, а затем кнопку Run Script. Всё! Готово!
После этого, окно скрипта можно закрыть, а сам скрипт удалить. Наши правила созданы.
Ещё хочу сказать, что при добавлении новых разрешающих правил, если возникнет такая необходимость, надо не забывать о том, что правила выполняются в порядке очереди. И разрешающие правила, должны быть в списке выше запрещающих правил для этой цепочки. Создавая новые разрешающие правила, не забывайте их поднимать. Легче всего это сделать в графическом интерфейсе, простым перетаскиванием.
<скрыть спойлер>Так вот, последнее правило - add chain=forward action=drop - никуда из домашней сети не пускает.
Если в правиле
указать интерфейс bridge1, то всё работает.
Я ничего не намудрил? 