Записки IT специалиста
Межсетевой экран, он же брандмауэр или файрвол — важнейшая служба вашего роутера, отвечающая как за его безопасность, так и за безопасность всей сети. Мы до сих пор не рассматривали базовую настройку брандмауэра в отрыве от общей настройки роутера, но как показала практика, многие администраторы откровенно плавают в этом вопросе и имеют некорректно или не оптимально настроенные системы. Как минимум это выливается в повышенную нагрузку на оборудование, а в самом плохом варианте ставит под угрозу безопасность всей сети. Поэтому давайте отдельно разберемся в этом вопросе.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Общие принципы построения брандмауэра
Существует два основных типа настройки брандмауэра: нормально открытый брандмауэр и нормально закрытый. В первом случае разрешено все, что явно не запрещено, во втором случае — запрещено все, что явно не разрешено.
Возможно, для кого-то будет новостью, но оба этих подхода обычно гармонично сочетаются в рамках одного устройства. Нормально открытый брандмауэр применяется для внутренних сетей и исходящих соединений, а нормально закрытый — для все остальных соединений из внешних сетей. Это позволяет достичь простоты и удобства для собственных пользователей и в тоже время надежно защититься от внешнего мира.
Любое новое соединение первоначально находится в статусе нового (new) и мы должны принять решение: одобрить его или запретить. Для этой задачи и предназначены создаваемые нами правила, в нормально закрытом брандмауэре мы описываем, какие соединения и по каким критериям следует разрешить. Если же пакет не соответствует ни одному правилу, то мы запрещаем такое соединение.
После того, как соединение было установлено — оно переходит в состояние установлено (established), при этом специальный механизм ядра Connection Tracker отслеживает все проходящие пакеты и сопоставляет их соединениям, поэтому мы можем спокойно оперировать именно состоянием соединения, не задумываясь над техническими тонкостями работы.
Нужно ли каждый раз отслеживать пакеты уже установленного соединения вновь и вновь гоняя их по цепочке правил? Конечно же нет, если мы одобрили соединение, то в последующем можем и должны одобрять все его пакеты автоматически, это снижает нагрузку на устройство и позволяет использовать различные приемы, вроде Port Knocking или противодействия перебору паролей.
Очень часто одни соединения, будучи установленными, создают другие, которые называются связанными (related), как пример можно привести хорошо известные FTP или PPTP, которые имеют управляющее соединение и соединение(я) для передачи данных. Они могут использовать динамические порты и поэтому их также следует автоматически разрешать, если мы разрешили основное соединение.
Поэтому в любом корректно настроенном брандмауэре самым первым правилом должно находиться разрешающее установленные и связанные соединения, а только после него мы уже должны анализировать новые подключения.
В роутерах Mikrotik существует еще один тип соединения — неотслеживаемое (untracked), такие соединения не отслеживаются Connection Tracker, что позволяет существенно снизить нагрузку на устройство. Для чего это может быть нужно? Допустим, в фильтруемом вами трафике есть значительная доля принадлежащая доверенным узлам, для которых можно четко прописать критерии, в этом случае можно пометить их неотслеживаемыми и добавить их одобрение в самое первое правило, к уже установленным и связанным.
Таким образом, одним единственным правилом мы будем сразу пропускать подавляющую долю трафика, а к затратным операциям анализа будут доходить только новые пакеты.
Но тут самое время вспомнить еще про одно состояние соединения — недействительное (invalid), это пакеты не являющиеся новыми, но не принадлежащие никакому установленному соединению, такие пакеты могут использоваться для атак и поэтому их следует блокировать в первую очередь, сразу после того, как мы одобрили установленные и связанные соединения и до того, как приступили к анализу новых пакетов.
Ну и завершающим правилом в цепочке должно стоять запрещающее, отсекающее все соединения, которые не попали под разрешающие правила и не являются уже установленными или связанными с ними.
Конфигурация брандмауэра по умолчанию
Прежде всего рассмотрим конфигурацию, предлагаемую производителем по умолчанию. Многие считают ее наиболее оптимальной и безопасной, но это не так, конфигурация по умолчанию направлена на универсальность и совместимость с различными пользовательскими сценариями, не позволяя ему наделать грубых ошибок, которые могут фатально сказаться на безопасности.
Все правила сгруппированы в две цепочки: input — для входящего трафика самого роутера и forward — для транзитного, между интерфейсами роутера. Сразу напомним, что у роутеров Mikrtoik нет жестко заданных «внешних» и «внутренних» интерфейсов, и вообще все эти понятия находятся исключительно у нас в голове, согласно логическому плану сети.
В конфигурации по умолчанию также присутствует два списка интерфейсов: WAN — куда включен порт, настроенный как внешний, обычно ether1 и LAN, в состав которого входит мост, объединяющий оставшиеся порты. и эти списки активно применяются в правилах.
Самих правил немного, всего 11 штук: 5 для input и 6 для forward.
Рассмотрим их подробнее. Правило с нулевым номером в расчет не берем, это пустышка для вывода счетчиков Fasttrack. Начнем с первых двух, это классическая связка, о которой мы говорили выше: разрешаем established, related и untracked для всех входящих соединений, без привязки к интерфейсам. Затем запрещаем invalid, вполне очевидно, что далее пройдут только пакеты соединений в состоянии new.
Третье правило разрешает входящий ICMP, у многих администраторов с ним напряженные отношения, часто его блокируют полностью, чтобы устройство не пинговалось, но так делать не нужно, протокол ICMP важен для нормальной работы сети. Либо фильтровать нужные его типы выборочно, что выходит за рамки данной статьи.
Следующее правило весьма специфично, оно разрешает входящие на петлевой интерфейс, точнее адрес 127.0.0.1, поскольку интерфейс петли явно в RouterOS не доступен, а также снабжено комментарием, что это для CAPsMAN. Его смысл станет понятен чуть ниже.
И завершает цепочку input блокирующее правило:
Которое блокирует входящие подключения для всех, кроме интерфейса LAN, а так как локальная петля туда не входит, то выше потребовалось отдельное правило.
Как видим конфигурация слегка избыточна, но при этом универсальна. А блокировка входящих по такой широкой маске — все, кроме локальной сети — позволяет сохранить должный уровень безопасности, даже если пользователь подключит другие внешние сети, скажем VPN.
А где же здесь размещать свои собственные правила? А вот здесь:
Теперь о цепочке forward, самыми первыми здесь теперь добавлены два правила, разрешающие транзит соединений, подпадающих под действие политик IPsec. Это связано с тем, что IPsec сегодня применяется все чаще, но правильно настроить правила для него умеют не все пользователи. Поэтому появились эти правила, обеспечивающие гарантированное прохождение любых соединений, использующих IPsec через роутер в любом направлении.
Затем идет правило, включающее Fasttrack для всех установленных и связанных соединений. Подробнее про Fasttrack мы писали в нашей статье:
Если коротко, то Fasttrack значительно снижает нагрузку на оборудование, но фактически пускает трафик в обход брандмауэра. Но так как фильтровать established и related нам не надо, то почему бы и не пустить их коротким путем?
Далее та же самая классика: разрешаем established, related и untracked, запрещаем invalid. Для всех направлений без разбора.
Ну и, наконец, запрещающее правило, оно тоже интересно:
Оно запрещает транзит только новым соединениям, только с внешнего списка интерфейсов, кроме соединений прошедших через DNAT. А так как DNAT обычно используется для проброса портов, то таким образом мы избегаем необходимости создавать для них разрешающие правила.
Да, опять очень и очень общие критерии, но в состоянии абсолютной неопределенности возможных конфигураций это, пожалуй, лучшее решение. Особенно если роутер будет использоваться вместе с UPnP, где сетевые приложения могут самостоятельно пробрасывать произвольные порты.
Поэтому мы еще раз повторимся, что конфигурация по умолчанию не является самой оптимальной или самой безопасной, но она наиболее универсальна, одновременно закрывая самые разные сценарии использования роутера.
Куда добавлять собственные правила? Да вот сюда:
Стоит ли оставлять и использовать конфигурацию по умолчанию? Да, если вы еще не уверены в собственных силах, плохо понимаете работу межсетевого экрана или вам нужно просто быстро настроить роутер для типовых задач.
Собственная конфигурация брандмауэра
В среде опытных пользователей Mikrotik принято сбрасывать устройство и настраивать конфигурацию с нуля. Для этих целей мы используем следующую конфигурацию брандмауэра, она во многом повторяет стандартную, но имеет ряд отличий. В плане именования интерфейсов мы также будем использовать листы WAN и LAN, с таким же набором интерфейсов.
При построении данного набора правил мы исходили из соображений, что администратор представляет как устроена его сеть, каким службам нужен доступ извне, какие сети являются внешними, а какие внутренними. При этом всеми силами старались избегать широких критериев в правилах, так как «проходной двор», даже вроде-бы в довольно безопасных вещах, таких как IPsec или DNAT может иногда сыграть злую шутку. Все мы помним, что если на стене висит ружье, то оно обязательно выстрелит.
Правил в нашем варианте меньше, всего 9, из них 4 для input и 5 для forward.
Набор правил для input приведем сразу и целиком, здесь тот же самый классический набор, но за одним исключением: мы знаем, какие сети являются внешними и фильтруем только подключения из них. Это упрощает конфигурацию и снижает нагрузку. При этом в каждом правиле мы четко указываем список входящих интерфейсов.
Мы точно также разрешаем установленные и связанные, запрещаем invalid, разрешаем ICMP. Можно заметить, что у нас нет untracked, это сознательное решение, если мы будем использовать неотслеживаемые соединения — то всегда можем добавить этот параметр, но сделаем это осознанно. Собственные правила мы можем добавлять выше запрещающего весь остальной трафик с внешних интерфейсов.
Также следует отметить несколько иную политику блокировки остального трафика. Стандартная конфигурация подходит достаточно радикально, запрещая все, кроме LAN. Мы же используем более мягкий подход, и блокируем только внешние сети — WAN. Это позволяет сделать конфигурацию проще и не прописывать дополнительные правила для того же CAPsMAN, при этом мы помним, что администратор знает какие сети являются внутренними, а какие нет и контролирует актуальность списков.
Перейдем к forward, в нашей базовой конфигурации правил для IPsec нет, опять-таки осознанно, по причине их ненужной избыточности. Как появится IPsec — так и создадим правила, а просто так нечего им небо коптить.
А вот к Fasttrack у нас подход другой. В стандартной конфигурации он включен для всех established и related, вне зависимости от направления. Это здорово разгружает роутер, но со временем у вас неизбежно появятся туннели, VPN, прочие сети и Fasttrack будет там чаще мешать, чем помогать, порой приводя к неожиданным результатам. Поэтому четко указываем, что применяем коротки путь только для соединений из локальной сети наружу и извне в локальную сеть. Часто можно даже отойти от использования списков и просто указать интерфейсы.
Кстати, внимательный читатель может заметить, что комментарий стоит только у одного правила, первого. Это сделано специально. Для чего? Посмотрите на скриншот выше, там комментарий отделяет сразу два правила.
Ну и дальше все тоже самое. Разрешаем established и related, запрещаем invalid и обязательно указываем, что это именно для внешних сетей, ниже запрещаем все остальное, также для внешних интерфейсов.
Что касается DNAT, то мы не сторонники давать доступ в сеть самыми широкими мазками. Если появляется проброс — создаем отдельное правило под проброс. Может это и увеличивает количество работы, но дает более читаемую и безопасную конфигурацию брандмауэра, когда вы явно видите кому и что разрешено без изучения дополнительных разделов.
Но если вы используете роутер дома и самый широкий набор приложений пробрасывает порты при помощи UPnP, то последнее правило действительно будет удобнее заменить на:
Данный набор правил является базовым костяком нормально настроенного брандмауэра и должен присутствовать по умолчанию на любом устройстве. Уже потом он будет обрастать дополнительными правилами, но общий принцип построения защиты должен неукоснительно соблюдаться. Это позволит вам достичь высокого уровня безопасности при небольшой нагрузке на устройство.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Sorry, you have been blocked
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.
What can I do to resolve this?
You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.
Cloudflare Ray ID: 7a7585f42a23248b • Your IP: Click to reveal 88.135.219.175 • Performance & security by Cloudflare
Firewall: настройка межсетевого экрана сервера
Инструкция по настройке правил Firewall для виртуальных серверов в панели управления Serverspace.
Что это такое?
С помощью межсетевого экрана прямо из панели управления можно управлять доступом к серверу, сетевыми пакетами данных. Данная опция отдельно не тарифицируется и входит в стоимость сервера.
На данный момент существует ограничение в 50 правил, если вам будет недостаточно этого лимита, то увеличить его можно по запросу в техническую поддержку.
Сетевая архитектура
Для избежания конфликта правил межсетевого экрана и его правильной настройки необходимо понимать порядок действия существующих брандмауэров. Во-первых, вы можете настроить брандмауэр для частной сети. Во-вторых, для сервера через панель управления. В-третьих, вы можете настроить внутренний брандмауэр, например, для Linux через iptables, для Windows — встроенный.
Для входящих пакетов первым будет применяться брандмауэр на уровне сети (при наличии). Если пакет прошел, дальше будет применяться фаерволл на уровне сервера, в последнюю очередь будет использоваться внутренний программный механизм. Для исходящих пакетов будет применена обратная последовательность действий.
Мы не рекомендуем одновременно использовать межсетевой экран на уровне сервера и внутренний программный:
Создание правила
Конфигурация брандмауэра доступна для всех VPS и находится в настройках сервера в разделе Firewall.
Важно:
— порядок правил имеет значение, чем меньше порядковый номер правила (чем выше он в списке), тем выше его приоритет. Изменять последовательность правил можно с помощью Drag and Drop, перетащив правило левой кнопкой мыши на нужную позицию;
— по умолчанию — все пакеты данных, как входящие, так и исходящие разрешены.
Для создания правила нажмите кнопку Добавить:
Перед вами откроется окно добавления правила. Необходимо заполнить следующие поля:
- Name — понятное для пользователя название (не более 50 символов), как правило кратко описывает назначение правила;
- Direction — направление пакетов, для которых необходимо применить правило, принимает одно из двух значений: Incoming или Outgoing. Incoming — правило распространяется на входящие пакеты данных, Outgoing — на исходящие;
- Source/Destination — в зависимости от направления содержит IP-адрес сервера или одно из значений: IP-адрес, CIDR, диапазон IP-адресов и any;
- SourcePort/DestinationPort — при выборе протокола TCP, UDP или TCP and UDP возможно указать порт, диапазон портов, либо Any;
- Action — действие, которое необходимо применить, принимает одно из двух значений: Allow или Deny. Allow — разрешение пересылки пакетов данных, Deny — запрет пересылки;
- Protocol — тип протокола, доступно ANY, TCP, UDP, TCP and UDP и ICMP.
Для создания правила нажмите Сохранить.
В нашем примере правило блокирует все входящие на сервер пакеты:
Чтобы созданное правило вступило в силу необходимо сохранить изменения с помощью кнопки Сохранить. Вы можете создать несколько правил и затем сохранить все разом:
После этого страница будет выглядеть следующим образом:
Приоритет правил
Чем меньше порядковый номер правила (чем выше оно в списке), тем выше его приоритет. Например, после того как было создано запрещающее правило для всего входящего трафика, создадим правило разрешающее получать входящие пакеты по 80 порту протокола Tcp. После сохранения изменений при такой конфигурации данный порт все также будет недоступен, в связи с тем, что запрещающее правило имеет более высокий приоритет:
Для изменения приоритета правил перетащите с помощью левой кнопки мыши разрешающее правило на первое место и сохраните изменения:
После сохранение порядковые номера правил изменятся, а также изменится их приоритет:
Теперь конфигурация брандмауэра позволяет получать пакеты по протоколу Tcp по 80 порту, остальные пакеты проходить не будут.
Гайд по межсетевому экранированию (nftables)
Все говорят, что для защиты сети нужно применять межсетевые экраны, но никто не говорит, как это нужно делать. Что ж, исправим ситуацию, рассмотрим типовые сценарии применения межсетевых экранов и то, как их при этом настраивать.
В качестве межсетевого экрана будем использовать nftables, функционирующий под управлением ОС Debian GNU Linux.
Требования к предварительным знаниям
Технические требования
Создание шаблона виртуальной машины
- Скачать Debian 11.4 в формате netinstall .
- Установить ОС в минимальной конфигурации. Для этого во время инсталляции выбираем все параметры по умолчанию (Next, Next, Next, . ), а на шаге с выбора пакетов «Software selection» отказываемся от всего предлагаемого (Рисунок 1).
Рисунок 1
- OpenSSH сервер (пакет ssh).
- Файловый менеджер Midnight Commander (пакет mc).
- Утилиту conntrack, демонстрирующую внутреннее состояние брандмауэра и помогающую в отладке правил фильтрации (пакет conntrack).
Типовой сценарий: защита сервера / рабочей станции с помощью локального брандмауэра
Задача настроить локальный брандмауэр — пожалуй, самая распространённая задача межсетевого экранирования. Для ее решения мы должны знать ответы на два вопроса: чего мы хотим добиться, и как это реализовать.
Ответ на первый вопрос должен дать архитектор информационной безопасности, он должен сформулировать угрозы и предложить методы их нейтрализации. Проблема в том, что в небольших коллективах людей, играющих такую роль, нет, и всем этим приходится заниматься системным администраторам. Несмотря на это, все же рекомендуется действовать по стандартному алгоритму, то есть так, как бы действовал архитектор.
Данный алгоритм может показаться забюрократизированным, однако, это не совсем так, ведь большинство шагов нужно будет сделать лишь раз, а затем выполнять работы по уже сформированным шаблонам. Несомненным плюсом стандартного алгоритма является обеспечение доказательного уровня безопасности, при котором все предпринимаемые меры защиты четко обоснованы и могут быть легко верифицированы. Все вместе это повышает уровень зрелости компании в части обеспечения информационной безопасности и несет множество сопутствующих плюшек.
- Формулирование модели угроз.
- Анализ угроз и выработка мер по их нейтрализации. На данном этапе необходимо сформулировать схему разграничения трафика: то есть какой трафик пропускаем, а какой блокируем.
- На основании схемы разграничения трафика производится настройка межсетевого экрана: формируются правила фильтрации, настраиваются сервисы, пишутся скрипты и так далее.
Модель угроз
Угроза | Комментарий |
---|---|
У1. Угроза удаленной эксплуатации уязвимостей (как программных, так и конфигурационных) в сетевых сервисах узла. | Примеры реализации угрозы: эпидемия червя MSBlast (эксплуатация программной уязвимости) или множественные утечки данных с кластеров Elasticsearch, происходящие из-за отсутствия авторизации (эксплуатация конфигурационной уязвимости). |
У2. Угроза удаленной атаки на отказ в обслуживании (DoS) сетевых сервисов узла. | |
У2.1. DoS атака за счет превышения критического числа сетевых запросов, которые может обработать сетевой сервис с приемлемым качеством | Подобные атаки наиболее актуальны для серверов баз данных, которые могут генерировать существенную вычислительную нагрузку на обработку входящего запроса. |
У2.2. DoS атака за счет подделки злоумышленником IP-пакета и установки в нем обратного адреса равному адресу петли 127.0.0.0/8 | Сетевой сервис, получая подобный запрос, при отправке ответа может получить его себе обратно, что может привести к зацикливанию или другим негативным последствиям. |
У3. Угроза раскрытия аутентификационных данных за счет удаленных атак прямого перебора, осуществляемых в отношении сетевых сервисов узла. | Тривиальный подбор паролей, но осуществляемый удаленно через сеть. |
У4. Угроза установки исходящих вредоносных сетевых соединений локальным программным обеспечением узла. | Вредоносное сетевое соединение может установить как троян, связывающийся со своим сервером управления (C&C), так и легитимная программа, передающая избыточные данные (например, телеметрию) на сервера разработчиков. Кроме того, к данной угрозе можно отнести и действия сотрудников, использующих рабочие компьютеры для личных нужд (например, для майнинга криптовалют). |
У5. Угроза несанкционированного открытия сетевого порта вредоносным кодом. | На заре вирусостроения первые шпионские вредоносные программы открывали на машине жертвы сетевые порты, к которым затем подключались лица, занимающиеся шпионажем. |
Теперь проанализируем угрозы и сформулируем идеи по их нейтрализации.
Для парирования угрозы У1 и У5 необходимо лишить злоумышленников возможности осуществлять подключения к сетевым сервисам узла. Это достигается путем ограничения входящего трафика по портам и адресам источника (белые или черные списки).
Нейтрализация У2.1 базируется на ограничении скорости получения сервисом сетевых пакетов, а как более сложный вариант — обнаружение атакующих узлов и блокировка их по IP. Следует отметить, что ограничение максимальной частоты подключений не всегда допустимо, особенно для публичных сервисов.
Угроза У2.2. нейтрализуется путем отбрасывания всех сетевых пакетов, имеющих адрес источника из подсети 127.0.0.0/8 и пришедших не с петлевого (loopback) интерфейса.
Для нейтрализации угрозы У3 в общем случае требуется применение дополнительных программ, которые бы определяли факты неудачных попыток авторизации, определяли бы IP адреса атакующих, а затем с помощью брандмауэра блокировали бы их по IP. Реализации защиты от угрозы У2.1. частично усложнит злоумышленникам возможность реализации угрозы У3.
- адресов назначения (белые или черные списки);
- протоколов транспортного уровня (TCP/UDP) и номеров их портов (белые или черные списки);
- приложений, пытающихся установить соединение.
На основании всего вышесказанного подготовим несколько схем разграничения трафика, ранжирующийся по степени защищённости и простоты реализации.
Схемы разграничения трафика
- Запрещен весь входящий трафик, кроме того, что относится к уже установленным соединениям.
- Весь исходящий трафик разрешен.
Ограничение исходящего трафика по адресам назначения на рабочих станциях, где активно пользуются Интернетом, крайне трудоемко, а ограничивать трафик по приложениям брандмауэр nftables не умеет. Соответственно, весь исходящий сетевой трафик разрешается без ограничений. Угроза У3 полностью игнорируется. Как слабенький вариант борьбы с У3 можно рекомендовать применение встроенной системы мандатного разграничения доступа (MAC) AppArmor, которая позволяет выбранным приложениям отключить сетевые возможности. Проблема в том, что AppArmor работает только по черным спискам, белый список – замкнутую программную среду — с его помощью сделать не получится.
Рассмотренная схема разграничения трафика позволяет полностью нейтрализовать угрозы У1, У2, У3, У5, угроза У4 игнорируется.
По умолчанию встроенный брандмауэр ОС Windows работает по этой схеме.
- разрешается входящий трафик по выбранным сетевым портам, требуемым для работы сетевым сервисам;
- блокируется входящий трафик для IP-пакетов, адрес источника которых относится к сети 127.0.0.0/8, и которые пришли не с петлевого (loopback) интерфейса.
Реализация данной схемы частично защищает от У1 и полностью от У2.2 и У5, остальные же угрозы игнорируются.
- текущего по уже установленным соединениям;
- отправляемого по перечню явно разрешенных портов протоколов транспортного уровня (белый список).
- для каждого открываемого сетевого сервиса (при наличии возможности) настраивается:
- ограничение по максимальной частоте (rate) попыток подключения;
- ограничение по перечиню узлов, имеющих право на подключение (белый список);
- использование дополнительных средств обнаружения большого количества неудачных попыток авторизации, после чего нарушителя с помощью брандмауэра блокируют по IP;
Практическая работа: реализация межсетевого экранирования сервера по схеме усиленной защищенности
Описание стенда
Проведем нашу первую практическую работу. Начнем с того, что организуем лабораторный стенд по следующей схеме (Рисунок 2):
Рисунок 2Здесь все просто. Есть одна виртуальная машина «Сервер». Она подключена своим единственным сетевым адаптером к виртуальной сети «NAT». В данной сети присутствует виртуальный маршрутизатор, реализующий NAT и выполняющий роль DNS-сервера. Сетевой адаптер гипервизора также подключен к сети «NAT». В качестве защищаемого сервиса на виртуальной машине «Сервер» будет выступать SSH. Для его тестирования на гипервизоре устанавливается SSH-клиент.
Задача
Подготовка стенда
- На виртуальную машину «Сервер» установим OpenSSH сервер и службу автоматической синхронизации системных часов systemd-timesyncd:
- В файле настроек службы синхронизации времени /etc/systemd/timesyncd.conf раскомментируем строки NTP и FallbackNTP. Строку NTP запишем в следующем виде:
- Активируем автоматическую синхронизацию времени, выполнив заклинание:
Ход выполнения работы
- Логика организации дистрибутива Debian такова, что межсетевой экран nftables установлен в нем по умолчанию. В этом можно убедиться, выполнив заклинание:
- Для автоматической загрузки правил межсетевого экранирования после старта системы создана служба nftables (по сути являющаяся systemd юнитом), но по умолчанию она деактивирована. В этом можно убедиться, выполнив заклинание: Служба организована таким образом, что при запуске она считывает правила, записанные в файле /etc/nftables.conf. Соответственно, цель нашей работы — внести в данный файл необходимые правила и активировать службу.
- Уточним схему разграничения сетевого трафика. Как часто бывает, те схемы, которые мы описывали ранее, не могут учитывать особенности эксплуатации конкретных серверов, поэтому и требуют уточнения. В частности, сделаем следующее:
- Разрешим «пинговать» (использовать команду проверки сетевой связности ping) защищаемый сервер и разрешим серверу «пинговать» другие узлы. Несмотря на то, что каждый открытый поток сетевого трафика снижает защищенность, открытие «пингов» существенно улучшает эксплуатационные свойства сервера.
Для этого разрешим входящие и исходящие ICMP echo-request. - Разрешим отправлять запросы и получать ответы по протоколу DNS.
Для этого разрешим исходящие соединения по портам: TCP 53 и UDP 53 в адрес явно указанного DNS сервера: 172.30.0.2. - Разрешим автоматически обновлять системные часы по протоколу NTP.
Для этого разрешим исходящие соединения по портам: TCP 123 и UDP 123 в адрес серверов, указанных в файле /etc/systemd/timesyncd.conf. - Разрешим скачивать обновления с репозиториев, указанных в файлах настройки менеджеров пакетов.
Для этого разрешим исходящие http соединения (TCP 80) в адрес репозиториев, указанных в файле /etc/apt/sources.list. - Будем явно отбрасывать входящий трафик, превышающий скоростные ограничение в:
- 5 пакетов в секунду для ICMP;
- 10 попыток установки соединений в минуту для SSH.
- Узлы, занимающиеся подборкой паролей к SSH, будем определять с помощью утилиты fail2ban. Утилита сама будет конфигурировать nftables для блокирования и разблокирования атакующих узлов.
- Разрешим «пинговать» (использовать команду проверки сетевой связности ping) защищаемый сервер и разрешим серверу «пинговать» другие узлы. Несмотря на то, что каждый открытый поток сетевого трафика снижает защищенность, открытие «пингов» существенно улучшает эксплуатационные свойства сервера.
- В файл /etc/nftables.conf запишем следующее содержимое:
- репозиториев, указанных в файле /etc/apt/sources.list;
- NTP-серверов, указанных в файле /etc/systemd/timesyncd.conf.
На самом деле fail2ban по умолчанию защищает SSH-сервер сразу после установки. Единственное, что необходимо сделать, так это поменять действия, выполняемые при блокировке. По умолчанию они рассчитаны на iptables (предшественника nftables), нам же требуется их поменять для nftables.
Сделать это очень просто. В конфигурационном файле /etc/fail2ban/jail.conf в секции [DEFAULT] значение параметров banaction и banaction_allports необходимо поменять на nftables-multiport и nftables-allports соответственно. Затем перезапустить службу заклинанием
Для блокировки нарушителей fail2ban добавляет к правилам фильтрации nftables новую таблицу f2b-table. Эта таблица содержит единственную цепочку f2b-chain, имеющую более низкий приоритет и соответственно срабатывающую раньше, чем тем цепочки, что мы создавали в файле /etc/nftables.com. Единственным правило цепочки f2b-chain является блокировка доступа к порту ssh (tcp 22) для IP-адресов, включенных в список addr-set-sshd. Пример рассмотренных списков и правил фильтрации, при добавлении туда нарушителя, выглядит следующим образом (Рисунок 3):
Рисунок 3Типовая задача: проверка работы брандмауэра
Очень часто на практике возникает задача проверить, работает ли межсетевой экран. Сделать это можно тривиальным образом: попробовать «пингануть» защищаемый узел или попробовать обратится к какому-либо защищаемому сетевому сервису.
Иногда специалисты по информационной безопасности могут потребовать от системных администраторов провести полную гарантированную проверку (аттестацию) всех правил фильтрации. Например, проверить на возможность открытия UDP и TCP порты из всего возможного диапазона (1-65535).
Проблема в том, что на проверяемом сервер обычно используется не более десятка сетевых сервисов и, соответственно, открытых портов, иногда больше, но не суть. Возникает вопрос, как проверить порты, которые никто не слушает?
Не самым удобным, но очень доступным вариантом решения этой задачи будет следующий: с помощью утилиты netcat на проверяемом сервере при включенном брандмауэре открываются UDP или TCP порты, а затем сервер с помощью утилиты nmap сканируется с другой машины. Если обнаруживаются порты, которые не должны быть открытыми, то с межсетевым экраном есть проблемы.
Практическая работа: проверка работы брандмауэра
Описание стенда
Задача
Подготовка стенда
- На виртуальную машину «Сервер» поставим две дополнительные утилиты: «netcat» и «netstat». Для этого выполним заклинание:
- На гипервизор, а именно с него мы и будем сканировать, установим nmap.
Ход выполнения работы
- Перечень открытых портов на сервере можно узнать с помощью утилиты netstat. Для UDP портов заклинание будет таким: а для TCP портов таким:
- Удаленную проверку доступности открытых портов будем проводить с помощью nmap. Например, для проверки порта UDP 100:
или для проверки порта TCP 100: - Для того чтобы проверить порты, которые никто не слушает, воспользуемся утилитой netcat и откроем их. В частности, для открытия порта UDP 100 выполним следующее заклинание:
Типовой сценарий: сегментирование локальной сети маршрутизатором с функцией брандмауэра
Хорошей практикой защиты локальных сетей является их сегментация – разделение плоской сети на подсети с последующим разграничением и контролем трафика между ними.
В корпоративных сетях, как правило, выделяют следующие сегменты: сегмент пользовательских рабочих станций, сегмент серверов, сегмент технологического оборудования (например, системы видеонаблюдения), сегмент серверов, имеющих доступ из Интернет (DMZ) и другие сегменты. Каждый сегмент может в свою очередь быть разделен на полсегмента и так далее.Существует несколько способов сегментации, но наиболее распространенной является сегментация на сетевом уровне (L3), когда каждому сегменту присваивается своя IP-подсеть, а разграничение доступа осуществляется маршрутизаторами с функцией брандмауэра.
При разграничении доступа между пользовательским с серверным сегментами сети специалисты по информационной безопасности, как правило, в качестве технического задания предъявляют системным администраторам свой любимый документ – матрицу доступа, в которой указывается, какой пользователь к каким серверам или каким сетевым сервисам может иметь доступ. На основании матрицы доступа строится схема разграничения трафика.
Важно отметить, что в корпоративных сетях доступы пользователей, как правило, бывают типовыми. Например, все сотрудники отдела продаж должны иметь доступ к Web-интерфейсу системы учета клиентов (customer relation management, CRM). С точки зрения учета и управления доступами можно сказать, что таким пользователям назначается роль «Доступ к Web-интерфейсу CRM». Поэтому очень важно сделать правила фильтрации таким образом, чтобы можно было просто и единообразно добавлять доступы пользователям. Требование единообразия важно еще и потому, что любую систему разграничения доступа нужно периодически проверять, а зоопарк вариантов предоставления доступов серьезно осложнит эту задачу.
- Из серверного сегмента в пользовательский запрещен весь трафик, кроме:
- трафика, текущего по уже установленным соединениям.
- трафика, текущего по уже установленным соединениям;
- трафика к явно разрешенным сетевым службам явно разрешенных серверов.
Примечание 2. Большинство серверов enterprise уровня имеют несколько сетевых адаптеров. Например, один рабочий, с помощью которого он обслуживает целевые запросы клиентов, а второй служебный, используемый, например, для систем удаленного управления типа iLO, IPMI, iDrac и др. Поэтому корректнее говорить не «помещение сервера в отдельный сегмент», а «помещение сетевого интерфейса сервера в отдельный сегмент». Нормальной является ситуация, когда все сетевые адаптеры сервера находятся в различных сетевых сегментах.
Практическая работа: разграничение трафика между пользовательским и серверным сегментами
Описание стенда
Дан макет корпоративной сети (Рисунок 4), в которой присутствуют две подсети: 192.168.0.0/24 – для пользовательского сегмента и 172.30.0.0/24 — для серверного сегмента. В макете эти две сети представлены виртуальными сетями: «Custom11» и «NAT» соответственно. Виртуальная машина FW снабжена двумя сетевыми интерфейсами, каждый из которых «смотрит» в свою виртуальную сеть. Данная машина выполняет функции маршрутизатора и брандмауэра.
Рисунок 4Задача
Server1 Server2 Виртуальный маршрутизатор User1 TCP:80 TCP:80 UDP:53 User2 TCP:22 TCP:22 UDP:53 Подготовка стенда
- Средствами системы виртуализации создадим отдельную виртуальную сеть (VMnet), которую назовем «Custom11».
- Ранее созданный шаблон виртуальной машины растиражируем в 5 отдельных экземпляров: FW, User1, User2, Server1, Server2.
- К виртуальной машине FW добавим второй виртуальный сетевой адаптер, который соединим с сетью «Custom11». Ее первый сетевой адаптер должен быть подключен к виртуальной сети «NAT».
- Сетевые адаптеры машин User1 и User2 подключим к «Custom11», а сетевые адаптеры Server1, Server2 подключим к «NAT».
- Редактируя файлы /etc/network/interfaces, назначим всем виртуальным машинам статические IP-адреса, а также шлюзы (GW) и DNS-сервера в соответствии со схемой лабораторного стенда. В качестве шлюзов по умолчанию для Host1 и Host2 будет 192.168.0.40, для Server1 и Server2 172.30.0.40, а для FW 172.30.0.2
- На виртуальной машине FW активируем функции маршрутизации IPv4 трафика. Для этого в файле /etc/sysctl.conf раскомментируем строку net.ipv4.ip_forward=1. Сделать это можно с помощью заклинания:
- Проверим стенд. Host1 и Host2 должны иметь возможность «пингануть» Server1, Server2 и FW и наоборот. FW должен иметь возможность «пингануть» любой из узлов сети.
Ход выполнения работы
- Полную настройку брандмауэра мы уже рассматривали в предыдущей задаче. Поэтому здесь мы направим внимание на конфигурационный файл /etc/nftables.conf. Причем мы также опустим вопросы защиты самого FW, поскольку они будут точно такими же, как и в предыдущей задаче, и сосредоточимся лишь на фильтрации транзитного трафика.
- Анализируя матрицу доступа можно предположить, что User1 является рядовым работником, и ему требуется доступ по http ко всем серверам. Назовем такой доступ ролью «all_web». Для User2 требуется предоставить доступ ко всем серверам по SSH, вероятно он системный администратор. Обозначим такой доступ ролью «all_ssh». Обоим пользователям требуется доступ к DNS-серверу — это будет роль «DNS».
- Наиболее простым способом создать в nftables ролевую систему разграничения доступа будет применение правил, где в качестве аргументов используются списки (sets), содержащие конкретные параметры предоставления доступа. В нашем случае для каждой роли нужно создать два списка: наименование роли_users и наименование роли_servers. В первый список будут добавляться IP-адреса пользователей, во второй — IP-адреса серверов, а также протоколы и доступные порты.
- После создания списков для каждой роли создадим правило, разрешающее установку соединений ip saddr @название роли_users ip daddr. meta l4proto. th dport @название роли_servers accept. Трафик по инициированным соединения, как обычно, будет проходить с помощью правила ct state established,related accept.
- Итоговый конфигурационный файл (/etc/nftables.conf), решающий поставленную задачу будет выглядеть следующим образом:
Примечание. После настройки всех правил вы столкнетесь с одной проблемой: DNS на User1 и User2 работать не будет. Это не баг, это методическая фича. Проблема в том, что DNS-сервер работает на виртуальном маршрутизаторе, который ничего не знает о пользовательской сети 192.168.0.0/24, из-за этого ответы на запросы не доходят до адресатов. Этой проблемой хотелось показать реальные сложности, возникающие при сегментации уже работающих сетей с помощью разделения их на IP-подсети. На предприятиях со сложившейся инфраструктурой, но низким уровнем зрелости IT внедрить подобные меры защиты крайне сложно, а учитывая user resistance, практически невозможно. Но проблема все же имеет решение, и мы поговорим о нем прямо сейчас.
Типовой сценарий: сегментирование локальной сети коммутатором с функцией брандмауэра
Данный подход к межсетевому экранированию имеет множество названий: коммутатор с функцией брандмауэра, «stealth firewall», «transparent firewall» и др. Суть, однако, заключается в том, что сегментируемая сеть сохраняет свою IP-адресацию, а разделение происходит путем установки коммутатора в разрыв между будущими сегментами. Причем коммутатор фильтрует трафик как обычный межсетевой экран — на основании данных со всех инкапсулированных протоколов (L2, L3, L4, L7), а не только данных с протоколов канального уровня (L2), как в случае с обычным коммутатором.
Сетевые интерфейсы коммутатора не имеют IP-адресов (за исключением тех, что используются для управления). Соответственно, данное устройство не видимо для других сетевых узлов (за исключением случаев, когда используются специфические протоколы, например OSPF). Поэтому коммутатор с функцией брандмауэра часто называют прозрачный межсетевой экран — stealth firewall.
- Внедрение устройства не требует выделения IP-подсетей и, как следствие, перенастройки таблиц маршрутизации роутеров и сетевых стеков узлов.
- Устройство очень просто внедрить и очень просто изъять из сети в случае его поломки.
Практическая работа: провести сегментирование сети без разделения ее на IP-подсети
Описание стенда
Используемый лабораторный стенд (Рисунок 5) очень похож на предыдущий, за исключением того, что все машины здесь находятся в одной IP-подсети. Для того, чтобы машины UserX и ServerX не могли связаться между собой напрямую, а использовали для связи FW, их разделили по виртуальным сетям «Custom11» и «NAT».
Рисунок 5Задача
Подготовка стенда
- Внося изменения в файлы /etc/network/interfaces, назначим статические адреса всем узлам сети.
- Для организации работы FW в режиме коммутатора установим на него пакет bridge-utils:
- Затем на узле FW сконфигурируем коммутатор, объединив в мост (bridge) все сетевые порты. Для этого файл /etc/network/interfaces заполним следующим образом:
- Проверим стенд. Все узлы, кроме FW, должны «пинговаться» между собой. DNS, кстати, тоже должен работать.
Ход выполнения работы
-
Как и в предыдущей задаче рассмотрим только файл с правилами межсетевого экранирования /etc/nftables.conf. Скорее всего при беглом осмотре вы даже не заметите в нем различий по сравнению с таким же файлом из предыдущей задачи.
Проект OneButtonFirewall
Можно ли сделать межсетевой экран, не требующий конфигурирования? Если можно, то что он будет уметь? Давайте разбираться.
Мы с вами рассмотрели несколько схем разграничения трафика. Есть ли среди них та, что не требует конфигурирования, то есть указания IP-адресов или портов, на основании которых производится фильтрация трафика? Конечно, есть, и эта схема первая в списке.
- Запрещен транзит трафика из внешнего сегмента во внутренний, кроме того, что относится к уже установленным соединениям.
- Разрешен транзит любого трафика из внутреннего сегмента во внешний сегмент.
В итоге получаем своеобразный IP-диод, который в зависимости от подключения сегментов сети к своим интерфейсам пропускает соединения только в одну сторону. Стоит сегменты переподключить к другим портам, и направление сетевых соединений изменится на противоположное.
Осталась одна проблема – широковещательный трафик. Раньше, когда мы рассматривали фильтрацию с помощью коммутатора, мы не обращали на него внимание, и по факту он был запрещен, кроме разве что ARP. Это, конечно, безопасно, но для универсального межсетевого экрана не подходит, поскольку ломает работу множества протоколов, базирующихся на широковещательных посылках, и первыми такими протоколами будут протоколы ОС Windows, отвечающие за отрисовку сетевого окружения. В результате тетенька бухгалтерша, сидящая за подобным брандмауэром, издаст злобный писк, что пропали все ее сетевые папки, и что вы вообще бесполезный вредитель. Нам такого не надо, поэтому, скрипя сердцем, разрешим транзит всего широковещательного трафика.
Ну, вроде бы все учли… ан нет. В ходе эксплуатации OneButtonFirewall всплыла проблема, откуда не ждали – получение IP-адреса от DHCP-сервера, находящегося во внешнем сегменте. ОС Windows получает IP-адреса по DHCP сугубо на широковещательных рассылках, и текущих правил фильтрации ей полностью хватает. Linux же идет своим путем. При получении адреса на конечном этапе DHCP-сервер посылает клиенту адресный (unicast) пакет по UDP 68, и, чтобы тот достиг адресата, в правилах фильтрации нужно сделать соответствующее исключение.
Практическая работа: защитить сегмент сети с помощью межсетевого экрана, построенного по технологии OneButtonFirewall
Описание стенда
Давайте теперь соберем лабораторный стенд (Рисунок 6) и отработаем на нем наши идеи. Тут мы даже немного усложним задачу. У FW будет не два интерфейса: один внутренний и один внешний, а четыре: один внешний и три внутренних. Все узлы, подключенные к внутренним интерфейсам, будем считать внутренним сегментом и фильтровать трафик между этими узлами не будем. Как вы увидите дальше, количество внутренних интерфейсов не имеет значения, но внешний может быть только один.
Рисунок 6В этом примере для наглядности мы моделируем классическую корпоративную сеть на базе ОС Windows. Host1 – это Windows 10, подключенный к домену Active Directory, контроллер которого (ADDC) расположен во внешней сети. Host2 – Windows 10, не подключенная к домену, а Host3 – наша шаблонная машина на базе Debian. Все HostX получают IP-адреса по DHCP от виртуального маршрутизатора.
Для моделирования наших идей с помощью средств виртуализации каждый узел внутренней сети подключим через отдельную виртуальную сеть к FW. Как и прошлый раз мы делаем это для того, чтобы весь трафик между узлами HostX и узлами внешней сети шел через FW.
Задача
Подготовка стенда
-
На узле FW установим 4 сетевых интерфейса. Для наглядности с помощью средств виртуализации изменим на них MAC-адреса (Рисунок 7):
Рисунок 7Ход выполнения работы
1. Для решения поставленной задачи заполним файл /etc/nftables.conf следующим образом:
Реализация OneButtonFirewall в виде аппаратного устройства
Идея OneButtonFirewall наиболее полным образом раскрывает себя в виде аппаратного устройства. Реализовать ее в виде виртуальных машин или контейнеров, конечно, тоже можно, но особого профита это не даст. Аппаратное же устройство дает эффект своеобразного кирпичика, который можно подключить к сети, и он ее защищает. Отсюда, кстати, и название пошло OneButtonFirewall, так как подобному устройству нужна только одна кнопка: включение питания. Несомненным плюсом устройства является его неконфигурируемость. Оно реализует жесткий алгоритм, не требующий дополнительных настроек. Как следствие, не нужно заботиться о целостности конфигурации или продумывать интерфейсы администрирования и обеспечивать их защиту.
Построить OneButtonFirewall очень просто. Достаточно найти подходящую аппаратную платформу установить туда дистрибутив Linux, в котором есть поддержка nftables, и провести настройку из примера выше. Например, OneButtonFirewall, построенный на базе аппаратной платформы MikroTik, выглядит следующим образом (Рисунок 8):
Рисунок 8Преимущества и недостатки OneButtonFirewall
- Простота и скорость развертывания и изъятия системы защиты.
- Защищенность конфигурации от изменения.
- Минимальные требования к квалификации персонала.
- Устройство реализует жесткий алгоритм фильтрации, который решает далеко не все задачи межсетевого экранирования.
- Устройство не фильтрует широковещательный трафик и трафик по порту UDP 68 из внешней сети во внутреннюю.
Сценарии применения
Рассмотренные преимущества и недостатки определяют основную нишу применения OneButtoFirewall сценариями, в которых нужно просто и быстро реализовать межсетевое экранирование, а применение классических межсетевых экранов натыкается на недостаточную квалификацию / саботаж / лень / перегруженность работников IT.
- Защита сети отдела компании, например, бухгалтерии или службы безопасности. Узлы защищаемого отдела подключаются к внутренним портам межсетевого экрана, а остальная сеть к внешним. Внутренние узлы работают «как обычно», а из внешней сети подключиться к ним нельзя.
- Защита сети компании от компьютеров подрядчиков (например, аудиторов).
Тут обратная схема. Узлы компьютеров подрядчиков через коммутатор подключаются к внешнему порту межсетевого экрана, корпоративная сеть подключается к внутреннему порту. Из корпоративной сети можно подключится к компьютерам подрядчиков, а вот в обратную сторону нет. - Элемент дежурной аптечки системных администраторов.
OneButtonFirewall наряду с антивирусным LiveUSB может существенно помочь в случае массового заражения сети компьютерными вирусами. С его помощью можно безопасно переустановить и обновить операционную систему компьютеров, в случаях когда заражение происходит еще до того, как стартует штатный межсетевой экран операционной системы.
Заключение
Несмотря на довольно внушительный объем статьи, мы с вами успели рассмотреть лишь базовые приемы межсетевого экранирования, причем множество мер можно серьезно улучшить. Но так и должно быть — нет предела совершенству, но первый шаг к нему мы только что сделали.