Я занялся созданием самого маленького iperf3 контейнера для RouterOS. Для меня это развлечение на выходных. Что тут скажешь — я настоящий ботан. То, что у меня есть на данный момент, лежит здесь. Если у тебя есть около 0,2 мегабайта свободного места на роутере, попробуй запустить. У меня получается скорость теста 3,4 Гбит/с на RB4011 под управлением ROS 7.12rc5.
elico
Guest
0
09.11.2023 02:25:00
Проверьте последнюю версию alpine 3.18 с iperf3: . Далее тест с компьютера на Windows через соединение между HAP ax2 и HAP ac2, который хостит iperf3-server. Для меня выглядит вполне прилично. PS C:\Users\Administrator\Software\iperf-3.1.3-win64> .\iperf3.exe -c 172.21.0.52 Подключение к хосту 172.21.0.52, порт 5201 [ 4] локальный 192.168.206.15 порт 58116 подключен к 172.21.0.52 порт 5201 [ ID] Интервал Передано Пропускная способность [ 4] 0.00-1.00 сек 20.8 Мбайт 174 Мбит/с [ 4] 1.00-2.00 сек 25.8 Мбайт 216 Мбит/с [ 4] 2.00-3.00 сек 26.9 Мбайт 226 Мбит/с [ 4] 3.00-4.00 сек 25.0 Мбайт 210 Мбит/с [ 4] 4.00-5.00 сек 26.2 Мбайт 220 Мбит/с [ 4] 5.00-6.00 сек 27.8 Мбайт 233 Мбит/с [ 4] 6.00-7.00 сек 25.4 Мбайт 213 Мбит/с [ 4] 7.00-8.00 сек 21.5 Мбайт 180 Мбит/с [ 4] 8.00-9.00 сек 25.6 Мбайт 215 Мбит/с [ 4] 9.00-10.00 сек 27.5 Мбайт 231 Мбит/с - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Интервал Передано Пропускная способность [ 4] 0.00-10.00 сек 252 Мбайт 212 Мбит/с отправитель [ 4] 0.00-10.00 сек 252 Мбайт 212 Мбит/с получатель
iperf завершён. Страница загрузки iperf3 для Windows:
Мой контейнер использует текущий релиз iperf3 с 16 сентября. С тех пор я обновлял его дважды. У вас он построен на Alpine 3.18.4, который всё ещё поставляет iperf3 версии 3.14, то есть на одну версию отстаёт от последней. Сейчас, чтобы получить iperf 3.15, нужно либо собирать с alpine:edge, либо собирать из исходников — мой контейнер делает и то, и другое. Если оставлять слой Alpine в финальном образе контейнера вместо того, чтобы сделать полностью статический бинарник, то внутри работающего контейнера окажется полный Linux userland с полноценным менеджером пакетов, подключённым к вашей сети, что потенциально увеличивает поверхность атаки до бесконечности, не говоря уже о раздувании размера: $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE tangentsoft/iperf3 latest fdf4574c8ceb 6 seconds ago 393kB elicro/iperf3-server latest 3374057abc08 34 seconds ago 15.9MB
Ваш контейнер даже не распакуется на 16 МБ флеш-устройствах типа CRS328, не говоря уже об установке и запуске. Мой — раскроется без проблем. Как будто всего этого мало, чтобы не использовать этот новый контейнер, вы вообще не задокументировали, как он собран. У меня всё полностью задокументировано и воспроизводимо, что позволяет сетевым инженерам проверить его работу на безопасность и пригодность перед вводом в эксплуатацию.
elico
Guest
0
11.11.2023 09:05:00
Привет, Tangent! Я не хочу говорить, что ты неправ. Всё зависит от конкретного случая. Твой контейнер сделан максимально маленьким и для узкоспециализированных задач. Контейнер, который я создал, — это общее готовое к использованию ПО в контейнере. Я не стремлюсь использовать последнюю версию iperf, так как опираюсь на дистрибутив Alpine.
Мой контейнер написан так, чтобы им мог пользоваться кто угодно. Для тех, кто хочет или нуждается, можно посмотреть содержимое контейнера и проверить, устраивает ли он вас. Если нужны исходники, то просто apk add iperf3 — и всё. Если это вызывает у вас сложности, то ситуация не самая простая. Исходники можно посмотреть прямо в образе и в описании на Docker Hub.
Следующая команда покажет внутренности, и если чего-то не хватает, вы всегда можете запустить контейнер внутри виртуальной машины и проверить содержимое файла “start-server.sh”…
# docker history --no-trunc elicro/iperf3-server IMAGE CREATED CREATED BY SIZE COMMENT sha256:6a35302d2125aeffa846810a94e7776b90cd8f9724224f0f1c8abcfc5ffbe13f 2 дня назад CMD ["/start-server.sh"] 0B buildkit.dockerfile.v0 <missing> 2 дня назад EXPOSE map[5201/tcp:{} 5201/udp:{}] 0B buildkit.dockerfile.v0 <missing> 2 дня назад RUN /bin/sh -c chmod +x /start-server.sh # buildkit 21B buildkit.dockerfile.v0 <missing> 2 дня назад COPY start-server.sh /start-server.sh # buildkit 21B buildkit.dockerfile.v0 <missing> 2 дня назад WORKDIR / 0B buildkit.dockerfile.v0 <missing> 2 дня назад RUN /bin/sh -c apk add --no-cache iperf3 # buildkit 213kB buildkit.dockerfile.v0 <missing> 4 дня назад RUN /bin/sh -c echo OK && apk update # buildkit 1.88MB buildkit.dockerfile.v0 <missing> 6 недель назад /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 6 недель назад /bin/sh -c #(nop) ADD file:756183bba9c7f4593c2b216e98e4208b9163c4c962ea0837ef88bd917609d001 in / 7.34MB
Если собираетесь запускать контейнер, надо понимать риски, а если нет — всегда можно спросить у других здесь или в других местах.
Отдельно по поводу поверхности атаки Alpine по сравнению с простым статическим бинарником: если вы так боитесь контейнеров и Alpine, то вам и RouterOS не стоит использовать. Лучше платить большие деньги узконаправленным специалистам, которые будут пытаться вас просвещать по возможным векторами атак в целом мире.
Создавая этот контейнер, я вкладываю в него свой уровень доверия к Alpine Linux и iperf. Это бесплатное и открытое ПО для всех, и это не значит, что я обязан публиковать способ сборки образа, чтобы кому-то что-то доказывать.
Если администратор не умеет открыть образ контейнера и выполнить базовый анализ на базе Alpine Linux, ему стоит задуматься о приобретении таких знаний и умений.
jvanhambelgium
Guest
0
11.11.2023 10:11:00
Ребята, как специалисты по контейнерам, просветите, пожалуйста, почему контейнер не запускается, если его установить на SMB-шару (на RouterOS через пакет ROSE). Пакет скачивается корректно, контейнер создаётся без проблем, бинарник «iperf» доступен на NAS, который предоставляет SMB-шару в папке «bin», и эта папка создана. Но при нажатии кнопки «Start» в логах ничего не появляется, и контейнер останавливается через секунду...
Очень хочу понять, что нужно изменить, чтобы контейнер с SMB-шарой, которая постоянно смонтирована на Mikrotik, запустился. Вот немного информации (слои), которые я вижу для образа контейнера «iperf3». Может, мне стоит подправить какие-то файлы и деплоить контейнер из локальных образов, а не тянуть их из репозитория?
ADD файл … в /
CMD [“/bin/sh”]
RUN /bin/sh -c echo OK
RUN /bin/sh -c apk add
WORKDIR /
COPY start-server.sh /start-server.sh # buildkit
RUN /bin/sh -c chmod +x
EXPOSE map[5201/tcp:{} 5201/udp:{}]
CMD [“/start-server.sh”]
Спасибо!
tangent
Guest
0
11.11.2023 11:00:00
Что ещё должен предоставлять ваш контейнер, кроме «iperf3-server», как обозначено на этикетке? Я думал, что идея именно в том, чтобы предоставить сервер iperf3. Мой так и делает. Как вы можете видеть из Dockerfile моего контейнера, я не вырезал из бинарника iperf3 никаких функций, превращающих его в что-то пригодное только для «специфических редких случаев». Мой контейнер соответствует заявленной на этикетке спецификации и не делает ничего лишнего.
Контейнер, который я создал — это обычное готовое к использованию программное обеспечение в упаковке контейнера. Ваша альтернатива хуже по всем значимым параметрам: она бессмысленно больше, настроена менее безопасно и содержит более старую версию, хотя вы утверждаете, что это «последняя». Это было бы приемлемо, если бы ваш контейнер был единственным доступным вариантом, но вместо этого вы «угнали» тему, предлагая худший вариант вместо лучшего. К чему это полезно?
Я не пытаюсь использовать последнюю версию iperf, потому что полагаюсь на дистрибутив Alpine. Вы можете получить последнюю версию iperf3 на Alpine без компиляции из исходников, указав «FROM alpine:edge». Вы можете посмотреть содержимое контейнера и решить, устраивает ли вас.
Комментарии к слоям образа на Docker Hub могут быть неполными, вводящими в заблуждение или даже ошибочными. Только наличие исходников позволяет надёжно воспроизвести сборку. Вот, например, первая строка в описании моего образа tangentsoft/iperf3:latest: COPY /src/iperf3 /bin/ # buildkit. Откуда взялся «/src/iperf3»? Какова история этого бинарника? Как он был собран? Это вообще iperf3?
Только обладая Dockerfile, Makefile и повторив сборку, вы можете убедиться, что контейнер действительно содержит то, что заявляет, абсолютно идентичное бит в бит с вашей локальной сборкой. Это важно, если источники образов не проверены, как в нашем случае, потому что без этого нет оснований доверять поставщику образа. Любой может выложить что угодно на Docker Hub. Лично я нашёл там концептуальное вредоносное ПО, которое висит там годами и до сих пор доступно, несмотря на мои жалобы Docker, Inc. Хотя я склонен считать этот образ продуктом исследователя безопасности, а не злоумышленника, он всё равно размещён под именем популярного софта, что может привести к тому, что кто-то скачает его, думая, что это официальный контейнер, и откроет у себя дыру в сети.
Кроме того, спецификация OCI позволяет пропускать комментарии к истории слоёв образа или писать там любую ложь. Обратите внимание, что раздел «history» и атрибут «created_by» внутри него — полностью опциональны. Для этого даже не нужно править config.json вручную. Есть готовые инструменты для создания таких фальшивых деклараций, например «buildah build --omit-history». Когда атрибуты created_by присутствуют в config.json, никто не проверяет, насколько они отражают содержимое слоя. Это всего лишь комментарии, а не инструкция сборки.
Открывать вкладку тегов на Docker Hub и смотреть содержимое образа — можно и вовсе получить ложное представление. Если для простой установки «apk add iperf3» вам нужны исходники — у вас действительно большие проблемы. Почитайте про воспроизводимые сборки и подумайте, изменится ли ваше мнение.
Если нет — вам не место работать в области, где нужны надёжные SBOM (списки компонентов программного обеспечения). Если вы собираетесь запускать контейнер, вы должны понимать риски. Как понять риски, если нельзя доверять истории образа? Только исходный код даёт такой уровень доверия.
Я не говорю, что каждый сетевой специалист должен аудитировать свои контейнеры на уровне исходников, но кто-то должен этим заниматься. Отчасти поэтому на Docker Hub есть метки «verified» и «certified OSS» для надёжных контейнеров. Но какие гарантии для контейнеров, сделанных сообществом, как наши, если не исходники?
Если вы так боитесь контейнеры и Alpine, вам вообще не стоит использовать RouterOS, а лучше... Я опасаюсь это не без причины. Представляю мою концептуальную атаку с переходом по «островам» внутри сети, сделанную за пару минут, только что зарегистрированную как SUP-134088:
Теперь обычный пользователь с правами только на чтение в RouterOS может компилировать произвольный код прямо на устройстве и запускать его на вашем маленьком «острове» в ядре сети! Такое нападение называется «жить за счёт системы» (living off the land).
Если в контейнере кроме исполняемого файла сервиса ничего нет, то эта «земля» в аналогии становится пустыней. И это не единственный способ провала. Если программное обеспечение сегодня надёжно, а завтра в нём обнаружат уязвимость удалённого выполнения кода (RCE), а такое в мире происходит примерно раз в неделю, наличие лишней копии Alpine в контейнере даст атакующему гораздо больше власти, которой у него не было бы без неё.
elico
Guest
0
13.11.2023 10:03:00
Привет, Tangent! Во-первых, спасибо за твоё время и усилия. В форуме есть определение "захвата темы", но сейчас ты пишешь гораздо больше меня и приводишь очень хорошие аргументы. Я бы сказал, что это очень, очень успешное обсуждение по общей теме контейнеров. Не знаю, в какой среде ты работаешь, но есть несколько подходов к вопросу доверия и фактов. Мы обязаны приложить все усилия, чтобы убедиться в доверии к конкретному ПО. И ты прав: в какой-то мере должна быть подпись, которая идентифицирует контейнер в его последнем состоянии. Слои сами по себе не важны, пока последнее состояние проверено и признано доверенным авторитетом.
Я могу опубликовать AIDE-файл базы данных, который будет использовать SHA256 и гарантировать, что то, что я хотел опубликовать, дойдёт до другой стороны. Однако в интернете и в общем использовании есть базовые ограничения методов доверия. Содержание твоего и моего контейнеров не является секретом, если ты собрал его из исходников и скопировал в другой слой. Единственное, что в твоём случае нужно проверить — это безопасен ли статический бинарник или нет, а это само по себе сложная задача, поскольку он собран самостоятельно и не является широко используемым бинарным файлом (в смысле, что его не распространяют повсеместно, как alpine или другие дистрибутивы).
У меня есть известные риски, у тебя тоже. Разница лишь в том, сколько усилий нужно приложить, чтобы обеспечить доверие к контейнеру. Например, если я хочу защитить контейнер, первое что делаю — использую FW: блокирую весь исходящий трафик по умолчанию и разрешаю только NEW, ESTABLISHED, RELATED для портов iperf3. Также, если хочешь понять, пытается ли что-то выйти из контейнера, просто отслеживаешь счётчики правил FW. Если счётчик DROP_ALL_OUT увеличивается хоть на 1, это значит, что нужно проверить и протестировать контейнер, а в твоём случае, помимо хэшей файлов внутри, ещё и обратное проектирование статического бинарника.
Безопасность — это не "отсутствие инструментов сборки", а ограничение возможностей для атаки с помощью этих инструментов. Mikrotik очень хорошо справляется с защитой своих систем, обеспечивает отличные FW, маршрутизацию, коммутацию в ОС и оборудовании, и я смотрю на вещи с оптимизмом касательно доверия к Mikrotik. Конечно, я подготовился и могу ответить на любые твои вопросы, если хочешь, чтобы я добавил подробностей.
Кстати, ещё раз: это одно из самых крутых обсуждений, что я видел на форуме Mikrotik за последние дни.
tangent
Guest
0
13.11.2023 17:43:00
Контейнеры уже это обеспечивают: image digest, который фактически вытесняет другую технологию, которую ты упомянул — AIDE. Действительно, если сочетать это с идеями воспроизводимых сборок, о которых я писал раньше, digest образов контейнеров позволяет восстановить список digest на одной системе на любой другой, устраняя необходимость полагаться на доверенный центральный орган для хранения неизменного «правильного» набора digest и избегая потенциальной проблемы единой точки отказа (SPoF). Чем меньше набор входных данных и выходных результатов, тем проще добиться воспроизводимой сборки. В моём образе всё, что нужно «зафиксировать», — это версии компилятора и библиотек, а в твоём случае любое изменение в Alpine сделает недействительным хеш, который ты берёшь для итогового результата.
...чтобы проверить, безопасен ли статический бинарник или нет, а это не такая уж простая задача, поскольку этот бинарник самособранный и не широко используемый.
Наоборот, я считаю, что содержимое моего контейнера довольно просто проверить. Его Dockerfile небольшой, и есть всего одна ключевая строка, которую нужно проверить — это загрузка исходников с GitHub. Если ты доверяешь GitHub и считаешь, что там исходники iperf3 не подменены, то на этом всё. Если нет — можно поменять эту строку на любой другой источник iperf3, которому ты доверяешь.
Ты упомянул Alpine как источник надёжных бинарников iperf3. Хорошо, вот результат поиска по их базе пакетов для ARMv7-пакета в alpine:edge. Клик по пакету ведёт к тому же репозиторию на GitHub с исходниками. Если копнуть в лог сборки, то выясняется, что они тянут статический tarball, а не используют Git, как это делаю я в своём контейнере. И это тоже нормально. Можно изменить мой контейнер, чтобы подтягивал тот же tarball и собирал из него. Тогда доверие к моему контейнеру будет равно доверию к контейнеру, собранному самим проектом Alpine. Вот в чём ценность публикации полного исходного кода для системы сборки контейнеров.
Разница только в усилиях, необходимых для обеспечения доверия к контейнеру. Проблема твоего метода в том, что без Dockerfile я не могу воспроизвести твою сборку. Ссылаться на комментарии в истории образа и говорить «Вот так оно собрано» — это ничего не доказывает. Docker Hub не может и не контролирует достоверность этих комментариев. Если бы у меня было достаточно мотивации, я мог бы написать контейнер, где в комментариях для каждого слоя будет строчка из стихотворения, и пусть Bash ещё не умеет исполнять поэзию. Берегись Джаббервока, сын мой!
Используй FW... блокируй весь исходящий трафик по умолчанию и разрешай только NEW, ESTABLISHED, RELATED для портов iperf3. Да, можно и так... но тогда контейнер, предназначенный для тестирования скорости сети, будет работать медленнее. Вместо того чтобы пропускать каждый пакет через множество правил файрвола, контролируя, чтобы контейнер ничего не делал, кроме прослушивания порта 5201 по UDP и TCP, я предпочитаю сделать контейнер таким изначально — чтобы он делал ровно это и больше ничего. Тогда мне не нужно добавлять файрвол в контейнер, чтобы блокировать исходящие подключения wget или входящие подключения к случайным botnet-командным серверам, которые могли бы собираться на устройстве с помощью GCC, потому что с моим контейнером этого по определению не случится.
Это принцип наименьших привилегий в действии. Вместо того чтобы давать контейнеру возможность делать всё, что только можно через «apk add», а потом блокировать всё, кроме одной конкретной вещи, я предпочитаю строить контейнер так, чтобы он мог делать только эту одну вещь и ничего более.
elico
Guest
0
14.11.2023 07:46:00
Привет, Tangent! Смысл опции использовать дистрибутив в том, чтобы самому не заниматься сборкой исходников. За то, чтобы самому собирать, проверять бинарники и передавать их другому человеку или организации, приходится платить цену. Я предпочитаю вкладывать своё время туда, где оно действительно стоит того. Я не работаю с встроенными системами с 16 МБ памяти, а использую внешний USB SSD или USB флешку.
Понимаю, что для твоего конкретного случая это важно, но теперь у пользователей есть выбор — два варианта. Думаю, лучше иметь два и больше вариантов, чем один, который тебе самому придётся проверять по частям. Кстати, по твоей логике нам тогда не стоит доверять Mikrotik и их закрытым исходникам…
Я могу многое сказать, но уверен, что найдутся случаи, где именно твой способ и сборка принесут пользу. Мы не спорим, что лучше — мы просто предлагаем один и тот же продукт, например iperf3 (как и Mikrotik, Docker и т. д.), но разными способами. В итоге я бы хотел, чтобы ты мог пользоваться нашей работой (всего перечисленного), и считаю, что для HAP ac/ax 3 это было бы полезно.
Что касается HAP AX2 — там уже нет USB, и мне кажется, это вынудит меня покупать более дорогой продукт. Было бы здорово, если бы у HAP ax2 тоже был USB — тогда можно было бы взять его вместо RB4011 и почти не терять в производительности. А если уж нужны все преимущества RB4011, то, пожалуйста, MT, добавьте USB-порт в следующую модель? Или, может, L009 — хороший вариант?
Кстати, одна правило DROP в таблице RAW и ещё одно в FILTER на RB4011 никак не повлияют на общую производительность устройства. Просто расставьте приоритеты: сначала правила с ESTABLISHED RELATED (с fast track), а все остальные — с более низким приоритетом, и дело в шляпе. Это же RB4011, а не устройство на MIPS…
normis
Guest
0
14.11.2023 09:19:00
Кстати, прежде чем разгонять панику (да, есть объективные причины для волнения, но всё же), вы читали инструкцию по контейнерам? Во-первых, контейнеры не работают с пользователем только для чтения, потому что для их включения требуется физическое нажатие кнопки. Не включайте эту функцию на устройствах с ненадёжными пользователями. Всё просто. И во-вторых, там есть крупные красные предупреждения, которые как раз касаются этих вопросов:
robinjustin
Guest
0
15.11.2023 13:56:00
Отлично! Небольшой контейнер с iperf3 может кардинально изменить подход к тестированию сети и настройке производительности. Легковесный формат позволяет легко развернуть и интегрировать его в разные среды. Идеально подходит для быстрой оценки и устранения неполадок. Есть ли у вас какие-то специальные оптимизации или уникальные функции, которые сделали его ещё эффективнее?
romal76
Guest
0
02.12.2023 09:37:00
Скажите, пожалуйста, что я делаю не так? Контейнер запущен, но порт 5201 не открывается, и iperf3 выдает ошибку: невозможно подключиться к серверу — возможно, сервер перестал работать, используется другой порт, проблемы с файрволом и т.д.: Connection refused
holvoetn
Guest
0
02.12.2023 10:34:00
Наверное, это правило файервола. Последняя часть твоего теста об этом и говорит… Экспортируй конфигурацию (без серийного номера, wanip, паролей и прочего). Публикуй между кавычками [__ code] для удобства чтения.
romal76
Guest
0
02.12.2023 10:53:00
# 2023-12-02 13:44:31 by RouterOS 7.12.1 # software id = # # model = RB3011UiAS # serial number = /interface bridge add admin-mac=64:D1:54:81:35:E3 auto-mac=no comment=defconf name=bridge add name=containers /interface ethernet set [ find default-name=ether2 ] name=ether2-master set [ find default-name=ether6 ] name=ether6-master /interface veth add address=192.168.88.2/24 gateway=192.168.88.1 gateway6="" name=veth1 /disk set usb1 type=hardware /interface list add comment=defconf name=WAN add comment=defconf name=LAN add exclude=dynamic name=discover /interface wireless security-profiles set [ find default=yes ] supplicant-identity=MikroTik /ip pool add name=default-dhcp ranges=192.168.88.10-192.168.88.254 /ip dhcp-server add address-pool=default-dhcp interface=bridge lease-time=10m name=defconf /port set 0 name=serial0 /snmp community set [ find default=yes ] addresses=0.0.0.0/0 /zerotier set zt1 comment="ZeroTier Central controller - " disabled=yes disabled=yes name=zt1 port=9993 /container add interface=veth1 logging=yes start-on-boot=yes workdir=/ /container config set registry-url=https://registry-1.docker.io tmpdir=usb1/pull /interface bridge port add bridge=bridge comment=defconf interface=ether2-master add bridge=bridge comment=defconf interface=ether6-master add bridge=bridge comment=defconf hw=no interface=sfp1 add bridge=bridge interface=ether3 add bridge=bridge interface=ether4 add bridge=bridge interface=ether5 add bridge=bridge interface=ether7 add bridge=bridge interface=ether8 add bridge=bridge interface=ether9 add bridge=bridge interface=ether10 add bridge=bridge interface=veth1 /ip neighbor discovery-settings set discover-interface-list=discover /interface list member add comment=defconf interface=bridge list=LAN add comment=defconf interface=ether1 list=WAN add interface=ether2-master list=discover add interface=ether3 list=discover add interface=ether4 list=discover add interface=ether5 list=discover add interface=sfp1 list=discover add interface=ether6-master list=discover add interface=ether7 list=discover add interface=ether8 list=discover add interface=ether9 list=discover add interface=ether10 list=discover add interface=bridge list=discover /ip address add address=192.168.88.1/24 comment=defconf interface=bridge network=192.168.88.0 add address=192.168.88.2/24 interface=veth1 network=192.168.88.0 /ip dhcp-client add comment=defconf interface=containers /ip dhcp-server network add address=192.168.88.0/24 comment=defconf gateway=192.168.88.1 /ip dns set allow-remote-requests=yes /ip dns static add address=192.168.88.1 name=router.lan /ip firewall filter add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp add action=drop chain=input comment="defconf: drop all not coming from LAN" disabled=yes in-interface-list=!LAN add action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsec add action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsec add action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related disabled=yes hw-offload=yes add action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untracked add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid add action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new disabled=yes in-interface-list=WAN /ip firewall nat add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN /routing bfd configuration add disabled=no interfaces=all min-rx=200ms min-tx=200ms multiplier=5 /system clock set time-zone-name=Europe/Moscow /system logging set 0 action=disk set 1 action=disk set 2 action=disk set 3 action=disk /system note set show-at-login=no