Перейти к основному содержимому

Фаерволы

Всем

Фаерволы

Роль фаервола в сети

Фаервол — диспетчер трафика — проверяет источник и назначение, пропускает по правилам, остальное блокирует. Без него открытые сервисы видны извне, лишние порты увеличивают поверхность атаки. Нужен на серверах, рабочих станциях и в домашней лаборатории, не только в "больших" компаниях.


От чего защищает файерволл и зачем он нужен

Файерволл обеспечивает защиту информационных систем от несанкционированного доступа, вредоносного сетевого трафика и попыток эксплуатации уязвимостей. Он служит первым рубежом обороны в архитектуре сетевой безопасности. Основная задача — контроль входящего и исходящего трафика на основе заранее определённых правил.

Файерволл предотвращает проникновение вредоносных программ, сканирование портов, часть атак отказа в обслуживании (DoS / DDoS), а также блокирует соединения с известными вредоносными IP-адресами или доменами. Он ограничивает возможности внутренних приложений устанавливать нежелательные внешние соединения, что снижает риски утечки данных или участия устройства в ботнетах.

Наличие файерволла особенно важно в условиях постоянной активности автоматизированных сканеров и ботов в интернете, которые постоянно ищут уязвимые системы для эксплуатации. Без файерволла каждое устройство в сети потенциально доступно для любого участника глобальной сети, что создаёт высокий уровень риска.


Что такое пакет данных

Пакет данных — это минимальная единица передачи информации в сетях, использующих протоколы семейства TCP/IP. При отправке данных по сети они разбиваются на фрагменты, каждый из которых упаковывается в пакет. Каждый пакет содержит:

  • Заголовок — служебную информацию — IP-адрес отправителя, IP-адрес получателя, номер порта источника, номер порта назначения, тип протокола (TCP, UDP, ICMP и другие), флаги управления, контрольную сумму.
  • Полезную нагрузку — часть исходных данных, предназначенных для передачи.
  • Концевик — дополнительные служебные данные, такие как CRC-контрольная сумма для проверки целостности.

Пакеты могут следовать по сети разными маршрутами и приходить в произвольном порядке. Получатель собирает их обратно в исходное сообщение с помощью информации из заголовков. Файерволлы анализируют содержимое заголовков пакетов, чтобы принимать решения о разрешении или блокировке трафика.

Пример структуры IP-пакета (упрощённо):

+-------------------------+
| Версия IP (4 или 6) |
| Длина заголовка |
| Тип сервиса |
| Общая длина пакета |
| Идентификатор |
| Флаги и смещение фрагмента|
| Время жизни (TTL) |
| Протокол |
| Контрольная сумма |
| IP-адрес источника |
| IP-адрес назначения |
+-------------------------+
| Порт источника (TCP/UDP)|
| Порт назначения |
| Номер последовательности|
| Подтверждение |
| Флаги (SYN, ACK и др.) |
+-------------------------+
| Полезная нагрузка |
+-------------------------+

Файерволл может работать на разных уровнях модели OSI, но чаще всего анализирует пакеты на сетевом (L3) и транспортном (L4) уровнях.


Как работают правила

Правила файерволла — это набор инструкций, определяющих, как обрабатывать сетевой трафик. Каждое правило состоит из условий и действия. Условия описывают характеристики трафика — IP-адреса, порты, протоколы, направление (входящий/исходящий), интерфейс, состояние соединения. Действие указывает, что делать с трафиком, соответствующим условиям — разрешить, запретить, перенаправить, залогировать.

Правила применяются последовательно, сверху вниз. При первом совпадении с трафиком выполняется соответствующее действие, и дальнейшая проверка прекращается. Это означает, что порядок правил имеет значение. Более специфичные правила должны располагаться выше общих.

Пример правила в формате iptables (Linux):

# Разрешить входящие соединения на порт 80 (HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Это правило:

  • Применяется к цепочке INPUT (входящий трафик).
  • Работает с протоколом tcp.
  • Проверяет, что порт назначения (--dport) равен 80.
  • Если всё совпадает — действие ACCEPT (разрешить).

Другой пример — блокировка всех входящих соединений с конкретного IP:

iptables -A INPUT -s 192.168.5.100 -j DROP

Здесь:

  • -s указывает источник (source).
  • DROP означает полное игнорирование пакета без отправки ответа.

Правила могут быть временными (до перезагрузки) или постоянными (сохраняются в конфигурационных файлах). Эффективность правил зависит от их точности, полноты и логической согласованности.


Практический пример порядка правил

Типичный безопасный порядок для серверного входящего трафика:

  1. Разрешить established,related (ответы на уже открытые соединения).
  2. Разрешить loopback.
  3. Разрешить конкретные сервисы (22, 80, 443) только при необходимости.
  4. В конце явно блокировать все остальное.

Если поставить широкое allow выше частных ограничений, часть правил ниже просто никогда не сработает.

Play ITЗагрузка интерактивного демо…


Шесть типичных сценариев правил

Фильтрация — это анализ трафика и решение "пропустить" или "заблокировать" по критериям из правил. На практике почти любая политика собирается из нескольких сценариев ниже. Их комбинируют — портовые правила задают "какие службы видны снаружи", списки IP сужают круг клиентов, stateful-контроль отсекает чужие ответные пакеты, а правила по приложениям и времени добавляют политику организации.

Таблица портов веб, SSH и БД — в справочнике по портам; проброс портов на роутере и политика фаервола — в NAT и проброс портов.

1. Портовые правила

Самый частый сценарий на периметре сервера и домашнего роутера. Правило смотрит на номер порта назначения (и иногда источника) и протокол транспортного уровня.

Типичная политика для веб-сервера — разрешить только HTTP (80) и HTTPS (443) на вход, всё остальное входящее отбросить. Так закрываются случайно открытые службы, старые тестовые порты и админ-панели, которые "забыли" закрыть.

# ufw: только веб снаружи
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw default deny incoming

Порт в правиле — это дверь к службе, а не гарантия, что за дверью безопасное приложение. Поэтому портовые правила дополняют обновлениями ПО, а для SSH и панелей администрирования часто добавляют ограничение по IP.

2. Фильтрация по IP-адресу

Доступ разрешают или запрещают по источнику или назначению — одному адресу, подсети или географическому списку (в облачных NSG и WAF).

Пример — allowlist (белый список): SSH и админка только с офисной подсети 10.0.0.0/24 или с фиксированного IP VPN-шлюза. Всё остальное на порт 22 не доходит до sshd, даже если порт формально "открыт" в NAT.

# SSH только с корпоративной подсети
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Обратный вариант — blocklist: запрет исходящих соединений к известным C2-серверам или блок входящего трафика с подозрительных диапазонов. Списки IP быстро устаревают, поэтому в продакшене их обычно подгружают из threat intelligence или облачного WAF, а не правят вручную по одному адресу.

3. Правила по протоколу

На транспортном уровне (L4 в модели OSI) фаервол может разрешать только нужные протоколы — чаще всего TCP для веб и API, UDP — выборочно (DNS, QUIC, VoIP), ICMP — ограниченно или полностью запрещать на периметре, чтобы усложнить ping-сканирование и часть диагностических атак.

# Разрешить только TCP на вход (упрощённый пример)
iptables -A INPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j DROP
iptables -A INPUT -p icmp -j DROP

Протокольные правила не заменяют портовые: "разрешить весь TCP" всё равно оставляет открытыми все TCP-порты, пока ниже по цепочке нет запрета по умолчанию и точечных dport.

4. Правила по времени

Политика действует только в заданные часы или дни недели. Подходит для учебных лабораторий, гостевого Wi‑Fi, доступа подрядчиков и сервисов, которым не нужна круглосуточная видимость из интернета.

Пример расписания: разрешить удалённый доступ к внутреннему порталу с 09:00 до 16:00 и с 19:00 до 22:00, в остальное время — блокировать даже при корректном пароле.

В Linux модуль time для iptables:

iptables -A INPUT -p tcp --dport 8443 -m time \
--timestart 09:00 --timestop 16:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT

Корпоративные UTM и облачные политики (Azure Firewall, AWS Network Firewall) задают расписание в GUI или IaC. Важно учитывать часовой пояс сервера и NTP — иначе "ночной" запрет сработает не тогда, когда ожидают администраторы.

5. Stateful Inspection (учёт состояния сессии)

Пакетный фильтр без состояния смотрит на каждый пакет отдельно. Stateful-фаервол ведёт таблицу сессий — кто инициировал соединение, на какие порты, на какой стадии handshake (SYN, ESTABLISHED и т.д.).

Входящий пакет с флагом "ответ на наш запрос" пропускают, если в таблице есть соответствующая исходящая сессия. Случайный SYN с интернета на закрытый порт или "ответ" без предшествующего запроса отбрасывают. Поэтому в безопасных конфигурациях первым правилом часто идёт ct state established,related acceptnftables / iptables с модулем conntrack).

Схема работы:

Клиент ──запрос──► Фаервол ──► Сервер
◄──ответ── (запись в state table: разрешить обратный трафик)

Без stateful-логики пришлось бы вручную открывать диапазоны "эфемерных" портов для ответов — политика стала бы громоздкой и дырявой.

6. Правила по приложениям

Next-generation firewall (NGFW) и хостовые агенты с DPI определяют приложение или категорию трафика, а не только порт. Один и тот же TCP/443 может нести браузер, мессенджер или туннель BitTorrent — по сигнатурам, SNI, поведению потока политика решает, пропускать ли поток.

Типичная корпоративная схема:

  • Allowlist — разрешены Zoom, корпоративный VPN-клиент, обновления ОС через прокси.
  • Blocklist — запрещены P2P (BitTorrent), торрент-клиенты, известные игровые лаунчеры в рабочей VLAN.

На уровне L7 тот же механизм лежит в основе WAF (блок SQLi и XSS в HTTP) — см. прокси, CDN и WAF. В Windows аналог — правила для программ (chrome.exe, Teams.exe), а не только для портов.

Как сценарии сочетаются

СценарийЧто ограничиваетТипичное место
ПортыКакие службы доступны снаружиСервер, роутер, Security Group
IPКто может подключитьсяSSH, админка, API для партнёров
ПротоколTCP / UDP / ICMPПериметр, IoT-сегменты
ВремяКогда доступен сервисЛаборатории, подрядчики
StatefulТолько ответы на свои запросыПочти везде по умолчанию
ПриложенияКакой софт в сетиОфис, NGFW, EDR

Чем критичнее сервис, тем больше слоёв включают. Фильтрация снижает поверхность атаки и поддерживает принцип минимальных привилегий: хост и пользователь получают только те сетевые пути, которые нужны для работы.


Как работает блокировка и разрешение

Блокировка и разрешение — это два основных действия, которые может выполнять файерволл в ответ на сетевой трафик.

Разрешение означает, что пакет пропускается дальше по сети. Это происходит, когда трафик соответствует одному из разрешающих правил. Разрешённый трафик может быть как входящим (например, запрос к веб-серверу), так и исходящим (например, обновление программного обеспечения).

Блокировка может реализовываться двумя способами:

  • DROP — пакет молча отбрасывается. Отправитель не получает никакого уведомления. Это повышает безопасность, так как злоумышленник не узнаёт, существует ли целевой хост или просто закрыт порт.
  • REJECT — отправляется сообщение об ошибке (например, ICMP-сообщение "порт недоступен" или TCP RST-пакет). Это удобнее для диагностики легитимных проблем, но даёт информацию потенциальному атакующему.

Выбор между DROP и REJECT зависит от политики безопасности. В публичных сервисах часто используется REJECT для удобства пользователей, а во внутренних сетях — DROP для маскировки инфраструктуры.

Политика по умолчанию

Для периметра и серверов безопаснее правило "запретить всё, разрешить явно" (default deny) — сначала established,related и нужные порты, в конце цепочки — drop. Исходящий трафик на рабочих станциях иногда ограничивают отдельно, чтобы снизить утечки и ботнет-активность.

Пример конфигурации в nftables (современная замена iptables):

table inet filter {
chain input {
type filter hook input priority 0;
# Разрешить установленные соединения
ct state established,related accept
# Разрешить локальный трафик
iif "lo" accept
# Разрешить SSH
tcp dport 22 accept
# Блокировать всё остальное без уведомления
drop
}
}

Эта конфигурация:

  • Сначала пропускает уже установленные соединения.
  • Затем разрешает весь трафик на loopback-интерфейсе.
  • После этого открывает порт 22 для SSH.
  • Всё остальное — отбрасывается.

Такой подход ("разрешить явно, всё остальное — запретить") считается наиболее безопасным.


Программный файерволл

Программный файерволл — это приложение или компонент операционной системы, реализующий функции межсетевого экрана на уровне хоста. Он работает внутри самой операционной системы и контролирует весь сетевой трафик, проходящий через сетевые интерфейсы этого устройства.

Преимущества программного файерволла:

  • Гибкость настройки под конкретное приложение или пользователя.
  • Возможность контроля исходящего трафика на уровне процессов.
  • Интеграция с другими компонентами ОС (например, с антивирусом).
  • Низкая стоимость — часто входит в состав ОС.

Недостатки:

  • Зависит от состояния операционной системы. Если ОС скомпрометирована, файерволл может быть отключён или обойдён.
  • Потребляет ресурсы CPU и памяти хоста.
  • Требует настройки на каждом устройстве отдельно.

Примеры программных файерволлов:

  • Windows Defender Firewall — встроен в Windows.
  • ufw (Uncomplicated Firewall) — упрощённый интерфейс к iptables в Linux.
  • pf — мощный файерволл в OpenBSD, также доступен в macOS и FreeBSD.
  • Firewalld — динамический менеджер фаерволла в современных дистрибутивах Linux (RHEL, Fedora, CentOS).

Пример команды в ufw:

# Разрешить порт 443 (HTTPS)
sudo ufw allow 443/tcp

Программный файерволл особенно полезен на конечных устройствах (ноутбуках, рабочих станциях), где важно контролировать, какие приложения могут выходить в интернет.


Аппаратный файерволл

Аппаратный файерволл — это специализированное сетевое устройство, предназначенное исключительно для выполнения функций межсетевого экрана. Он размещается на границе между внутренней сетью и внешним миром (например, между локальной сетью и интернетом).

Особенности аппаратного файерволла:

  • Выполняет фильтрацию на выделенном оборудовании с оптимизированной прошивкой.
  • Обеспечивает высокую производительность и низкую задержку.
  • Часто включает дополнительные функции — VPN, IDS/IPS, фильтрацию контента, QoS.
  • Управляется централизованно, что упрощает администрирование крупных сетей.
  • Не зависит от состояния конечных хостов.

Примеры аппаратных решений:

  • Cisco ASA / Firepower
  • Palo Alto Networks PA-Series
  • Fortinet FortiGate
  • Juniper SRX

Аппаратные файерволлы используются в корпоративных сетях, дата-центрах и провайдерских инфраструктурах. Они обеспечивают защиту всей сети сразу, а не по отдельным узлам.

Конфигурация аппаратного файерволла обычно выполняется через веб-интерфейс, CLI или API. Пример правила в Cisco ASA:

access-list OUTSIDE_IN extended permit tcp any host 203.0.113.10 eq 80
access-group OUTSIDE_IN in interface outside

Это правило разрешает любой входящий TCP-трафик на порт 80 хоста 203.0.113.10.

Аппаратные файерволлы часто поддерживают отказоустойчивость (HA-пары), глубокую инспекцию пакетов (DPI) и интеграцию с системами управления безопасностью (SIEM).


Брандмауэр Windows

Брандмауэр Windows — это встроенный компонент операционной системы Microsoft Windows, предназначенный для контроля входящего и исходящего сетевого трафика на уровне хоста. Он доступен во всех современных версиях Windows, начиная с Windows XP SP2, и активирован по умолчанию.

Брандмауэр Windows работает на основе профилей сети:

  • Домашняя сеть — применяется, когда компьютер подключён к доверенной локальной сети.
  • Частная сеть — используется в корпоративных или учебных сетях, где требуется баланс между безопасностью и функциональностью.
  • Публичная сеть — самый строгий профиль, применяемый при подключении к общественным Wi-Fi (кафе, аэропорты), где по умолчанию блокируются почти все входящие соединения.

Каждое правило может быть привязано к одному или нескольким профилям. Это позволяет гибко настраивать поведение в зависимости от контекста подключения.

Правила в брандмауэре Windows делятся на два типа:

  • Правила для программ — разрешают или запрещают конкретному исполняемому файлу (например, chrome.exe) создавать сетевые соединения.
  • Правила для портов — управляют трафиком по протоколам и номерам портов (например, разрешить TCP-порт 3389 для удалённого рабочего стола).

Пример создания правила через PowerShell:

# Разрешить входящие соединения на порт 8080 (TCP)
New-NetFirewallRule -DisplayName "Разрешить HTTP-альтернативу" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8080 `
-Action Allow

Это правило:

  • Имеет понятное имя (DisplayName).
  • Применяется ко входящему трафику (Inbound).
  • Работает только с протоколом TCP.
  • Слушает локальный порт 8080.
  • Выполняет действие Allow.

Брандмауэр Windows также поддерживает расширенные функции:

  • Фильтрацию по IP-адресам источника и назначения.
  • Управление правилами групповой политикой (GPO) в доменах Active Directory.
  • Интеграцию с IPsec для шифрования и аутентификации трафика.
  • Ведение журналов событий (по умолчанию отключено, но может быть включено вручную).

Журналы записываются в файл %systemroot%\System32\LogFiles\Firewall\pfirewall.log и содержат информацию о заблокированных и разрешённых пакетах, включая временные метки, IP-адреса, порты и протоколы.


Как настроить брандмауэр

Настройка файерволла зависит от используемой операционной системы или устройства. В общем случае процесс включает определение требуемых сетевых служб, создание правил для их работы и блокировку всего остального.

В Linux с использованием ufw (Uncomplicated Firewall):

# Включить файерволл
sudo ufw enable

# Разрешить SSH
sudo ufw allow OpenSSH

# Разрешить HTTP и HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Запретить всё остальное по умолчанию
sudo ufw default deny incoming
sudo ufw default allow outgoing

В Windows через графический интерфейс:

  1. Открыть "Панель управления" → "Система и безопасность" → "Брандмауэр Защитника Windows".
  2. Выбрать "Дополнительные параметры".
  3. В разделе "Правила для входящих подключений" нажать "Создать правило".
  4. Указать тип правила (программа, порт, предопределённое).
  5. Выбрать действие (разрешить, разрешить с защитой, запретить).
  6. Назначить профили сети.
  7. Указать имя правила.

В macOS используется встроенный файерволл pf, управляемый через pfctl или графический интерфейс:

  • Системные настройки → "Сеть" → "Брандмауэр".
  • Можно включить базовую фильтрацию приложений.
  • Для продвинутой настройки редактируется файл /etc/pf.conf.

На маршрутизаторах (например, на базе OpenWrt) правила задаются через веб-интерфейс LuCI или напрямую в конфигурационных файлах iptables/nftables.

Общие принципы настройки:

  • Начинать с политики "запретить всё, разрешить явно".
  • Минимизировать количество открытых портов.
  • Ограничивать доступ по IP-адресам, где возможно.
  • Регулярно проверять и чистить устаревшие правила.

Главная цель этих принципов - снизить поверхность атаки и сделать правила предсказуемыми для сопровождения. Когда исключений слишком много и они плохо документированы, фаервол начинает защищать хуже, даже если формально "настроен".


Как настроить исключения

Исключения — это правила, которые временно или постоянно отменяют действие основной политики файерволла для конкретных приложений, портов или адресов.

В Windows исключение можно добавить так:

  • Через PowerShell:
# Разрешить конкретную программу
New-NetFirewallRule -DisplayName "Моя программа" `
-Program "C:\MyApp\app.exe" `
-Direction Outbound `
-Action Allow
  • Через графический интерфейс: при создании правила выбрать "Программа" → указать путь к .exe.

В Linux с iptables:

# Разрешить исходящие соединения к DNS-серверу Google
iptables -A OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT

В nftables:

table inet filter {
chain output {
ip daddr 8.8.8.8 udp dport 53 accept
}
}

Важно помнить:

  • Исключения увеличивают поверхность атаки.
  • Каждое исключение должно быть обосновано бизнес- или технической необходимостью.
  • Исключения для целых подсетей (0.0.0.0/0) считаются плохой практикой.
  • Лучше использовать временные исключения с автоматическим удалением (например, через cron или задачи планировщика).

Некоторые файерволлы поддерживают "динамические" исключения — например, при первом запуске программы пользователю предлагается разрешить или запретить сетевой доступ. Такой подход удобен для конечных пользователей, но не рекомендуется на серверах.


Как понять, что у программы, сервера или приложения проблемы именно из-за файервола

Диагностика проблем, связанных с файерволлом, начинается с наблюдения за симптомами:

  • Приложение не может подключиться к внешнему сервису (например, не загружает данные из интернета).
  • Сервер принимает локальные запросы (localhost), но недоступен извне.
  • Соединение зависает без ошибки или завершается с тайм-аутом.
  • Появляются сообщения вида "Connection refused" (если используется REJECT) или полное отсутствие ответа (если используется DROP).

Методы диагностики:

1. Проверка локальной доступности

Запустить сервер и попробовать подключиться к нему с того же хоста:

curl http://localhost:8080

Если работает — проблема во внешнем доступе, вероятно, в файерволле.

2. Проверка состояния порта с другого устройства

Использовать telnet, nc (netcat) или Test-NetConnection (PowerShell):

Test-NetConnection example.com -Port 8080

Если соединение не устанавливается, а сервер точно запущен — скорее всего, порт закрыт файерволлом.

3. Анализ журналов файерволла

Включить логирование и найти записи о блокировке:

  • В Windows: просмотреть pfirewall.log.
  • В Linux: проверить /var/log/kern.log или настроить отдельный лог для iptables:
iptables -A INPUT -j LOG --log-prefix "BLOCKED: "

4. Временное отключение файерволла

(Только в тестовой среде!)

  • Windows:
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False
  • Linux:
sudo ufw disable
# или
sudo iptables -P INPUT ACCEPT && sudo iptables -F

Если после отключения проблема исчезает — причина точно в правилах файерволла.

5. Проверка правил

Убедиться, что правило существует и активно:

  • Windows:
Get-NetFirewallRule -DisplayName "Моё правило"
  • Linux:
sudo iptables -L -n -v
# или
sudo nft list ruleset

Типичные ошибки:

  • Правило создано для неправильного профиля сети (например, только для "частной", а подключение публичное).
  • Указан неверный протокол (TCP вместо UDP или наоборот).
  • Порт указан как "локальный", хотя нужно разрешить "удалённый" (или наоборот).
  • Правило находится ниже более общего правила с действием DROP.

Когда диагноз подтверждён, создаётся точное правило, разрешающее нужный трафик, и файерволл возвращается в рабочее состояние.

Связанные темы

Для комплексной защиты сетевого периметра полезно пройти связку: SSH и туннели, риски открытого Wi-Fi, управление доступом, основы ИБ.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.