Фаерволы
Фаерволы
Роль фаервола в сети
Фаервол — диспетчер трафика — проверяет источник и назначение, пропускает по правилам, остальное блокирует. Без него открытые сервисы видны извне, лишние порты увеличивают поверхность атаки. Нужен на серверах, рабочих станциях и в домашней лаборатории, не только в "больших" компаниях.
От чего защищает файерволл и зачем он нужен
Файерволл обеспечивает защиту информационных систем от несанкционированного доступа, вредоносного сетевого трафика и попыток эксплуатации уязвимостей. Он служит первым рубежом обороны в архитектуре сетевой безопасности. Основная задача — контроль входящего и исходящего трафика на основе заранее определённых правил.
Файерволл предотвращает проникновение вредоносных программ, сканирование портов, часть атак отказа в обслуживании (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означает полное игнорирование пакета без отправки ответа.
Правила могут быть временными (до перезагрузки) или постоянными (сохраняются в конфигурационных файлах). Эффективность правил зависит от их точности, полноты и логической согласованности.
Практический пример порядка правил
Типичный безопасный порядок для серверного входящего трафика:
- Разрешить
established,related(ответы на уже открытые соединения). - Разрешить loopback.
- Разрешить конкретные сервисы (
22,80,443) только при необходимости. - В конце явно блокировать все остальное.
Если поставить широкое 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 accept (в nftables / 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 через графический интерфейс:
- Открыть "Панель управления" → "Система и безопасность" → "Брандмауэр Защитника Windows".
- Выбрать "Дополнительные параметры".
- В разделе "Правила для входящих подключений" нажать "Создать правило".
- Указать тип правила (программа, порт, предопределённое).
- Выбрать действие (разрешить, разрешить с защитой, запретить).
- Назначить профили сети.
- Указать имя правила.
В 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 как основа веб-интеграций.