Linux ip masquerading notes

Destination NAT

Цепочка Dstnat при настройке NAT на MikroTik служит для изменения IP-адреса и/или порта назначения и выполнения обратной функции для ответа.

Практически применяется в следующих случаях:

  • Чтобы выполнить на MikroTik проброс портов в локальную сеть, для доступа извне.
  • Перенаправление любого DNS-трафика через маршрутизатор.

Стандартные действия возможные для цепочки dst-nat:

  • dst-nat – преобразование адреса и/или порта получателя;
  • redirect – преобразование адреса и/или порта получателя на адрес маршрутизатора.

Давайте практически разберем, как выполняется настройка NAT на MikroTik для цепочки dstnat.

Проброс портов на MikroTik

Пример проброса порта для RDP

Как говорилось ранее, в MikroTik проброс портов делается при помощи создания правил для цепочки dstnat. В качестве примера выполним проброс порта RDP соединения для доступа к внутреннему компьютеру локальной сети.

Так как стандартный порт 3389 для RDP подключения является известным и часто подвергается атакам, то пробросить его напрямую будет не очень хорошей идеей. Поэтому скроем данный сервис с помощью подмены порта.  

Для этого откроем:

IP=>Firewall=>NAT=> “+”.

На вкладке “General” укажем цепочку правил, протокол, протокол подключения и входящий интерфейс:

Где:

  • Chain: dstnat – цепочка правил для IP-адреса назначения;
  • Protocol: 6 (tcp) – протокол;
  • Dst. Port: 47383 – номер порта по которому будем обращаться к роутеру;
  • In. Interface – входящий WAN-интерфейс (у меня это ether1, у вас может быть другой).

Следующим шагом откроем вкладку “Action”:

  • Для поля “Action” указываем значение dst-nat;
  • To Addresses – указываем внутренний IP хоста, к которому хотим получить доступ по RDP;
  • To Ports – порт на который будут перенаправляться запросы.

Как итог все запросы, приходящие на внешний IP роутера по порту 47383, будут пересылаться на внутренний адрес локальной сети 192.168.12.100 порт 3389 (RDP).

Проброс порта на MikroTik для видеонаблюдения

Следующим примером мы постараемся показать, как настроить на MikroTik проброс портов для видеосервера с установленным ПО “Линия”.

Предположим, что есть Видеосервер с ПО “Линия” к которому необходимо получить доступ извне. Для начала откроем настройки программного обеспечения “Линия”, чтобы узнать порт Веб-сервера:

Чтобы получить доступ к видеосерверу, необходимо пробросить порт 9786. Откроем Winbox и добавим правило:

Откроем пункт меню “Action”:

  • Указываем действие dst-nat;
  • To Addresses – внутренний IP видеосервера или видеорегистратора.

Проброс портов для нескольких внешних IP

Чтобы сделать проброс портов для нескольких WAN, то необходимо создать Interface List и добавить в него нужные интерфейсы. Далее укажем созданный лист в параметре In. Interface List. Покажем это на примере:

Создадим новый лист для интерфейсов “ISP”:

  • Interfaces;
  • Interface List => Lists => “+”.

Name: ISP – произвольное имя для Interface List.

Следующим шагом добавим нужные WAN интерфейсы:

Повторить данный шаг для всех WAN-интерфейсов.

Модернизируем ранее созданное правило проброса порта для RDP соединения, указав лист “ISP” для настройки In. Interface List:

Так можно настроить проброс портов на MikroTik для нескольких WAN.

Как защитить проброшенные порты вы можете узнать изучив статью MikroTik настройка Firewall.

Перенаправление трафика на маршрутизатор

С помощью действия redirect возможно перенаправление трафика на Микротик. Практическое применение данного действия мы рассмотрим, выполнив переадресацию запросов DNS.

Перенаправим весь DNS-трафик на маршрутизатор. Следовательно, пользователи компьютеров в LAN, какие бы настройки DNS ни указывали локально, будут считать, что им отвечает DNS-сервер, которому сделан запрос, но фактически ответ будет приходить от маршрутизатора.

Для этого выполним настройку NAT на MikroTik следующим образом.

Откроем: IP=>Firewall=>NAT=> “+”.

Добавим запись:

Перейдем в пункт меню “Action” и укажем действие redirect:

NAT Loopback / Hairpin NAT

Проблема

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

  • Если в условии использовался внешний интерфейс, то правило не сработает и пакет будет отброшен маршрутизатором — соединение не состоится.
  • Если в условии использовался внешний адрес маршрутизатора, то правило сработает, но соединение не установится. Рассмотрим этот сценарий подробнее.

Пакет будет отброшен инициатором соединения

Запрос успешно дойдет до устройства назначения, однако ответ должен будет вернуться напрямую на устройство, без маршрутизатора. В результате при проверках на устройстве-инициаторе соединения пакет будет отброшен, так как от этого адреса источника он не ждет ответов. Соединение не установится.

Подмена на уровне DNS

Если приложение использует DNS для определения IP адреса сервиса назначения (например, сайт), то самым правильным способом будет использование в локальной сети DNS-сервера, который будет отдавать внутренний IP адрес для домена. В случае использовании MikroTik DNS-сервера, правило будет выглядеть примерно так:

Таким образом настройка NAT Loopback не потребуется в принципе. Клиент будет напрямую обращаться на сервер назначения по локальной сети без использования маршрутизатора, а сервер назначения, в свою очередь, увидит настоящий адрес источника в локальной сети

Данное решение не будет работать в случае использования DNS-over-HTTPS или аналогов на конечных устройствах или в случае, если приложение не использует доменные имена.

Официальный

Многие ресурсы, включая wiki.mikrotik.com, предлагают примерно одни и те же варианты решения:

Этим правилом задаем, что: всем пакетам, которые идут из локальной сети, на адрес 192.168.88.5, на порты 80 и 443 и выходят с интерфейса LAN мы меняем адрес источника на адрес маршрутизатора в локальной сети.

Таким образом, соединение успешно устанавливается, однако есть несколько ограничений:

  • На каждое правило проброса порта потребуется еще одно правило для поддержки NAT Loopback
  • Можно легко попасться на граблю, не указав фильтр источника пакетов (src-address=192.168.88.0/24). Все запросы (включая те, что идут из интернета) на сервер назначения будут идти от адреса маршрутизатора, что в итоге может сломать фильтрацию на базе адресов источника на сервере назначения.
  • Серверу назначения, которому в итоге придет запрос не будет видно IP адрес источника, так как им будет являться маршрутизатор

Дополненный официальный способ

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

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

Первым этапом нужно промаркировать (new-packet-mark=nat-loopback) те пакеты, которые пришли на внешний адрес маршрутизатора (dst-address=203.0.113.5) из локальной сети (in-interface=LAN) и являются новыми соединениями (connection-state=new).

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

Далее можно писать правила проброса в классическом виде. Этой схемой мы избавились от двух из трех недостатков предыдущего способа.

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

Количество просмотров: 6 995

Организация моста между сетями

После того, как соединение с клиентом через VPN будет установлено, мы можем выполнить последнее требование с помощью SSH: связать удалённую и локальную сеть мостом.

На сервере

Мы включаем маршрутизацию к удалённой сети на сервере OpenVPN:

root@kali:~# route add -net 192.168.101.0/24 gw 10.8.0.200

На агентской Kali

Мы активируем IP маршрутизацию, а так же «маскарад» сетевых адресов на удалённом агенте Kali:

root@kali:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@kali:~# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Теперь у нас есть полный доступ к удалённой сети через 3 слой, и мы можем использоваться любые инструменты для взаимодействия с ней.

6.1 Ethernet

Ядро присваивает ethernet-устройствам имена`’, `’,

`’ и т.д. Первая обнаруженная карта получает имя `’,

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

По умолчанию ядро пытается обнаружить только одно ethernet-устройство,

если у Вас в машине несколько ethernet-карт, то Вам потребуется указать

в командной строке запуска ядра параметры для обнаружения оставшихся

карт.

Подробно работа ethernet-карт под Линуксом описана в Ethernet-HOWTO.

После того как ядро будет скомпилировано с поддержкой Вашей ethernet-карты, Вам достаточно выполнить подобные следующим команды для ее

настойки:

Большинство драйверов ethernet-карт было написано Дональдом Беккером

(Donald Becker, ).

Маска подсети

Маска подсети — это более удобный способ разделить IP-адрес на номер сети и номер хоста. Она пришла на смену алгоритму, который мы описали выше. Маска подсети состоит из тех же четырёх чисел и похожа на IP-адрес:


Изображение: Skillbox Media

В двоичном представлении такая маска выглядит как 1111 1111 0000 0000. Нули показывают, где находится номер хоста, а единицы — номер сети.

Чтобы применить маску, нужно воспользоваться логическими операторами «И» и «НЕ». Первый работает по следующим правилам:


Изображение: Skillbox Media

Оператор «НЕ» просто меняет все нули на единицы, а единицы на нули. И делает он это справа налево:


Изображение: Skillbox Media

Давайте применим к IP-адресу 192.168.1.34 маску подсети 255.255.255.0:


Изображение: Skillbox Media

На картинке показано, как мы сначала перевели IP-адрес и маску подсети в двоичную систему счисления. А затем побитово справа налево применили операцию логического «И». Маска помогла удалить ненужную часть адреса, и мы выделили номер сети — 192.168.1.0.

Чтобы выделить номер хоста, нужно сначала применить операцию логического «НЕ» к маске подсети, а затем — операцию логического «И» к IP-адресу и полученной маске:


Изображение: Skillbox Media

Так мы получили маску для выделения номера устройства. А теперь применим операцию логического «И»:


Изображение: Skillbox Media

У нас получился адрес 0.0.0.34. Это и есть номер хоста.

Как выбрать маску подсети

Обычно маска задаётся программистами в настройках серверов или пользователями в настройках системы. Например, на MacBook маску подсети можно посмотреть в разделе «Сеть» → «Дополнительные настройки»:


Скриншот: Skillbox Media

Маска показывает, сколько битов включает в себя номер сети. Например, у большой сети номером будет только первое число (8 битов), а маска будет состоять из восьми единиц и 24 нулей: 255.0.0.0.

Если IP-адрес принадлежит к маленькой сети, то первые три числа в нём будут представлять номер сети. Значит, маска будет выглядеть так: 255.255.255.0.

Есть и слегка необычные маски подсетей — например, 255.255.254.0. Они тоже означают, сколько битов используется в номере сети. Только в данном случае их будет 23 — по 8 в первых двух числах и 7 в третьем. Остальные биты будут принадлежать номеру хоста.

Как ещё используют маски подсети

Выделять номера хостов и сетей удобно, но это не самая интересная часть использования масок. Их главная суперсила — умение разделять большие сети на несколько маленьких.

Допустим, у нас есть номер сети 185.12.0.0 с маской 255.255.0.0. В такой сети может быть более 65 тысяч устройств, чего вполне хватит, чтобы вместить все компьютеры в одном большом офисе.

Но что если у нас есть несколько маленьких офисов в одном здании, и мы хотим их все подключить к сети? Создавать новую сеть с 65 тысячами IP-адресов для каждого офиса нерационально. Поэтому мы можем разбить сеть 185.12.0.0 на подсети.

Для этого вместо маски 255.255.0.0 мы возьмём маску 255.255.255.0. Так у нас появится 256 новых подсетей внутри одной большой. При этом в каждой подсети будет по 256 устройств.

Сохранение правил (permanent)

По умолчанию, все правила перестают работать после перезапуска сети или компьютера. Для сохранения правил после перезагрузки есть несколько способов настройки.

Способ 1. iptables-save (универсальный)

Сохраняем правила в файл:

iptables-save > /etc/iptables.rules

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

iptables-restore < /etc/iptables.rules

А для автоматического восстановления правил при загрузке сервера или перезагрузки сети, создадим файл:

vi /etc/network/if-pre-up.d/iptables

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
iptables-restore < /etc/iptables.rules
exit 0 

И делаем его исполняемым:

chmod +x /etc/network/if-pre-up.d/iptables 

Способ 2. iptables-persistent (Debian/Ubuntu)

Ставим пакет iptables-persistent:

apt install iptables-persistent

Для сохранения правил вводим команду:

netfilter-persistent save

Способ 3. service iptables (CentOS)

Работает в старых версиях Linux и CentOS. Необходима установка пакета:

yum install iptables-services

apt install iptables-services

* первая команда для CentOS, вторая — для Ubuntu.

Сохраняем правила командой:

service iptables save

* правила будут сохранены в файл /etc/sysconfig/iptables.

Чтобы правила восстанавливались автоматически при старте компьютера, разрешаем автозапуск сервиса.

а) в более новых версиях Linux:

systemctl enable iptables

б) в версиях постарше:

chkconfig iptables on

update-rc.d iptables defaults

* первая команда для CentOS, вторая для Ubuntu.

Примеры часто используемых команд iptables

Общие команды

Просмотр правил с их номерами:

iptables -L —line-numbers

Для каждой таблицы смотреть правила нужно отдельно: 

iptables -t nat -L —line-numbers

Удалить все правила:

iptables -F

Установить правила по умолчанию:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

* в данных примерах по умолчанию для всех входящих (INPUT) и исходящих (OUTPUT) пакетов будет работать запрещающее правило (DROP).

Разрешить все

Способ 1. С помощью добавления правила:

iptables -I INPUT 1 -j ACCEPT

iptables -I OUTPUT 1 -j ACCEPT

iptables -I FORWARD 1 -j ACCEPT

* данные три команды создадут правила, которые разрешают все входящие, исходящие и транзитные пакеты.

Способ 2. Чисткой правил:

iptables -F

iptables -S

* здесь мы сначала удаляем все правила (-F), затем устанавливаем политику по умолчанию — разрешать входящие, исходящие и транзитные (-S).

Способ 3. Отключение сервиса (удобно для диагностики проблем на время отключить firewall):

service iptables stop

iptables stop

Работа с правилами

1. Добавить правило в конец списка:

iptables -A INPUT -p tcp —dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s ! 192.168.0.25 —dport 993 -i eth0 -j ACCEPT

2. Добавить диапазон портов:

iptables -A INPUT -p tcp —dport 3000:4000 -j ACCEPT

* в данном случае, от 3000 до 4000.

3. Вставить правило:

iptables -I FORWARD 15 -p udp -d 8.8.8.8 —dport 53 -i eth1 -j ACCEPT

4. Заблокировать определенный IP-адрес для подключения по 25 порту:

iptables -I INPUT 1 -s 1.1.1.1 -p tcp —dport 25 -j DROP

5. Разрешить несколько портов:

iptables -A INPUT -p tcp —match multiport —dports 20,21,25,80,8080,3000:4000 -j ACCEPT

Проброс портов (port forwarding)

Рассмотрим пример проброса одного порта и диапазона портов.

Один порт (одинаковые порты)

Существует два способа настройки.

1. Правила PREROUTING + POSTROUTING:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —to-destination 192.168.1.15:22

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 22 -j SNAT —to-source 19.8.232.80:22

* где 19.8.232.80 — адрес, на котором слушаем запросы на подключение; 22 — порт для проброса; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

2. Правила PREROUTING + FORWARD:

iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 22 -j DNAT —to-destination 192.168.1.15:22

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth1 — сетевой интерфейс, на котором слушаем запросы; 22 — порт для проброса; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

Один порт (разные порты)

Рассмотрим ситуацию, когда мы слушаем один порт, а пробрасываем на другой.

iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 8022 -j DNAT —to-destination 192.168.1.15:22

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT

* где eth1 — сетевой интерфейс, на котором слушаем запросы; 8022 — порт для проброса, на котором будем слушать запросы; 22 — порт для проброса на внутренний адрес; 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

Диапазон портов

При необходимости пробросить диапазон портов, используем команды:

iptables -t nat -I PREROUTING -p tcp -m tcp —dport 1000:5000 -j DNAT —to-destination 192.168.1.15:1000-5000

iptables -A FORWARD -d 192.168.1.15 -i eth1 -p tcp -m tcp —dport 1000:5000 -j ACCEPT

* где eth1 — сетевой интерфейс, на котором слушаем запросы; 1000:5000 — порты для проброса (от 1000 до 5000); 192.168.1.15 — внутренний IP-адрес, на который переводим все запросы.

Стартовая настройка

Мы можем начать настройку брандмауэра на сервере с этих команд.

Разрешаем SSH:

iptables -A INPUT -p tcp —dport 22 -j ACCEPT

Создаем правила для нормальной работы apt или yum:

iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

Разрешаем ICMP (для выполнения команды ping):

iptables -A INPUT -p icmp -j ACCEPT

Разрешаем все входящие на адрес локальной петли:

iptables -A INPUT -i lo -j ACCEPT

Ставим политику запрета на входящие и разрешаем все исходящие:

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

Настройка по умолчанию

Если мы хотим вернуть настройки в первоночальное значение (разрешено все, правил нет), выполняем команды ниже.

Сначала ставим разрешающую политику для основных цепочек:

iptables -S

Ставим политику разрешения на входящие и исходящие:

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

Удаляем все правила во всех таблицах:

iptables -F

iptables -t nat -F

iptables -t mangle -F

Удаляем все цепочки, которые не используются:

iptables -X

6.8 IPIP-включение

Зачем может понадобится передавать IP-пакеты внутри IP-пакетов? Если

Вы никогда не сталкивались с такой потребностью, подобная операция может

показаться странной. Два самых главных применения этой техники —

Мобильное IP и IP-рассылка. Еще одно применение — Amateur Radio.

Опции компиляции ядра:

Устройства «IP-тоннели» получают имена `’, » и т.д.

Так все-таки, зачем это нужно? Обычные правила IP-маршрутизации

подразумевают, что IP-сеть имеет адрес и маску. Тем самым,

маршрутизация на блок последовательных адресов происходит с помощью

одной записи в таблице маршрутизации. Это означает, что при

подключении в конкретном месте сети Вы можете иметь конкретный

IP-адрес. Если Вы работаете с переносным компьютером, то место Вашего

подключения будет постоянно изменяться. Поэтому, если Вы собираетесь

временно работать в другом месте, Вы можете настроить машину на Вашем

обычном основном месте работы так, чтобы та перенаправляла приходящие

на Ваш адрес пакеты на Ваш новый адрес.

Настройка IP-туннеля сеть-сеть.

Рассмотрим сеть следующей структуры:

Эта схема демонстрирует еще один пример использования IPIP-включения —

виртуальные частные сети. В этом примере предполагается, что у Вас есть

две машины с PPP-подключением к интернету. Каждой из них присвоен

IP-адрес. Эти машины подключены к локальным сетям, использующим адреса

из зарезервированного диапазона. Предположим, Вы хотите, чтобы машины из

одной локальной сети могли взаимодействовать с машинами из другой

сети, как будто они соединены непосредственно. Этого можно достичь

с помощью IPIP-включения. Это решение, правда, не позволит вашим

машинам из внутренних сетей обмениваться данными с другими машинами

в интернете — для этого Вам потребуется использовать другие техники

вроде IP-маскарада. IPIP-включение производится на машинах A и B —

маршрутизаторах.

На машине `’ выполните команды:

А на машине `’ — команды:

Команда

расшифровывается как `Посылать все пакеты для сети внутри

пакетов, передаваемых на машину по адресу ‘

Обратите внимание, что настройка туннеля требуется с обеих сторон. Устройство-туннель использует параметр `’ команды route для

Устройство-туннель использует параметр `’ команды route для

определения адреса, на который следует передавать IP-пакеты, с

«завернутыми» в них пакетами, предназначенными для сети .

Настройка IP-туннеля сеть-машина.

Совсем не обязательно передавать через туннель данные между двумя

сетями. Иногда достаточно, чтобы на одном конце туннеля находилась

одна машина. В этом случае настройте устройство `’ на этой

машине на использование «домашнего» адреса, а на маршрутизаторе

A используйте маршрут на машину, а не на сеть (еще потребуется

использовать механизм кеширования аппаратного адреса (Proxy ARP)).

Рассмотрим этот случай. Цель — добиться того, чтобы машина B вела

себя как машина, подключенная к интернету, и одновременно как

одна из машин сети `.

На маршрутизаторе `’ выполните команды:

На машине `’ выполните команды:

Такая конфигурация характерна для так называемого «Мобильного IP».

Если Вы хотите перемещать одну машину по интернету, сохраняя неизменным

IP-адрес. За более подробной информацией о том, как это реализуется на

практике, обратитесь к разделу, посвященному мобильному IP.

Сборка пользовательского ISO образа Kali Rolling

Теперь мы создадим пользовательский ISO образ, который будет автоматически устанавливать себя и подключаться к нашей конфигурации OpenVPN. Кроме начала установки с помощью ISO образа, этому агенту больше ничего не нужно, чтобы подключиться к нам. Мы начнём с установки требуемых для live-сборки пакетов и модификации стандартной конфигурации, чтобы включить только нужные нам инструменты и файлы настроек.

apt-get install git live-build cdebootstrap
git clone git://git.kali.org/live-build-config.git build
cd build

Затем мы определяем пакеты, которые хотим установить в агентский ISO образ. В данном случае, это минимальный набор инструментов, а так же необходимые демоны SSH и OpenVPN:

echo nmap > kali-config/variant-default/package-lists/kali.list.chroot
echo openssh-server >> kali-config/variant-default/package-lists/kali.list.chroot
echo openvpn >> kali-config/variant-default/package-lists/kali.list.chroot
echo metasploit-framework >> kali-config/variant-default/package-lists/kali.list.chroot

После завершения операции, мы копируем ключи и конфигурационные файлы в chroot-окружение через OpenSSH и OpenVPN:

mkdir -p kali-config/common/includes.chroot/etc/openvpn
cp /root/test/keys/{ca.crt,client.crt,client.key} kali-config/common/includes.chroot/etc/openvpn/

mkdir -p kali-config/common/includes.chroot/root/.ssh/
cp /root/.ssh/id_rsa.pub kali-config/common/includes.chroot/root/.ssh/authorized_keys

# Create the OpenVPN client configuration file
cat << EOF > kali-config/common/includes.chroot/etc/openvpn/client.conf
client
dev tap
proto tcp
remote a.b.c.d 443 # remote server IP
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3
EOF

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

cat << EOF > kali-config/common/includes.binary/isolinux/install.cfg
label install
menu label ^Install
linux /install/vmlinuz
initrd /install/initrd.gz
append vga=788 -- quiet file=/cdrom/install/preseed.cfg locale=en_US keymap=us hostname=kali domain=local.lan
EOF

cat << EOF > kali-config/common/includes.binary/isolinux/isolinux.cfg
include menu.cfg
ui vesamenu.c32
default install
prompt 0
timeout 5
EOF

И создаём несколько хуков, чтобы сервисы SSH и OpenVPN запускались во время загрузки:

echo 'update-rc.d -f ssh enable' > kali-config/common/hooks/01-start-ssh.chroot
echo 'update-rc.d -f openvpn enable' > kali-config/common/hooks/01-start-openvpn.chroot
chmod +x kali-config/common/hooks/*.chroot

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

mkdir -p kali-config/common/includes.installer
wget https://www.kali.org/dojo/preseed.cfg -O ./kali-config/common/includes.installer/preseed.cfg

Теперь остаётся только сгенерировать агентский ISO файл. Как только файл будет готов, мы отправим его на установку в локальную сеть, к которой хотим проложить мост.

./build.sh --distribution kali-rolling --verbose
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: