Основы Linux для хакеров: создание маршрутизатора с помощью nftables

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
152
Депозит
-8.95$
Добро пожаловать обратно, начинающие кибервоины!

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

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

Давайте углубимся в детали и превратим стандартную машину Linux в маршрутизатор с помощью nftables!

Шаг №1. Понимание архитектуры Nftables


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

Ключевые компоненты nftables включают в себя:

  1. Таблицы : пространства имён, содержащие цепочки. Они относятся к определённому семейству адресов (IPv4, IPv6 и т. д.).
  2. Цепочки : контейнеры для правил с определенными хуками и приоритетами.
  3. Правила : Фактические инструкции по фильтрации или модификации, применяемые к пакетам.
  4. Выражения : строительные блоки, из которых состоят правила, позволяющие создавать сложные условия сопоставления.
  5. Наборы : коллекции элементов для эффективного поиска.
Такая архитектура обеспечивает гибкость при проектировании логики обработки трафика маршрутизатора. Подробнее о nftables можно узнать в нашей статье .

Шаг №2. Настройка вашей машины Linux


В этом руководстве я буду использовать Kali 2025, но инструкции должны работать с минимальными изменениями на большинстве современных дистрибутивов Linux. Вам понадобится компьютер как минимум с двумя сетевыми интерфейсами: один для подключения к WAN (интернету) и один для подключения к локальной сети (LAN).

Если вы используете VirtualBox, выполните следующие действия для настройки сетевых интерфейсов:

Выберите вашу виртуальную машину и перейдите в Настройки > Сеть .

Адаптер 1 (eth0) – подключение к Интернету (WAN)


  • Установите флажок «Включить сетевой адаптер».
  • Установите «Подключено к» на NAT (или мостовой адаптер , если вам нужен прямой доступ к вашей физической сети)
  • Этот адаптер будет служить интерфейсом eth0 внутри виртуальной машины, обеспечивая доступ в Интернет.

f0b171_de4554f8a86041389617d2577dd32072~mv2.webp


Адаптер 2 (eth1) – Внутренняя сеть (LAN)


  • Установите флажок «Включить сетевой адаптер».
  • Установите «Подключено к» на «Внутренняя сеть»
  • Дайте внутренней сети имя (например, intnet ) — обязательно используйте одно и то же имя для всех виртуальных машин, которые должны находиться в одной локальной сети.
  • Этот адаптер будет работать как eth1 , подключенный к вашей частной внутренней сети.

f0b171_3d9e1c90a24b4d13a214ea0eb00f8e01~mv2.webp


При запуске ifconfig вы должны увидеть эти интерфейсы в списке.

f0b171_2cc1f6b57925427a98e2faf00788185d~mv2.webp


Далее давайте убедимся, что nftables установлен:

kali> sudo apt install nftables

f0b171_6b49f745ffb849f2af886061d25fc188~mv2.webp


Теперь включите запуск службы nftables при загрузке:

kali> sudo systemctl enable nftables
kali> sudo systemctl start nftables

f0b171_d15d4e786e6b49ad977a766d7bf023fa~mv2.webp


Шаг №3. Включение IP-переадресации


Чтобы наша Linux-машина работала как маршрутизатор, нам нужно включить IP-пересылку. Это позволит ядру пересылать пакеты между интерфейсами.

Отредактируйте файл конфигурации sysctl:

kali> sudo коврик для мыши /etc/sysctl.conf

Найдите или добавьте следующую строку и убедитесь, что она раскомментирована:

net.ipv4.ip_forward=1

Примените изменения:

sudo sysctl -p

Вы можете убедиться, что пересылка включена, проверив:

cat /proc/sys/net/ipv4/ip_forward

Если пересылка включена, то должно возвращаться значение «1».

f0b171_41da067cb1204faf8b4d0883106bcfce~mv2.webp


Шаг №4. Настройка сетевых интерфейсов


Теперь настроим сетевые интерфейсы. Настроим eth0 как WAN-интерфейс (обычно с использованием DHCP для получения IP-адреса от интернет-провайдера), а eth1 — как LAN-интерфейс со статическим IP-адресом.

Отредактируйте файл конфигурации сети:

kali> sudo mousepad /etc/network/interfaces

Настройте это следующим образом:

# WAN-интерфейс
авто eth0
iface eth0 inet dhcp

# Интерфейс локальной сети
авто eth1
iface eth1 inet static
адрес 192.168.1.1
маска сети 255.255.255.0

f0b171_786b9dc9bf454aa3b0e4ec74d1bc28f8~mv2.webp


Перезапустите сеть, чтобы применить эти изменения:

kali> sudo systemctl перезапустите сеть

Шаг №5 Создание конфигурации Nftables


Теперь перейдем к сердцу нашего маршрутизатора — конфигурации nftables. Мы создадим комплексный набор правил, который:

  1. Позволяет установленным и связанным соединениям
  2. Выполняет преобразование сетевых адресов (NAT) для нашей локальной сети
  3. Реализует базовую фильтрацию безопасности
  4. Обеспечивает пересылку между интерфейсами

Создайте новый файл конфигурации nftables:

kali> sudo коврик для мыши /etc/nftables.conf

Вот полная конфигурация нашего маршрутизатора:

#!/usr/sbin/nft -f

набор правил очистки

# Определить переменные для интерфейсов
определить WAN_IF = eth0
определить LAN_IF = eth1
определить LAN_NET = 192.168.1.0/24

таблица inet фильтр {
цепочка ввода {
тип фильтра перехват входного приоритета 0; отбрасывание политики;

# Разрешить установленные/связанные соединения
состояние ct установлено,соответствующее принятие

# Разрешить петлю
iifname "lo" принять

# Разрешить локальной сети доступ к маршрутизатору
iifname $LAN_IF принять

# Разрешить ICMP из WAN (для пинга)
iifname $WAN_IF icmp type echo-request accept

# Отбрасывать недействительные соединения
состояние ct недопустимое падение
}

цепь вперед {
тип фильтра перехват переадресация приоритет 0; отбрасывание политики;

# Разрешить установленные/связанные соединения
состояние ct установлено,соответствующее принятие

# Разрешить LAN в WAN
iifname $LAN_IF oifname $WAN_IF принять

# Отбрасывать недействительные соединения
состояние ct недопустимое падение
}

выход цепи {
тип фильтра перехват вывода приоритет 0; политика принята;
}
}

таблица ip nat {
предварительная маршрутизация цепочки {
тип nat hook prerouting приоритет -100; политика принимает;

# Примеры переадресации портов (раскомментируйте и отредактируйте по мере необходимости)
# iifname $WAN_IF tcp dport 80 dnat to 192.168.1.100:80
}

цепочка постмаршрутизации {
тип nat hook postrouting приоритет 100; политика принята;

# Маскарад LAN в WAN
oifname $WAN_IF ip saddr $LAN_NET masquerade
}
}

Сохраните файл и примените конфигурацию:

Кали> sudo nft -f /etc/nftables.conf

Чтобы эти правила сохранялись при перезагрузках, включите службу nftables:

kali> sudo systemctl enable nftables

Шаг №6. Настройка DHCP-сервера для клиентов локальной сети


Теперь, когда наш маршрутизатор настроен, нам нужно настроить DHCP-сервер, чтобы устройства в нашей локальной сети могли автоматически получать IP-адреса. Мы будем использовать для этого dnsmasq, поскольку он легковесен и включает в себя кэширование DHCP и DNS.

Установить dnsmasq:

kali> sudo apt install dnsmasq

f0b171_b9bbc595f2f54f3093faba3e06866b47~mv2.png


Настройте dnsmasq, отредактировав его файл конфигурации:

kali> sudo коврик для мыши /etc/dnsmasq.conf

Измените эти строки:

# Прослушивание только на интерфейсе LAN:
интерфейс=eth1

# Не слушайте в WAN:
без-dhcp-интерфейса=eth0

f0b171_a4e1523294504e7b8fe9e171fe768c2c~mv2.webp


# Диапазон DHCP и время аренды
dhcp-диапазон=192.168.1.100,192.168.1.200,255.255.255.0,24h

# Доменное имя
домен=home.lan

f0b171_9c7f6374259c4b3eb29518daaf855aa1~mv2.webp


# Включить DNS-кэширование
размер кэша=1000

f0b171_5c8a0681aff445a79ea91ee0d9837aca~mv2.webp


# Шлюз по умолчанию
dhcp-option=option:router,192.168.1.1

# DNS-серверы (здесь используется публичный DNS Google)
dhcp-option=6,8.8.8.8,8.8.4.4

f0b171_d564e17721f84139bd6d861531d65bbd~mv2.webp

Запустите и включите dnsmasq:

kali> sudo systemctl enable dnsmasq
kali> sudo systemctl restart dnsmasq

f0b171_0de0c44ef0704359908508a0817c4322~mv2.webp


Шаг №8. Мониторинг и устранение неполадок


Для эффективного управления маршрутизатором необходимо иметь возможность отслеживать его работу и устранять неполадки. Вот несколько полезных команд:

Просмотреть текущий набор правил nftables:

kali> sudo nft list ruleset

f0b171_b6800ec307e34ce0b87d71f3d0363ae8~mv2.webp


Проверьте трафик на интерфейсе:

кали> sudo tcpdump -i eth1

f0b171_e80048e8e7fc4ee58a9ff87511c9953d~mv2.webp


Просмотреть таблицу маршрутизации:

f0b171_fd4b70f9871646cead78607fdd8933b5~mv2.webp


Краткое содержание


Linux с nftables — мощный инструмент! Мы можем организовать брандмауэр, маршрутизатор и DHCP-сервер, имея лишь немного знаний и машину с Linux. Эта конфигурация даёт вам возможность управлять мощным и гибким маршрутизатором за малую долю стоимости. Кроме того, она даёт возможность настраивать маршрутизатор так, как это просто невозможно в коммерческих системах.
 
Назад
Сверху Снизу