Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи MAC address spoofing. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

В статье описаны способы подмены адреса Media Access Control (MAC).

## Вручную

Существует два способа подменить MAC-адрес "вручную": установить и настроить либо iproute2, либо macchanger. Оба способа изложены ниже.

### iproute2

Сперва проверьте ваш текущий MAC-адрес:

    # ip link show интерфейс

Здесь `интерфейс` — имя вашего сетевого интерфейса.

Необходимая нам в данный момент информация расположена в строке, начинающейся со слов "link/ether", за которыми следует 6-байтный номер:

    link/ether 00:1d:98:5a:d1:3a

Отключите интерфейс:

    # ip link set dev интерфейс down

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

Чтобы сменить MAC, выполните:

    # ip link set dev интерфейс address XX:XX:XX:XX:XX:XX

где вместо `XX:XX:XX:XX:XX:XX` необходимо указать любое 6-байтное значение.

Последний шаг — включить интерфейс обратно:

    # ip link set dev интерфейс up

Чтобы убедиться, что подмена MAC-адреса действительно произошла, снова выполните команду `ip link show интерфейс` и проверьте значение "link/ether". Если подмена сработала, "link/ether" будет иметь то значение, которое вы ему присвоили.

### macchanger

В этом способе используется macchanger (GNU MAC Changer). Он предоставляет набор функций для смены адреса на, например, соответствующий конкретному производителю или полностью случайный.

Установите пакет macchanger.

Подмена осуществляется для конкретного интерфейса: в каждой из следующих команд заменяйте `интерфейс` на имя вашего сетевого интерфейса.

Вы можете сгенерировать полностью случайный адрес:

    # macchanger -r интерфейс

Чтобы изменить только байты, которые являются уникальными для конкретного устройства (благодаря чему при проверке MAC-адрес будет по-прежнему считаться принадлежащим тому же производителю), выполните:

    # macchanger -e интерфейс

Для задания конкретного MAC-адреса выполните:

    # macchanger --mac=XX:XX:XX:XX:XX:XX интерфейс

где `XX:XX:XX:XX:XX:XX` — MAC, который вы хотите присвоить.

Наконец, для восстановления исходного значения MAC-адреса:

    # macchanger -p интерфейс

Примечание: В процессе смены МАС-адреса вы не сможете использовать устройство вне зависимости от способа подключения и статуса (включён/выключен) интерфейса.

## Автоматически

### systemd-networkd

systemd-networkd поддерживает подмену MAC-адреса при помощи файлов link (подробнее см. systemd.link(5)).

Для подмены статическим адресом:

    /etc/systemd/network/00-default.link

    [Match]
    MACAddress=оригинальный MAC

    [Link]
    MACAddress=новый MAC
    NamePolicy=kernel database onboard slot path

Для случайной генерации MAC-адреса при каждой загрузке, установите `MACAddressPolicy=random` вместо `MACAddress=новый MAC`.

### systemd-udevd

udev позволяет подменять MAC-адреса с помощью правил. Атрибут `address` позволяет udev найти нужное устройство по MAС-адресу производителя, после чего выполняется команда ip для его замены:

    /etc/udev/rules.d/81-mac-spoof.rules

    ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="XX:XX:XX:XX:XX:XX", RUN+="/usr/bin/ip link set dev %k address YY:YY:YY:YY:YY:YY"

где `XX:XX:XX:XX:XX:XX` — оригинальный MAC-адрес, а `YY:YY:YY:YY:YY:YY` — новый. Для адреса необходимо использовать буквы в нижнем регистре.

### Юнит systemd

#### Создание юнита

Ниже приведены примеры юнитов systemd для изменения MAC-адреса во время загрузки системы: первый устанавливает MAC утилитой ip, а второй использует macchanger для присвоения случайного адреса. Цель `network-pre.target` используется для задания очерёдности действий: MAC-адрес должен изменяться до запуска сетевых менеджеров вроде netctl, NetworkManager, systemd-networkd или dhcpcd.

##### iproute2

Юнит systemd, устанавливающий указанный MAC-адрес:

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=MAC Address Change %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/ip link set dev %i address 36:aa:88:c8:75:3a
    ExecStart=/usr/bin/ip link set dev %i up

    [Install]
    WantedBy=multi-user.target

##### macchanger

Юнит systemd, устанавливающий случайный адрес с сохранением префикса производителя. Удостоверьтесь, пакет macchanger установлен:

    /etc/systemd/system/macspoof@.service

    [Unit]
    Description=macchanger on %I
    Wants=network-pre.target
    Before=network-pre.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    ExecStart=/usr/bin/macchanger -e %I
    Type=oneshot

    [Install]
    WantedBy=multi-user.target

Если вы хотите, чтобы адрес изменялся целиком, включая префикс производителя (первые три байта), используйте опцию `-r` вместо `-e` (см. #macchanger).

#### Включение службы

Добавьте имя интерфейса в название службы (например, `eth0`; в итоге служба будет назваться как-то вроде `macspoof@eth0.service`) и включите её.

Перезагрузитесь либо перезапустите необходимые службы в правильном порядке. Если вы являетесь администратором сети, в которой находится машина с изменяемым MAC-адресом, то изучите таблицу статических/динамических адресов на маршрутизаторе на предмет того, был ли MAC дествительно изменён.

### netctl

Вы можете использовать хуки netctl для выполнения команд при каждом (пере)запуске профиля netctl на определённом сетевом интерфейсе. Замените `интерфейс` на необходимый:

    /etc/netctl/interfaces/интерфейс

    #!/usr/bin/env sh
    /usr/bin/macchanger -r интерфейс

Сделайте скрипт исполняемым:

    chmod +x /etc/netctl/interfaces/интерфейс

Источник: akendo.eu[устаревшая ссылка 2023-05-06 ⓘ]

### NetworkManager

См. NetworkManager#Configuring MAC address randomization.

### wpa_supplicant

wpa_supplicant может использовать случайный MAC-адрес для каждого ESS-соединения [1].

Добавьте следующие строки в файл настроек:

    /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

    mac_addr=1
    preassoc_mac_addr=1
    gas_rand_mac_addr=1

### iwd

Со следующими настройками iwd будет генерировать случайный MAC-адрес при каждом запуске (подробнее см. iwd.config(5)):

    /etc/iwd/main.conf

    [General]
    AddressRandomization=once
    AddressRandomizationRange=nic

Параметр `AddressRandomizationRange` определяет, какая часть адреса будет сгенерирована. При значении `nic` изменяться будут последние три октета, относящиеся непосредственно к сетевому интерфейсу; первые три октета останутся прежними. При значении `full` сгенерирован будет весь адрес целиком.

## Решение проблем

### Не удается подключиться к сети DHCPv4

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

## Смотрите также

- Википедия:MAC-спуфинг
- Macchanger на GitHub
- Статья на debianadmin.com с большим количеством опций для macchanger

Categories:

- Network configuration (Русский)
- Security (Русский)

Hidden category:

- Pages with dead links